Browse Source

init: init project step4: biz code support 2 (user dept menu)

shc 1 year ago
parent
commit
f1259df29c
22 changed files with 1913 additions and 1087 deletions
  1. 42 0
      doc/db/3sys_area.sql
  2. 29 0
      doc/db/4sys_user_area.sql
  3. 29 0
      doc/db/5sys_ent_area.sql
  4. 21 3
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/UpmsType.java
  5. 46 38
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/UserDTO.java
  6. 120 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysAreaEntity.java
  7. 36 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysEnterpriseArea.java
  8. 245 237
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysUser.java
  9. 38 0
      hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysUserArea.java
  10. 129 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysAreaController.java
  11. 63 51
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java
  12. 21 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysAreaEntityMapper.java
  13. 21 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysEnterpriseAreaMapper.java
  14. 21 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysUserAreaMapper.java
  15. 37 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysAreaEntityService.java
  16. 15 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysEnterpriseAreaService.java
  17. 40 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysUserAreaService.java
  18. 107 110
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysUserService.java
  19. 93 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysAreaEntityServiceImpl.java
  20. 27 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysEnterpriseAreaServiceImpl.java
  21. 87 0
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysUserAreaServiceImpl.java
  22. 646 648
      hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysUserServiceImpl.java

+ 42 - 0
doc/db/3sys_area.sql

@@ -0,0 +1,42 @@
+USE `cnbg_20240511_001`;
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for sys_area
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_area`;
+CREATE TABLE `sys_area`
+(
+    `area_id`     BIGINT UNSIGNED NOT NULL COMMENT '主键ID',
+    `parent_id`   BIGINT          NOT NULL COMMENT '父ID',
+    `area_name`   VARCHAR(255)    NOT NULL COMMENT '地区名称',
+    `letter`      VARCHAR(255)    NULL COMMENT '地区字母',
+    `area_code`   VARCHAR(30)     NOT NULL COMMENT '地区编码',
+    `lat`         DECIMAL(10, 6)  NULL COMMENT '经度',
+    `lng`         DECIMAL(10, 6)  NULL COMMENT '纬度',
+    `area_type`   CHAR(1)         NOT NULL COMMENT '0:国家,1:省,2:城市,3:区县',
+    `area_status` TINYINT(1)      NOT NULL DEFAULT TRUE COMMENT '0:未生效,1:生效',
+    `hot`         TINYINT(1)      NOT NULL DEFAULT FALSE COMMENT 'false:非热门,true:热门',
+    `sort_order`  INT(5)          NOT NULL DEFAULT 0 COMMENT '排序值',
+    `del_flag`    CHAR(1)         NOT NULL DEFAULT '0' COMMENT '删除标记',
+    `create_by`   VARCHAR(64)     NOT NULL COMMENT '创建人',
+    `update_by`   VARCHAR(64)     NOT NULL COMMENT '修改人',
+    `create_time` DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    `update_time` DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
+    PRIMARY KEY `pk_id` (`area_id`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+  COLLATE = utf8mb4_general_ci
+  ROW_FORMAT = DYNAMIC COMMENT ='行政区划表';
+
+
+-- ----------------------------
+-- Records of sys_area
+-- ----------------------------
+BEGIN;
+COMMIT;
+
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 29 - 0
doc/db/4sys_user_area.sql

@@ -0,0 +1,29 @@
+USE `cnbg_20240511_001`;
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for sys_user_area
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_user_area`;
+CREATE TABLE `sys_user_area`
+(
+    `user_id`     BIGINT   NOT NULL COMMENT '用户ID',
+    `area_id`     BIGINT   NOT NULL COMMENT '主键ID',
+    `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    PRIMARY KEY `pk_id` (`user_id`, `area_id`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+  COLLATE = utf8mb4_general_ci
+  ROW_FORMAT = DYNAMIC COMMENT ='用户区域关系表';
+
+
+-- ----------------------------
+-- Records of sys_user_area
+-- ----------------------------
+BEGIN;
+COMMIT;
+
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 29 - 0
doc/db/5sys_ent_area.sql

@@ -0,0 +1,29 @@
+USE `cnbg_20240511_001`;
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for sys_ent_area
+-- ----------------------------
+DROP TABLE IF EXISTS `sys_ent_area`;
+CREATE TABLE `sys_ent_area`
+(
+    `ent_id`      BIGINT   NOT NULL COMMENT '用户ID',
+    `area_id`     BIGINT   NOT NULL COMMENT '主键ID',
+    `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    PRIMARY KEY `pk_id` (`ent_id`, `area_id`)
+) ENGINE = InnoDB
+  DEFAULT CHARSET = utf8mb4
+  COLLATE = utf8mb4_general_ci
+  ROW_FORMAT = DYNAMIC COMMENT ='企业区域关系表';
+
+
+-- ----------------------------
+-- Records of sys_ent_area
+-- ----------------------------
+BEGIN;
+COMMIT;
+
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 21 - 3
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/constant/UpmsType.java

@@ -2,8 +2,10 @@ package com.qunzhixinxi.hnqz.admin.api.constant;
 
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.annotation.EnumValue;
+import lombok.AccessLevel;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 
 /**
  * Upms 服务枚举
@@ -12,11 +14,9 @@ import lombok.Getter;
  * @version 1.0.0
  * @date 2022-08-15 15:24
  */
+@NoArgsConstructor(access = AccessLevel.NONE)
 public final class UpmsType {
 
-    private UpmsType() {
-    }
-
     /**
      * 任务大类
      */
@@ -285,4 +285,22 @@ public final class UpmsType {
         private final String description;
 
     }
+
+    @Getter
+    @AllArgsConstructor
+    public enum AreaType {
+
+        COUNTRY("0", "国家"),
+        PROVINCE("1", "省"),
+        CITY("2", "市"),
+        DISTRICT("3", "区"),
+        VILLAGE("4", "街道");
+
+
+        @EnumValue
+        private final String type;
+
+        private final String description;
+
+    }
 }

+ 46 - 38
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/dto/UserDTO.java

@@ -1,9 +1,11 @@
 package com.qunzhixinxi.hnqz.admin.api.dto;
 
 import com.qunzhixinxi.hnqz.admin.api.entity.SysUser;
+import com.qunzhixinxi.hnqz.common.core.entity.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import javax.validation.constraints.NotEmpty;
 import java.util.List;
 import java.util.Set;
 
