浏览代码

机构注册part1

chao 4 年之前
父节点
当前提交
0914b536f1
共有 23 个文件被更改,包括 682 次插入41 次删除
  1. 8 0
      pom.xml
  2. 4 1
      src/main/java/com/caimei365/user/controller/BaseUserApi.java
  3. 30 4
      src/main/java/com/caimei365/user/controller/ClubApi.java
  4. 1 1
      src/main/java/com/caimei365/user/controller/LoginApi.java
  5. 22 0
      src/main/java/com/caimei365/user/controller/ShopApi.java
  6. 27 0
      src/main/java/com/caimei365/user/idempotent/Idempotent.java
  7. 104 0
      src/main/java/com/caimei365/user/idempotent/IdempotentAspect.java
  8. 19 0
      src/main/java/com/caimei365/user/idempotent/IdempotentException.java
  9. 9 0
      src/main/java/com/caimei365/user/mapper/BaseUserDao.java
  10. 28 0
      src/main/java/com/caimei365/user/mapper/RegisterUserDao.java
  11. 8 4
      src/main/java/com/caimei365/user/model/BaseUser.java
  12. 46 0
      src/main/java/com/caimei365/user/model/ClubPo.java
  13. 0 16
      src/main/java/com/caimei365/user/model/ClubVo.java
  14. 31 0
      src/main/java/com/caimei365/user/model/OperationVo.java
  15. 61 0
      src/main/java/com/caimei365/user/model/UserPo.java
  16. 17 5
      src/main/java/com/caimei365/user/service/ClubService.java
  17. 10 0
      src/main/java/com/caimei365/user/service/ShopService.java
  18. 149 2
      src/main/java/com/caimei365/user/service/impl/ClubServiceImpl.java
  19. 32 0
      src/main/java/com/caimei365/user/service/impl/ShopServiceImpl.java
  20. 47 0
      src/main/java/com/caimei365/user/utils/ReduestUtil.java
  21. 3 4
      src/main/java/com/caimei365/user/utils/ValidateUtil.java
  22. 13 4
      src/main/resources/mapper/BaseUserMapper.xml
  23. 13 0
      src/main/resources/mapper/RegisterUserMapper.xml

+ 8 - 0
pom.xml

@@ -90,6 +90,14 @@
             <artifactId>java-jwt</artifactId>
             <version>3.14.0</version>
         </dependency>
+        <!-- aop -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-aop</artifactId>
+        </dependency>
+
+
+
 
 		<dependency>
 			<groupId>org.springframework.boot</groupId>

+ 4 - 1
src/main/java/com/caimei365/user/controller/BaseUserApi.java

