Aslee 4 лет назад
Родитель
Сommit
95758ccc2a

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

@@ -127,10 +127,19 @@ public class LoginApi {
 
 
     /**
     /**
      * 运营人员邀请码授权登录
      * 运营人员邀请码授权登录
-     *
+     * <p>
      * spi旧接口:/club/invitationCode
      * spi旧接口:/club/invitationCode
+     *
+     * @param invitationCode 邀请码
+     * @param nickName       微信昵称
+     * @param avatarUrl      微信头像(headimgurl)
+     * @param unionId        微信unionId
+     * @return UserLoginVo
      */
      */
-    public void invitationCodeLogin(){}
+    @PostMapping("/auth/invitation")
+    public ResponseJson<UserLoginVo> invitationCodeLogin(String invitationCode, String nickName, String avatarUrl, String unionId) {
+        return loginService.invitationCodeLogin(invitationCode, nickName, avatarUrl, unionId);
+    }
 
 
     /**
     /**
      * 运营人员绑定微信
      * 运营人员绑定微信

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

@@ -63,6 +63,14 @@ public interface LoginMapper {
      * @return
      * @return
      */
      */
     UserLoginVo getOperationUserByOpenId(@Param("openId") String openId, @Param("source") String source);
     UserLoginVo getOperationUserByOpenId(@Param("openId") String openId, @Param("source") String source);
+    /**
+     * 根据openId获取运营人员
+     * @param openId
+     * @param source
+     * @param invitationCode
+     * @return
+     */
+    UserLoginVo getOperationUserByInvitationCode(String invitationCode);
     /**
     /**
      * 根据用户ID更新运营人员openId
      * 根据用户ID更新运营人员openId
      * @param userId
      * @param userId
@@ -84,4 +92,5 @@ public interface LoginMapper {
     Integer getUserIdByOpenId(@Param("openId") String openId, @Param("source") String source);
     Integer getUserIdByOpenId(@Param("openId") String openId, @Param("source") String source);
 
 
 
 
+    void updateOperationByInvitation(OperationPo operationPo);
 }
 }

+ 18 - 1
src/main/java/com/caimei365/user/model/vo/UserLoginVo.java

@@ -1,8 +1,10 @@
 package com.caimei365.user.model.vo;
 package com.caimei365.user.model.vo;
 
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.Data;
 
 
 import java.io.Serializable;
 import java.io.Serializable;
+import java.util.Date;
 
 
 /**
 /**
  * 登录成功返回用户数据
  * 登录成功返回用户数据
@@ -28,6 +30,10 @@ public class UserLoginVo implements Serializable {
      * 协销Id
      * 协销Id
      */
      */
     private Integer serviceProviderId;
     private Integer serviceProviderId;
+    /**
+     * 运营人员Id
+     */
+    private Integer operationId;
     /**
     /**
      * 企业账号名
      * 企业账号名
      */
      */
@@ -82,5 +88,16 @@ public class UserLoginVo implements Serializable {
      * 微信openId
      * 微信openId
      */
      */
     private String openId;
     private String openId;
-
+    /**
+     * 邀请码生成时间
+     */
+    private Date invitationCodeTime;
+    /**
+     * 运营人员状态:1未绑定,2已绑定
+     */
+    private Integer operationStatus;
+    /**
+     * 删除标识:0有效,其它无效
+     */
+    private Integer delFlag;
 }
 }

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

@@ -76,4 +76,14 @@ public interface LoginService {
      */
      */
     ResponseJson<UserLoginVo> qrCodeAuthScanResult(String state);
     ResponseJson<UserLoginVo> qrCodeAuthScanResult(String state);
 
 
+    /**
+     * 邀请码登录
+     *
+     * @param invitationCode    邀请码
+     * @param nickName          微信昵称
+     * @param avatarUrl         微信头像(headimgurl)
+     * @param unionId           微信unionId
+     * @return UserLoginVo
+     */
+    ResponseJson<UserLoginVo> invitationCodeLogin(String invitationCode, String nickName, String avatarUrl, String unionId);
 }
 }

