Browse Source

add:人员档案管理

caozixuan 1 year ago
parent
commit
6bf3646686

+ 6 - 5
sop-business/src/main/java/com/qmth/sop/business/bean/params/UserArchivesParam.java

@@ -93,8 +93,9 @@ public class UserArchivesParam {
     private Long archivesTime;
 
     @ApiModelProperty(value = "认证角色集合")
+    @JsonSerialize(using = ToStringSerializer.class)
     @NotEmpty(message = "请选择认证角色")
-    private List<RoleTypeEnum> roleTypeList;
+    private Long[] roleIds;
 
     @ApiModelProperty(value = "认证时间")
     private Long authenticationTime;
@@ -236,12 +237,12 @@ public class UserArchivesParam {
         this.archivesTime = archivesTime;
     }
 
-    public List<RoleTypeEnum> getRoleTypeList() {
-        return roleTypeList;
+    public Long[] getRoleIds() {
+        return roleIds;
     }
 
-    public void setRoleTypeList(List<RoleTypeEnum> roleTypeList) {
-        this.roleTypeList = roleTypeList;
+    public void setRoleIds(Long[] roleIds) {
+        this.roleIds = roleIds;
     }
 
     public Long getAuthenticationTime() {

+ 76 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/UserArchivesSubTotalResult.java

@@ -0,0 +1,76 @@
+package com.qmth.sop.business.bean.result;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 人员档案管理小计
+ * @Author: CaoZixuan
+ * @Date: 2023-08-15
+ */
+public class UserArchivesSubTotalResult {
+    @ApiModelProperty("在册档案")
+    private Integer totalCount;
+
+    @ApiModelProperty("有效")
+    private Integer validCount;
+
+    @ApiModelProperty("无效")
+    private Integer invalidCount;
+
+    @ApiModelProperty("实施工程师有效")
+    private Integer effectEngineerCount;
+
+    @ApiModelProperty("区域协调人有效")
+    private Integer regionCoordinatorCount;
+
+    @ApiModelProperty("助理工程师有效")
+    private Integer assistantEngineerCount;
+
+    public Integer getTotalCount() {
+        return totalCount;
+    }
+
+    public void setTotalCount(Integer totalCount) {
+        this.totalCount = totalCount;
+    }
+
+    public Integer getValidCount() {
+        return validCount;
+    }
+
+    public void setValidCount(Integer validCount) {
+        this.validCount = validCount;
+    }
+
+    public Integer getInvalidCount() {
+        return invalidCount;
+    }
+
+    public void setInvalidCount(Integer invalidCount) {
+        this.invalidCount = invalidCount;
+    }
+
+    public Integer getEffectEngineerCount() {
+        return effectEngineerCount;
+    }
+
+    public void setEffectEngineerCount(Integer effectEngineerCount) {
+        this.effectEngineerCount = effectEngineerCount;
+    }
+
+    public Integer getRegionCoordinatorCount() {
+        return regionCoordinatorCount;
+    }
+
+    public void setRegionCoordinatorCount(Integer regionCoordinatorCount) {
+        this.regionCoordinatorCount = regionCoordinatorCount;
+    }
+
+    public Integer getAssistantEngineerCount() {
+        return assistantEngineerCount;
+    }
+
+    public void setAssistantEngineerCount(Integer assistantEngineerCount) {
+        this.assistantEngineerCount = assistantEngineerCount;
+    }
+}

+ 9 - 0
sop-business/src/main/java/com/qmth/sop/business/mapper/SysUserMapper.java

@@ -8,6 +8,7 @@ import com.qmth.sop.business.bean.result.WorkTaskResult;
 import com.qmth.sop.business.bean.result.SysUserResult;
 import com.qmth.sop.business.bean.result.UserRoleNameResult;
 import com.qmth.sop.business.entity.SysUser;
+import com.qmth.sop.common.enums.RoleTypeEnum;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -85,4 +86,12 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
      * @return
      */
     List<UserRoleNameResult> selectRoleNames(@Param("userIds") List<Long> userIds);
+
+    /**
+     * 根据角色类型查询用户
+     *
+     * @param roleType 角色类型
+     * @return 类型
+     */
+    List<SysUser> findByRoleType(@Param("roleType") RoleTypeEnum roleType);
 }

+ 9 - 0
sop-business/src/main/java/com/qmth/sop/business/mapper/TBUserArchivesMapper.java

@@ -8,6 +8,8 @@ import com.qmth.sop.business.entity.TBUserArchives;
 import com.qmth.sop.common.enums.RoleTypeEnum;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * <p>
  * 人员档案表 Mapper 接口
@@ -27,4 +29,11 @@ public interface TBUserArchivesMapper extends BaseMapper<TBUserArchives> {
                                                    @Param("archivesTimeEnd") Long archivesTimeEnd,
                                                    @Param("remainValidTime") Long remainValidTime,
                                                    @Param("currentTime") Long currentTime);
+
+    /**
+     * 档案小计
+     *
+     * @return 档案详细信息
+     */
+    List<UserArchivesResult> findSubTotal();
 }

+ 8 - 0
sop-business/src/main/java/com/qmth/sop/business/service/SysUserService.java

@@ -9,6 +9,7 @@ import com.qmth.sop.business.bean.result.UserRoleNameResult;
 import com.qmth.sop.business.bean.result.WorkTaskResult;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.common.enums.AppSourceEnum;
+import com.qmth.sop.common.enums.RoleTypeEnum;
 
 import java.security.NoSuchAlgorithmException;
 import java.util.List;
@@ -130,4 +131,11 @@ public interface SysUserService extends IService<SysUser> {
      * @return
      */
     IPage<WorkTaskResult> getWorkTaskList(IPage<Map> iPage, Long userId);
+
+    /**
+     * 根据角色类型查询用户
+     * @param roleType 角色类型
+     * @return 用户集合
+     */
+    List<SysUser> findUserListByRoleType(RoleTypeEnum roleType);
 }

+ 8 - 0
sop-business/src/main/java/com/qmth/sop/business/service/TBUserArchivesService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.qmth.sop.business.bean.params.UserArchivesParam;
 import com.qmth.sop.business.bean.result.UserArchivesResult;
+import com.qmth.sop.business.bean.result.UserArchivesSubTotalResult;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.TBUserArchives;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -46,4 +47,11 @@ public interface TBUserArchivesService extends IService<TBUserArchives> {
      * @return 档案id
      */
     Long editUserArchives(UserArchivesParam userArchivesParam, SysUser requestUser);
+
+    /**
+     * 查询人员档案小计
+     *
+     * @return 档案小计情况
+     */
+    UserArchivesSubTotalResult findUserArchivesSubTotal();
 }

+ 6 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysUserServiceImpl.java

@@ -27,6 +27,7 @@ import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.AppSourceEnum;
 import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.FieldUniqueEnum;
+import com.qmth.sop.common.enums.RoleTypeEnum;
 import com.qmth.sop.common.util.IpUtil;
 import com.qmth.sop.common.util.ResultUtil;
 import com.qmth.sop.common.util.ServletUtil;
@@ -451,4 +452,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     public IPage<WorkTaskResult> getWorkTaskList(IPage<Map> iPage, Long userId) {
         return this.baseMapper.getWorkTaskList(iPage, userId);
     }
+
+    @Override
+    public List<SysUser> findUserListByRoleType(RoleTypeEnum roleType) {
+        return this.baseMapper.findByRoleType(roleType);
+    }
 }

+ 100 - 8
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesServiceImpl.java

@@ -6,18 +6,20 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.sop.business.bean.params.UserArchivesParam;
 import com.qmth.sop.business.bean.result.UserArchivesResult;
+import com.qmth.sop.business.bean.result.UserArchivesSubTotalResult;
 import com.qmth.sop.business.entity.SysSupplier;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.TBUserArchives;
+import com.qmth.sop.business.entity.TBUserArchivesSupplier;
 import com.qmth.sop.business.mapper.TBUserArchivesMapper;
-import com.qmth.sop.business.service.SysSupplierService;
-import com.qmth.sop.business.service.SysUserRoleService;
-import com.qmth.sop.business.service.TBUserArchivesService;
+import com.qmth.sop.business.service.*;
+import com.qmth.sop.common.base.BaseEntity;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.EducationEnum;
 import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.GenderEnum;
 import com.qmth.sop.common.enums.RoleTypeEnum;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -26,6 +28,7 @@ import java.time.Duration;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -41,6 +44,10 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
     private SysUserRoleService sysUserRoleService;
     @Resource
     private SysSupplierService sysSupplierService;
+    @Resource
+    private TBUserArchivesSupplierService tbUserArchivesSupplierService;
+    @Resource
+    private SysUserService sysUserService;
 
     @Override
     public IPage<UserArchivesResult> findUserArchivesPage(String city, Long supplierId, String archivesName, RoleTypeEnum roleType, Boolean authenticationStatus, Long authenticationTimeStart, Long authenticationTimeEnd, Integer remainValidDay, Integer pageNumber, Integer pageSize) {
@@ -130,7 +137,7 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
             }
         }
         Long archivesTime = userArchivesParam.getArchivesTime();
