Explorar o código

feat: create salesman

shc hai 11 meses
pai
achega
77c1365bfa

+ 1 - 0
doc/db/28sys_user_cert.sql

@@ -13,6 +13,7 @@ CREATE TABLE `sys_user_cert`
     `user_id`     BIGINT UNSIGNED                    NOT NULL COMMENT '用户ID',
     `cert_type`   VARCHAR(8)                         NOT NULL COMMENT '证书类型',
     `file_id`     BIGINT UNSIGNED                    NOT NULL COMMENT '证书上传ID',
+    `prods`       VARCHAR(2048)                      NULL COMMENT '绑定的产品',
     `create_by`   VARCHAR(32)                        NOT NULL COMMENT '创建人',
     `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
     PRIMARY KEY `pk_id` (`cert_id`)

+ 61 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/SysUserDTO.java

@@ -1,9 +1,12 @@
 package com.qunzhixinxi.hnqz.admin.api.dto;
 
+import com.fasterxml.jackson.annotation.JsonAlias;
 import lombok.AccessLevel;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
@@ -12,6 +15,37 @@ import java.util.List;
 @NoArgsConstructor(access = AccessLevel.NONE)
 public final class SysUserDTO {
 
+    @Data
+    public static class OnSalesmanCreate {
+
+        @NotBlank(message = "用户名必填")
+        private String username;
+
+        @NotBlank(message = "联系方式必填")
+        private String phone;
+
+
+        @NotBlank(message = "真实名称必填")
+        @JsonAlias("realname")
+        private String realName;
+
+        @NotEmpty(message = "角色ID必填")
+        private List<Integer> role;
+
+        @NotBlank(message = "锁定标记必填")
+        private String lockFlag;
+
+        private String idCardNumber;
+
+        @NotNull(message = "所属企业必填")
+        private Integer deptId;
+
+        private List<Integer> areaCode;
+
+        @NotEmpty(message = "认证文件必填")
+        private List<Long> certFileIds;
+    }
+
     @Data
     public static class OnPltUserAgreementSign {
 
@@ -35,4 +69,31 @@ public final class SysUserDTO {
         @NotEmpty(message = "文件ID必填")
         private List<Long> fileIds;
     }
+
+    @Data
+    public static class OnCertInfoPage {
+
+        @NotNull(message = "页码必填")
+        @Min(value = 1, message = "页码最小为{value}")
+        private Integer current;
+
+        @NotNull(message = "分页数量必填")
+        @Min(value = 10, message = "分页数量最小为{value}")
+        @Max(value = 100, message = "分页数量最大为{value}")
+        private Integer size;
+    }
+
+    @Data
+    public static class OnProdBind {
+
+        @NotNull(message = "业务员备案ID必填")
+        private Integer certId;
+
+        @NotEmpty(message = "商品ID必填")
+        private List<Integer> productIds;
+
+        @NotNull(message = "业务员ID必填")
+        private Integer userId;
+
+    }
 }

+ 3 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysUserCertificate.java

@@ -28,6 +28,9 @@ public final class SysUserCertificate implements Serializable {
 
     private Long fileId;
 
+    @TableField(value = "prod")
+    private String products;
+
     private String createBy;
 
     private LocalDateTime createTime;

+ 103 - 77
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java

@@ -3,6 +3,7 @@ package com.qunzhixinxi.hnqz.admin.controller;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.text.CharSequenceUtil;
 import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.StrUtil;
@@ -72,6 +73,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -99,6 +101,8 @@ public class SysUserController {
     private final SysAreaEntityService areaEntityService;
     private final SysUserManager userManager;
 
+    private static final List<Integer> SALESMAN_ROLE_ID = ListUtil.of(5, 6);
+
     /**
      * 判断可以登陆的角色
      * 只有单纯是5 和 6的角色才不能登陆
@@ -112,15 +116,14 @@ public class SysUserController {
             return false;
         }
 
-        List<Integer> ignoreRoles = ListUtil.of(5, 6);
         Set<Integer> roleIds = Arrays.stream(roles).collect(Collectors.toSet());
 
         if (roleIds.size() == 1) {
-            return !CollUtil.containsAny(roleIds, ignoreRoles);
+            return !CollUtil.containsAny(roleIds, SALESMAN_ROLE_ID);
         }
 
         if (roleIds.size() == 2) {
-            return !CollUtil.containsAll(roleIds, ignoreRoles);
+            return !CollUtil.containsAll(roleIds, SALESMAN_ROLE_ID);
         }
 
         return true;
@@ -370,15 +373,19 @@ public class SysUserController {
 
 
     /**
-     * 添加用户
+     * 添加管理员
      *
-     * @param userDto 用户信息
+     * @param userDto 管理员信息
      * @return success/false
      */
-    @SysLog("添加用户")
+    @SysLog("添加管理员信息")
     @PostMapping
     @PreAuthorize("@pms.hasPermission('sys_user_add')")
-    public R<Boolean> user(@Validated(value = BaseEntity.Create.class) @RequestBody UserDTO userDto) {
+    public R<Boolean> createAdministrator(@Validated(value = BaseEntity.Create.class) @RequestBody UserDTO userDto) {
+
+        if (CollUtil.containsAny(userDto.getRole(), SALESMAN_ROLE_ID)) {
+            return R.failed("当前功能仅支持添加非业务员角色");
+        }
 
         // 姓名去除空格(包括字符之间的所有空格都会去除)
         userDto.setRealname(StrUtil.cleanBlank(userDto.getRealname()));
@@ -529,63 +536,6 @@ public class SysUserController {
                 }
             }
 
-        } else if (userDto.getRole().contains(5)) {
-            UserDTO userDTO = new UserDTO();
-            userDTO.setUsername(userDto.getUsername());
-            userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
-            List<UserVO> userDTOList = sysUserMapper.selectByPhone(userDTO);
-            if (CollUtil.isNotEmpty(userDTOList)) {
-                for (UserVO userVO : userDTOList) {
-                    if (null != userVO.getRoleList()) {
-                        for (SysRole sysRole : userVO.getRoleList()) {
-                            if (sysRole.getRoleId() == 2) {
-                                return R.failed("用户已存在平台管理员,不能同时为全职学术推广员");
-                            }
-                            if (sysRole.getRoleId() == 3) {
-                                if (sysDept.getLevel() == 3 || sysDept.getLevel() == 4) {
-                                    return R.failed("用户已存在药企管理员,不能为CSO的全职学术推广员");
-                                }
-                            }
-                            if (sysRole.getRoleId() == 4) {
-                                if (sysDept.getLevel() == 3 || sysDept.getLevel() == 4) {
-                                    return R.failed("用户已存在CSO管理员,不能为其他CSO的全职学术推广员");
-                                }
-                            }
-
-                        }
-                    }
-                }
-            }
-
-        } else if (userDto.getRole().contains(6)) {
-
-            UserDTO userDTO = new UserDTO();
-            userDTO.setUsername(userDto.getUsername());
-            userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
-            List<UserVO> userDTOList = sysUserMapper.selectByPhone(userDTO);
-            if (CollUtil.isNotEmpty(userDTOList)) {
-                for (UserVO userVO : userDTOList) {
-                    if (null != userVO.getRoleList()) {
-                        for (SysRole sysRole : userVO.getRoleList()) {
-                            if (sysRole.getRoleId() == 2) {
-                                return R.failed("用户已存在平台管理员,不能同时为兼职学术推广员");
-                            }
-                            SysUserRole sysUserRole = new SysUserRole();
-                            sysUserRole.setUserId(userVO.getUserId());
-                            List<SysUserRole> sysUserRoleList = sysUserRoleMapper.selectById(sysUserRole);
-                            for (SysUserRole userRole : sysUserRoleList) {
-                                if (userRole.getRoleId().equals(7)) {
-                                    SysUser sysUser = userService.getById(userRole.getUserId());
-                                    if (sysUser.getDeptId().equals(userDto.getDeptId())) {
-                                        return R.failed("用户已存在财务管理员角色,不能同时为兼职学术推广员");
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
         } else if (userDto.getRole().contains(9)) {
             UserDTO userDTO = new UserDTO();
             userDTO.setUsername(userDto.getUsername());
@@ -657,28 +607,97 @@ public class SysUserController {
         query.setUsername(userDto.getUsername());
         query.setDeptId(userDto.getDeptId());
         Integer count = sysUserMapper.selectCount(Wrappers.query(query));
-        // TODO  用户是否存在
+
         if (count != 0) {
             return R.failed("当前机构已存在该账号");
         }
 
 
+        // // 校验身份证上的年龄
+        // if (StringUtils.isNotEmpty(userDto.getIdCardNumber())) {
+        //     // 获取更新操作的用户角色
+        //     List<Integer> roles = userDto.getRole();
+        //     // 如果角色中包含全职和兼职就需要校验身份证年龄
+        //     if (roles.contains(5) || roles.contains(6)) {
+        //         int ageByIdCard = IdcardUtil.getAgeByIdCard(userDto.getIdCardNumber());
+        //         if (ageByIdCard < 18) {
+        //             return R.failed("年龄未满十八");
+        //         } else if (ageByIdCard > 65) {
+        //             return R.failed("年龄已超过六十五");
+        //         }
+        //     }
+        // }
+
+        userService.saveUser(userDto);
+        return R.ok(Boolean.TRUE);
+    }
+
+
+    /**
+     * 添加业务员
+     *
+     * @param resource 业务员信息
+     * @return success/false
+     */
+    @SysLog("添加业务员")
+    @PostMapping(value = "/salesman/create")
+    @PreAuthorize("@pms.hasPermission('sys_user_add')")
+    public R<Boolean> createSalesman(@Validated @RequestBody SysUserDTO.OnSalesmanCreate resource) {
+
+        List<Integer> role = resource.getRole();
+
+        if (role.size() != 1 || !CollUtil.containsAny(role, SALESMAN_ROLE_ID)) {
+            return R.failed("当前功能仅支持添加单一(全职/兼职)业务员角色");
+        }
+
+        // 校验服务商
+        HnqzUser operator = SecurityUtils.getUser();
+        Integer deptId = resource.getDeptId();
+        if (!deptId.equals(operator.getDeptId())) {
+
+            return R.failed("不能跨机构维护学术推广员");
+        }
+
+
+        // 校验用户名
+        String username = resource.getUsername().trim();
+        boolean availUsername = userService.count(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, username)) == 0;
+        if (!availUsername) {
+            return R.failed("用户名已存在");
+        }
+
+
         // 校验身份证上的年龄
-        if (StringUtils.isNotEmpty(userDto.getIdCardNumber())) {
-            // 获取更新操作的用户角色
-            List<Integer> roles = userDto.getRole();
-            // 如果角色中包含全职和兼职就需要校验身份证年龄
-            if (roles.contains(5) || roles.contains(6)) {
-                int ageByIdCard = IdcardUtil.getAgeByIdCard(userDto.getIdCardNumber());
-                if (ageByIdCard < 18) {
-                    return R.failed("年龄未满十八");
-                } else if (ageByIdCard > 65) {
-                    return R.failed("年龄已超过六十五");
-                }
+        String idCardNumber = resource.getIdCardNumber().trim();
+        if (CharSequenceUtil.isNotEmpty(idCardNumber)) {
+            int ageByIdCard = IdcardUtil.getAgeByIdCard(idCardNumber);
+            if (ageByIdCard < 18 || ageByIdCard > 65) {
+                return R.failed("业务员年龄应在18~65周岁之间");
             }
+
         }
 
-        return R.ok(userService.saveUser(userDto));
+        UserDTO userDto = new UserDTO();
+        userDto.setRole(role);
+        userDto.setDeptId(deptId);
+        userDto.setAreaCodes(userDto.getAreaCodes());
+        userDto.setUsername(username);
+        userDto.setIdCardNumber(idCardNumber);
+        userDto.setLockFlag(resource.getLockFlag());
+        userDto.setPhone(resource.getPhone().trim());
+        userDto.setRealname(resource.getRealName());
+
+        Integer userId = userService.saveUser(userDto);
+
+        // 创建备案记录
+        SysUserDTO.OnCertificateCreate certResource = new SysUserDTO.OnCertificateCreate();
+        certResource.setUserId(userId);
+        certResource.setType("REG");
+        certResource.setFileIds(resource.getCertFileIds());
+
+        userManager.createUserCertificate(certResource, operator);
+
+        return R.ok(Boolean.TRUE);
     }
 
 
@@ -1252,4 +1271,11 @@ public class SysUserController {
 
     }
 
+    @SysLog("备案管理员绑定备案产品")
+    @PostMapping(value = "/cert/prod/bind")
+    public R<Boolean> bindProdToUserCert(@Validated @RequestBody SysUserDTO.OnProdBind resource){
+
+        return R.ok(userManager.bindProdToUserCert(resource, SecurityUtils.getUser()));
+    }
+
 }

+ 31 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/manager/SysUserManager.java

@@ -1,12 +1,16 @@
 package com.qunzhixinxi.hnqz.admin.manager;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.text.StrPool;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.qunzhixinxi.hnqz.admin.api.dto.SysUserDTO;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysFile;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUserCertificate;
 import com.qunzhixinxi.hnqz.admin.service.SysFileService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserCertificateService;
+import com.qunzhixinxi.hnqz.admin.service.SysUserService;
+import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
 import com.qunzhixinxi.hnqz.common.security.service.HnqzUser;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -16,6 +20,7 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -32,6 +37,7 @@ import java.util.stream.Collectors;
 public class SysUserManager {
 
     private final SysFileService fileService;
+    private final SysUserService userService;
     private final SysUserCertificateService userCertificateService;
 
 
@@ -80,4 +86,29 @@ public class SysUserManager {
         }).collect(Collectors.toList());
 
     }
+
+    /**
+     * 备案管理员绑定备案信息和产品
+     *
+     * @param resource 绑定信息
+     * @param user     操纵人
+     * @return 绑定结果
+     */
+    public Boolean bindProdToUserCert(SysUserDTO.OnProdBind resource, HnqzUser user) {
+
+        String products = resource.getProductIds().stream().map(Objects::toString).collect(Collectors.joining(","));
+        userCertificateService.update(Wrappers.<SysUserCertificate>lambdaUpdate()
+                .set(SysUserCertificate::getProducts, products)
+                .eq(SysUserCertificate::getCertificateId, resource.getCertId()));
+
+        // 启用业务员
+        userService.update(Wrappers.<SysUser>lambdaUpdate()
+                .set(SysUser::getLockFlag, CommonConstants.STATUS_NORMAL)
+                .eq(SysUser::getUserId, resource.getUserId())
+                .eq(SysUser::getDelFlag, CommonConstants.STATUS_NORMAL)
+                .eq(SysUser::getLockFlag, CommonConstants.STATUS_LOCK));
+
+
+        return Boolean.TRUE;
+    }
 }

+ 1 - 1
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysUserService.java

@@ -91,7 +91,7 @@ public interface SysUserService extends IService<SysUser> {
      * @param userDto DTO 对象
      * @return success/fail
      */
-    Boolean saveUser(UserDTO userDto);
+    Integer saveUser(UserDTO userDto);
 
     List<SysUser> getUserByPlatId(String platId);
 

+ 3 - 3
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysUserServiceImpl.java

@@ -577,7 +577,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean saveUser(UserDTO userDto) {
+    public Integer saveUser(UserDTO userDto) {
 
         SysUser sysUser = new SysUser();
         if (null != userDto.getUsername()) {
@@ -602,7 +602,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             userRole.setRoleId(roleId);
             return userRole;
         }).collect(Collectors.toList());
-        log.info("-----{}", userRoleList.size());
+        log.info("-----角色ID:{},角色ID数:{}", userRoleList, userRoleList.size());
         sysUserRoleService.saveBatch(userRoleList);
 
         // 关联上级主管
@@ -618,7 +618,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         // 管理区域管理
         userAreaService.saveRelation(Long.valueOf(sysUser.getUserId()), userDto.getAreaCodes());
 
-        return Boolean.TRUE;
+        return sysUser.getUserId();
     }
 
     /**