@@ -15,52 +17,58 @@ import java.util.Set;
 @EqualsAndHashCode(callSuper = true)
 public class UserDTO extends SysUser {
 
-	private static final long serialVersionUID = -6106669456462384210L;
-	/**
-	 * 角色ID
-	 */
-	private List<Integer> role;
+    private static final long serialVersionUID = -6106669456462384210L;
+    /**
+     * 角色ID
+     */
+    private List<Integer> role;
 
-	/**
-	 * 部门id
-	 */
-	private Integer deptId;
+    /**
+     * 部门id
+     */
+    private Integer deptId;
 
-	/**
-	 * 新密码
-	 */
-	private String newpassword1;
+    /**
+     * 新密码
+     */
+    private String newpassword1;
 
-	/**
-	 * 新密码
-	 */
-	private String w1;
+    /**
+     * 新密码
+     */
+    private String w1;
 
-	private String subType;
+    private String subType;
 
-	/**
-	 * 税源地
-	 */
-	private String subjectLocation;
+    /**
+     * 税源地
+     */
+    private String subjectLocation;
 
-	/**
-	 * 认证状态
-	 */
-	private String certType;
+    /**
+     * 认证状态
+     */
+    private String certType;
 
-	/**
-	 * 用户id集合
-	 */
-	private List<Integer> userIdList;
+    /**
+     * 用户id集合
+     */
+    private List<Integer> userIdList;
 
-	/**
-	 * 上级主管
-	 */
-	private List<Integer> parentIdList;
+    /**
+     * 上级主管
+     */
+    private List<Integer> parentIdList;
 
-	/**
-	 * csm用户id
-	 */
-	private Set<Integer> csmUserIdList;
+    /**
+     * csm用户id
+     */
+    private Set<Integer> csmUserIdList;
+
+    /**
+     * 区域码
+     */
+    @NotEmpty(message = "需要至少分配一个区域", groups = {BaseEntity.Create.class})
+    private List<Long> areaCodes;
 
 }

+ 120 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysAreaEntity.java

@@ -0,0 +1,120 @@
+package com.qunzhixinxi.hnqz.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.qunzhixinxi.hnqz.admin.api.constant.UpmsType;
+import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 行政区划表
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2024/05/12 20:04
+ */
+@Data
+@TableName(value = "sys_area")
+public final class SysAreaEntity implements Serializable {
+
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.INPUT)
+    private Long areaId;
+
+    /**
+     * 父ID
+     */
+    private Long parentId;
+
+    /**
+     * 地区名称
+     */
+    private String areaName;
+
+    /**
+     * 地区字母
+     */
+    private String letter;
+
+    /**
+     * 地区编码
+     */
+    private String areaCode;
+
+    /**
+     * 经度
+     */
+    @TableField(value = "lat")
+    private Double lat;
+
+    /**
+     * 纬度
+     */
+    @TableField(value = "lat")
+    private Double lng;
+
+    /**
+     * 0:国家,1:省,2:城市,3:区县
+     */
+    private UpmsType.AreaType areaType;
+
+    /**
+     * 0:未生效,1:生效
+     */
+    private Boolean areaStatus;
+
+    /**
+     * false:非热门,true:热门
+     */
+    private Boolean hot;
+
+    /**
+     * 排序值
+     */
+    private Integer sortOrder;
+
+    /**
+     * 删除标记
+     */
+    @TableLogic(value = CommonConstants.STATUS_NORMAL, delval = CommonConstants.STATUS_DEL)
+    private String delFlag;
+
+    /**
+     * 创建人
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    /**
+     * 修改人
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    /**
+     * 创建时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 修改时间
+     */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}

+ 36 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysEnterpriseArea.java

@@ -0,0 +1,36 @@
+package com.qunzhixinxi.hnqz.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 企业区域关系表
+ *
+ * @TableName sys_ent_area
+ */
+@Data
+@TableName(value = "sys_ent_area")
+public class SysEnterpriseArea implements Serializable {
+    /**
+     * 用户ID
+     */
+    private Long entId;
+
+    /**
+     * 主键ID
+     */
+    private Long areaId;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+}

+ 245 - 237
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysUser.java

@@ -1,6 +1,7 @@
 package com.qunzhixinxi.hnqz.admin.api.entity;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.fasterxml.jackson.annotation.JsonIgnore;
@@ -8,6 +9,7 @@ import lombok.Data;
 
 import java.io.Serializable;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * <p>
