Jelajahi Sumber

add:档案分配联调bug

caozixuan 1 tahun lalu
induk
melakukan
0153602b50
17 mengubah file dengan 351 tambahan dan 44 penghapusan
  1. 6 0
      sop-business/src/main/java/com/qmth/sop/business/bean/dto/UserArchivesImportDto.java
  2. 11 0
      sop-business/src/main/java/com/qmth/sop/business/mapper/TBUserArchivesMapper.java
  3. 14 0
      sop-business/src/main/java/com/qmth/sop/business/service/TBUserArchivesAllocationService.java
  4. 5 2
      sop-business/src/main/java/com/qmth/sop/business/service/TBUserArchivesService.java
  5. 1 1
      sop-business/src/main/java/com/qmth/sop/business/service/impl/SysUserServiceImpl.java
  6. 12 2
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesAllocationServiceImpl.java
  7. 60 18
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesServiceImpl.java
  8. 7 2
      sop-business/src/main/java/com/qmth/sop/business/templete/service/impl/TaskLogicServiceImpl.java
  9. 46 1
      sop-business/src/main/resources/db/log/caozixuan_update_log.sql
  10. 2 2
      sop-business/src/main/resources/mapper/TBUserArchivesAllocationMapper.xml
  11. 79 6
      sop-business/src/main/resources/mapper/TBUserArchivesMapper.xml
  12. 7 1
      sop-common/src/main/java/com/qmth/sop/common/enums/EnumList.java
  13. 34 0
      sop-common/src/main/java/com/qmth/sop/common/enums/SequenceEnum.java
  14. 18 0
      sop-server/src/main/java/com/qmth/sop/server/api/SysController.java
  15. 24 6
      sop-server/src/main/java/com/qmth/sop/server/api/TBUserArchivesAllocationController.java
  16. 25 3
      sop-server/src/main/java/com/qmth/sop/server/api/TBUserArchivesController.java
  17. TEMPAT SAMPAH
      sop-server/src/main/resources/static/user_archives.xlsx

+ 6 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/dto/UserArchivesImportDto.java

@@ -1,5 +1,6 @@
 package com.qmth.sop.business.bean.dto;
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.alibaba.excel.annotation.write.style.HeadFontStyle;
@@ -92,18 +93,23 @@ public class UserArchivesImportDto extends BasicExcelRow implements Serializable
 
     // -- 辅助查询用字段
     @ApiModelProperty("用户id(查询用)")
+    @ExcelIgnore
     private Long userId;
 
     @ApiModelProperty("性别(查询用)")
+    @ExcelIgnore
     private GenderEnum genderEnum;
 
     @ApiModelProperty("学历(查询用)")
+    @ExcelIgnore
     private EducationEnum educationEnum;
 
     @ApiModelProperty("入档时间(查询用)")
+    @ExcelIgnore
     private Long archivesTime;
 
     @ApiModelProperty("档案有效期(查询用)")
+    @ExcelIgnore
     private Long authenticationValidTime;
 
     public UserArchivesImportDto() {

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

@@ -59,6 +59,17 @@ public interface TBUserArchivesMapper extends BaseMapper<TBUserArchives> {
      */
     List<ArchivesSourceResult> findArchivesSourceByType(@Param("roleType") RoleTypeEnum roleType);
 
+
+    List<UserArchivesResult> findUserArchivesList(@Param("city") String city,
+                                                  @Param("supplierId") Long supplierId,
+                                                  @Param("archivesName") String archivesName,
+                                                  @Param("roleType") RoleTypeEnum roleType,
+                                                  @Param("status") Boolean status,
+                                                  @Param("archivesTimeStart") Long archivesTimeStart,
+                                                  @Param("archivesTimeEnd") Long archivesTimeEnd,
+                                                  @Param("remainValidTime") Long remainValidTime,
+                                                  @Param("currentTime") Long currentTime);
+
     /**
      * 档案小计
      *

+ 14 - 0
sop-business/src/main/java/com/qmth/sop/business/service/TBUserArchivesAllocationService.java

@@ -70,4 +70,18 @@ public interface TBUserArchivesAllocationService extends IService<TBUserArchives
      * @param serviceUnitId 服务单元id
      */
     void autoEditCrmAllocationBatch(Long serviceUnitId);
+
+    /**
+     * crm派单 sop流程发布
+     *
+     * @param crmNo crmNo
+     */
+    void publishSop(String crmNo);
+
+    /**
+     * crm派单 sop流程撤销发布
+     *
+     * @param crmNo crmNo
+     */
+    void unPublishSop(String crmNo);
 }

+ 5 - 2
sop-business/src/main/java/com/qmth/sop/business/service/TBUserArchivesService.java

@@ -11,6 +11,7 @@ import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.TBUserArchives;
 import com.qmth.sop.common.enums.RoleTypeEnum;
 
+import java.text.ParseException;
 import java.util.List;
 
 /**
@@ -40,7 +41,7 @@ public interface TBUserArchivesService extends IService<TBUserArchives> {
      */
     IPage<UserArchivesResult> findUserArchivesPage(String city, Long supplierId, String archivesName, RoleTypeEnum roleType,
                                                    Boolean authenticationStatus, Long archivesTimeStart, Long archivesTimeEnd,
-                                                   Integer remainValidDay, Integer pageNumber, Integer pageSize);
+                                                   Integer remainValidDay, Integer pageNumber, Integer pageSize) throws ParseException;
 
     /**
      * 编辑用户档案
@@ -56,7 +57,9 @@ public interface TBUserArchivesService extends IService<TBUserArchives> {
      *
      * @return 档案小计情况
      */