-        List<RoleTypeEnum> roleTypeList = userArchivesParam.getRoleTypeList();
+        Long[] roleIds = userArchivesParam.getRoleIds();
         Long authenticationTime = userArchivesParam.getAuthenticationTime();
         Double authenticationScore = userArchivesParam.getAuthenticationScore();
         Long authenticationValidTime = userArchivesParam.getAuthenticationValidTime();
@@ -151,20 +158,105 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
         tbUserArchives.setEmail(email);
         tbUserArchives.setBasePhotoPath(basePhotoPath);
         // 档案表编辑
+        Long userId = null;
         if (id == null || id == 0) {
             // 新增
             tbUserArchives.setCreateId(requestUser.getId());
             this.save(tbUserArchives);
             id = tbUserArchives.getId();
+            List<SysUser> userList = sysUserService.list(new QueryWrapper<SysUser>().lambda().eq(SysUser::getMobileNumber, mobileNumber));
+            if (CollectionUtils.isNotEmpty(userList)) {
+                if (userList.size() > 1) {
+                    throw ExceptionResultEnum.ERROR.exception("用户表数据异常: 存在多个手机号相同的用户[" + mobileNumber + "]");
+                }
+                userId = userList.get(0).getId();
+            }
         } else {
             // 编辑
+            TBUserArchives old = this.getById(id);
+            if (Objects.isNull(old)) {
+                throw ExceptionResultEnum.ERROR.exception("用户不存在");
+            }
+            List<SysUser> userList = sysUserService.list(new QueryWrapper<SysUser>().lambda().eq(SysUser::getMobileNumber, old.getMobileNumber()));
+            if (CollectionUtils.isNotEmpty(userList)) {
+                if (userList.size() > 1) {
+                    throw ExceptionResultEnum.ERROR.exception("用户表数据异常: 存在多个手机号相同的用户[" + mobileNumber + "]");
+                }
+                userId = userList.get(0).getId();
+            }
             tbUserArchives.setId(id);
             tbUserArchives.setUpdateId(requestUser.getId());
             this.updateById(tbUserArchives);
         }
 