@@ -20,242 +22,248 @@ import java.time.LocalDateTime;
 @Data
 public class SysUser implements Serializable {
 
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * 主键ID
-	 */
-	@TableId(value = "user_id", type = IdType.AUTO)
-	private Integer userId;
-
-	/**
-	 * 用户名
-	 */
-	private String username;
-
-	/**
-	 * 密码
-	 */
-	private String password;
-
-	/**
-	 * 身份证号
-	 */
-	private String idCardNumber;
-
-	/**
-	 * 签名
-	 */
-	private String userSign;
-
-	/**
-	 * 随机盐
-	 */
-	@JsonIgnore
-	private String salt;
-
-	/**
-	 * 创建时间
-	 */
-	private LocalDateTime createTime;
-
-	/**
-	 * 修改时间
-	 */
-	private LocalDateTime updateTime;
-
-	/**
-	 * 0-正常,1-删除
-	 */
-	@TableLogic
-	private String delFlag;
-
-	/**
-	 * 锁定标记
-	 */
-	private String lockFlag;
-
-	/**
-	 * 手机号
-	 */
-	private String phone;
-
-	/**
-	 * 头像
-	 */
-	private String avatar;
-
-	/**
-	 * 部门ID
-	 */
-	private Integer deptId;
-
-	/**
-	 * 租户ID
-	 */
-	private Integer tenantId;
-
-	/**
-	 * 微信openid
-	 */
-	private String wxOpenid;
-
-	/**
-	 * 微信小程序openId
-	 */
-	private String miniOpenid;
-
-	/**
-	 * QQ openid
-	 */
-	private String qqOpenid;
-
-	/**
-	 * 码云唯一标识
-	 */
-	private String giteeLogin;
-
-	/**
-	 * 开源中国唯一标识
-	 */
-	private String oscId;
-
-	/**
-	 * 用户姓名
-	 */
-	private String realname;
-	/**
-	 * 省
-	 */
-	private String province;
-	/**
-	 * 省
-	 */
-	private String provinceCode;
-	/**
-	 * 市
-	 */
-	private String city;
-	/**
-	 * 市
-	 */
-	private String cityCode;
-	/**
-	 * 区
-	 */
-	private String area;
-	/**
-	 * 地址
-	 */
-	private String address;
-	/**
-	 * 备用字段1
-	 */
-	private String temp1;
-	/**
-	 * 备用字段2
-	 */
-	private String temp2;
-	/**
-	 * 备用字段3
-	 */
-	private String temp3;
-	/**
-	 * 备用字段4
-	 */
-	private String temp4;
-	/**
-	 * 物明经销商管理平台ID
-	 */
-	private String temp5;
-
-	/**
-	 * 物明经销商管理平台ID
-	 */
-	private String platId;
-
-	/**
-	 * 物明经销商管理平台ID
-	 */
-	private Integer drugEntId;
-
-	/**
-	 * 物明经销商管理平台ID
-	 */
-	private String w1;
-
-	/**
-	 * 税邦云认证状态
-	 */
-	private Integer certStatus;
-
-	/**
-	 * 人力家认证结果描述
-	 */
-	private String certRemark;
-
-	/**
-	 * 用户认证类型
-	 * 0-人力家
-	 * 1-税邦云
-	 */
-	private String userType;
-
-	private String bankCardNumber;
-
-	/**
-	 * 银行预留手机号
-	 */
-	private String bankPhone;
-
-	/**
-	 * 开户行
-	 */
-	private String bankName;
-
-	/**
-	 * 人力家认证状态
-	 */
-	private Integer rljCertStatus;
-
-	/**
-	 * 税邦云协议签署,0->未签署,1->已签署
-	 */
-	private Integer taxHelperAgreementSignature;
-
-	/**
-	 * 小程序签署协议信息
-	 */
-	private String signAgreement;
-
-	/**
-	 * 是否提醒年龄超60周岁
-	 */
-	private Boolean ageReminder;
-
-	/**
-	 * 是否已补签协议
-	 */
-	private Integer reSignedAgreement;
-
-	/**
-	 * 性别,1男,2女,0未知
-	 */
-	private String gender;
-
-	/**
-	 * 学历
-	 */
-	private String degree;
-
-	/**
-	 * 医药代表资质备案号
-	 */
-	private String qualificationRecordNumber;
-
-	/**
-	 * 资质证书url
-	 */
-	private String[] qualificationsUrl;
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @TableId(value = "user_id", type = IdType.AUTO)
+    private Integer userId;
+
+    /**
+     * 用户名
+     */
+    private String username;
+
+    /**
+     * 密码
+     */
+    private String password;
+
+    /**
+     * 身份证号
+     */
+    private String idCardNumber;
+
+    /**
+     * 签名
+     */
+    private String userSign;
+
+    /**
+     * 随机盐
+     */
+    @JsonIgnore
+    private String salt;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 修改时间
+     */
+    private LocalDateTime updateTime;
+
+    /**
+     * 0-正常,1-删除
+     */
+    @TableLogic
+    private String delFlag;
+
+    /**
+     * 锁定标记
+     */
+    private String lockFlag;
+
+    /**
+     * 手机号
+     */
+    private String phone;
+
+    /**
+     * 头像
+     */
+    private String avatar;
+
+    /**
+     * 部门ID
+     */
+    private Integer deptId;
+
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+    /**
+     * 微信openid
+     */
+    private String wxOpenid;
+
+    /**
+     * 微信小程序openId
+     */
+    private String miniOpenid;
+
+    /**
+     * QQ openid
+     */
+    private String qqOpenid;
+
+    /**
+     * 码云唯一标识
+     */
+    private String giteeLogin;
+
+    /**
+     * 开源中国唯一标识
+     */
+    private String oscId;
+
+    /**
+     * 用户姓名
+     */
+    private String realname;
+    /**
+     * 省
+     */
+    private String province;
+    /**
+     * 省
+     */
+    private String provinceCode;
+    /**
+     * 市
+     */
+    private String city;
+    /**
+     * 市
+     */
+    private String cityCode;
+    /**
+     * 区
+     */
+    private String area;
+    /**
+     * 地址
+     */
+    private String address;
+    /**
+     * 备用字段1
+     */
+    private String temp1;
+    /**
+     * 备用字段2
+     */
+    private String temp2;
+    /**
+     * 备用字段3
+     */
+    private String temp3;
+    /**
+     * 备用字段4
+     */
+    private String temp4;
+    /**
+     * 物明经销商管理平台ID
+     */
+    private String temp5;
+
+    /**
+     * 物明经销商管理平台ID
+     */
+    private String platId;
+
+    /**
+     * 物明经销商管理平台ID
+     */
+    private Integer drugEntId;
+
+    /**
+     * 物明经销商管理平台ID
+     */
+    private String w1;
+
+    /**
+     * 税邦云认证状态
+     */
+    private Integer certStatus;
+
+    /**
+     * 人力家认证结果描述
+     */
+    private String certRemark;
+
+    /**
+     * 用户认证类型
+     * 0-人力家
+     * 1-税邦云
+     */
+    private String userType;
+
+    private String bankCardNumber;
+
+    /**
+     * 银行预留手机号
+     */
+    private String bankPhone;
+
+    /**
+     * 开户行
+     */
+    private String bankName;
+
+    /**
+     * 人力家认证状态
+     */
+    private Integer rljCertStatus;
+
+    /**
+     * 税邦云协议签署,0->未签署,1->已签署
+     */
+    private Integer taxHelperAgreementSignature;
+
+    /**
+     * 小程序签署协议信息
+     */
+    private String signAgreement;
+
+    /**
+     * 是否提醒年龄超60周岁
+     */
+    private Boolean ageReminder;
+
+    /**
+     * 是否已补签协议
+     */
+    private Integer reSignedAgreement;
+
+    /**
+     * 性别,1男,2女,0未知
+     */
+    private String gender;
+
+    /**
+     * 学历
+     */
+    private String degree;
+
+    /**
+     * 医药代表资质备案号
+     */
+    private String qualificationRecordNumber;
+
+    /**
+     * 资质证书url
+     */
+    private String[] qualificationsUrl;
+
+    /**
+     * 区域编码
+     */
+	@TableField(exist = false)
+    private List<Long> areaCodes;
 
 }

+ 38 - 0
hnqz-upms/hnqz-upms-api/src/main/java/com/qunzhixinxi/hnqz/admin/api/entity/SysUserArea.java