-    UserArchivesSubTotalResult findUserArchivesSubTotal();
+    UserArchivesSubTotalResult findUserArchivesSubTotal(String city, Long supplierId, String archivesName, RoleTypeEnum roleType,
+                                                        Boolean authenticationStatus, Long archivesTimeStart, Long archivesTimeEnd,
+                                                        Integer remainValidDay);
 
     /**
      * 人员档案管理分页查询

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

@@ -330,7 +330,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                     commonCacheService.removeUserRolePrivilegeCache(sysUser.getId());
                     sysUserRoleService.addUserRolePrivilege(sysUser, sysUser.getRoleIds());
                     sysUserService.removeUserInfo(sysUser.getId(), true);
-                } else if (!dbUser.getOrgId().equals(sysUser.getOrgId())) {
+                } else if (Objects.nonNull(dbUser.getOrgId()) && !dbUser.getOrgId().equals(sysUser.getOrgId())) {
                     sysUserService.removeUserInfo(sysUser.getId(), true);
                 }
                 //如果修改了机构或手机号,需更新用户缓存

+ 12 - 2
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesAllocationServiceImpl.java

@@ -128,7 +128,7 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
                 if (Objects.isNull(role)) {
                     throw ExceptionResultEnum.ERROR.exception("认证角色不存在");
                 } else {
-                    if (!RoleTypeEnum.EFFECT_ENGINEER.equals(role.getType()) || !RoleTypeEnum.ASSISTANT_ENGINEER.equals(role.getType())) {
+                    if (!RoleTypeEnum.EFFECT_ENGINEER.equals(role.getType()) && !RoleTypeEnum.ASSISTANT_ENGINEER.equals(role.getType())) {
                         throw ExceptionResultEnum.ERROR.exception(String.format("认证角色类型为[%s]不属于[%s]或[%s]",
                                 role.getType().getDesc(),
                                 RoleTypeEnum.EFFECT_ENGINEER.getDesc(),
@@ -142,7 +142,7 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
                         throw ExceptionResultEnum.ERROR.exception("所选用户不包含认证角色[" + role.getType().getDesc() + "]");
                     }
                     TBUserArchives tbUserArchives = tbUserArchivesService.findByUserId(userId);
-                    if (UserArchivesStatusEnum.FREE.equals(tbUserArchives.getStatus())) {
+                    if (!UserArchivesStatusEnum.FREE.equals(tbUserArchives.getStatus())) {
                         throw ExceptionResultEnum.ERROR.exception("不能分配非空闲状态的用户");
                     }
                     tbUserArchives.setStatus(UserArchivesStatusEnum.NON_EXECUTION_SOP);
@@ -370,6 +370,16 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
         }
     }
 
+    @Override
+    public void publishSop(String crmNo) {
+        // TODO: 2023/8/21 crm流程发布
+    }
+
+    @Override
+    public void unPublishSop(String crmNo) {
+        // TODO: 2023/8/21 crm流程撤销发布
+    }
+
     /**
      * 处理临时新增的分配名单
      *

+ 60 - 18
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesServiceImpl.java

@@ -20,12 +20,10 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.Duration;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -52,7 +50,7 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
     private TBCrmService tbCrmService;
 
     @Override
-    public IPage<UserArchivesResult> findUserArchivesPage(String city, Long supplierId, String archivesName, RoleTypeEnum roleType, Boolean authenticationStatus, Long archivesTimeStart, Long archivesTimeEnd, Integer remainValidDay, Integer pageNumber, Integer pageSize) {
+    public IPage<UserArchivesResult> findUserArchivesPage(String city, Long supplierId, String archivesName, RoleTypeEnum roleType, Boolean authenticationStatus, Long archivesTimeStart, Long archivesTimeEnd, Integer remainValidDay, Integer pageNumber, Integer pageSize) throws ParseException {
         if (city != null && city.length() > 0) {
             city = SystemConstant.translateSpecificSign(city);
         }
@@ -65,8 +63,12 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
         authRole.add(RoleTypeEnum.REGION_COORDINATOR);
         authRole.add(RoleTypeEnum.ASSISTANT_ENGINEER);
 
-        Long remainValidTime = SystemConstant.processMiniutePlus(Duration.ofDays(remainValidDay));
-        IPage<UserArchivesResult> page = this.baseMapper.findUserArchivesPage(new Page<>(pageNumber, pageSize), city, supplierId, archivesName, roleType, authenticationStatus, archivesTimeStart, archivesTimeEnd, remainValidTime, System.currentTimeMillis());
+        Long remainValidTime = null;
+        if (remainValidDay != null && remainValidDay > 0) {
+            remainValidTime = SystemConstant.processMiniutePlus(Duration.ofDays(remainValidDay));
+        }
+        Long currentTime = System.currentTimeMillis();
+        IPage<UserArchivesResult> page = this.baseMapper.findUserArchivesPage(new Page<>(pageNumber, pageSize), city, supplierId, archivesName, roleType, authenticationStatus, archivesTimeStart, archivesTimeEnd, remainValidTime, currentTime);
         for (UserArchivesResult record : page.getRecords()) {
             List<RoleTypeEnum> roleTypeEnumList = new ArrayList<>();
             Long userId = record.getUserId();
@@ -79,10 +81,34 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
                 }
             }
             record.setRoleTypeList(roleTypeEnumList);
+            record.setAge(this.getAgeByIdentity(record.getIdentity()));
+            record.setAuthenticationStatus(record.getAuthenticationValidTime() != null && record.getAuthenticationValidTime() > currentTime);
         }
         return page;
     }
 
+    /**
+     * 根据身份证号解析年龄
+     *
+     * @param identity identity
+     * @return 年龄
+     * @throws ParseException 异常
+     */
+    private Integer getAgeByIdentity(String identity) throws ParseException {
+        Calendar calendar = Calendar.getInstance();
+        int currentYear = calendar.get(Calendar.YEAR);
+        // 提取身份证号中的出生日期
+        String birthDateStr = identity.substring(6, 14);
+        // 将出生日期字符串转换为Date类型
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
+        Date birthDate = dateFormat.parse(birthDateStr);
+        // 计算年龄
+        calendar.setTime(birthDate);
+        int birthYear = calendar.get(Calendar.YEAR);
+        // 打印年龄
+        return currentYear - birthYear;
+    }
+
     @Transactional
     @Override
     public Long editUserArchives(UserArchivesParam userArchivesParam, SysUser requestUser) {
@@ -212,7 +238,6 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
         } else {
             sysUser.setLoginName(name);
             sysUser.setRealName(name);
-            sysUser.setPasswordInfo(sysUser.getMobileNumber());
         }
         sysUser.setMobileNumber(mobileNumber);
         sysUser.setGender(gender);