@@ -4,7 +4,6 @@ import com.caimei365.user.model.JsonModel;
 import com.caimei365.user.service.UserService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -25,7 +24,9 @@ public class BaseUserApi {
 
     /**
      * 获取图片验证码
+     *
      * spi旧接口:/user/getImgVerifyCode
+     *
      * @param platformType 0:www,1:crm/h5,2:小程序
      */
     @GetMapping("/captcha")
@@ -35,7 +36,9 @@ public class BaseUserApi {
 
     /**
      * 获取短信验证码
+     *
      * spi旧接口:/user/activateCodeByReg
+     *
      * @param mobile           手机号
      * @param activateCodeType 1:找回密码,2:手机号注册机构,3:供应商注册
      * @param imgCode          图片验证码

+ 30 - 4
src/main/java/com/caimei365/user/controller/ClubApi.java

@@ -1,13 +1,14 @@
 package com.caimei365.user.controller;
 
-import com.caimei365.user.model.ClubVo;
+import com.caimei365.user.idempotent.Idempotent;
+import com.caimei365.user.model.BaseUser;
 import com.caimei365.user.model.JsonModel;
 import com.caimei365.user.service.ClubService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
-
+import org.springframework.web.server.ServerWebExchange;
 
 
 /**
@@ -23,9 +24,34 @@ public class ClubApi {
 
     private final ClubService clubService;
 
+    /**
+     * 普通机构入驻(注册)
+     *
+     * spi旧接口:club/common
+     *
+     * @param source            注册来源: 0网站 1小程序
+     * @param userName          用户名
+     * @param bindMobile        企业绑定手机号
+     * @param password          密码
+     * @param passWordConfirm   用户确认密码
+     * @param smsCode           短信验证码(旧:activationCode)
+     * @param isAgreed          是否同意勾选同意协议,1是,其他否
+     * @param nickName          微信昵称
+     * @param avatarUrl         微信头像(旧:headimgurl)
+     */
+    @Idempotent(prefix="idempotent_club", keys={"#baseUser"}, expire=5)
     @PostMapping("/register")
-    public JsonModel<ClubVo> register(ClubVo club) {
-        return clubService.register(club);
+    public JsonModel<BaseUser> register(Integer source,
+                                        String userName,
+                                        String bindMobile,
+                                        String password,
+                                        String passWordConfirm,
+                                        String smsCode,
+                                        Integer isAgreed,
+                                        String nickName,
+                                        String avatarUrl,
+                                        ServerWebExchange serverWebExchange) {
+        return clubService.register(source, userName, bindMobile, password, passWordConfirm, smsCode, isAgreed, nickName, avatarUrl, serverWebExchange);
     }
 
 }

+ 1 - 1
src/main/java/com/caimei365/user/controller/LoginApi.java

@@ -19,7 +19,7 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/user/login")
 public class LoginApi {
 
-    private LoginService loginService;
+    private final LoginService loginService;
 
     /**
      * 登录(用户名,密码)

+ 22 - 0
src/main/java/com/caimei365/user/controller/ShopApi.java

@@ -0,0 +1,22 @@
+package com.caimei365.user.controller;
+
+import com.caimei365.user.service.ShopService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/3/9
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/user/shop")
+public class ShopApi {
+
+    private final ShopService shopService;
+
+
+}

+ 27 - 0
src/main/java/com/caimei365/user/idempotent/Idempotent.java

@@ -0,0 +1,27 @@
+package com.caimei365.user.idempotent;
+
+import java.lang.annotation.*;
+
+/**
+ * 自定义幂等注解
+ *
+ * @author : Charles
+ * @date : 2021/2/26
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface Idempotent {
+    /**
+     * 前缀属性,作为redis缓存Key的一部分。
+     */
+    String prefix() default "idempotent_";
+    /**
+     * 需要的参数名数组
+     */
+    String[] keys();
+    /**
+     * 幂等过期时间(秒),即:在此时间段内,对API进行幂等处理。
+     */
+    int expire() default 3;
+}

+ 104 - 0
src/main/java/com/caimei365/user/idempotent/IdempotentAspect.java

@@ -0,0 +1,104 @@
+package com.caimei365.user.idempotent;
+
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
+import org.springframework.data.redis.core.RedisCallback;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.expression.EvaluationContext;
+import org.springframework.expression.Expression;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.expression.spel.support.StandardEvaluationContext;
+import org.springframework.stereotype.Component;
+import redis.clients.jedis.commands.JedisCommands;
+import redis.clients.jedis.params.SetParams;
+
+import javax.annotation.Resource;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+
+
+/**
+ * 幂等切面
+ *
+ * @author : Charles
+ * @date : 2021/2/26
+ */
+@Slf4j
+@Aspect
+@Component
+@ConditionalOnClass(RedisTemplate.class)
+public class IdempotentAspect {
+
+    private static final String LOCK_SUCCESS = "OK";
+
+    @Resource
+    private RedisTemplate<String,String> redisTemplate;
+
+    /**
+     * 切入点,根据自定义Idempotent实际路径进行调整
+     */
+    @Pointcut("@annotation(com.caimei.idempotent.Idempotent)")
+    public void executeIdempotent() {
+    }
+
+    @Around("executeIdempotent()")
+    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
+        // 获取参数对象列表
+        Object[] args = joinPoint.getArgs();
+      	//获取方法
+        Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
+        // 得到方法名
+        String methodName = method.getName();
+        // 获取参数数组
+        //Parameter[] parameters = method.getParameters();
+        String[] parameters = new LocalVariableTableParameterNameDiscoverer().getParameterNames(method);
+
+      	//获取幂等注解
+        Idempotent idempotent = method.getAnnotation(Idempotent.class);
+
+        // 初始化springEL表达式解析器实例
+        ExpressionParser parser = new SpelExpressionParser();
+        // 初始化解析内容上下文
+        EvaluationContext context = new StandardEvaluationContext();
+        // 把参数名和参数值放入解析内容上下文里
+        for (int i = 0; i < parameters.length; i++) {
+            if (args[i] != null) {
+                // 添加解析对象目标
+                context.setVariable(parameters[i], args[i].hashCode());
+            }
+        }
+        // 解析定义key对应的值,拼接成key
+        StringBuilder idempotentKey = new StringBuilder(idempotent.prefix() + ":" + methodName);
+        for (String s : idempotent.keys()) {
+            Arrays.asList(args).contains(s);
+            // 解析对象
+            Expression expression = parser.parseExpression(s);
+            idempotentKey.append(":").append(expression.getValue(context));
+        }
+        // 通过 setnx 确保只有一个接口能够正常访问
+        String result = redisTemplate.execute(
+            (RedisCallback<String>) connection -> (
+                (JedisCommands) connection.getNativeConnection()
+            ).set(
+                idempotentKey.toString(),
+                idempotentKey.toString(),
+                new SetParams().nx().ex(idempotent.expire())
+            )
+        );
+
+        if (LOCK_SUCCESS.equals(result)) {
+            return joinPoint.proceed();
+        } else {
+            log.error("API幂等处理, key=" + idempotentKey);
+            throw new IdempotentException("手速太快了,稍后重试!");
+        }
+    }
+}
+

+ 19 - 0
src/main/java/com/caimei365/user/idempotent/IdempotentException.java

@@ -0,0 +1,19 @@
+package com.caimei365.user.idempotent;
+
+/**
+ * 处理幂等相关异常
+ *
+ * @author : Charles
+ * @date : 2021/2/26
+ */
+public class IdempotentException extends RuntimeException {
+
+    public IdempotentException(String message) {
+        super(message);
+    }
+
+    @Override
+    public String getMessage() {
+        return super.getMessage();
+    }
+}

+ 9 - 0
src/main/java/com/caimei365/user/mapper/BaseUserDao.java

@@ -1,6 +1,7 @@
 package com.caimei365.user.mapper;
 
 import com.caimei365.user.model.BaseUser;
+import com.caimei365.user.model.OperationVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -26,4 +27,12 @@ public interface BaseUserDao {
      * @return BaseUser
      */
     BaseUser getBaseUserByMobileOrEmail(@Param("mobileOrEmail") String mobileOrEmail);
+    /**
+     * 根据手机号获取运营人员
+     *
+     * @param mobile 手机号
+     * @return BaseUser
+     */
+    OperationVo getOperationByMobile(@Param("mobile") String mobile);
+
 }

+ 28 - 0
src/main/java/com/caimei365/user/mapper/RegisterUserDao.java

@@ -0,0 +1,28 @@
+package com.caimei365.user.mapper;
+
+import com.caimei365.user.model.ClubPo;
+import com.caimei365.user.model.UserPo;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/3/8
+ */
+@Mapper
+public interface RegisterUserDao {
+    /**
+     * 保存(机构)用户(user)
+     * @param user
+     * @return
+     */
+    int insertClubUser(UserPo user);
+    /**
+     * 保存机构(club)
+     * @param club
+     * @return
+     */
+    int insertClub(ClubPo club);
+
+}

+ 8 - 4
src/main/java/com/caimei365/user/model/BaseUser.java

@@ -14,6 +14,10 @@ public class BaseUser {
      * 用户ID
      */
     private Integer userId;
+    /**
+     * 注册来源: 0网站 1小程序
+     */
+    private Integer source;
     /**
      * 用户名
      */
@@ -31,13 +35,13 @@ public class BaseUser {
      */
     private String bindMobile;
     /**
-     * 用户权限 0游客 1 普通用户 2 会员机构 3 供应商 4 协销 5 普通机构
+     * 用户身份: 1协销 2会员机构 3供应商 4普通机构
      */
-    private Integer userPermission;
+    private Integer userIdentity;
     /**
-     * 用户身份 0、个人 1、协销 2、会员机构 3、供应商 4,普通机构
+     * 用户权限: 2会员机构 3供应商 4协销 5普通机构
      */
-    private Integer userIdentity;
+    private Integer userPermission;
     /**
      * 用户状态:
      * 机构:90:已上线,91:已冻结,92:审查资料未通过,待补充资料,1:待审查资料,2:电话预约,3:已预约,20:待确认,21:待拜访,30:待员工推荐,40:已完成第一次采购

+ 46 - 0
src/main/java/com/caimei365/user/model/ClubPo.java

@@ -0,0 +1,46 @@
+package com.caimei365.user.model;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/3/5
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ClubPo extends BaseUser {
+    /**
+     * 机构D
+     */
+    private Integer clubId;
+    /**
+     * 机构名称
+     */
+    private String name;
+    /**
+     * 机构简称
+     */
+    private String sName;
+    /**
+     * 联系手机
+     */
+    private String contractMobile;
+    /**
+     * 联系人
+     */
+    private String linkMan;
+    /**
+     * 协销ID
+     */
+    private Integer serviceProviderId;
+    /**
+     * 注册时间
+     */
+    private String addTime;
+
+
+
+}

+ 0 - 16
src/main/java/com/caimei365/user/model/ClubVo.java

@@ -1,16 +0,0 @@
-package com.caimei365.user.model;
-
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * Description
- *
- * @author : Charles
- * @date : 2021/3/5
- */
-@EqualsAndHashCode(callSuper = true)
-@Data
-public class ClubVo extends BaseUser {
-
-}

+ 31 - 0
src/main/java/com/caimei365/user/model/OperationVo.java

@@ -0,0 +1,31 @@
+package com.caimei365.user.model;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/3/8
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class OperationVo extends BaseUser {
+    /**
+     * 用户类型,1:机构类型,2供应商类型
+     */
+    private Integer userType;
+    /**
+     * 会所ID:隶属于哪个会所的运营人员
+     */
+    private Integer clubId;
+    /**
+     * 供应商ID:隶属于哪个供应商的运营人员[用户类型为供应商时有效数据]
+     */
+    private Integer shopId;
+    /**
+     * 手机号码
+     */
+    private String mobile;
+}

+ 61 - 0
src/main/java/com/caimei365/user/model/UserPo.java

@@ -0,0 +1,61 @@
+package com.caimei365.user.model;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/3/8
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class UserPo extends BaseUser {
+    /**
+     * 用户类型,供应商1,会员机构3,普通机构4
+     */
+    private Integer registerUserTypeId;
+    /**
+     * 组织名称
+     */
+    private String name;
+    /**
+     * 机构状态:90:已上线,91:已冻结,92:审查资料未通过,待补充资料,1:待审查资料,2:电话预约,3:已预约,20:待确认,21:待拜访,30:待员工推荐,40:已完成第一次采购
+     */
+    private Integer clubStatus;
+    /**
+     * 供应商状态:90:已上线,91:已下线,92:审核不通过,3:待审核
+     */
+    private Integer manufacturerStatus;
+    /**
+     * 同意协议标志
+     */
+    private Integer agreeFlag;
+    /**
+     * 注册时间
+     */
+    private String registerTime;
+    /**
+     * 注册ip
+     */
+    private String registerIp;
+    /**
+     * 用户状态,1正常,0冻结
+     */
+    private Integer validFlag;
+    /**
+     * 协销Id
+     */
+    private Integer serviceProviderId;
+    /**
+     * 协销状态
+     */
+    private Integer serviceProviderStatus;
+
+
+
+
+}

+ 17 - 5
src/main/java/com/caimei365/user/service/ClubService.java

@@ -1,7 +1,8 @@
 package com.caimei365.user.service;
 
-import com.caimei365.user.model.ClubVo;
+import com.caimei365.user.model.BaseUser;
 import com.caimei365.user.model.JsonModel;
+import org.springframework.web.server.ServerWebExchange;
 
 /**
  * Description
@@ -11,9 +12,20 @@ import com.caimei365.user.model.JsonModel;
  */
 public interface ClubService {
     /**
-     * 机构注册
-     * @param club vo
-     * @return ClubVo
+     * 普通机构入驻(注册)
+     *
+     * @param source            注册来源: 0网站 1小程序
+     * @param userName          用户名
+     * @param bindMobile        企业绑定手机号
+     * @param password          密码
+     * @param passWordConfirm   用户确认密码
+     * @param smsCode           短信验证码
+     * @param isAgreed          是否同意勾选同意协议,1是,其他否
+     * @param nickName          微信昵称
+     * @param avatarUrl         微信头像
+     * @param serverWebExchange ServerWebExchange
+     * @return BaseUser
      */
-    JsonModel<ClubVo> register(ClubVo club);
+    JsonModel<BaseUser> register(Integer source, String userName, String bindMobile, String password, String passWordConfirm, String smsCode, Integer isAgreed, String nickName, String avatarUrl, ServerWebExchange serverWebExchange);
+
 }

+ 10 - 0
src/main/java/com/caimei365/user/service/ShopService.java

@@ -0,0 +1,10 @@
+package com.caimei365.user.service;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/3/9
+ */
+public interface ShopService {
+}

+ 149 - 2
src/main/java/com/caimei365/user/service/impl/ClubServiceImpl.java

@@ -1,6 +1,20 @@
 package com.caimei365.user.service.impl;
 
+import com.caimei365.user.mapper.BaseUserDao;
+import com.caimei365.user.mapper.RegisterUserDao;
+import com.caimei365.user.model.*;
 import com.caimei365.user.service.ClubService;
+import com.caimei365.user.service.RedisService;
+import com.caimei365.user.utils.Md5Util;
+import com.caimei365.user.utils.ReduestUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.web.server.ServerWebExchange;
+
+import javax.annotation.Resource;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 
 /**
  * Description
@@ -8,8 +22,141 @@ import com.caimei365.user.service.ClubService;
  * @author : Charles
  * @date : 2021/3/8
  */
-/*
+@Slf4j
+@Service
 public class ClubServiceImpl implements ClubService {
 
+    @Resource
+    private RedisService redisService;
+    @Resource
+    private BaseUserDao baseUserDao;
+    @Resource
+    private RegisterUserDao registerUserDao;
+
+    /**
+     * 普通机构入驻(注册)
+     *
+     * @param source            注册来源: 0网站 1小程序
+     * @param userName          用户名
+     * @param bindMobile        企业绑定手机号
+     * @param password          密码
+     * @param passWordConfirm   用户确认密码
+     * @param smsCode           短信验证码
+     * @param isAgreed          是否同意勾选同意协议,1是,其他否
+     * @param nickName          微信昵称
+     * @param avatarUrl         微信头像
+     * @param serverWebExchange ServerWebExchange
+     * @return BaseUser
+     */
+    @Override
+    public JsonModel<BaseUser> register(Integer source, String userName, String bindMobile, String password, String passWordConfirm, String smsCode, Integer isAgreed, String nickName, String avatarUrl, ServerWebExchange serverWebExchange) {
+        // 打印IP
+        String ip = ReduestUtil.getIp(serverWebExchange);
+        log.info("X-Forwarded-For:" + ip);
+        // 参数校验
+        if (StringUtils.isBlank(userName) || StringUtils.isBlank(bindMobile)
+            || StringUtils.isBlank(password) || StringUtils.isBlank(passWordConfirm) ||
+            StringUtils.isBlank(smsCode)) {
+            return JsonModel.error("参数异常", null);
+        }
+        if (!password.equals(passWordConfirm)) {
+            return JsonModel.error("输入的密码不一致", null);
+        }
+        String redisSmsCode = (String) redisService.get("code:" + bindMobile);
+        if (redisSmsCode.equals(smsCode)) {
+            return JsonModel.error("手机验证码错误", null);
+        }
+        if (1 != isAgreed) {
+            return JsonModel.error("请勾选同意协议", null);
+        }
+        // 查找用户表是否存在
+        BaseUser dbUser = baseUserDao.getBaseUserByMobile(bindMobile);
+        if (dbUser != null) {
+            return JsonModel.error("该手机号已被使用", null);
+        }
+        // 查找运营人员表是否存在
+        OperationVo operation = baseUserDao.getOperationByMobile(bindMobile);
+        if (null != operation) {
+            return JsonModel.error("您已是机构运营人员,无需再注册机构", null);
+        }
+        /*
+            组装用户数据 user
+         */
+        UserPo user = new UserPo();
+        // 设置日期时间格式
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        String current = dateFormat.format(new Date());
+        // 注册时间
+        user.setRegisterTime(current);
+        // 注册IP
+        user.setRegisterIp(ip);
+        // 注册来源: 0网站 1小程序
+        user.setSource(source);
+        // 用户类型,供应商1,会员机构3,普通机构4
+        user.setRegisterUserTypeId(4);
+        // 组织名称
+        user.setName(userName);
+        user.setUserName(userName);
+        // 绑定手机号
+        user.setBindMobile(bindMobile);
+        // 用户身份: 1协销 2会员机构 3供应商 4普通机构
+        user.setUserIdentity(4);
+        // 用户权限: 2会员机构 3供应商 4协销 5普通机构
+        user.setUserPermission(5);
+        //设置机构上线
+        user.setClubStatus(90);
+        // 设置密码
+        user.setPassword(Md5Util.md5(user.getPassword()));
+        // 同意协议
+        user.setAgreeFlag(isAgreed);
+        // 用户状态,1正常,0冻结
+        user.setValidFlag(1);
+        // 协销Id,默认采美官方
+        user.setServiceProviderId(1342);
+        // 协销状态,已上线
+        user.setServiceProviderStatus(90);
+        /*
+            保存数据库 user
+         */
+        int insertFlag = registerUserDao.insertClubUser(user);
+        if (insertFlag < 1) {
+            log.info(user.getUserId() + " 插入数据库异常user:" + user.toString());
+            return JsonModel.error("插入数据库异常", null);
+        }
+        /*
+            组装机构数据
+         */
+        ClubPo club = new ClubPo();
+        // 机构名称
+        club.setName(user.getUserName());
+        // 机构简称
+        club.setSName(user.getUserName());
+        // 联系手机
+        club.setContractMobile(user.getBindMobile());
+        // 联系人
+        club.setLinkMan(user.getUserName());
+        // 用户ID
+        club.setUserId(user.getUserId());
+        // 协销ID(spID)
+        club.setServiceProviderId(1342);
+        // 注册时间
+        club.setAddTime(current);
+        // 状态设置上线
+        club.setStatus(90);
+        /*
+            保存数据库 club
+         */
+        int insertClubFlag = registerUserDao.insertClub(club);
+        if (insertClubFlag < 1) {
+            log.info(club.getUserId() + " 插入数据库异常club:" + club.toString());
+            return JsonModel.error("插入数据库异常", null);
+        }
+//        //更新clubID
+//        userVo.setClubID(club.getClubID());
+//        loginDao.updateUser(userVo);
+
+
+        return null;
+    }
 }
-*/
+

+ 32 - 0
src/main/java/com/caimei365/user/service/impl/ShopServiceImpl.java

@@ -0,0 +1,32 @@
+package com.caimei365.user.service.impl;
+
+import com.caimei365.user.mapper.BaseUserDao;
+import com.caimei365.user.mapper.RegisterUserDao;
+import com.caimei365.user.service.RedisService;
+import com.caimei365.user.service.ShopService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/3/9
+ */
+@Slf4j
+@Service
+public class ShopServiceImpl implements ShopService {
+
+    @Resource
+    private RedisService redisService;
+    @Resource
+    private BaseUserDao baseUserDao;
+    @Resource
+    private RegisterUserDao registerUserDao;
+
+
+
+
+}

+ 47 - 0
src/main/java/com/caimei365/user/utils/ReduestUtil.java

@@ -0,0 +1,47 @@
+package com.caimei365.user.utils;
+
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.web.server.ServerWebExchange;
+
+import java.util.Objects;
+
+/**
+ * 请求工具类
+ *
+ * @author : Charles
+ * @date : 2021/3/8
+ */
+public class ReduestUtil {
+
+    public static String getIp(ServerWebExchange serverWebExchange){
+        ServerHttpRequest request = serverWebExchange.getRequest();
+        HttpHeaders headers = request.getHeaders();
+        String ip = headers.getFirst("x-forwarded-for");
+        if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
+            // 多次反向代理后会有多个ip值,第一个ip才是真实ip
+            if (ip.contains(",")) {
+                ip = ip.split(",")[0];
+            }
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = headers.getFirst("Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = headers.getFirst("WL-Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = headers.getFirst("HTTP_CLIENT_IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = headers.getFirst("HTTP_X_FORWARDED_FOR");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = headers.getFirst("X-Real-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = Objects.requireNonNull(request.getRemoteAddress()).getAddress().getHostAddress();
+        }
+        return ip.replaceAll(":", ".");
+    }
+}

+ 3 - 4
src/main/java/com/caimei365/user/utils/ValidateUtil.java

@@ -1,7 +1,6 @@
 package com.caimei365.user.utils;
 
 import com.caimei365.user.model.JsonModel;
-import com.github.pagehelper.util.StringUtil;
 import org.apache.commons.lang.StringUtils;
 
 import java.util.regex.Matcher;
@@ -34,7 +33,7 @@ public class ValidateUtil {
      * @param mobile 手机号
      */
     public static JsonModel validateMobile(String mobile) {
-        if (StringUtil.isEmpty(mobile) || StringUtils.isBlank(mobile)) {
+        if (StringUtils.isEmpty(mobile) || StringUtils.isBlank(mobile)) {
             return JsonModel.error("手机号不可为空");
         } else {
             Pattern pattern = Pattern.compile(MOBILE_PATTERN);
@@ -53,7 +52,7 @@ public class ValidateUtil {
      * @param email 邮箱
      */
     public static boolean validateEmail(String email) {
-        if (StringUtil.isEmpty(email) || StringUtils.isBlank(email)) {
+        if (StringUtils.isEmpty(email) || StringUtils.isBlank(email)) {
             return false;
         } else {
             Pattern pattern = Pattern.compile(EMAIL_PATTERN);
@@ -156,7 +155,7 @@ public class ValidateUtil {
      * 统一社会信用代码验证
      */
     public static JsonModel validateSocialCreditCode(String socialCreditCode) {
-        if (StringUtil.isEmpty(socialCreditCode) || StringUtils.isBlank(socialCreditCode)) {
+        if (StringUtils.isEmpty(socialCreditCode) || StringUtils.isBlank(socialCreditCode)) {
             return JsonModel.error("请输入您的统一社会信用代码");
         } else {
             Pattern pattern = Pattern.compile(SOCIAL_CREDIT_CODE_PATTERN);

+ 13 - 4
src/main/resources/mapper/BaseUserMapper.xml

@@ -14,8 +14,8 @@
         left join cm_mall_operation_user cu on cu.userID = u.userID
         where (u.bindMobile = #{mobile}
                 or (cu.mobile = #{mobile} and cu.delFlag != 1)
-        ) AND u.userIdentity IN (1,2,3,4)
-        LIMIT 1
+        ) and u.userIdentity in (1,2,3,4)
+        limit 1
     </select>
     <select id="getBaseUserByMobileOrEmail" resultType="com.caimei365.user.model.BaseUser">
         select u.userID as userId,
@@ -36,8 +36,17 @@
         where (u.bindMobile = #{mobileOrEmail}
                 or u.email = #{mobileOrEmail}
                 or (cu.mobile = #{mobileOrEmail} and cu.delFlag != 1)
-        ) AND u.userIdentity IN (1,2,3,4)
-        LIMIT 1
+        ) and u.userIdentity in (1,2,3,4)
+        limit 1
+    </select>
+    <select id="getOperationByMobile" resultType="com.caimei365.user.model.OperationVo">
+        select o.userID as userId,
+               o.mobile as mobile,
+               o.clubID as clubId,
+               o.shopID as shopId
+        from cm_mall_operation_user o
+        where o.mobile = #{mobile} and o.delFlag = '0'
+        limit 1
     </select>
 
 </mapper>

+ 13 - 0
src/main/resources/mapper/RegisterUserMapper.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.caimei365.user.mapper.RegisterUserDao">
+    <insert id="insertClubUser" parameterType="com.caimei365.user.model.UserPo" keyProperty="userId" useGeneratedKeys="true">
+        insert into user(`registerTime`, `registerIP`, `source`, `registerUserTypeID`, `name`, `userName`, `bindMobile`,`userIdentity`, `userPermission`, `clubStatus`, `password`, `agreeFlag`, `validFlag`, `serviceProviderID`, `serviceProviderStatus`)
+                  values(#{registerTime},#{registerIp},#{source},#{registerUserTypeID},#{name},#{userName},#{bindMobile},#{userIdentity},#{userPermission},#{clubStatus},#{password},#{agreeFlag},#{validFlag},#{serviceProviderId},#{serviceProviderStatus})
+    </insert>
+    <insert id="insertClub" parameterType="com.caimei365.user.model.ClubPo" keyProperty="clubId" useGeneratedKeys="true">
+        insert into club(`name`, `sname`, `contractMobile`, `linkMan`, `userID`, `addTime`, `status`, `spID`)
+                  values(#{name},#{sName},#{contractMobile},#{linkMan},#{userId},#{addTime},#{status},#{serviceProviderId})
+    </insert>
+
+</mapper>