-        // 档案详细表编辑
-        // TODO: 2023/8/14  档案详细 用户关联新增 
-        return null;
+        // 档案详细表编辑 (先根据档案id删除再新增)
+        tbUserArchivesSupplierService.remove(new QueryWrapper<TBUserArchivesSupplier>().lambda().eq(TBUserArchivesSupplier::getUserArchivesId, id));
+        TBUserArchivesSupplier tbUserArchivesSupplier = new TBUserArchivesSupplier();
+        tbUserArchivesSupplier.setUserArchivesId(id);
+        tbUserArchivesSupplier.setArchivesTime(archivesTime);
+        tbUserArchivesSupplier.setAuthenticationTime(authenticationTime);
+        tbUserArchivesSupplier.setAuthenticationScore(authenticationScore);
+        tbUserArchivesSupplier.setAuthenticationValidTime(authenticationValidTime);
+        tbUserArchivesSupplier.setSupplierId(supplierId);
+        tbUserArchivesSupplier.setRemark(remark);
+        tbUserArchivesSupplierService.save(tbUserArchivesSupplier);
+
+        // 用户编辑 - 根据手机号关联更新
+        SysUser sysUser = new SysUser();
+        if (userId != null && userId > 0) {
+            // 编辑
+            sysUser = sysUserService.getById(userId);
+        } else {
+            sysUser.setLoginName(name);
+            sysUser.setRealName(name);
+            sysUser.setPasswordInfo(sysUser.getMobileNumber());
+        }
+        sysUser.setMobileNumber(mobileNumber);
+        sysUser.setGender(gender);
+        sysUser.setRoleIds(roleIds);
+        sysUserService.saveUser(sysUser);
+        return id;
+    }
+
+    @Override
+    public UserArchivesSubTotalResult findUserArchivesSubTotal() {
+        UserArchivesSubTotalResult result = new UserArchivesSubTotalResult();
+        List<UserArchivesResult> userArchivesResultList = this.baseMapper.findSubTotal();
+        if (CollectionUtils.isNotEmpty(userArchivesResultList)) {
+            Long currentTime = System.currentTimeMillis();
+            Integer totalCount = userArchivesResultList.size();
+            List<UserArchivesResult> validList = userArchivesResultList.stream()
+                    .filter(e -> e.getAuthenticationValidTime() != null && e.getAuthenticationValidTime() > currentTime)
+                    .collect(Collectors.toList());
+            Integer validCount = validList.size();
+            Integer inValidCount = totalCount - validCount;
+
+            result.setTotalCount(totalCount);
+            result.setValidCount(validCount);
+            result.setInvalidCount(inValidCount);
+
+            List<Long> userIdList = validList.stream().map(UserArchivesResult::getUserId).distinct().collect(Collectors.toList());
+            List<SysUser> effectEngineer = sysUserService.findUserListByRoleType(RoleTypeEnum.EFFECT_ENGINEER);
+            if (CollectionUtils.isNotEmpty(effectEngineer)) {
+                List<Long> effectEngineerIdList = effectEngineer.stream().map(BaseEntity::getId).distinct().collect(Collectors.toList());
+                Integer effectEngineerCount = (int) userIdList.stream().filter(effectEngineerIdList::contains).count();
+                result.setEffectEngineerCount(effectEngineerCount);
+            }
+
+            List<SysUser> regionCoordinator = sysUserService.findUserListByRoleType(RoleTypeEnum.REGION_COORDINATOR);
+            if (CollectionUtils.isNotEmpty(regionCoordinator)) {
+                List<Long> regionCoordinatorIdList = regionCoordinator.stream().map(BaseEntity::getId).distinct().collect(Collectors.toList());
+                Integer effectEngineerCount = (int) userIdList.stream().filter(regionCoordinatorIdList::contains).count();
+                result.setEffectEngineerCount(effectEngineerCount);
+            }
+
+            List<SysUser> assistantEngineer = sysUserService.findUserListByRoleType(RoleTypeEnum.ASSISTANT_ENGINEER);
+            if (CollectionUtils.isNotEmpty(assistantEngineer)) {
+                List<Long> assistantEngineerIdList = assistantEngineer.stream().map(BaseEntity::getId).distinct().collect(Collectors.toList());
+                Integer assistantEngineerCount = (int) userIdList.stream().filter(assistantEngineerIdList::contains).count();
+                result.setAssistantEngineerCount(assistantEngineerCount);
+            }
+        }
+        return result;
     }