@@ -223,11 +248,22 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
     }
 
     @Override
-    public UserArchivesSubTotalResult findUserArchivesSubTotal() {
+    public UserArchivesSubTotalResult findUserArchivesSubTotal(String city, Long supplierId, String archivesName, RoleTypeEnum roleType, Boolean authenticationStatus, Long archivesTimeStart, Long archivesTimeEnd, Integer remainValidDay) {
         UserArchivesSubTotalResult result = new UserArchivesSubTotalResult();
-        List<UserArchivesResult> userArchivesResultList = this.baseMapper.findSubTotal();
+        if (city != null && city.length() > 0) {
+            city = SystemConstant.translateSpecificSign(city);
+        }
+        if (archivesName != null && archivesName.length() > 0) {
+            archivesName = SystemConstant.translateSpecificSign(archivesName);
+        }
+
+        Long remainValidTime = null;
+        if (remainValidDay != null && remainValidDay > 0) {
+            remainValidTime = SystemConstant.processMiniutePlus(Duration.ofDays(remainValidDay));
+        }
+        Long currentTime = System.currentTimeMillis();
+        List<UserArchivesResult> userArchivesResultList = this.baseMapper.findUserArchivesList(city, supplierId, archivesName, roleType, authenticationStatus, archivesTimeStart, archivesTimeEnd, remainValidTime, currentTime);
         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)
@@ -241,25 +277,28 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
 
             List<Long> userIdList = validList.stream().map(UserArchivesResult::getUserId).distinct().collect(Collectors.toList());
             List<SysUser> effectEngineer = sysUserService.findUserListByRoleType(RoleTypeEnum.EFFECT_ENGINEER);
+            Integer effectEngineerCount = 0;
             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);
+                effectEngineerCount = (int) userIdList.stream().filter(effectEngineerIdList::contains).count();
             }
+            result.setEffectEngineerCount(effectEngineerCount);
 
             List<SysUser> regionCoordinator = sysUserService.findUserListByRoleType(RoleTypeEnum.REGION_COORDINATOR);
+            Integer regionCoordinatorCount = 0;
             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);
+                regionCoordinatorCount = (int) userIdList.stream().filter(regionCoordinatorIdList::contains).count();
             }
+            result.setRegionCoordinatorCount(regionCoordinatorCount);
 
             List<SysUser> assistantEngineer = sysUserService.findUserListByRoleType(RoleTypeEnum.ASSISTANT_ENGINEER);
