chao 4 rokov pred
rodič
commit
a157310300

+ 61 - 0
src/main/java/com/caimei365/user/components/CommonService.java

@@ -2,6 +2,8 @@ package com.caimei365.user.components;
 
 import com.caimei365.user.mapper.BaseMapper;
 import com.caimei365.user.mapper.LoginMapper;
+import com.caimei365.user.mapper.OperationMapper;
+import com.caimei365.user.model.po.OperationPo;
 import com.caimei365.user.model.vo.UserLoginVo;
 import com.caimei365.user.utils.ValidateUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -10,6 +12,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.Date;
 
 /**
  * Description
@@ -26,6 +29,8 @@ public class CommonService {
     private BaseMapper baseMapper;
     @Resource
     private LoginMapper loginMapper;
+    @Resource
+    private OperationMapper operationMapper;
     @Value("${spring.cloud.config.profile}")
     private String profile;
     /**
@@ -92,4 +97,60 @@ public class CommonService {
         }
         return null;
     }
+
+    /**
+     * 查询使用该手机号的运营人员或用户
+     */
+    public String operationBindCheck(String mobile, String smsCode) {
+        // 手机号验证
+        String result = mobileAndCodeValidate(mobile, smsCode);
+        if (result != null) {
+            // 查询使用该手机号的运营人员或用户
+            UserLoginVo dbUser = loginMapper.getLoginUserByMobile(mobile);
+            boolean offlineClub = false;
+            boolean offlineShop = false;
+            if (null != dbUser) {
+                if (mobile.equals(dbUser.getBindMobile())) {
+                    // 判断运营人员手机号的唯一性
+                    Integer dbOperationId = baseMapper.getOperationIdByMobile(mobile);
+                    if (dbOperationId != null && dbOperationId > 0) {
+                        return "该手机号已注册并绑定微信!";
+                    }
+                    // 联系人作为运营人员,放行
+                    return null;
+                }
+                // 已下线机构
+                offlineClub = null != dbUser.getClubStatus() && 91 == dbUser.getClubStatus();
+                // 已下线供应商
+                offlineShop = null != dbUser.getShopStatus() && 91 == dbUser.getShopStatus();
+            }
+            if (offlineClub || offlineShop) {
+                // 解绑已下线的运营人员
+                unbindOperation(dbUser.getOperationId());
+                return null;
+            } else {
+                return result;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 解绑运营人员
+     *
+     * @param operationId 运营人员Id
+     */
+    public void unbindOperation(Integer operationId) {
+        OperationPo operation = new OperationPo();
+        operation.setId(operationId);
+        operation.setUnionId("");
+        operation.setOpenId("");
+        operation.setNickName("");
+        operation.setBindTime(null);
+        operation.setUpdateTime(new Date());
+        operation.setStatus(1);
+        operation.setDelFlag(1);
+        // 解绑运营人员
+        operationMapper.updateOperationByUnbind(operation);
+    }
 }

+ 47 - 0
src/main/java/com/caimei365/user/controller/OperationApi.java

@@ -0,0 +1,47 @@
+package com.caimei365.user.controller;
+
+import com.caimei365.user.model.ResponseJson;
+import com.caimei365.user.model.dto.OperationDto;
+import com.caimei365.user.service.OperationService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/19
+ */
+@Api(tags="运营人员API")
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/user/operation")
+public class OperationApi {
+
+    private final OperationService operationService;
+
+    /**
+     * 添加运营人员
+     *
+     * spi旧接口:/operation/add
+     *
+     * @param operationDto {
+     *                         mobile    手机号
+     *                         linkName  姓名
+     *                         userId    用户Id(userID)
+     *                         clubId    机构Id
+     *                         configFlag 确认标志
+     *                     }
+     */
+    @ApiOperation("添加运营人员(暂不启用)")
+    @PostMapping("/add")
+    public ResponseJson addOperation(OperationDto operationDto){
+        return operationService.addOperation(operationDto);
+    }
+
+}

+ 11 - 0
src/main/java/com/caimei365/user/mapper/OperationMapper.java

@@ -43,4 +43,15 @@ public interface OperationMapper {
      * @param operation 运营人员信息
      */
     void updateOperationByUnbind(OperationPo operation);
+
+    /**
+     * 统计生成随机码是否和数据库有重复
+     */
+    int countByInvitationCode(String invitationCode);
+
+    String findClubNameById(Integer clubId);
+
+    String findShopNameById(Integer shopId);
+
+    int insertOperation(OperationPo operation);
 }

+ 49 - 0
src/main/java/com/caimei365/user/model/dto/OperationDto.java

@@ -0,0 +1,49 @@
+package com.caimei365.user.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/19
+ */
+@ApiModel("添加运营人员")
+@Data
+public class OperationDto implements Serializable {
+    /**
+     * 手机号码
+     */
+    @ApiModelProperty("手机号码")
+    private String mobile;
+    /**
+     * 联系人
+     */
+    @ApiModelProperty("姓名")
+    private String linkName;
+    /**
+     * 用户Id
+     */
+    @ApiModelProperty("用户Id")
+    private Integer userId;
+    /**
+     * 会所ID:隶属于哪个会所的运营人员
+     */
+    @ApiModelProperty("机构Id")
+    private Integer clubId;
+    /**
+     * 供应商Id
+     */
+    @ApiModelProperty("供应商Id")
+    private Integer shopId;
+    /**
+     * 确认标志
+     */
+    @ApiModelProperty("确认标志")
+    private Integer configFlag;
+
+}

+ 13 - 22
src/main/java/com/caimei365/user/model/po/OperationPo.java

@@ -38,10 +38,23 @@ public class OperationPo implements Serializable {
      * 供应商ID:隶属于哪个供应商的运营人员[用户类型为供应商时有效数据]
      */
     private Integer shopId;
+    /**
+     * 运营人账号名【产品预留字段暂时不启用】
+     */
+    private String account;
     /**
      * 手机号码
      */
     private String mobile;
+    /**
+     * 邀请码
+     */
+    private String invitationCode;
+    /**
+     * 邀请码生成时间(此时间起48小时有效)
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date invitationCodeTime;
     /**
      * 微信昵称
      */
@@ -94,25 +107,3 @@ public class OperationPo implements Serializable {
      */
     private Integer delFlag;
 }
-//  `id` int(11) NOT NULL AUTO_INCREMENT,
-//  `userOrganizeID` int(11) DEFAULT NULL COMMENT '用户组织ID,具体对应cm_mall_organize表ID【采美小程序为空或为2】',
-//  `userType` int(11) DEFAULT NULL COMMENT '用户类型,1:机构类型,2供应商类型',
-//  `userID` int(11) DEFAULT NULL COMMENT '用户ID:隶属于哪个用户的运营人员',
-//  `clubID` int(11) DEFAULT NULL COMMENT '机构ID:隶属于哪个会所的运营人员[用户类型为机构时有效数据]',
-//  `shopID` int(11) DEFAULT NULL COMMENT '供应商ID:隶属于哪个供应商的运营人员[用户类型为供应商时有效数据]',
-//  `account` varchar(20) DEFAULT NULL COMMENT '运营人账号名【产品预留字段暂时不启用】',
-//  `mobile` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '手机号码',
-//  `linkName` varchar(50) DEFAULT NULL COMMENT '联系人',
-//  `invitationCode` varchar(50) DEFAULT NULL COMMENT '邀请码',
-//  `status` char(2) DEFAULT NULL COMMENT '1未绑定,2已绑定',
-//  `nickName` varchar(32) DEFAULT NULL COMMENT '微信昵称',
-//  `headimgurl` varchar(256) DEFAULT NULL COMMENT '头像',
-//  `unionId` varchar(32) DEFAULT NULL COMMENT '微信unionId',
-//  `openid` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '小程序openid',
-//  `crmOpenid` varchar(32) DEFAULT NULL COMMENT 'crm公众openid',
-//  `pcOpenid` varchar(32) DEFAULT NULL COMMENT 'www商城openid',
-//  `invitationCodeTime` datetime DEFAULT NULL COMMENT '邀请码生成时间(此时间起48小时有效)',
-//  `bindTime` datetime DEFAULT NULL COMMENT '绑定时间',
-//  `updateTime` datetime DEFAULT NULL COMMENT '更新时间',
-//  `addTime` datetime DEFAULT NULL COMMENT '添加时间',
-//  `delFlag` char(32) DEFAULT '0' COMMENT ' 0 有效  其它无效',

+ 24 - 0
src/main/java/com/caimei365/user/service/OperationService.java

@@ -0,0 +1,24 @@
+package com.caimei365.user.service;
+
+import com.caimei365.user.model.ResponseJson;
+import com.caimei365.user.model.dto.OperationDto;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/19
+ */
+public interface OperationService {
+    /**
+     * 添加运营人员
+     * @param operationDto {
+     *                         mobile    手机号
+     *                         linkName  姓名
+     *                         userId    用户Id(userID)
+     *                         clubId    机构Id
+     *                         configFlag 确认标志
+     *                     }
+     */
+    ResponseJson addOperation(OperationDto operationDto);
+}

+ 2 - 59
src/main/java/com/caimei365/user/service/impl/LoginServiceImpl.java

@@ -49,8 +49,6 @@ public class LoginServiceImpl implements LoginService {
     private RegisterMapper registerMapper;
     @Resource
     private OperationMapper operationMapper;
-    @Resource
-    private BaseMapper baseMapper;
 
     /**
      * 小程序邀请码过期天数
@@ -413,7 +411,7 @@ public class LoginServiceImpl implements LoginService {
         String md5Password = Md5Util.md5(password);
         if (null != user && md5Password.equals(user.getPassword())) {
             // 查询使用该手机号的运营人员或用户
-            String checkRust = operationBindCheck(mobile, smsCode);
+            String checkRust = commonService.operationBindCheck(mobile, smsCode);
             if (checkRust != null) {
                 return ResponseJson.error(checkRust, null);
             }
@@ -580,7 +578,7 @@ public class LoginServiceImpl implements LoginService {
             return ResponseJson.error("参数异常:unionId不能为空!", null);
         }
         // 查询使用该手机号的运营人员或用户
-        String checkRust = operationBindCheck(mobile, smsCode);
+        String checkRust = commonService.operationBindCheck(mobile, smsCode);
         if (checkRust != null) {
             return ResponseJson.error(checkRust, null);
         }
@@ -637,59 +635,4 @@ public class LoginServiceImpl implements LoginService {
         return ResponseJson.success("绑定微信成功", user);
     }
 
-    /**
-     * 查询使用该手机号的运营人员或用户
-     */
-    private String operationBindCheck(String mobile, String smsCode) {
-        // 手机号验证
-        String result = commonService.mobileAndCodeValidate(mobile, smsCode);
-        if (result != null) {
-            // 查询使用该手机号的运营人员或用户
-            UserLoginVo dbUser = loginMapper.getLoginUserByMobile(mobile);
-            boolean offlineClub = false;
-            boolean offlineShop = false;
-            if (null != dbUser) {
-                if (mobile.equals(dbUser.getBindMobile())) {
-                    // 判断运营人员手机号的唯一性
-                    Integer dbOperationId = baseMapper.getOperationIdByMobile(mobile);
-                    if (dbOperationId != null && dbOperationId > 0) {
-                        return "该手机号已注册并绑定微信,不能再次绑定!";
-                    }
-                    // 联系人作为运营人员,放行
-                    return null;
-                }
-                // 已下线机构
-                offlineClub = null != dbUser.getClubStatus() && 91 == dbUser.getClubStatus();
-                // 已下线供应商
-                offlineShop = null != dbUser.getShopStatus() && 91 == dbUser.getShopStatus();
-            }
-            if (offlineClub || offlineShop) {
-                // 解绑已下线的运营人员
-                unbindOperation(dbUser.getOperationId());
-                return null;
-            } else {
-                return result;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * 解绑运营人员
-     *
-     * @param operationId 运营人员Id
-     */
-    private void unbindOperation(Integer operationId) {
-        OperationPo operation = new OperationPo();
-        operation.setId(operationId);
-        operation.setUnionId("");
-        operation.setOpenId("");
-        operation.setNickName("");
-        operation.setBindTime(null);
-        operation.setUpdateTime(new Date());
-        operation.setStatus(1);
-        operation.setDelFlag(1);
-        // 解绑运营人员
-        operationMapper.updateOperationByUnbind(operation);
-    }
 }

+ 109 - 0
src/main/java/com/caimei365/user/service/impl/OperationServiceImpl.java

@@ -0,0 +1,109 @@
+package com.caimei365.user.service.impl;
+
+import com.caimei365.user.components.CommonService;
+import com.caimei365.user.mapper.OperationMapper;
+import com.caimei365.user.model.ResponseJson;
+import com.caimei365.user.model.dto.OperationDto;
+import com.caimei365.user.model.po.OperationPo;
+import com.caimei365.user.service.OperationService;
+import com.caimei365.user.utils.AliyunSmsUtil;
+import com.caimei365.user.utils.CodeUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.Date;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/4/19
+ */
+@Slf4j
+@Service
+public class OperationServiceImpl implements OperationService {
+    @Resource
+    private CommonService commonService;
+    @Resource
+    private OperationMapper operationMapper;
+
+    /**
+     * 添加运营人员
+     *
+     * @param operationDto {
+     *                     mobile    手机号
+     *                     linkName  姓名
+     *                     userId    用户Id(userID)
+     *                     clubId    机构Id
+     *                     configFlag 确认标志
+     *                     }
+     */
+    @Override
+    public ResponseJson addOperation(OperationDto operationDto) {
+        // 查询使用该手机号的运营人员或用户
+//        String checkRust = commonService.operationBindCheck(operationDto.getMobile(), null);
+//        if (checkRust != null) {
+//            return ResponseJson.error(checkRust, null);
+//        }
+//        OperationPo operation = new OperationPo();
+//        Date date = new Date();
+//        // 保存生成邀请码
+//        if (operationDto.getConfigFlag() == 2) {
+//            //生成随机码6位
+//            String invitationCode = generateInvitationCode();
+//            operation.setInvitationCode(invitationCode);
+//            operation.setInvitationCodeTime(date);
+//            operation.setStatus(1);
+//            //发送短信
+//            String name = null;
+//            if (operationDto.getClubId() != null) {
+//                name = operationMapper.findClubNameById(operationDto.getClubId());
+//            } else {
+//                name = operationMapper.findShopNameById(operationDto.getShopId());
+//            }
+//            String mobile = operationDto.getMobile();
+//            boolean sendFlag = false;
+//            if (StringUtils.isNotEmpty(mobile)) {
+//                sendFlag = AliyunSmsUtil.sendSms(mobile, 11, "{name:"+ name +",code:" + invitationCode + "}");
+//                log.info("欢迎成为"+ name +"的运营人员,您的邀请码为:" + invitationCode);
+//            }
+//        }
+//        if (operationDto.getShopId() == null) {
+//            operation.setUserType(1);
+//        } else {
+//            operation.setUserType(2);
+//        }
+//        operation.setAddTime(date);
+//        operation.setUpdateTime(date);
+//        operation.setDelFlag(0);
+//        operation.setOrganizeId(0);
+//        int flag = 0;
+//        if (operation.getId() == null) {
+//            operation.setAccount(operationDto.getMobile() + CodeUtil.generateAccount(2));
+//            operation.setStatus(1);
+//            flag = operationMapper.insertOperation(operation);
+//        } else {
+//            flag = operationMapper.updateOperation(operation);
+//        }
+//        return flag > 0 ? ResponseJson.success() : ResponseJson.error();
+        return null;
+    }
+
+
+    /**
+     * 生成六位随机码
+     */
+    private String generateInvitationCode(){
+        // 生成六位随机码
+        String invitationCode = CodeUtil.generateCodeInt(6);
+        // 判断生成随机码是否和数据库有重复
+        int count = operationMapper.countByInvitationCode(invitationCode);
+        // 存在邀请码重新获取
+        if (count > 0) {
+            generateInvitationCode();
+        }
+        return invitationCode;
+    }
+}

+ 12 - 0
src/main/resources/mapper/OperationMapper.xml

@@ -12,6 +12,18 @@
         where o.mobile = #{mobile} and o.delFlag = '0'
         limit 1
     </select>
+    <select id="countByInvitationCode" resultType="java.lang.Integer">
+        select COUNT(*) from cm_mall_operation_user
+        where invitationCode=#{invitationCode}
+    </select>
+    <select id="findClubNameById" resultType="java.lang.String">
+        select name from club
+        where clubID = #{clubId}
+    </select>
+    <select id="findShopNameById" resultType="java.lang.String">
+        select name from shop
+        where shopID = #{shopId}
+    </select>
     <update id="updateOperationOpenId">
         update cm_mall_operation_user
         set openid = #{openId}