-}
+}

+ 15 - 0
sop-business/src/main/resources/mapper/SysUserMapper.xml

@@ -170,4 +170,19 @@
         </where>
         group by sur.user_id
     </select>
+    <select id="findByRoleType" resultType="com.qmth.sop.business.entity.SysUser">
+        SELECT
+            su.*
+        FROM
+            sys_user_role sur
+                LEFT JOIN
+            sys_role sr ON sur.role_id = sr.id
+                LEFT JOIN
+            sys_user su ON sur.user_id = su.id
+        <where>
+            <if test="roleType != null">
+                AND sr.type = #{roleType}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 12 - 0
sop-business/src/main/resources/mapper/TBUserArchivesMapper.xml

@@ -73,4 +73,16 @@
             </if>
         </where>
     </select>
+    <select id="findSubTotal" resultType="com.qmth.sop.business.bean.result.UserArchivesResult">
+        SELECT
+            tbua.id AS userArchivesId,
+            tbuas.authentication_valid_time AS authenticationValidTime,
+            su.id AS userId
+        FROM
+            t_b_user_archives tbua
+                LEFT JOIN
+            t_b_user_archives_supplier tbuas ON tbua.id = tbuas.supplier_id
+                LEFT JOIN
+            sys_user su ON su.mobile_number = tbua.mobile_number
+    </select>
 </mapper>