+            Integer assistantEngineerCount = 0;
             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);
+                assistantEngineerCount = (int) userIdList.stream().filter(assistantEngineerIdList::contains).count();
             }
+            result.setAssistantEngineerCount(assistantEngineerCount);
         }
         return result;
     }
@@ -272,7 +311,10 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
         if (archivesName != null && archivesName.length() > 0) {
             archivesName = SystemConstant.translateSpecificSign(archivesName);
         }
-        Long remainValidTime = SystemConstant.processMiniutePlus(Duration.ofDays(remainValidDay));
+        Long remainValidTime = null;
+        if (remainValidDay != null && remainValidDay > 0) {
+            remainValidTime = SystemConstant.processMiniutePlus(Duration.ofDays(remainValidDay));
+        }
         List<UserArchivesImportDto> userArchivesImportDtoList = this.baseMapper.findExportData(city, supplierId, archivesName, roleType, authenticationStatus,
                 archivesTimeStart, archivesTimeEnd, remainValidTime, System.currentTimeMillis());
 

+ 7 - 2
sop-business/src/main/java/com/qmth/sop/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -70,6 +70,8 @@ public class TaskLogicServiceImpl implements TaskLogicService {
     private SysRoleService sysRoleService;
     @Resource
     private TBUserArchivesService tbUserArchivesService;
+    @Resource
+    private SequenceService sequenceService;
 
     /**
      * 处理导入人员档案数据
@@ -131,7 +133,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                 for (UserArchivesImportDto userArchivesImportDto : userArchivesImportDtoList) {
                     UserArchivesParam userArchivesParam = new UserArchivesParam();
                     // TODO: 2023/8/15 临时生成编号方法
-                    userArchivesParam.setCode(String.valueOf(SystemConstant.getDbUuid()));
+
                     userArchivesParam.setName(userArchivesImportDto.getName());
                     userArchivesParam.setProvince(userArchivesImportDto.getProvince());
                     userArchivesParam.setCity(userArchivesImportDto.getCity());
@@ -145,6 +147,9 @@ public class TaskLogicServiceImpl implements TaskLogicService {
                     } else if (tbUserArchivesList.size() == 1) {
                         // 身份证相同则编辑用户
                         userArchivesParam.setId(tbUserArchivesList.get(0).getId());
+                        userArchivesParam.setCode(tbUserArchivesList.get(0).getCode());
+                    } else {
+                        userArchivesParam.setCode(SequenceEnum.USER_ARCHIVES_CODE.getMark() + sequenceService.selectNextVal(SequenceEnum.USER_ARCHIVES_CODE.getCode()));
                     }
                     userArchivesParam.setEducation(EducationEnum.convertTitleToEnum(userArchivesImportDto.getEducation()));
                     userArchivesParam.setMobileNumber(userArchivesImportDto.getMobileNumber());
@@ -172,7 +177,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
 
                     String authenticationValidTimeStr = userArchivesImportDto.getAuthenticationValidTimeStr();
                     Long authenticationValidTime = DateDisposeUtils.parseDate(authenticationValidTimeStr).getTime();
-                    userArchivesParam.setAuthenticationTime(authenticationValidTime);
+                    userArchivesParam.setAuthenticationValidTime(authenticationValidTime);
                     userArchivesParam.setRemark(userArchivesImportDto.getRemark());
                     tbUserArchivesService.editUserArchives(userArchivesParam, requestUser);
                 }

+ 46 - 1
sop-business/src/main/resources/db/log/caozixuan_update_log.sql

@@ -81,4 +81,49 @@ ALTER TABLE t_b_crm
 ALTER TABLE t_b_user_archives
     ADD COLUMN status VARCHAR(20) NOT NULL COMMENT '人力资源状态(FREE(\"空闲\"),NON_EXECUTION_SOP(\"未执行SOP\"),EXECUTION_SOP(\"执行SOP\");)' AFTER base_photo_path;
 ALTER TABLE t_b_user_archives_allocation
-    ADD COLUMN archives_id BIGINT NOT NULL COMMENT '人员档案id' AFTER role_id;
+    ADD COLUMN archives_id BIGINT NOT NULL COMMENT '人员档案id' AFTER role_id;
+
+-- 2023/08/21
+DELETE FROM sys_privilege WHERE (id = '70');
+DELETE FROM sys_privilege WHERE (id = '71');
+
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2016', '人员档案管理-分页查询', '/api/admin/user/archives/page', 'URL', '33', '1', 'AUTH', '1', '1', '0');
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2017', '人员档案管理-小计', '/api/admin/user/archives/sub_total', 'URL', '33', '2', 'AUTH', '1', '1', '0');
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2018', '人员档案管理-编辑', '/api/admin/user/archives/edit', 'URL', '33', '3', 'AUTH', '1', '1', '0');
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2019', '人员档案管理-导入', '/api/admin/user/archives/import', 'URL', '33', '4', 'AUTH', '1', '1', '0');
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2020', '人员档案管理-导出', '/api/admin/user/archives/export', 'URL', '33', '5', 'AUTH', '1', '1', '0');
+
+UPDATE sys_privilege SET related = '2016,2017' WHERE (id = '153');
+UPDATE sys_privilege SET related = '2018' WHERE (id = '154');
+UPDATE sys_privilege SET related = '2019' WHERE (id = '155');
+UPDATE sys_privilege SET related = '2016,2017' WHERE (id = '156');
+UPDATE sys_privilege SET related = '2016,2017' WHERE (id = '157');
+UPDATE sys_privilege SET related = '2020' WHERE (id = '158');
+UPDATE sys_privilege SET related = '2018' WHERE (id = '160');
+
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2021', '人员调配管理-分页查询', '/api/admin/user/archives/allocation/page', 'URL', '34', '1', 'AUTH', '1', '1', '0');
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2022', '人员调配管理-小计查询', '/api/admin/user/archives/allocation/sub_total', 'URL', '34', '2', 'AUTH', '1', '1', '0');
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2023', '人员调配管理-根据派单号查询派单分配信息', '/api/admin/user/archives/allocation/detail_by_crm_no', 'URL', '34', '3', 'AUTH', '1', '1', '0');
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2024', '人员调配管理-调配', '/api/admin/user/archives/allocation/edit', 'URL', '34', '4', 'AUTH', '1', '1', '0');
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2025', '人员调配管理—自动调配', '/api/admin/user/archives/allocation/auto_edit', 'URL', '34', '5', 'AUTH', '1', '1', '0');
+
+UPDATE sys_privilege SET related = '2021,2022,2023' WHERE (id = '161');
+UPDATE sys_privilege SET related = '2021,2022' WHERE (id = '162');
+UPDATE sys_privilege SET related = '2021,2022' WHERE (id = '163');
+UPDATE sys_privilege SET related = '2024' WHERE (id = '164');
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, related, enable, default_auth, front_display) VALUES ('2026', '批量调配', 'AllocateBatch', 'BUTTON', '34', '4', 'AUTH', '2025', '1', '0', '1');
+
+ALTER TABLE t_b_user_archives
+    CHANGE COLUMN base_photo_path base_photo_path VARCHAR(500) NULL COMMENT '底照保存地址' ;
+
+INSERT INTO sequence (name, current_value, increment) VALUES ('userArchivesCode', '0', '1');
+
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2027', '人员档案管理-生成编号', '/api/admin/user/archives/create_code', 'URL', '33', '6', 'AUTH', '1', '1', '0');
+UPDATE sys_privilege SET related = '2018,2027' WHERE (id = '154');
+
+UPDATE sys_privilege SET parent_id = '64', sequence = '27', property = 'SYS' WHERE (id = '267');
+
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2028', '人员调配管理-发布', '/api/admin/user/archives/allocation/publish', 'URL', '34', '6', 'AUTH', '1', '1', '0');
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2029', '人员调配管理-撤销发布', '/api/admin/user/archives/allocation/un_publish', 'URL', '34', '7', 'AUTH', '1', '1', '0');
+UPDATE sys_privilege SET related = '2028' WHERE (id = '165');
+UPDATE sys_privilege SET related = '2029' WHERE (id = '166');

+ 2 - 2
sop-business/src/main/resources/mapper/TBUserArchivesAllocationMapper.xml

@@ -57,7 +57,7 @@
                                     MAX(IF(region_user_id IS NULL, 0, 1)) AS reality,
                                     MAX(IF(sop_no IS NULL, FALSE, TRUE)) AS publish
                                 FROM
-                                    t_b_user_archives_allocation) coordinatorR ON coordinatorR.crm_no = tbc.crm_no
+                                    t_b_user_archives_allocation GROUP BY crm_no) coordinatorR ON coordinatorR.crm_no = tbc.crm_no
                      LEFT JOIN (SELECT
                                     tbuaa.crm_no, COUNT(*) AS reality
                                 FROM
@@ -152,7 +152,7 @@
                                     MAX(IF(region_user_id IS NULL, 0, 1)) AS reality,
                                     MAX(IF(sop_no IS NULL, FALSE, TRUE)) AS publish
                                 FROM
-                                    t_b_user_archives_allocation) coordinatorR ON coordinatorR.crm_no = tbc.crm_no
+                                    t_b_user_archives_allocation GROUP BY crm_no) coordinatorR ON coordinatorR.crm_no = tbc.crm_no
                      LEFT JOIN (SELECT
                                     tbuaa.crm_no, COUNT(*) AS reality
                                 FROM

+ 79 - 6
sop-business/src/main/resources/mapper/TBUserArchivesMapper.xml

@@ -26,7 +26,7 @@
         FROM
             t_b_user_archives tbua
                 LEFT JOIN
-            t_b_user_archives_supplier tbuas ON tbua.id = tbuas.supplier_id
+            t_b_user_archives_supplier tbuas ON tbua.id = tbuas.user_archives_id
                 LEFT JOIN
             sys_supplier ss ON ss.id = tbuas.supplier_id
                 LEFT JOIN
@@ -81,7 +81,7 @@
         FROM
             t_b_user_archives tbua
                 LEFT JOIN
-            t_b_user_archives_supplier tbuas ON tbua.id = tbuas.supplier_id
+            t_b_user_archives_supplier tbuas ON tbua.id = tbuas.user_archives_id
                 LEFT JOIN
             sys_user su ON su.mobile_number = tbua.mobile_number
     </select>
@@ -105,7 +105,7 @@
         FROM
             t_b_user_archives tbua
         LEFT JOIN
-            t_b_user_archives_supplier tbuas ON tbua.id = tbuas.supplier_id
+            t_b_user_archives_supplier tbuas ON tbua.id = tbuas.user_archives_id
         LEFT JOIN
             sys_supplier ss ON ss.id = tbuas.supplier_id
         LEFT JOIN
@@ -176,7 +176,7 @@
         FROM
             t_b_user_archives tbua
                 LEFT JOIN
-            t_b_user_archives_supplier tbuas ON tbua.id = tbuas.supplier_id
+            t_b_user_archives_supplier tbuas ON tbua.id = tbuas.user_archives_id
                 LEFT JOIN
             sys_supplier ss ON ss.id = tbuas.supplier_id
                 LEFT JOIN
@@ -199,8 +199,10 @@
             tbua.province AS province,
             tbua.city AS city,
             tbua.gender AS gender,
-            ss.id AS suplierId,
-            ss.name AS suplierName
+            ss.id AS supplierId,
+            ss.name AS supplierName,
+            tbua.status AS archivesStatus,
+            tbuas.authentication_valid_time AS authenticationValidTime
         FROM
             t_b_user_archives tbua
                 LEFT JOIN
@@ -222,4 +224,75 @@
             </if>
         </where>
     </select>
+    <select id="findUserArchivesList" resultType="com.qmth.sop.business.bean.result.UserArchivesResult">
+        SELECT
+            tbua.id AS userArchivesId,
+            tbua.code,
+            tbua.name,
+            tbua.province,
+            tbua.city,
+            tbua.area,
+            tbua.identity,
+            tbua.gender,
+            education,
+            tbua.mobile_number AS mobileNumber,
+            tbua.email,
+            base_photo_path AS basePhotoPath,
+            tbuas.supplier_id AS supplierId,
+            ss.name AS supplierName,
+            tbuas.archives_time AS archivesTime,
+            tbuas.authentication_score AS authenticationScore,
+            tbuas.authentication_valid_time AS authenticationValidTime,
+            tbuas.remark,
+            su.id AS userId
+        FROM
+            t_b_user_archives tbua
+        LEFT JOIN
+            t_b_user_archives_supplier tbuas ON tbua.id = tbuas.user_archives_id
+        LEFT JOIN
+            sys_supplier ss ON ss.id = tbuas.supplier_id
+        LEFT JOIN
+            sys_user su ON su.mobile_number = tbua.mobile_number
+        <where>
+            <if test="city != null and city != ''">
+                AND tbua.city LIKE CONCAT('%',#{city},'%')
+            </if>
+            <if test="supplierId != null">
+                AND ss.id = #{supplierId}
+            </if>
+            <if test="archivesName != null and archivesName != ''">
+                AND tbua.name LIKE CONCAT('%',#{archivesName},'%')
+            </if>
+            <if test="archivesTimeStart != null">
+                AND tbuas.archives_time >= #{archivesTimeStart}
+            </if>
+            <if test="archivesTimeEnd != null">
+                AND #{archivesTimeEnd} >= tbuas.archives_time
+            </if>
+            <if test="remainValidTime != null">
+                AND tbuas.authentication_valid_time >= #{remainValidTime}
+            </if>
+            <if test="status != null">
+                <choose>
+                    <when test="status">
+                        AND tbuas.authentication_valid_time >= #{currentTime}
+                    </when>
+                    <otherwise>
+                        AND (tbuas.authentication_valid_time IS NULL OR tbuas.authentication_valid_time &lt;= #{currentTime})
+                    </otherwise>
+                </choose>
+            </if>
+            <if test="roleType != null">
+                AND EXISTS(SELECT
+                1
+                FROM
+                sys_user_role sur
+                LEFT JOIN
+                sys_role sr ON sur.role_id = sr.id
+                WHERE
+                su.id = sur.user_id
+                AND sr.type = #{roleType})
+            </if>
+        </where>
+    </select>
 </mapper>

+ 7 - 1
sop-common/src/main/java/com/qmth/sop/common/enums/EnumList.java

@@ -27,7 +27,13 @@ public enum EnumList {
 
     ROLE_TYPE_ENUM(RoleTypeEnum.class),
 
-    MESSAGE_TYPE_ENUM(MessageTypeEnum.class);
+    MESSAGE_TYPE_ENUM(MessageTypeEnum.class),
+
+    GENDER_ENUM(GenderEnum.class),
+
+    EDUCATION_ENUM(EducationEnum.class),
+
+    SEQUENCE_ENUM(SequenceEnum.class);
 
     private Object obj;
 

+ 34 - 0
sop-common/src/main/java/com/qmth/sop/common/enums/SequenceEnum.java

@@ -0,0 +1,34 @@
+package com.qmth.sop.common.enums;
+
+/**
+ * @Description: 序列号枚举
+ * @Author: CaoZixuan
+ * @Date: 2023-08-21
+ */
+public enum SequenceEnum {
+    USER_ARCHIVES_CODE("用户档案编号","userArchivesCode",""),
+    ;
+    private final String title;
+
+    private final String code;
+
+    private final String mark;
+
+    SequenceEnum(String title, String code, String mark) {
+        this.title = title;
+        this.code = code;
+        this.mark = mark;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public String getMark() {
+        return mark;
+    }
+}

+ 18 - 0
sop-server/src/main/java/com/qmth/sop/server/api/SysController.java

@@ -448,6 +448,24 @@ public class SysController {
                     map.put(messageTypeEnum, messageTypeEnum.getTitle());
                 }
                 break;
+            case GENDER_ENUM://性别
+                GenderEnum[] genderEnums = GenderEnum.values();
+                for (GenderEnum genderEnum : genderEnums) {
+                    map.put(genderEnum, genderEnum.getTitle());
+                }
+                break;
+            case EDUCATION_ENUM://学历
+                EducationEnum[] educationEnums = EducationEnum.values();
+                for (EducationEnum educationEnum : educationEnums) {
+                    map.put(educationEnum, educationEnum.getTitle());
+                }
+                break;
+            case SEQUENCE_ENUM://消息类型枚举
+                SequenceEnum[] sequenceEnums = SequenceEnum.values();
+                for (SequenceEnum sequenceEnum : sequenceEnums) {
+                    map.put(sequenceEnum, sequenceEnum.getTitle());
+                }
+                break;
             default:
                 break;
         }

+ 24 - 6
sop-server/src/main/java/com/qmth/sop/server/api/TBUserArchivesAllocationController.java

@@ -29,14 +29,14 @@ import javax.validation.constraints.Min;
  * @since 2023-08-01
  */
 
-@Api(tags = "人员档案Controller")
+@Api(tags = "人员调配Controller")
 @RestController
 @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_USER_ARCHIVES_ALLOCATION)
 public class TBUserArchivesAllocationController {
     @Resource
     private TBUserArchivesAllocationService tbUserArchivesAllocationService;
 
-    @ApiOperation(value = "人员档案调配管理-分页查询")
+    @ApiOperation(value = "人员调配管理-分页查询")
     @RequestMapping(value = "/page", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = UserArchivesAllocationResult.class)})
     @OperationLog