@@ -0,0 +1,38 @@
+package com.qunzhixinxi.hnqz.admin.api.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 用户区域关系表
+ * @TableName sys_user_area
+ */
+@Data
+@TableName(value ="sys_user_area")
+public class SysUserArea implements Serializable {
+    /**
+     * 用户ID
+     */
+    private Long userId;
+
+    /**
+     * 主键ID
+     */
+    private Long areaId;
+
+    /**
+     * 创建时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+
+}

+ 129 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysAreaController.java

@@ -0,0 +1,129 @@
+package com.qunzhixinxi.hnqz.admin.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.util.ArrayUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.pig4cloud.plugin.excel.annotation.ResponseExcel;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysAreaEntity;
+import com.qunzhixinxi.hnqz.admin.service.SysAreaEntityService;
+import com.qunzhixinxi.hnqz.common.core.util.R;
+import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 行政区划 前端控制器
+ *
+ * @author lbw
+ * @date 2024-02-16 22:40:06
+ */
+@RestController
+@RequiredArgsConstructor
+public class SysAreaController {
+
+    private final SysAreaEntityService sysAreaEntityService;
+
+    /**
+     * 分页查询
+     *
+     * @param page    分页对象
+     * @param sysArea 行政区划
+     * @return 区域分页
+     */
+    @GetMapping("/sysArea/page")
+    public R<Page<SysAreaEntity>> getSysAreaPage(Page<SysAreaEntity> page, SysAreaEntity sysArea) {
+        return R.ok(sysAreaEntityService.selectPage(page, sysArea));
+    }
+
+    /**
+     * 前端联动组件需要数据
+     *
+     * @param sysArea 查询条件
+     * @return tree
+     */
+    @GetMapping("/sysArea/tree")
+    public R<List<Tree<Long>>> getSysAreaTree(SysAreaEntity sysArea) {
+        return R.ok(sysAreaEntityService.selectTree(sysArea));
+    }
+
+    /**
+     * 根据parentId获取区域列表
+     *
+     * @param parentId 父ID
+     * @return tree
+     */
+    @GetMapping("/sysArea/list")
+    public R<List<SysAreaEntity>> listAreas(@RequestParam(value = "parentId", defaultValue = "0") Long parentId) {
+        return R.ok(sysAreaEntityService.listAreas(parentId));
+    }
+
+
+    /**
+     * 通过id查询行政区划
+     *
+     * @param sysArea 查询条件
+     * @return R
+     */
+    @GetMapping("/sysArea/details}")
+    public R<SysAreaEntity> getDetails(SysAreaEntity sysArea) {
+        return R.ok(sysAreaEntityService.getOne(Wrappers.query(sysArea)));
+    }
+
+    /**
+     * 新增行政区划
+     *
+     * @param sysArea 行政区划
+     * @return R
+     */
+    @SysLog("新增行政区划")
+    @PostMapping("/sysArea/create")
+    public R<Boolean> save(@RequestBody SysAreaEntity sysArea) {
+        return R.ok(sysAreaEntityService.save(sysArea));
+    }
+
+    /**
+     * 修改行政区划
+     *
+     * @param sysArea 行政区划
+     * @return R
+     */
+    @SysLog("修改行政区划")
+    @PostMapping("/sysArea/update")
+    public R<Boolean> updateById(@RequestBody SysAreaEntity sysArea) {
+        return R.ok(sysAreaEntityService.updateById(sysArea));
+    }
+
+    /**
+     * 通过id删除行政区划
+     *
+     * @param ids id列表
+     * @return R
+     */
+    @SysLog("通过id删除行政区划")
+    @PostMapping("/sysArea/del")
+    public R<Boolean> removeById(@RequestBody Long[] ids) {
+        return R.ok(sysAreaEntityService.removeByIds(CollUtil.toList(ids)));
+    }
+
+
+    /**
+     * 导出excel 表格
+     *
+     * @param sysArea 查询条件
+     * @param ids     导出指定ID
+     * @return excel 文件流
+     */
+    @ResponseExcel
+    @GetMapping("/sysArea/export")
+    public List<SysAreaEntity> export(SysAreaEntity sysArea, Long[] ids) {
+        return sysAreaEntityService.list(Wrappers.lambdaQuery(sysArea).in(ArrayUtil.isNotEmpty(ids), SysAreaEntity::getAreaId, ids));
+    }
+}

+ 63 - 51
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/controller/SysUserController.java

@@ -1,7 +1,6 @@
 package com.qunzhixinxi.hnqz.admin.controller;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.bean.BeanUtil;
@@ -32,9 +31,11 @@ import com.qunzhixinxi.hnqz.admin.mapper.SysCsmUserRelationMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysUserMapper;
 import com.qunzhixinxi.hnqz.admin.mapper.SysUserRoleMapper;
 import com.qunzhixinxi.hnqz.admin.service.SysDeptService;
+import com.qunzhixinxi.hnqz.admin.service.SysUserAreaService;
 import com.qunzhixinxi.hnqz.admin.service.SysUserService;
 import com.qunzhixinxi.hnqz.admin.service.WmPlatformQuizTestResultService;
 import com.qunzhixinxi.hnqz.common.core.constant.CommonConstants;
+import com.qunzhixinxi.hnqz.common.core.entity.BaseEntity;
 import com.qunzhixinxi.hnqz.common.core.util.R;
 import com.qunzhixinxi.hnqz.common.log.annotation.SysLog;
 import com.qunzhixinxi.hnqz.common.security.annotation.Inner;
@@ -45,6 +46,7 @@ import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -52,6 +54,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
@@ -85,6 +88,7 @@ public class SysUserController {
     private final SysUserRoleMapper sysUserRoleMapper;
     private final WmPlatformQuizTestResultService platformQuizTestResultService;
     private final SysCsmUserRelationMapper sysCsmUserRelationMapper;
+    private final SysUserAreaService userAreaService;
 
 
     private boolean isZbOrDbUsers(Integer[] roles) {
@@ -111,12 +115,12 @@ public class SysUserController {
     /**
      * 用户管理-认证
      *
-     * @param input
+     * @param input 输入信息
      * @return R
      */
     @SysLog("用户管理-认证")
     @GetMapping("/getAuthInfo")
-    public R getAuthInfo(UserCertificationInput input) {
+    public R<?> getAuthInfo(UserCertificationInput input) {
         //参数校验
         return userService.getAuthInfo(input);
     }
@@ -129,7 +133,7 @@ public class SysUserController {
      */
     @Inner
     @GetMapping("/info/{username}")
-    public R info(@PathVariable String username) {
+    public R<?> info(@PathVariable String username) {
 
         boolean b = username.endsWith("@mp");
         if (b) {
@@ -168,9 +172,9 @@ public class SysUserController {
             }
             String password = redisTemplate.opsForValue().get(username) + "";
             if (null != password) {
-                for (int i = 0; i < user.size(); i++) {
-                    UserInfo userInfo = userService.findUserInfo(user.get(i));
-                    if (Md5Utils.getMD5(password.getBytes()).equals(user.get(i).getW1())) {
+                for (SysUser sysUser : user) {
+                    UserInfo userInfo = userService.findUserInfo(sysUser);
+                    if (Md5Utils.getMD5(password.getBytes()).equals(sysUser.getW1())) {
                         if (isZbOrDbUsers(userInfo.getRoles())) {
                             redisTemplate.delete(username);
                             return R.ok(userInfo);
@@ -189,7 +193,7 @@ public class SysUserController {
      * @return 用户信息
      */
     @GetMapping("/{id}")
-    public R user(@PathVariable Integer id) {
+    public R<?> user(@PathVariable Integer id) {
         return R.ok(userService.selectUserVoById(id));
     }
 
@@ -197,30 +201,37 @@ public class SysUserController {
      * 根据用户名查询用户信息
      *
      * @param username 用户名
-     * @return
+     * @return 用户详情
      */
     @GetMapping("/details/{username}")
-    public R user(@PathVariable String username) {
-        SysUser condition = new SysUser();
-        condition.setUsername(username);
-        return R.ok(userService.getOne(new QueryWrapper<>(condition)));
+    public R<SysUser> user(@PathVariable String username) {
+
+        SysUser one = userService.getOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, username));
+        if (one != null) {
+            List<Long> areaCodes = userAreaService.listUserAreas(Long.valueOf(one.getUserId()));
+            one.setAreaCodes(areaCodes);
+        }
+
+        return R.ok(one);
     }
 
     /**
      * 根据用户名查询用户信息
      *
      * @param username 用户名
-     * @return
+     * @return 用户信息
      */
     @GetMapping("/getDetails")
-    public R getuser(String deptId, String username) {
-        SysUser condition = new SysUser();
-        condition.setUsername(username);
-        SysDept sysDept1 = sysDeptService.getById(Integer.parseInt(deptId));
-        if (null != sysDept1) {
-            condition.setDeptId(sysDept1.getDeptId());
+    public R<SysUser> getuser(@RequestParam(value = "deptId") Integer deptId,
+                              @RequestParam(value = "username") String username) {
+
+        SysUser one = userService.getOne(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, username).eq(SysUser::getDeptId, deptId));
+        if (one != null) {
+            List<Long> areaCodes = userAreaService.listUserAreas(Long.valueOf(one.getUserId()));
+            one.setAreaCodes(areaCodes);
         }
-        return R.ok(userService.getOne(new QueryWrapper<>(condition)));
+
+        return R.ok(one);
     }
 
     /**
@@ -232,7 +243,7 @@ public class SysUserController {
     @SysLog("删除用户信息")
     @DeleteMapping("/{id}")
     @PreAuthorize("@pms.hasPermission('sys_user_del')")
-    public R userDel(@PathVariable Integer id) {
+    public R<Boolean> userDel(@PathVariable Integer id) {
         SysUser sysUser = userService.getById(id);
         return R.ok(userService.deleteUserById(sysUser));
     }
@@ -246,7 +257,7 @@ public class SysUserController {
     @Inner(value = false)
     @SysLog("修改密码")
     @PostMapping("/upd")
-    public R updatePwd(@RequestBody @Valid UserPwd userPwd) {
+    public R<?> updatePwd(@RequestBody @Valid UserPwd userPwd) {
 
         return userService.updatePwd(userPwd);
     }
@@ -260,7 +271,7 @@ public class SysUserController {
     @SysLog("添加用户")
     @PostMapping
     @PreAuthorize("@pms.hasPermission('sys_user_add')")
-    public R user(@RequestBody UserDTO userDto) {
+    public R<Boolean> user(@Validated(value = BaseEntity.Create.class) @RequestBody UserDTO userDto) {
 
         // 姓名去除空格(包括字符之间的所有空格都会去除)
         userDto.setRealname(StrUtil.cleanBlank(userDto.getRealname()));
@@ -280,9 +291,10 @@ public class SysUserController {
         if (userDto.getRole().contains(2)) {
             UserDTO userDTO = new UserDTO();
             userDTO.setUsername(userDto.getUsername());
-            userDTO.setDelFlag("0");
+            userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
             List<UserVO> userDTOList = sysUserMapper.selectByPhone(userDTO);
-            if (userDTOList.size() > 0) {
+
+            if (CollUtil.isNotEmpty(userDTOList)) {
                 for (UserVO userVO : userDTOList) {
                     if (null != userVO.getRoleList()) {
                         for (SysRole sysRole : userVO.getRoleList()) {
@@ -343,9 +355,9 @@ public class SysUserController {
         } else if (userDto.getRole().contains(4)) {
             UserDTO userDTO = new UserDTO();
             userDTO.setUsername(userDto.getUsername());
-            userDTO.setDelFlag("0");
+            userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
             List<UserVO> userDTOList = sysUserMapper.selectByPhone(userDTO);
-            if (userDTOList.size() > 0) {
+            if (CollUtil.isNotEmpty(userDTOList)) {
                 for (UserVO userVO : userDTOList) {
                     if (null != userVO.getRoleList()) {
                         for (SysRole sysRole : userVO.getRoleList()) {
@@ -392,9 +404,9 @@ public class SysUserController {
         } else if (userDto.getRole().contains(7)) {
             UserDTO userDTO = new UserDTO();
             userDTO.setUsername(userDto.getUsername());
-            userDTO.setDelFlag("0");
+            userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
             List<UserVO> userDTOList = sysUserMapper.selectByPhone(userDTO);
-            if (userDTOList.size() > 0) {
+            if (CollUtil.isNotEmpty(userDTOList)) {
                 for (UserVO userVO : userDTOList) {
                     if (null != userVO.getRoleList()) {
                         for (SysRole sysRole : userVO.getRoleList()) {
@@ -414,9 +426,9 @@ public class SysUserController {
         } else if (userDto.getRole().contains(5)) {
             UserDTO userDTO = new UserDTO();
             userDTO.setUsername(userDto.getUsername());
-            userDTO.setDelFlag("0");
+            userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
             List<UserVO> userDTOList = sysUserMapper.selectByPhone(userDTO);
-            if (userDTOList.size() > 0) {
+            if (CollUtil.isNotEmpty(userDTOList)) {
                 for (UserVO userVO : userDTOList) {
                     if (null != userVO.getRoleList()) {
                         for (SysRole sysRole : userVO.getRoleList()) {
@@ -443,9 +455,9 @@ public class SysUserController {
 
             UserDTO userDTO = new UserDTO();
             userDTO.setUsername(userDto.getUsername());
-            userDTO.setDelFlag("0");
+            userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
             List<UserVO> userDTOList = sysUserMapper.selectByPhone(userDTO);
-            if (userDTOList.size() > 0) {
+            if (CollUtil.isNotEmpty(userDTOList)) {
                 for (UserVO userVO : userDTOList) {
                     if (null != userVO.getRoleList()) {
                         for (SysRole sysRole : userVO.getRoleList()) {
@@ -455,9 +467,9 @@ public class SysUserController {
                             SysUserRole sysUserRole = new SysUserRole();
                             sysUserRole.setUserId(userVO.getUserId());
                             List<SysUserRole> sysUserRoleList = sysUserRoleMapper.selectById(sysUserRole);
-                            for (int i = 0; i < sysUserRoleList.size(); i++) {
-                                if (sysUserRoleList.get(i).getRoleId().equals(7)) {
-                                    SysUser sysUser = userService.getById(sysUserRoleList.get(i).getUserId());
+                            for (SysUserRole userRole : sysUserRoleList) {
+                                if (userRole.getRoleId().equals(7)) {
+                                    SysUser sysUser = userService.getById(userRole.getUserId());
                                     if (sysUser.getDeptId().equals(userDto.getDeptId())) {
                                         return R.failed("用户已存在财务管理员角色,不能同时为兼职学术推广员");
                                     }
@@ -471,9 +483,9 @@ public class SysUserController {
         } else if (userDto.getRole().contains(9)) {
             UserDTO userDTO = new UserDTO();
             userDTO.setUsername(userDto.getUsername());
-            userDTO.setDelFlag("0");
+            userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
             List<UserVO> userDTOList = sysUserMapper.selectByPhone(userDTO);
-            if (userDTOList.size() > 0) {
+            if (CollUtil.isNotEmpty(userDTOList)) {
                 for (UserVO userVO : userDTOList) {
                     if (null != userVO.getRoleList()) {
                         for (SysRole sysRole : userVO.getRoleList()) {
@@ -497,7 +509,7 @@ public class SysUserController {
         } else if (userDto.getRole().contains(31)) {
             UserDTO userDTO = new UserDTO();
             userDTO.setUsername(userDto.getUsername());
-            userDTO.setDelFlag("0");
+            userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
             List<UserVO> userDTOList = sysUserMapper.selectByPhone(userDTO);
             if (CollUtil.isNotEmpty(userDTOList)) {
                 for (UserVO userVO : userDTOList) {
@@ -615,7 +627,7 @@ public class SysUserController {
     @SysLog("更新用户信息")
     @PutMapping
     @PreAuthorize("@pms.hasPermission('sys_user_edit')")
-    public R updateUser(@Valid @RequestBody UserDTO userDto) {
+    public R<?> updateUser(@Valid @RequestBody UserDTO userDto) {
 
         // qcc调用企查查查询是否为主要人员
         SysDept sysDept = sysDeptService.getById(userDto.getDeptId());
@@ -715,9 +727,9 @@ public class SysUserController {
             if (userDto.getRole().contains(2)) {
                 UserDTO userDTO = new UserDTO();
                 userDTO.setPlatId(userDto.getUsername());
-                userDTO.setDelFlag("0");
+                userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
                 List<UserVO> userDTOList = userService.getUserVoByPlatId(userDTO);
-                if (userDTOList.size() > 0) {
+                if (CollUtil.isNotEmpty(userDTOList)) {
                     for (UserVO userVO : userDTOList) {
                         if (null != userVO.getRoleList()) {
                             for (SysRole sysRole : userVO.getRoleList()) {
@@ -732,9 +744,9 @@ public class SysUserController {
             } else if (userDto.getRole().contains(3)) {
                 UserDTO userDTO = new UserDTO();
                 userDTO.setPlatId(userDto.getUsername());
-                userDTO.setDelFlag("0");
+                userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
                 List<UserVO> userDTOList = userService.getUserVoByPlatId(userDTO);
-                if (userDTOList.size() > 0) {
+                if (CollUtil.isNotEmpty(userDTOList)) {
                     for (UserVO userVO : userDTOList) {
                         if (null != userVO.getRoleList()) {
                             for (SysRole sysRole : userVO.getRoleList()) {
@@ -764,9 +776,9 @@ public class SysUserController {
             } else if (userDto.getRole().contains(4)) {
                 UserDTO userDTO = new UserDTO();
                 userDTO.setPlatId(userDto.getUsername());
-                userDTO.setDelFlag("0");
+                userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
                 List<UserVO> userDTOList = userService.getUserVoByPlatId(userDTO);
-                if (userDTOList.size() > 0) {
+                if (CollUtil.isNotEmpty(userDTOList)) {
                     for (UserVO userVO : userDTOList) {
                         if (null != userVO.getRoleList()) {
                             for (SysRole sysRole : userVO.getRoleList()) {
@@ -791,9 +803,9 @@ public class SysUserController {
             } else if (userDto.getRole().contains(9)) {
                 UserDTO userDTO = new UserDTO();
                 userDTO.setPlatId(userDto.getUsername());
-                userDTO.setDelFlag("0");
+                userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
                 List<UserVO> userDTOList = userService.getUserVoByPlatId(userDTO);
-                if (userDTOList.size() > 0) {
+                if (CollUtil.isNotEmpty(userDTOList)) {
                     for (UserVO userVO : userDTOList) {
                         if (null != userVO.getRoleList()) {
                             for (SysRole sysRole : userVO.getRoleList()) {
@@ -818,9 +830,9 @@ public class SysUserController {
             } else if (userDto.getRole().contains(6)) {
                 UserDTO userDTO = new UserDTO();
                 userDTO.setPlatId(userDto.getUsername());
-                userDTO.setDelFlag("0");
+                userDTO.setDelFlag(CommonConstants.STATUS_NORMAL);
                 List<UserVO> userDTOList = userService.getUserVoByPlatId(userDTO);
-                if (userDTOList.size() > 0) {
+                if (CollUtil.isNotEmpty(userDTOList)) {
                     for (UserVO userVO : userDTOList) {
                         if (null != userVO.getRoleList()) {
                             for (SysRole sysRole : userVO.getRoleList()) {

+ 21 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysAreaEntityMapper.java

@@ -0,0 +1,21 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysAreaEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 行政区划表mapper
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2024/05/12 20:02
+ */
+@Mapper
+public interface SysAreaEntityMapper extends BaseMapper<SysAreaEntity> {
+
+}
+
+
+
+

+ 21 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysEnterpriseAreaMapper.java

@@ -0,0 +1,21 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.qunzhixinxi.hnqz.admin.api.entity.SysEnterpriseArea;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 企业区域关系表mapper
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2024/05/13 13:44
+ */
+@Mapper
+public interface SysEnterpriseAreaMapper extends BaseMapper<SysEnterpriseArea> {
+
+}
+
+
+
+

+ 21 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/mapper/SysUserAreaMapper.java

@@ -0,0 +1,21 @@
+package com.qunzhixinxi.hnqz.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUserArea;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 用户区域关系表mapper
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2024/05/13 13:40
+ */
+@Mapper
+public interface SysUserAreaMapper extends BaseMapper<SysUserArea> {
+
+}
+
+
+
+

+ 37 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysAreaEntityService.java

@@ -0,0 +1,37 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import cn.hutool.core.lang.tree.Tree;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysAreaEntity;
+
+import java.util.List;
+
+/**
+ * 行政区划表服务
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2024/05/12 20:03
+ */
+public interface SysAreaEntityService extends IService<SysAreaEntity> {
+
+    /**
+     * 查询行政区划树
+     *
+     * @param sysArea 查询条件
+     * @return 树
+     */
+    List<Tree<Long>> selectTree(SysAreaEntity sysArea);
+
+    /**
+     * 分页查询
+     *
+     * @param page    分页对象
+     * @param sysArea 行政区划
+     * @return Page
+     */
+    Page<SysAreaEntity> selectPage(Page<SysAreaEntity> page, SysAreaEntity sysArea);
+
+    List<SysAreaEntity> listAreas(Long parentId);
+}

+ 15 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysEnterpriseAreaService.java

@@ -0,0 +1,15 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysEnterpriseArea;
+
+/**
+ * 企业区域关系表
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2024/05/13 13:41
+ */
+public interface SysEnterpriseAreaService extends IService<SysEnterpriseArea> {
+
+}

+ 40 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/SysUserAreaService.java

@@ -0,0 +1,40 @@
+package com.qunzhixinxi.hnqz.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUserArea;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 用户区域关系表
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2024/05/13 13:39
+ */
+public interface SysUserAreaService extends IService<SysUserArea> {
+
+    /**
+     * 保存关系
+     *
+     * @param userId    用户ID
+     * @param areaCodes 区域列表
+     */
+    void saveRelation(Long userId, Collection<Long> areaCodes);
+
+    /**
+     * 查询用户的区域
+     *
+     * @param userId 用户id
+     * @return 区域ID列表
+     */
+    List<Long> listUserAreas(Long userId);
+
+    /**
+     * 删除用户的区域
+     *
+     * @param userId 用户ID
+     */
+    void delUserArea(Long userId);
+}

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

@@ -23,114 +23,111 @@ import java.util.Map;
  */
 public interface SysUserService extends IService<SysUser> {
 
-	/**
-	 * 查询用户信息
-	 *
-	 * @param sysUser 用户
-	 * @return userInfo
-	 */
-	UserInfo findUserInfo(SysUser sysUser);
-
-
-	/**
-	 * 分页查询用户信息(含有角色信息)
-	 *
-	 * @param page    分页对象
-	 * @param userDTO 参数列表
-	 * @return
-	 */
-	IPage getUsersWithRolePage(Page page, UserDTO userDTO);
-
-	IPage getUsersWithRolePageNoLock(Page page, UserDTO userDTO);
-
-	IPage selectUserList(Page page, UserDTO userDTO);
-
-	/**
-	 * 删除用户
-	 *
-	 * @param sysUser 用户
-	 * @return boolean
-	 */
-	Boolean deleteUserById(SysUser sysUser);
-
-	/**
-	 * 更新当前用户基本信息
-	 *
-	 * @param userDto 用户信息
-	 * @return Boolean
-	 */
-	R<Boolean> updateUserInfo(UserDTO userDto);
-
-	/**
-	 * 更新指定用户信息
-	 *
-	 * @param userDto 用户信息
-	 * @return
-	 */
-	Boolean updateUser(UserDTO userDto);
-
-
-	R<Boolean> updateUserInfoVo(UserVO userVO);
-
-	/**
-	 * 通过ID查询用户信息
-	 *
-	 * @param id 用户ID
-	 * @return 用户信息
-	 */
-	UserVO selectUserVoById(Integer id);
-
-	/**
-	 * 查询上级部门的用户信息
-	 *
-	 * @param username 用户名
-	 * @return R
-	 */
-	List<SysUser> listAncestorUsers(String username);
-
-	/**
-	 * 保存用户信息
-	 *
-	 * @param userDto DTO 对象
-	 * @return success/fail
-	 */
-	Boolean saveUser(UserDTO userDto);
-
-	List<SysUser> getUserByPlatId(String platId);
-
-	List<UserVO> getUserVoByPlatId(UserDTO userDTO);
-
-
-	R updatePwd(UserPwd userPwd);
-
-	SysUser getByIdIgnore(String taskUserId);
-
-	//R batchChannelCert(UserCertificationInput input);
-
-	R getAuthInfo(UserCertificationInput input);
-
-	/**
-	 * 通过excel批量创建用户
-	 *
-	 * @param commonUserDTOListMap 通用用户dto
-	 * @return 结果
-	 */
-	Map<String, String> batchByExcel(Map<String, List<CommonUserDTO>> commonUserDTOListMap);
-
-
-	/**
-	 * 校验是否超60周岁
-	 *
-	 * @param userVO 用户vo
-	 * @return 结果
-	 */
-	Map<String, String> checkSixtyYearsOld(UserVO userVO);
-
-	/**
-	 * 根据用户名获取用户信息
-	 *
-	 * @param usernames 用户名
-	 * @return 用户信息map
-	 */
-	Map<String, List<SysUser>> mapUsersByUsername(Collection<String> usernames);
+    /**
+     * 查询用户信息
+     *
+     * @param sysUser 用户
+     * @return userInfo
+     */
+    UserInfo findUserInfo(SysUser sysUser);
+
+
+    /**
+     * 分页查询用户信息(含有角色信息)
+     *
+     * @param page    分页对象
+     * @param userDTO 参数列表
+     * @return
+     */
+    IPage getUsersWithRolePage(Page page, UserDTO userDTO);
+
+    IPage getUsersWithRolePageNoLock(Page page, UserDTO userDTO);
+
+    IPage selectUserList(Page page, UserDTO userDTO);
+
+    /**
+     * 删除用户
+     *
+     * @param sysUser 用户
+     * @return boolean
+     */
+    Boolean deleteUserById(SysUser sysUser);
+
+    /**
+     * 更新当前用户基本信息
+     *
+     * @param userDto 用户信息
+     * @return Boolean
+     */
+    R<Boolean> updateUserInfo(UserDTO userDto);
+
+    /**
+     * 更新指定用户信息
+     *
+     * @param userDto 用户信息
+     * @return 更新结果
+     */
+    Boolean updateUser(UserDTO userDto);
+
+    /**
+     * 通过ID查询用户信息
+     *
+     * @param id 用户ID
+     * @return 用户信息
+     */
+    UserVO selectUserVoById(Integer id);
+
+    /**
+     * 查询上级部门的用户信息
+     *
+     * @param username 用户名
+     * @return R
+     */
+    List<SysUser> listAncestorUsers(String username);
+
+    /**
+     * 保存用户信息
+     *
+     * @param userDto DTO 对象
+     * @return success/fail
+     */
+    Boolean saveUser(UserDTO userDto);
+
+    List<SysUser> getUserByPlatId(String platId);
+
+    List<UserVO> getUserVoByPlatId(UserDTO userDTO);
+
+
+    R updatePwd(UserPwd userPwd);
+
+    SysUser getByIdIgnore(String taskUserId);
+
+    //R batchChannelCert(UserCertificationInput input);
+
+    R getAuthInfo(UserCertificationInput input);
+
+    /**
+     * 通过excel批量创建用户
+     *
+     * @param commonUserDTOListMap 通用用户dto
+     * @return 结果
+     */
+    Map<String, String> batchByExcel(Map<String, List<CommonUserDTO>> commonUserDTOListMap);
+
+
+    /**
+     * 校验是否超60周岁
+     *
+     * @param userVO 用户vo
+     * @return 结果
+     */
+    Map<String, String> checkSixtyYearsOld(UserVO userVO);
+
+    /**
+     * 根据用户名获取用户信息
+     *
+     * @param usernames 用户名
+     * @return 用户信息map
+     */
+    Map<String, List<SysUser>> mapUsersByUsername(Collection<String> usernames);
 }

+ 93 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysAreaEntityServiceImpl.java

@@ -0,0 +1,93 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.lang.tree.TreeNode;
+import cn.hutool.core.lang.tree.TreeUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysAreaEntity;
+import com.qunzhixinxi.hnqz.admin.mapper.SysAreaEntityMapper;
+import com.qunzhixinxi.hnqz.admin.service.SysAreaEntityService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * 行政区划表服务实现
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2024/05/12 20:03
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class SysAreaEntityServiceImpl extends ServiceImpl<SysAreaEntityMapper, SysAreaEntity> implements SysAreaEntityService {
+
+
+    /**
+     * 查询行政区划树
+     *
+     * @param sysArea 查询条件
+     * @return 树
+     */
+    @Override
+    public List<Tree<Long>> selectTree(SysAreaEntity sysArea) {
+        List<SysAreaEntity> entityList = baseMapper.selectList(Wrappers.lambdaQuery(sysArea)
+                .eq(SysAreaEntity::getAreaStatus, Boolean.TRUE)
+                .orderByDesc(SysAreaEntity::getAreaId));
+
+        List<TreeNode<Long>> nodeList = CollUtil.newArrayList();
+        for (SysAreaEntity sysAreaEntity : entityList) {
+            TreeNode<Long> treeNode = new TreeNode<>(sysAreaEntity.getAreaId(), sysAreaEntity.getParentId()
+                    , sysAreaEntity.getAreaName(), sysAreaEntity.getSortOrder());
+
+            HashMap<String, Object> extraMap = MapUtil.of("areaCode", sysAreaEntity.getAreaCode());
+            extraMap.put("hot", sysAreaEntity.getHot());
+            treeNode.setExtra(extraMap);
+            nodeList.add(treeNode);
+        }
+
+        return TreeUtil.build(nodeList, 0L);
+    }
+
+    /**
+     * 分页查询
+     *
+     * @param page    分页对象
+     * @param sysArea 行政区划
+     * @return Page
+     */
+    @Override
+    public Page<SysAreaEntity> selectPage(Page<SysAreaEntity> page, SysAreaEntity sysArea) {
+        LambdaQueryWrapper<SysAreaEntity> wrapper = Wrappers.lambdaQuery();
+        wrapper.like(StrUtil.isNotBlank(sysArea.getAreaName()), SysAreaEntity::getAreaName, sysArea.getAreaName());
+        wrapper.eq(Objects.nonNull(sysArea.getAreaCode()), SysAreaEntity::getParentId, sysArea.getAreaCode());
+        wrapper.orderByAsc(SysAreaEntity::getAreaType);
+        wrapper.orderByDesc(SysAreaEntity::getSortOrder);
+        return baseMapper.selectPage(page, wrapper);
+    }
+
+    @Override
+    public List<SysAreaEntity> listAreas(Long parentId) {
+        return this.list(Wrappers.<SysAreaEntity>lambdaQuery()
+                .eq(SysAreaEntity::getParentId, parentId)
+                .eq(SysAreaEntity::getAreaStatus, Boolean.TRUE)
+                .orderByAsc(SysAreaEntity::getAreaCode)
+        );
+    }
+
+}
+
+
+
+

+ 27 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysEnterpriseAreaServiceImpl.java

@@ -0,0 +1,27 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysEnterpriseArea;
+import com.qunzhixinxi.hnqz.admin.mapper.SysEnterpriseAreaMapper;
+import com.qunzhixinxi.hnqz.admin.service.SysEnterpriseAreaService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * 企业区域关系表
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2024/05/13 13:44
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class SysEnterpriseAreaServiceImpl extends ServiceImpl<SysEnterpriseAreaMapper, SysEnterpriseArea> implements SysEnterpriseAreaService {
+
+}
+
+
+
+

+ 87 - 0
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysUserAreaServiceImpl.java

@@ -0,0 +1,87 @@
+package com.qunzhixinxi.hnqz.admin.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qunzhixinxi.hnqz.admin.api.entity.SysUserArea;
+import com.qunzhixinxi.hnqz.admin.mapper.SysUserAreaMapper;
+import com.qunzhixinxi.hnqz.admin.service.SysUserAreaService;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 用户区域关系表服务实现
+ *
+ * @author jimmy
+ * @version 1.0.0
+ * @date 2024/05/13 13:40
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class SysUserAreaServiceImpl extends ServiceImpl<SysUserAreaMapper, SysUserArea> implements SysUserAreaService {
+
+    /**
+     * 保存关系
+     *
+     * @param userId    用户ID
+     * @param areaCodes 区域列表
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void saveRelation(Long userId, Collection<Long> areaCodes) {
+
+        if (CollUtil.isEmpty(areaCodes)) {
+            log.info("不存在需要绑定的区域");
+            return;
+        }
+
+        LocalDateTime now = LocalDateTime.now();
+        List<SysUserArea> collect = areaCodes.stream().distinct().map(code -> {
+            SysUserArea userArea = new SysUserArea();
+            userArea.setUserId(userId);
+            userArea.setAreaId(code);
+            userArea.setCreateTime(now);
+            return userArea;
+        }).collect(Collectors.toList());
+
+
+        this.saveBatch(collect);
+
+
+    }
+
+    /**
+     * 查询用户的区域
+     *
+     * @param userId 用户id
+     * @return 区域ID列表
+     */
+    @Override
+    public List<Long> listUserAreas(Long userId) {
+        return this.list(Wrappers.<SysUserArea>lambdaQuery().eq(SysUserArea::getUserId, userId)).stream().map(SysUserArea::getAreaId).collect(Collectors.toList());
+    }
+
+    /**
+     * 删除用户的区域
+     *
+     * @param userId 用户ID
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void delUserArea(Long userId) {
+        this.remove(Wrappers.<SysUserArea>lambdaQuery().eq(SysUserArea::getUserId, userId));
+    }
+}
+
+
+
+

File diff suppressed because it is too large
+ 646 - 648
hnqz-upms/hnqz-upms-biz/src/main/java/com/qunzhixinxi/hnqz/admin/service/impl/SysUserServiceImpl.java


Some files were not shown because too many files changed in this diff