+ 79 - 3
src/main/java/com/caimei365/user/service/impl/LoginServiceImpl.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.caimei365.user.components.WeChatService;
 import com.caimei365.user.components.WeChatService;
 import com.caimei365.user.mapper.LoginMapper;
 import com.caimei365.user.mapper.LoginMapper;
 import com.caimei365.user.model.ResponseJson;
 import com.caimei365.user.model.ResponseJson;
+import com.caimei365.user.model.po.OperationPo;
 import com.caimei365.user.model.vo.UserLoginVo;
 import com.caimei365.user.model.vo.UserLoginVo;
 import com.caimei365.user.service.LoginService;
 import com.caimei365.user.service.LoginService;
 import com.caimei365.user.components.RedisService;
 import com.caimei365.user.components.RedisService;
@@ -12,13 +13,12 @@ import com.caimei365.user.utils.JwtUtil;
 import com.caimei365.user.utils.Md5Util;
 import com.caimei365.user.utils.Md5Util;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
+import java.util.*;
 
 
 /**
 /**
  * Description
  * Description
@@ -37,6 +37,12 @@ public class LoginServiceImpl implements LoginService {
     @Resource
     @Resource
     private LoginMapper loginMapper;
     private LoginMapper loginMapper;
 
 
+    /**
+     * 小程序邀请码过期天数
+     */
+    @Value("${caimei.validTime}")
+    private Integer validTime;
+
     /**
     /**
      * 登录(用户名,密码)
      * 登录(用户名,密码)
      *
      *
@@ -329,4 +335,74 @@ public class LoginServiceImpl implements LoginService {
         // 运营人员授权登录
         // 运营人员授权登录
         return operationAuthLogin(openId, unionId, "www");
         return operationAuthLogin(openId, unionId, "www");
     }
     }
+
+    /**
+     * 邀请码登录
+     *
+     * @param invitationCode    邀请码
+     * @param nickName          微信昵称
+     * @param avatarUrl         微信头像(headimgurl)
+     * @param unionId           微信unionId
+     * @return UserLoginVo
+     */
+    @Override
+    public ResponseJson<UserLoginVo> invitationCodeLogin(String invitationCode, String nickName, String avatarUrl, String unionId) {
+        // 参数校验
+        if (StringUtils.isBlank(invitationCode)) {
+            return ResponseJson.error("邀请码不能为空", null);
+        }
+        UserLoginVo operation = loginMapper.getOperationUserByInvitationCode(invitationCode);
+        if (operation == null) {
+            return ResponseJson.error("邀请码错误", null);
+        }
+        Date date = new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(operation.getInvitationCodeTime());
+        calendar.add(Calendar.DATE, validTime);
+        if ("1".equals(operation.getOperationStatus()) && date.getTime() > calendar.getTime().getTime() && operation.getDelFlag().equals("0")) {
+            return ResponseJson.error("邀请码已失效", null);
+        }
+        if ("2".equals(operation.getOperationStatus()) && "0".equals(operation.getDelFlag())) {
+            return ResponseJson.error("邀请码已被使用", null);
+        }
+        // 用户身份:1机构,2供应商
+        Integer userIdentity = 3 == operation.getUserIdentity() ? 2 : 1;
+        if (operation.getStatus() != null && 1 == userIdentity && 91 != operation.getStatus()) {
+            return ResponseJson.error("您的机构已冻结", null);
+        }
+        if (operation.getStatus() != null && 2 == userIdentity && 91 != operation.getStatus()) {
+            return ResponseJson.error("您的企业账号已被冻结,请联系客服处理", null);
+        }
+        if (0 != operation.getDelFlag()) {
+            return ResponseJson.error("您的邀请码已被删除,请重新添加运营人员", null);
+        }
+        OperationPo operationPo = new OperationPo();
+        operationPo.setId(operation.getOperationId());
+        // 微信unionId
+        operationPo.setUnionId(unionId);
+        Map<Object, Object> infoData = redisService.getEntries("wxInfo:applets:" + unionId);
+        // 微信openId
+        operationPo.setOpenId((String) infoData.get("openId"));
+        // 微信昵称
+        operationPo.setNickName(nickName);
+        // 微信头像
+        operationPo.setAvatarUrl(avatarUrl);
+        // 绑定状态,1未绑定,2已绑定
+        operationPo.setStatus(2);
+        if (1 == userIdentity) {
+            // 机构Id
+            operationPo.setClubId(operation.getClubId());
+            // 用户类型
+            operationPo.setUserType(1);
+        } else {
+            // 供应商Id
+            operationPo.setShopId(operation.getShopId());
+            // 用户类型
+            operationPo.setUserType(2);
+        }
+        // 更新运营人员信息
+        loginMapper.updateOperationByInvitation(operationPo);
+        // 返回登录校验结果
+        return logonVerify(operation);
+    }
 }
 }