@@ -52,7 +52,7 @@ public class TBUserArchivesAllocationController {
         return ResultUtil.ok(tbUserArchivesAllocationService.findCrmAllocationPage(SystemConstant.convertIdToLong(serviceUnitId), province, city, area, customName, gap, pageNumber, pageSize));
     }
 
-    @ApiOperation(value = "人员档案调配管理-小计查询")
+    @ApiOperation(value = "人员调配管理-小计查询")
     @RequestMapping(value = "/sub_total", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = UserArchivesAllocationSubTotalResult.class)})
     @OperationLog
@@ -66,7 +66,7 @@ public class TBUserArchivesAllocationController {
         return ResultUtil.ok(tbUserArchivesAllocationService.findCrmAllocationSubTotal(SystemConstant.convertIdToLong(serviceUnitId), province, city, area, customName, gap));
     }
 
-    @ApiOperation(value = "人员档案调配管理-根据派单号查询派单分配信息")
+    @ApiOperation(value = "人员调配管理-根据派单号查询派单分配信息")
     @RequestMapping(value = "/detail_by_crm_no", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = CrmArchivesAllocationResult.class)})
     @OperationLog
@@ -74,7 +74,7 @@ public class TBUserArchivesAllocationController {
         return ResultUtil.ok(tbUserArchivesAllocationService.findAllocationByCrmNo(crmNo));
     }
 
-    @ApiOperation(value = "人员档案调配管理-调配")
+    @ApiOperation(value = "人员调配管理-调配")
     @RequestMapping(value = "/edit", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = Result.class)})
     @OperationLog
@@ -86,7 +86,7 @@ public class TBUserArchivesAllocationController {
         return ResultUtil.ok();
     }
 
-    @ApiOperation(value = "人员档案调配管理—自动调配")
+    @ApiOperation(value = "人员调配管理-自动调配")
     @RequestMapping(value = "/auto_edit", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = Result.class)})
     @OperationLog
@@ -94,4 +94,22 @@ public class TBUserArchivesAllocationController {
         tbUserArchivesAllocationService.autoEditCrmAllocationBatch(SystemConstant.convertIdToLong(serviceUnitId));
         return ResultUtil.ok();
     }
+
+    @ApiOperation(value = "人员调配管理-发布")
+    @RequestMapping(value = "/publish", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "发布成功", response = Result.class)})
+    @OperationLog
+    public Result publishCrmSop(@ApiParam(value = "派单号", required = true) @RequestParam String crmNo) {
+        tbUserArchivesAllocationService.publishSop(crmNo);
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "人员调配管理-撤销发布")
+    @RequestMapping(value = "/un_publish", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "作废成功", response = Result.class)})
+    @OperationLog
+    public Result unPublishCrmSop(@ApiParam(value = "派单号", required = true) @RequestParam String crmNo) {
+        tbUserArchivesAllocationService.unPublishSop(crmNo);
+        return ResultUtil.ok();
+    }
 }