+ 1 - 1
src/main/java/com/caimei365/user/service/impl/RegisterServiceImpl.java

@@ -364,7 +364,7 @@ public class RegisterServiceImpl implements RegisterService {
     public ResponseJson<ShopPo> shopRegister(ShopRegisterDto shopRegisterDto, String passWordConfirm, String smsCode, Integer isAgreed, Integer whichStep, HttpHeaders headers) {
     public ResponseJson<ShopPo> shopRegister(ShopRegisterDto shopRegisterDto, String passWordConfirm, String smsCode, Integer isAgreed, Integer whichStep, HttpHeaders headers) {
         // 打印IP
         // 打印IP
         String ip = headers.getFirst("X-CLIENT-IP");
         String ip = headers.getFirst("X-CLIENT-IP");
-        log.info("机构注册 X-CLIENT-IP : " + ip);
+        log.info("供应商注册 X-CLIENT-IP : " + ip);
         // 参数校验
         // 参数校验
         if (StringUtils.isBlank(shopRegisterDto.getBindMobile()) || StringUtils.isBlank(smsCode)
         if (StringUtils.isBlank(shopRegisterDto.getBindMobile()) || StringUtils.isBlank(smsCode)
                 || StringUtils.isBlank(shopRegisterDto.getPassword()) || StringUtils.isBlank(passWordConfirm)) {
                 || StringUtils.isBlank(shopRegisterDto.getPassword()) || StringUtils.isBlank(passWordConfirm)) {

+ 4 - 0
src/main/resources/application.yml

@@ -79,3 +79,7 @@ swagger:
   enabled: true
   enabled: true
   ui-config:
   ui-config:
     operations-sorter: method
     operations-sorter: method
+
+caimei:
+  # 小程序邀请码过期天数
+  validTime: 7

+ 42 - 0
src/main/resources/mapper/LoginMapper.xml

@@ -131,6 +131,24 @@
         set unionId = #{unionId}
         set unionId = #{unionId}
         where userID = #{userId}
         where userID = #{userId}
     </update>
     </update>
+    <update id="updateOperationByInvitation">
+        update cm_mall_operation_user
+        set unionId = #{unionId},
+            openId = #{openId},
+            nickName = #{nickName},
+            headimgurl = #{avatarUrl},
+            status = #{status},
+            userType = #{userType},
+            <if test="clubId != null">
+                clubId = #{clubId},
+                shopId = null
+            </if>
+            <if test="shopId != null">
+                shopId = #{shopId},
+                clubId = null
+            </if>
+        where id = #{id}
+    </update>
 
 
     <select id="getUserIdByOpenId" resultType="java.lang.Integer">
     <select id="getUserIdByOpenId" resultType="java.lang.Integer">
         select o.userID as userId
         select o.userID as userId
@@ -151,5 +169,29 @@
         limit 1
         limit 1
     </select>
     </select>
 
 
+    <select id="getOperationUserByInvitationCode" resultType="com.caimei365.user.model.vo.UserLoginVo">
+        SELECT
+            cou.id as operationId,
+            u.userID as userId,
+            u.clubID as clubId,
+            u.shopID as shopId,
+            cou.invitationCodeTime,
+            cou.status as operationStatus,
+            cou.delFlag,
+            u.userIdentity,
+            case
+                when u.userIdentity = 2 or u.userIdentity = 4 then u.clubStatus
+                when u.userIdentity = 3 then u.manufacturerStatus
+                else null end
+                as status
+        FROM
+            cm_mall_operation_user cou
+        LEFT JOIN user u ON u.userID = cou.userID
+        WHERE
+            cou.invitationCode = #{invitationCode}
+        AND (cou.userOrganizeID = '2' OR cou.userOrganizeID IS NULL)
+        AND u.userIdentity in (2,3,4)
+    </select>
+
 
 
 </mapper>
 </mapper>