+ 25 - 3
sop-server/src/main/java/com/qmth/sop/server/api/TBUserArchivesController.java

@@ -8,12 +8,14 @@ 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.TBTask;
+import com.qmth.sop.business.service.SequenceService;
 import com.qmth.sop.business.service.TBTaskService;
 import com.qmth.sop.business.service.TBUserArchivesService;
 import com.qmth.sop.business.templete.execute.AsyncUserArchivesExportService;
 import com.qmth.sop.business.templete.execute.AsyncUserArchivesImportService;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.RoleTypeEnum;
+import com.qmth.sop.common.enums.SequenceEnum;
 import com.qmth.sop.common.enums.TaskTypeEnum;
 import com.qmth.sop.common.util.Result;
 import com.qmth.sop.common.util.ResultUtil;
@@ -27,6 +29,7 @@ import javax.annotation.Resource;
 import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
+import java.text.ParseException;
 import java.util.Map;
 
 /**
@@ -53,6 +56,9 @@ public class TBUserArchivesController {
     @Resource
     private TBUserArchivesService tbUserArchivesService;
 
+    @Resource
+    private SequenceService sequenceService;
+
 
     @ApiOperation(value = "人员档案管理-分页查询")
     @RequestMapping(value = "/page", method = RequestMethod.POST)
@@ -67,7 +73,7 @@ public class TBUserArchivesController {
                                        @ApiParam(value = "入档时间-截止") @RequestParam(required = false) Long archivesTimeEnd,
                                        @ApiParam(value = "剩余有效天数") @RequestParam(required = false) Integer remainValidDay,
                                        @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
-                                       @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+                                       @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) throws ParseException {
 
         return ResultUtil.ok(tbUserArchivesService.findUserArchivesPage(city, SystemConstant.convertIdToLong(supplierId), archivesName,
                 roleType, authenticationStatus, archivesTimeStart, archivesTimeEnd, remainValidDay, pageNumber, pageSize));
@@ -77,8 +83,24 @@ public class TBUserArchivesController {
     @RequestMapping(value = "/sub_total", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = UserArchivesSubTotalResult.class)})
     @OperationLog
-    public Result findUserArchivesSubTotal() {
-        return ResultUtil.ok(tbUserArchivesService.findUserArchivesSubTotal());
+    public Result findUserArchivesSubTotal(@ApiParam(value = "城市") @RequestParam(required = false) String city,
+                                           @ApiParam(value = "供应商") @RequestParam(required = false) String supplierId,
+                                           @ApiParam(value = "档案名称") @RequestParam(required = false) String archivesName,
+                                           @ApiParam(value = "认证角色") @RequestParam(required = false) RoleTypeEnum roleType,
+                                           @ApiParam(value = "认证状态") @RequestParam(required = false) Boolean authenticationStatus,
+                                           @ApiParam(value = "入档时间-开始") @RequestParam(required = false) Long archivesTimeStart,
+                                           @ApiParam(value = "入档时间-截止") @RequestParam(required = false) Long archivesTimeEnd,
+                                           @ApiParam(value = "剩余有效天数") @RequestParam(required = false) Integer remainValidDay) {
+        return ResultUtil.ok(tbUserArchivesService.findUserArchivesSubTotal(city, SystemConstant.convertIdToLong(supplierId), archivesName,
+                roleType, authenticationStatus, archivesTimeStart, archivesTimeEnd, remainValidDay));
+    }
+
+    @ApiOperation(value = "人员档案管理-生成编号")
+    @RequestMapping(value = "/create_code", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    @OperationLog
+    public Result createUserArchivesCode() throws InterruptedException {
+        return ResultUtil.ok(sequenceService.selectNextVal(SequenceEnum.USER_ARCHIVES_CODE.getCode()));
     }
 
     @ApiOperation(value = "人员档案管理-编辑")

TEMPAT SAMPAH
sop-server/src/main/resources/static/user_archives.xlsx