Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/dev_v1.0.0' into dev_v1.0.0

wangliang 1 gadu atpakaļ
vecāks
revīzija
33d15df211
25 mainītis faili ar 761 papildinājumiem un 28 dzēšanām
  1. 44 0
      sop-business/src/main/java/com/qmth/sop/business/bean/params/AutoAllocationParam.java
  2. 0 2
      sop-business/src/main/java/com/qmth/sop/business/bean/params/UserArchivesParam.java
  3. 18 0
      sop-business/src/main/java/com/qmth/sop/business/bean/result/CrmArchivesAllocationResult.java
  4. 210 0
      sop-business/src/main/java/com/qmth/sop/business/bean/result/DeviceInOutResult.java
  5. 16 5
      sop-business/src/main/java/com/qmth/sop/business/bean/result/UserArchivesResult.java
  6. 35 0
      sop-business/src/main/java/com/qmth/sop/business/entity/TBDeviceInOut.java
  7. 57 2
      sop-business/src/main/java/com/qmth/sop/business/mapper/TBDeviceInOutMapper.java
  8. 3 1
      sop-business/src/main/java/com/qmth/sop/business/mapper/TBUserArchivesAllocationMapper.java
  9. 10 0
      sop-business/src/main/java/com/qmth/sop/business/service/SysRoleService.java
  10. 54 0
      sop-business/src/main/java/com/qmth/sop/business/service/TBDeviceInOutService.java
  11. 13 0
      sop-business/src/main/java/com/qmth/sop/business/service/TBDingService.java
  12. 3 2
      sop-business/src/main/java/com/qmth/sop/business/service/TBUserArchivesAllocationService.java
  13. 7 0
      sop-business/src/main/java/com/qmth/sop/business/service/TBUserArchivesService.java
  14. 18 0
      sop-business/src/main/java/com/qmth/sop/business/service/impl/SysRoleServiceImpl.java
  15. 42 1
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDeviceInOutServiceImpl.java
  16. 8 6
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesAllocationServiceImpl.java
  17. 16 7
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesServiceImpl.java
  18. 17 0
      sop-business/src/main/resources/db/log/caozixuan_update_log.sql
  19. 113 0
      sop-business/src/main/resources/mapper/TBDeviceInOutMapper.xml
  20. 7 0
      sop-business/src/main/resources/mapper/TBUserArchivesAllocationMapper.xml
  21. 1 0
      sop-business/src/main/resources/mapper/TBUserArchivesMapper.xml
  22. 22 0
      sop-common/src/main/java/com/qmth/sop/common/enums/DeviceUsageTypeEnum.java
  23. 3 0
      sop-common/src/main/java/com/qmth/sop/common/enums/EnumList.java
  24. 27 2
      sop-server/src/main/java/com/qmth/sop/server/api/TBUserArchivesAllocationController.java
  25. 17 0
      sop-server/src/main/java/com/qmth/sop/server/api/TBUserArchivesController.java

+ 44 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/params/AutoAllocationParam.java

@@ -0,0 +1,44 @@
+package com.qmth.sop.business.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Range;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @Description: 自动调配参数
+ * @Author: CaoZixuan
+ * @Date: 2023-08-23
+ */
+public class AutoAllocationParam {
+    @ApiModelProperty("服务单元Id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotNull(message = "缺少服务单元")
+    @Range(min = 1L, message = "缺少服务单元")
+    private Long serviceUnitId;
+
+    @ApiModelProperty("派单id集合")
+    @JsonSerialize(using = ToStringSerializer.class)
+    @NotEmpty(message = "缺少派单集合")
+    private List<Long> crmIdList;
+
+    public Long getServiceUnitId() {
+        return serviceUnitId;
+    }
+
+    public void setServiceUnitId(Long serviceUnitId) {
+        this.serviceUnitId = serviceUnitId;
+    }
+
+    public List<Long> getCrmIdList() {
+        return crmIdList;
+    }
+
+    public void setCrmIdList(List<Long> crmIdList) {
+        this.crmIdList = crmIdList;
+    }
+}

+ 0 - 2
sop-business/src/main/java/com/qmth/sop/business/bean/params/UserArchivesParam.java

@@ -32,8 +32,6 @@ public class UserArchivesParam {
     private String name;
 
     @ApiModelProperty(value = "国家")
-    @NotNull(message = "请输入常驻地区")
-    @NotBlank(message = "请输入常驻地区")
     private String country;
 
     @ApiModelProperty(value = "省份")

+ 18 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/CrmArchivesAllocationResult.java

@@ -1,5 +1,8 @@
 package com.qmth.sop.business.bean.result;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.sop.common.enums.RoleTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -12,15 +15,21 @@ import java.util.List;
  */
 public class CrmArchivesAllocationResult {
     @ApiModelProperty("分配角色类型")
+    @JsonIgnore
     private RoleTypeEnum type;
 
+    @ApiModelProperty("分配角色")
+    private RoleResult roleResult;
+
     @ApiModelProperty("档案id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long archivesId;
 
     @ApiModelProperty("档案名称")
     private String archiverName;
 
     @ApiModelProperty("供应商id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long supplierId;
 
     @ApiModelProperty("供应商名称")
@@ -33,6 +42,7 @@ public class CrmArchivesAllocationResult {
     private String archivesCity;
 
     @ApiModelProperty("用户id")
+    @JsonSerialize(using = ToStringSerializer.class)
     private Long userId;
 
     @ApiModelProperty("该用户认证的所有角色")
@@ -46,6 +56,14 @@ public class CrmArchivesAllocationResult {
         this.type = type;
     }
 
+    public RoleResult getRoleResult() {
+        return roleResult;
+    }
+
+    public void setRoleResult(RoleResult roleResult) {
+        this.roleResult = roleResult;
+    }
+
     public Long getArchivesId() {
         return archivesId;
     }

+ 210 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/DeviceInOutResult.java

@@ -0,0 +1,210 @@
+package com.qmth.sop.business.bean.result;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.sop.common.enums.DeviceStatusEnum;
+import com.qmth.sop.common.enums.DeviceUsageTypeEnum;
+import com.qmth.sop.common.enums.InOutTypeEnum;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 设备出入库记录查询结果
+ * @Author: CaoZixuan
+ * @Date: 2023-08-22
+ */
+public class DeviceInOutResult {
+    @ApiModelProperty("出入库记录id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long inOutId;
+    @ApiModelProperty("服务单元id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long serviceUnitId;
+    @ApiModelProperty("服务单元名称")
+    private String serviceUnitName;
+    @ApiModelProperty("用途类型")
+    private DeviceUsageTypeEnum usageType;
+
+    @ApiModelProperty("设备id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long deviceId;
+    @ApiModelProperty("设备编号")
+    private String deviceNo;
+    @ApiModelProperty("设备品牌")
+    private String deviceBrand;
+
+    @ApiModelProperty("设备运行状态")
+    private DeviceStatusEnum deviceStatus;
+
+    @ApiModelProperty("出/入库时间")
+    private Long inOutTime;
+
+    @ApiModelProperty("登记人id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long userId;
+    @ApiModelProperty("登记人名称")
+    private String userName;
+
+    @ApiModelProperty("客户id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long customId;
+    @ApiModelProperty("客户名称")
+    private String customName;
+
+    @ApiModelProperty("出库/入库")
+    private InOutTypeEnum inOutType;
+
+    @ApiModelProperty("当前地")
+    private String location;
+    @ApiModelProperty("发往地")
+    private String address;
+
+    @ApiModelProperty("供应商id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long supplierId;
+    @ApiModelProperty("供应商名称")
+    private String supplierName;
+
+    public Long getInOutId() {
+        return inOutId;
+    }
+
+    public void setInOutId(Long inOutId) {
+        this.inOutId = inOutId;
+    }
+
+    public Long getServiceUnitId() {
+        return serviceUnitId;
+    }
+
+    public void setServiceUnitId(Long serviceUnitId) {
+        this.serviceUnitId = serviceUnitId;
+    }
+
+    public String getServiceUnitName() {
+        return serviceUnitName;
+    }
+
+    public void setServiceUnitName(String serviceUnitName) {
+        this.serviceUnitName = serviceUnitName;
+    }
+
+    public DeviceUsageTypeEnum getUsageType() {
+        return usageType;
+    }
+
+    public void setUsageType(DeviceUsageTypeEnum usageType) {
+        this.usageType = usageType;
+    }
+
+    public Long getDeviceId() {
+        return deviceId;
+    }
+
+    public void setDeviceId(Long deviceId) {
+        this.deviceId = deviceId;
+    }
+
+    public String getDeviceNo() {
+        return deviceNo;
+    }
+
+    public void setDeviceNo(String deviceNo) {
+        this.deviceNo = deviceNo;
+    }
+
+    public String getDeviceBrand() {
+        return deviceBrand;
+    }
+
+    public void setDeviceBrand(String deviceBrand) {
+        this.deviceBrand = deviceBrand;
+    }
+
+    public DeviceStatusEnum getDeviceStatus() {
+        return deviceStatus;
+    }
+
+    public void setDeviceStatus(DeviceStatusEnum deviceStatus) {
+        this.deviceStatus = deviceStatus;
+    }
+
+    public Long getInOutTime() {
+        return inOutTime;
+    }
+
+    public void setInOutTime(Long inOutTime) {
+        this.inOutTime = inOutTime;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public Long getCustomId() {
+        return customId;
+    }
+
+    public void setCustomId(Long customId) {
+        this.customId = customId;
+    }
+
+    public String getCustomName() {
+        return customName;
+    }
+
+    public void setCustomName(String customName) {
+        this.customName = customName;
+    }
+
+    public InOutTypeEnum getInOutType() {
+        return inOutType;
+    }
+
+    public void setInOutType(InOutTypeEnum inOutType) {
+        this.inOutType = inOutType;
+    }
+
+    public String getLocation() {
+        return location;
+    }
+
+    public void setLocation(String location) {
+        this.location = location;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+
+    public Long getSupplierId() {
+        return supplierId;
+    }
+
+    public void setSupplierId(Long supplierId) {
+        this.supplierId = supplierId;
+    }
+
+    public String getSupplierName() {
+        return supplierName;
+    }
+
+    public void setSupplierName(String supplierName) {
+        this.supplierName = supplierName;
+    }
+}

+ 16 - 5
sop-business/src/main/java/com/qmth/sop/business/bean/result/UserArchivesResult.java

@@ -66,7 +66,10 @@ public class UserArchivesResult {
     private Long archivesTime;
 
     @ApiModelProperty(value = "认证角色集合")
-    private List<RoleTypeEnum> roleTypeList;
+    private List<RoleResult> roleInfoList;
+
+    @ApiModelProperty(value = "认证时间")
+    private Long authenticationTime;
 
     @ApiModelProperty(value = "认证成绩")
     private Double authenticationScore;
@@ -212,12 +215,20 @@ public class UserArchivesResult {
         this.archivesTime = archivesTime;
     }
 
-    public List<RoleTypeEnum> getRoleTypeList() {
-        return roleTypeList;
+    public List<RoleResult> getRoleInfoList() {
+        return roleInfoList;
+    }
+
+    public void setRoleInfoList(List<RoleResult> roleInfoList) {
+        this.roleInfoList = roleInfoList;
+    }
+
+    public Long getAuthenticationTime() {
+        return authenticationTime;
     }
 
-    public void setRoleTypeList(List<RoleTypeEnum> roleTypeList) {
-        this.roleTypeList = roleTypeList;
+    public void setAuthenticationTime(Long authenticationTime) {
+        this.authenticationTime = authenticationTime;
     }
 
     public Double getAuthenticationScore() {

+ 35 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/TBDeviceInOut.java

@@ -2,6 +2,8 @@ package com.qmth.sop.business.entity;
 
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.sop.common.enums.DeviceStatusEnum;
+import com.qmth.sop.common.enums.DeviceUsageTypeEnum;
 import com.qmth.sop.common.enums.InOutTypeEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -57,6 +59,15 @@ public class TBDeviceInOut implements Serializable {
     @ApiModelProperty(value = "发往地")
     private String address;
 
+    @ApiModelProperty(value = "运行状态,NORMAL:正常,BREAK_DOWN:故障")
+    private DeviceStatusEnum status;
+
+    @ApiModelProperty(value = "用途类型(项目、其他)")
+    private DeviceUsageTypeEnum usageType;
+
+    @ApiModelProperty(value = "快递单照片")
+    private String basePhotoPath;
+
     @ApiModelProperty(value = "创建人id")
     @JsonSerialize(using = ToStringSerializer.class)
     private Long createId;
@@ -152,6 +163,30 @@ public class TBDeviceInOut implements Serializable {
         this.address = address;
     }
 
+    public DeviceStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(DeviceStatusEnum status) {
+        this.status = status;
+    }
+
+    public DeviceUsageTypeEnum getUsageType() {
+        return usageType;
+    }
+
+    public void setUsageType(DeviceUsageTypeEnum usageType) {
+        this.usageType = usageType;
+    }
+
+    public String getBasePhotoPath() {
+        return basePhotoPath;
+    }
+
+    public void setBasePhotoPath(String basePhotoPath) {
+        this.basePhotoPath = basePhotoPath;
+    }
+
     public Long getCreateId() {
         return createId;
     }

+ 57 - 2
sop-business/src/main/java/com/qmth/sop/business/mapper/TBDeviceInOutMapper.java

@@ -1,7 +1,14 @@
 package com.qmth.sop.business.mapper;
 
-import com.qmth.sop.business.entity.TBDeviceInOut;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.sop.business.bean.result.DeviceInOutResult;
+import com.qmth.sop.business.entity.TBDeviceInOut;
+import com.qmth.sop.common.enums.DeviceStatusEnum;
+import com.qmth.sop.common.enums.DeviceUsageTypeEnum;
+import com.qmth.sop.common.enums.InOutTypeEnum;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -12,5 +19,53 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2023-08-01
  */
 public interface TBDeviceInOutMapper extends BaseMapper<TBDeviceInOut> {
+    /**
+     * sop管理 - 设备出入库登记查询
+     *
+     * @param iPage          分页参数
+     * @param serviceUnitId  服务单元id
+     * @param usageType      用途类型
+     * @param userId         登记人
+     * @param deviceStatus   运行状态
+     * @param inOutTimeStart 出入库时间 - 开始
+     * @param inOutTimeEnd   出入库时间 - 结束
+     * @param deviceNo       设备编号
+     * @param customName     客户名称
+     * @param location       当前地
+     * @param address        发往地
+     * @return 分页结果
+     */
+    IPage<DeviceInOutResult> findDeviceInOutPageBySop(@Param("iPage") Page<DeviceInOutResult> iPage,
+                                                      @Param("serviceUnitId") Long serviceUnitId,
+                                                      @Param("usageType") DeviceUsageTypeEnum usageType,
+                                                      @Param("userId") Long userId,
+                                                      @Param("deviceStatus") DeviceStatusEnum deviceStatus,
+                                                      @Param("inOutTimeStart") Long inOutTimeStart,
+                                                      @Param("inOutTimeEnd") Long inOutTimeEnd,
+                                                      @Param("deviceNo") String deviceNo,
+                                                      @Param("customName") String customName,
+                                                      @Param("location") String location,
+                                                      @Param("address") String address);
 
-}
+    /**
+     * 资源保障-设备保障-出入库登记查询
+     *
+     * @param iPage          分页参数
+     * @param serviceUnitId  服务单元id
+     * @param inOutType      出入库类型
+     * @param deviceNo       设备编号
+     * @param inOutTimeStart 出入库时间 - 开始
+     * @param inOutTimeEnd   出入库时间 - 结束
+     * @param supplierId     供应商id
+     * @param customName     客户名称
+     * @return 分页结果
+     */
+    IPage<DeviceInOutResult> findDeviceInOutPageBySource(@Param("iPage") Page<DeviceInOutResult> iPage,
+                                                         @Param("serviceUnitId") Long serviceUnitId,
+                                                         @Param("inOutType") InOutTypeEnum inOutType,
+                                                         @Param("deviceNo") String deviceNo,
+                                                         @Param("inOutTimeStart") Long inOutTimeStart,
+                                                         @Param("inOutTimeEnd") Long inOutTimeEnd,
+                                                         @Param("supplierId") Long supplierId,
+                                                         @Param("customName") String customName);
+}

+ 3 - 1
sop-business/src/main/java/com/qmth/sop/business/mapper/TBUserArchivesAllocationMapper.java

@@ -49,6 +49,7 @@ public interface TBUserArchivesAllocationMapper extends BaseMapper<TBUserArchive
      * @param area          县
      * @param customName    客户名称
      * @param gap           差额
+     * @param crmIdList     派单id集合
      * @return 查询结果
      */
     List<UserArchivesAllocationResult> findCrmAllocationSubTotal(@Param("serviceUnitId") Long serviceUnitId,
@@ -56,7 +57,8 @@ public interface TBUserArchivesAllocationMapper extends BaseMapper<TBUserArchive
                                                                  @Param("city") String city,
                                                                  @Param("area") String area,
                                                                  @Param("customName") String customName,
-                                                                 @Param("gap") Integer gap);
+                                                                 @Param("gap") Integer gap,
+                                                                 @Param("crmIdList") List<Long> crmIdList);
 
     List<CrmArchivesAllocationResult> findAllocationByCrmNo(@Param("crmNo") String crmNo);
 }

+ 10 - 0
sop-business/src/main/java/com/qmth/sop/business/service/SysRoleService.java

@@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.sop.business.bean.dto.RoleDto;
 import com.qmth.sop.business.bean.params.SysRolePrivilegeParam;
+import com.qmth.sop.business.bean.result.RoleResult;
 import com.qmth.sop.business.entity.SysRole;
+import com.qmth.sop.common.enums.RoleTypeEnum;
 
 import java.security.NoSuchAlgorithmException;
 import java.util.List;
@@ -54,4 +56,12 @@ public interface SysRoleService extends IService<SysRole> {
      * @throws NoSuchAlgorithmException
      */
     Boolean deleteRole(Long roleId) throws NoSuchAlgorithmException;
+
+    /**
+     * 根据外包认证角色类型获取角色信息
+     *
+     * @param roleTypeEnum 外包角色枚举
+     * @return 角色
+     */
+    RoleResult findRoleInfoByArchivesType(RoleTypeEnum roleTypeEnum);
 }

+ 54 - 0
sop-business/src/main/java/com/qmth/sop/business/service/TBDeviceInOutService.java

@@ -1,7 +1,12 @@
 package com.qmth.sop.business.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.qmth.sop.business.bean.result.DeviceInOutResult;
 import com.qmth.sop.business.entity.TBDeviceInOut;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.sop.common.enums.DeviceStatusEnum;
+import com.qmth.sop.common.enums.DeviceUsageTypeEnum;
+import com.qmth.sop.common.enums.InOutTypeEnum;
 
 /**
  * <p>
@@ -12,5 +17,54 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @since 2023-08-01
  */
 public interface TBDeviceInOutService extends IService<TBDeviceInOut> {
+    // -- 设备出入库登记 sop部分
 
+    /**
+     * sop管理 - 设备出入库登记查询
+     *
+     * @param serviceUnitId  服务单元id
+     * @param usageType      用途类型
+     * @param userId         登记人
+     * @param deviceStatus   运行状态
+     * @param inOutTimeStart 出入库时间 - 开始
+     * @param inOutTimeEnd   出入库时间 - 结束
+     * @param deviceNo       设备编号
+     * @param customName     客户名称
+     * @param location       当前地
+     * @param address        发往地
+     * @param pageNumber     分页页数
+     * @param pageSize       分页容量
+     * @return 分页结果
+     */
+    IPage<DeviceInOutResult> findDeviceInOutPageBySop(Long serviceUnitId, DeviceUsageTypeEnum usageType, Long userId,
+                                                      DeviceStatusEnum deviceStatus, Long inOutTimeStart, Long inOutTimeEnd,
+                                                      String deviceNo, String customName, String location, String address,
+                                                      Integer pageNumber, Integer pageSize);
+
+    Object findDeviceInInfo();
+
+    Object findDeviceOutInfo();
+
+    void deviceInOutSubmit();
+
+
+    // -- 出入库登记查询 资源保障部分
+
+    /**
+     * 资源保障-设备保障-出入库登记查询
+     *
+     * @param serviceUnitId  服务单元id
+     * @param inOutType      出入库类型
+     * @param deviceNo       设备编号
+     * @param inOutTimeStart 出入库时间 - 开始
+     * @param inOutTimeEnd   出入库时间 - 结束
+     * @param supplierId     供应商id
+     * @param customName     客户名称
+     * @param pageNumber     分页页数
+     * @param pageSize       分页容量
+     * @return 分页结果
+     */
+    IPage<DeviceInOutResult> findDeviceInOutPageBySource(Long serviceUnitId, InOutTypeEnum inOutType, String deviceNo,
+                                                         Long inOutTimeStart, Long inOutTimeEnd, Long supplierId, String customName,
+                                                         Integer pageNumber, Integer pageSize);
 }

+ 13 - 0
sop-business/src/main/java/com/qmth/sop/business/service/TBDingService.java

@@ -40,4 +40,17 @@ public interface TBDingService extends IService<TBDing>{
     TBDingAttendanceCountResult attendanceCount(Long serviceId, String userName, Long startTime, Long endTime, Long supplierId, String custom, String sopNo);
 
     List<TBDingAttendanceResult> attendanceQuery(Long serviceId, String userName, Long startTime, Long endTime, Long supplierId, String custom, String sopNo, InOutTypeEnum type, DingResultEnum status);
+
+
+//    // -- 考勤提交部分接口 --
+//    IPage<Object> findDingSubmitPage();
+//
+//    Object findDingSubmitSubTotal();
+//
+//    Object findDingSubmitUserDetail();
+//
+//    void submitDing();
+
+
+
 }

+ 3 - 2
sop-business/src/main/java/com/qmth/sop/business/service/TBUserArchivesAllocationService.java

@@ -2,6 +2,7 @@ package com.qmth.sop.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.sop.business.bean.params.AutoAllocationParam;
 import com.qmth.sop.business.bean.params.UserArchivesAllocationParam;
 import com.qmth.sop.business.bean.result.CrmArchivesAllocationResult;
 import com.qmth.sop.business.bean.result.UserArchivesAllocationResult;
@@ -67,9 +68,9 @@ public interface TBUserArchivesAllocationService extends IService<TBUserArchives
     /**
      * 自动批量调配派单和人员
      *
-     * @param serviceUnitId 服务单元id
+     * @param autoAllocationParam 自动调配参数
      */
-    void autoEditCrmAllocationBatch(Long serviceUnitId);
+    void autoEditCrmAllocationBatch(AutoAllocationParam autoAllocationParam);
 
     /**
      * crm派单 sop流程发布

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

@@ -77,6 +77,13 @@ public interface TBUserArchivesService extends IService<TBUserArchives> {
     List<UserArchivesImportDto> findExportData(String city, Long supplierId, String archivesName, RoleTypeEnum roleType, Boolean authenticationStatus,
                                                Long archivesTimeStart, Long archivesTimeEnd, Integer remainValidDay);
 
+    /**
+     * 作废人员档案
+     *
+     * @param userArchivesIdList 人员档案id集合
+     */
+    void cancelUserArchives(List<Long> userArchivesIdList);
+
     /**
      * 根据用户id查询档案信息
      *

+ 18 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysRoleServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.sop.business.bean.dto.RoleDto;
 import com.qmth.sop.business.bean.params.SysRolePrivilegeParam;
+import com.qmth.sop.business.bean.result.RoleResult;
 import com.qmth.sop.business.cache.CommonCacheService;
 import com.qmth.sop.business.entity.SysRole;
 import com.qmth.sop.business.entity.SysRolePrivilege;
@@ -18,6 +19,7 @@ import com.qmth.sop.business.service.SysUserRoleService;
 import com.qmth.sop.business.service.SysUserService;
 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.ResultUtil;
 import com.qmth.sop.common.util.ServletUtil;
 import org.springframework.dao.DuplicateKeyException;
@@ -164,4 +166,20 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
         }
         return success;
     }
+
+    @Override
+    public RoleResult findRoleInfoByArchivesType(RoleTypeEnum roleTypeEnum) {
+        RoleResult result = new RoleResult();
+        if (RoleTypeEnum.REGION_COORDINATOR.equals(roleTypeEnum) || RoleTypeEnum.ASSISTANT_ENGINEER.equals(roleTypeEnum) || RoleTypeEnum.EFFECT_ENGINEER.equals(roleTypeEnum)) {
+            List<SysRole> sysRoleList = this.list(new QueryWrapper<SysRole>().lambda().eq(SysRole::getType, roleTypeEnum));
+            if (sysRoleList.size() != 1) {
+                throw ExceptionResultEnum.ERROR.exception("角色类型对应的角色异常[" + roleTypeEnum + "]");
+            }
+            SysRole sysRole = sysRoleList.get(0);
+            result.setRoleId(sysRole.getId());
+            result.setRoleType(sysRole.getType().name());
+            result.setRoleName(sysRole.getName());
+        }
+        return result;
+    }
 }

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

@@ -1,9 +1,16 @@
 package com.qmth.sop.business.service.impl;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.sop.business.bean.result.DeviceInOutResult;
 import com.qmth.sop.business.entity.TBDeviceInOut;
 import com.qmth.sop.business.mapper.TBDeviceInOutMapper;
 import com.qmth.sop.business.service.TBDeviceInOutService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.sop.common.contant.SystemConstant;
+import com.qmth.sop.common.enums.DeviceStatusEnum;
+import com.qmth.sop.common.enums.DeviceUsageTypeEnum;
+import com.qmth.sop.common.enums.InOutTypeEnum;
 import org.springframework.stereotype.Service;
 
 /**
@@ -17,4 +24,38 @@ import org.springframework.stereotype.Service;
 @Service
 public class TBDeviceInOutServiceImpl extends ServiceImpl<TBDeviceInOutMapper, TBDeviceInOut> implements TBDeviceInOutService {
 
+    @Override
+    public IPage<DeviceInOutResult> findDeviceInOutPageBySop(Long serviceUnitId, DeviceUsageTypeEnum usageType, Long userId, DeviceStatusEnum deviceStatus, Long inOutTimeStart, Long inOutTimeEnd, String deviceNo, String customName, String location, String address, Integer pageNumber, Integer pageSize) {
+        deviceNo = SystemConstant.translateSpecificSign(deviceNo);
+        customName = SystemConstant.translateSpecificSign(customName);
+        location = SystemConstant.translateSpecificSign(location);
+        address = SystemConstant.translateSpecificSign(address);
+
+        return this.baseMapper.findDeviceInOutPageBySop(new Page<>(pageNumber, pageSize), serviceUnitId, usageType,
+                userId, deviceStatus, inOutTimeStart, inOutTimeEnd, deviceNo, customName, location, address);
+    }
+
+    @Override
+    public Object findDeviceInInfo() {
+        return null;
+    }
+
+    @Override
+    public Object findDeviceOutInfo() {
+        return null;
+    }
+
+    @Override
+    public void deviceInOutSubmit() {
+
+    }
+
+    @Override
+    public IPage<DeviceInOutResult> findDeviceInOutPageBySource(Long serviceUnitId, InOutTypeEnum inOutType, String deviceNo, Long inOutTimeStart, Long inOutTimeEnd, Long supplierId, String customName, Integer pageNumber, Integer pageSize) {
+        deviceNo = SystemConstant.translateSpecificSign(deviceNo);
+        customName = SystemConstant.translateSpecificSign(customName);
+
+        return this.baseMapper.findDeviceInOutPageBySource(new Page<>(pageNumber, pageSize), serviceUnitId, inOutType,
+                deviceNo, inOutTimeStart, inOutTimeEnd, supplierId, customName);
+    }
 }

+ 8 - 6
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesAllocationServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.sop.business.bean.params.AllocationParam;
+import com.qmth.sop.business.bean.params.AutoAllocationParam;
 import com.qmth.sop.business.bean.params.UserArchivesAllocationParam;
 import com.qmth.sop.business.bean.result.*;
 import com.qmth.sop.business.entity.*;
@@ -60,7 +61,7 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
         city = SystemConstant.translateSpecificSign(city);
         area = SystemConstant.translateSpecificSign(area);
         customName = SystemConstant.translateSpecificSign(customName);
-        List<UserArchivesAllocationResult> list = this.baseMapper.findCrmAllocationSubTotal(serviceUnitId, province, city, area, customName, gap);
+        List<UserArchivesAllocationResult> list = this.baseMapper.findCrmAllocationSubTotal(serviceUnitId, province, city, area, customName, gap,null);
         Integer publishedCrmCount = Math.toIntExact(list.stream().filter(UserArchivesAllocationResult::getPublish).count());
         Integer totalCrmCount = list.size();
 
@@ -197,13 +198,15 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
             region.setUserId(userArchivesResult.getUserId());
             list.add(region);
         }
-        return list;
+        return list.stream().peek(e -> e.setRoleResult(sysRoleService.findRoleInfoByArchivesType(e.getType()))).collect(Collectors.toList());
     }
 
     @Transactional
     @Override
-    public void autoEditCrmAllocationBatch(Long serviceUnitId) {
-        List<UserArchivesAllocationResult> crmSourceList = this.baseMapper.findCrmAllocationSubTotal(serviceUnitId, null, null, null, null, null);
+    public void autoEditCrmAllocationBatch(AutoAllocationParam autoAllocationParam) {
+        Long serviceUnitId = autoAllocationParam.getServiceUnitId();
+        List<Long> crmIdList = autoAllocationParam.getCrmIdList();
+        List<UserArchivesAllocationResult> crmSourceList = this.baseMapper.findCrmAllocationSubTotal(serviceUnitId, null, null, null, null, null,crmIdList);
         // crm按照差额倒序
         crmSourceList = crmSourceList.stream().filter(e -> e.getUnDistributed() > 0)
                 .sorted(Comparator.comparing(UserArchivesAllocationResult::getUnDistributed).reversed())
@@ -342,7 +345,7 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
                     if (supplierIdList.size() == 1) {
                         Long supplierId = supplierIdList.get(0);
                         List<ArchivesSourceResult> coordinator = coordinatorFree.stream()
-                                .filter(e -> supplierId.equals(e.getSupplierId()) && e.getRemainCount() > 0)
+                                .filter(e -> supplierId.equals(e.getSupplierId()))
                                 .sorted(Comparator.comparing(ArchivesSourceResult::getRemainCount).reversed())
                                 .collect(Collectors.toList());
                         if (CollectionUtils.isNotEmpty(coordinator)) {
@@ -352,7 +355,6 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
                 } else {
                     // 不存在实施工程师
                     List<ArchivesSourceResult> coordinator = coordinatorFree.stream()
-                            .filter(e -> e.getRemainCount() > 0)
                             .sorted(Comparator.comparing(ArchivesSourceResult::getRemainCount).reversed())
                             .collect(Collectors.toList());
                     if (CollectionUtils.isNotEmpty(coordinator)) {

+ 16 - 7
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesServiceImpl.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.sop.business.bean.dto.UserArchivesImportDto;
 import com.qmth.sop.business.bean.params.UserArchivesParam;
 import com.qmth.sop.business.bean.result.ArchivesSourceResult;
+import com.qmth.sop.business.bean.result.RoleResult;
 import com.qmth.sop.business.bean.result.UserArchivesResult;
 import com.qmth.sop.business.bean.result.UserArchivesSubTotalResult;
 import com.qmth.sop.business.entity.*;
@@ -48,6 +49,8 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
     private TBServiceService tbServiceService;
     @Resource
     private TBCrmService tbCrmService;
+    @Resource
+    private SysRoleService sysRoleService;
 
     @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) throws ParseException {
@@ -70,17 +73,20 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
         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<>();
+            List<RoleResult> roleResultList = new ArrayList<>();
             Long userId = record.getUserId();
             if (userId != null && userId > 0) {
                 for (RoleTypeEnum roleTypeEnum : authRole) {
                     // TODO: 2023/8/14 可优化查询 
                     if (sysUserRoleService.userContainsRoles(userId, roleTypeEnum)) {
-                        roleTypeEnumList.add(roleTypeEnum);
+                        RoleResult roleResult = sysRoleService.findRoleInfoByArchivesType(roleTypeEnum);
+                        if (Objects.nonNull(roleResult)) {
+                            roleResultList.add(roleResult);
+                        }
                     }
                 }
             }
-            record.setRoleTypeList(roleTypeEnumList);
+            record.setRoleInfoList(roleResultList);
             record.setAge(this.getAgeByIdentity(record.getIdentity()));
             record.setAuthenticationStatus(record.getAuthenticationValidTime() != null && record.getAuthenticationValidTime() > currentTime);
         }
@@ -362,6 +368,12 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
         return userArchivesImportDtoList;
     }
 
+    @Transactional
+    @Override
+    public void cancelUserArchives(List<Long> userArchivesIdList) {
+        // TODO: 2023/8/23 档案作废具体逻辑
+    }
+
     @Override
     public TBUserArchives findByUserId(Long userId) {
         SysUser sysUser = sysUserService.getById(userId);
@@ -424,12 +436,9 @@ public class TBUserArchivesServiceImpl extends ServiceImpl<TBUserArchivesMapper,
                 .peek(e -> {
                     Long userId = e.getUserId();
                     int count = Math.toIntExact(tbCrmList.stream().filter(c -> userId.equals(c.getRegionCoordinatorId())).count());
-                    if (count > rate) {
-                        throw ExceptionResultEnum.ERROR.exception("区域协调人分配超额异常");
-                    }
                     e.setRemainCount(rate - count);
                 })
                 .collect(Collectors.toList());
-        return list;
+        return list.stream().filter(e -> e.getRemainCount() > 0).collect(Collectors.toList());
     }
 }

+ 17 - 0
sop-business/src/main/resources/db/log/caozixuan_update_log.sql

@@ -127,3 +127,20 @@ INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, e
 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');
+
+-- 2023/08/23
+ALTER TABLE `t_b_device_in_out`
+    ADD COLUMN `usage_type` VARCHAR(45) NULL COMMENT '用途类型(项目、其他)' AFTER `address`;
+
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2030', '人员调配管理-查询空闲工程师', '/api/admin/user/archives/allocation/free_engineer', 'URL', '34', '8', 'AUTH', '1', '1', '0');
+INSERT INTO sys_privilege (id, name, url, type, parent_id, sequence, property, enable, default_auth, front_display) VALUES ('2031', '人员调配管理-查询空闲区域协调人', '/api/admin/user/archives/allocation/free_coordinator', 'URL', '34', '9', 'AUTH', '1', '1', '0');
+UPDATE sys_privilege SET related = '2024,2030,2031' WHERE (id = '164');
+
+ALTER TABLE t_b_device_in_out
+    ADD COLUMN base_photo_path VARCHAR(500) NULL COMMENT '快递单拍照' AFTER usage_type;
+
+ALTER TABLE t_b_device_in_out
+    ADD COLUMN status VARCHAR(20) NOT NULL COMMENT '状态,NORMAL:正常,BREAK_DOWN:故障' AFTER address;
+
+ALTER TABLE t_b_device_in_out
+    ADD COLUMN location VARCHAR(100) NULL COMMENT '当前所在地' AFTER supplier_name;

+ 113 - 0
sop-business/src/main/resources/mapper/TBDeviceInOutMapper.xml

@@ -2,4 +2,117 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.qmth.sop.business.mapper.TBDeviceInOutMapper">
 
+    <select id="findDeviceInOutPageBySop" resultType="com.qmth.sop.business.bean.result.DeviceInOutResult">
+        SELECT
+            tbdio.id AS inOutId,
+            tbdio.service_id AS serviceUnitId,
+            IFNULL(tbs.name,'--') AS serviceUnitName,
+            tbdio.usage_type AS usageType,
+            tbdio.device_no AS deviceNo,
+            sd.id AS deviceId,
+            sd.brand AS deviceBrand,
+            tbdio.status AS deviceStatus,
+            tbdio.in_out_time AS inOutTime,
+            su.id AS userId,
+            su.real_name AS userName,
+            IFNULL(tbdio.custom_name,'--') AS customName,
+            tbdio.type AS inOutType,
+            tbdio.location AS location,
+            tbdio.address AS address
+        FROM
+            t_b_device_in_out tbdio
+                LEFT JOIN
+            t_b_service tbs ON tbdio.service_id = tbs.id
+                LEFT JOIN
+            sys_device sd ON tbdio.device_no = sd.serial_no
+                LEFT JOIN
+            sys_user su ON tbdio.user_id = su.id
+        <where>
+            <if test="serviceUnitId != null">
+                AND tbs.id = #{serviceUnitId}
+            </if>
+            <if test="usageType != null">
+                AND tbdio.usage_type = #{usageType}
+            </if>
+            <if test="userId != null">
+                AND su.id = #{userId}
+            </if>
+            <if test="deviceStatus != null">
+                AND tbdio.status = #{deviceStatus}
+            </if>
+            <if test="inOutTimeStart != null">
+                AND tbdio.in_out_time >= #{inOutTimeStart}
+            </if>
+            <if test="inOutTimeEnd != null">
+                AND #{inOutTimeEnd} > tbdio.in_out_time
+            </if>
+            <if test="deviceNo != null and deviceNo != ''">
+                AND tbdio.device_no LIKE CONCAT('%',#{deviceNo},'%')
+            </if>
+            <if test="customName != null and customName != ''">
+                AND tbdio.custom_name LIKE CONCAT('%',#{customName},'%')
+            </if>
+            <if test="location != null and location != ''">
+                AND tbdio.location LIKE CONCAT('%',#{location},'%')
+            </if>
+            <if test="address != null and address != ''">
+                AND tbdio.address LIKE CONCAT('%',#{address},'%')
+            </if>
+        </where>
+        ORDER BY tbs.id DESC,tbdio.in_out_time
+    </select>
+    <select id="findDeviceInOutPageBySource" resultType="com.qmth.sop.business.bean.result.DeviceInOutResult">
+        SELECT
+            tbdio.id AS inOutId,
+            tbdio.service_id AS serviceUnitId,
+            tbs.name AS serviceUnitName,
+            tbdio.usage_type AS usageType,
+            tbdio.device_no AS deviceNo,
+            sd.id AS deviceId,
+            sd.brand AS deviceBrand,
+            tbdio.status AS deviceStatus,
+            tbdio.in_out_time AS inOutTime,
+            su.id AS userId,
+            su.real_name AS userName,
+            tbdio.custom_name AS customName,
+            tbdio.type AS inOutType,
+            tbdio.location AS location,
+            tbdio.address AS address,
+            ss.id AS supplierId,
+            ss.name AS supplierName
+        FROM
+            t_b_device_in_out tbdio
+                LEFT JOIN
+            t_b_service tbs ON tbdio.service_id = tbs.id
+                LEFT JOIN
+            sys_device sd ON tbdio.device_no = sd.serial_no
+                LEFT JOIN
+            sys_user su ON tbdio.user_id = su.id
+                LEFT JOIN
+            sys_supplier ss ON sd.supplier_id = ss.id
+        <where>
+            <if test="serviceUnitId != null">
+                AND tbs.id = #{serviceUnitId}
+            </if>
+            <if test="inOutType != null">
+                AND tbdio.type = #{inOutType}
+            </if>
+            <if test="deviceNo != null and deviceNo != ''">
+                AND tbdio.device_no LIKE CONCAT('%',#{deviceNo},'%')
+            </if>
+            <if test="inOutTimeStart != null">
+                AND tbdio.in_out_time >= #{inOutTimeStart}
+            </if>
+            <if test="inOutTimeEnd != null">
+                AND #{inOutTimeEnd} > tbdio.in_out_time
+            </if>
+            <if test="supplierId != null">
+                AND ss.id = #{supplierId}
+            </if>
+            <if test="customName != null and customName != ''">
+                AND tbdio.custom_name LIKE CONCAT('%',#{customName},'%')
+            </if>
+        </where>
+        ORDER BY tbs.id DESC,tbdio.in_out_time
+    </select>
 </mapper>

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

@@ -189,6 +189,13 @@
             <if test="gap != null">
                 AND (result.coordinatorUnDistributed + result.effectUnDistributed + result.assistantUnDistributed) &lt;= #{gap}
             </if>
+            <if test="crmIdList != null and crmIdList.size > 0">
+                AND result.crmId IN(
+                <foreach collection="crmIdList" item="val" separator=",">
+                    #{val}
+                </foreach>
+                )
+            </if>
         </where>
     </select>
     <select id="findAllocationByCrmNo"

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

@@ -19,6 +19,7 @@
             tbuas.supplier_id AS supplierId,
             ss.name AS supplierName,
             tbuas.archives_time AS archivesTime,
+            tbuas.authentication_time AS authenticationTime,
             tbuas.authentication_score AS authenticationScore,
             tbuas.authentication_valid_time AS authenticationValidTime,
             tbuas.remark,

+ 22 - 0
sop-common/src/main/java/com/qmth/sop/common/enums/DeviceUsageTypeEnum.java

@@ -0,0 +1,22 @@
+package com.qmth.sop.common.enums;
+
+/**
+ * @Description: 设备用户类型枚举
+ * @Author: CaoZixuan
+ * @Date: 2023-08-31
+ */
+public enum DeviceUsageTypeEnum {
+    PROJECT("项目"),
+    OTHER("其他")
+    ;
+
+    DeviceUsageTypeEnum(String title) {
+        this.title = title;
+    }
+
+    private final String title;
+
+    public String getTitle() {
+        return title;
+    }
+}

+ 3 - 0
sop-common/src/main/java/com/qmth/sop/common/enums/EnumList.java

@@ -36,6 +36,9 @@ public enum EnumList {
     SEQUENCE_ENUM(SequenceEnum.class),
 
     DING_EXCEPTION_APPROVE_ENUM(DingExceptionApproveEnum.class);
+    SEQUENCE_ENUM(SequenceEnum.class),
+
+    DEVICE_USAGE_TYPE_ENUM(DeviceUsageTypeEnum.class);
 
     private Object obj;
 

+ 27 - 2
sop-server/src/main/java/com/qmth/sop/server/api/TBUserArchivesAllocationController.java

@@ -3,12 +3,16 @@ package com.qmth.sop.server.api;
 
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.sop.business.annotation.OperationLog;
+import com.qmth.sop.business.bean.params.AutoAllocationParam;
 import com.qmth.sop.business.bean.params.UserArchivesAllocationParam;
+import com.qmth.sop.business.bean.result.ArchivesSourceResult;
 import com.qmth.sop.business.bean.result.CrmArchivesAllocationResult;
 import com.qmth.sop.business.bean.result.UserArchivesAllocationResult;
 import com.qmth.sop.business.bean.result.UserArchivesAllocationSubTotalResult;
 import com.qmth.sop.business.service.TBUserArchivesAllocationService;
+import com.qmth.sop.business.service.TBUserArchivesService;
 import com.qmth.sop.common.contant.SystemConstant;
+import com.qmth.sop.common.enums.RoleTypeEnum;
 import com.qmth.sop.common.util.Result;
 import com.qmth.sop.common.util.ResultUtil;
 import io.swagger.annotations.*;
@@ -35,6 +39,8 @@ import javax.validation.constraints.Min;
 public class TBUserArchivesAllocationController {
     @Resource
     private TBUserArchivesAllocationService tbUserArchivesAllocationService;
+    @Resource
+    private TBUserArchivesService tbUserArchivesService;
 
     @ApiOperation(value = "人员调配管理-分页查询")
     @RequestMapping(value = "/page", method = RequestMethod.POST)
@@ -90,8 +96,11 @@ public class TBUserArchivesAllocationController {
     @RequestMapping(value = "/auto_edit", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = Result.class)})
     @OperationLog
-    public Result autoEdit(@ApiParam(value = "服务单元id", required = true) @RequestParam String serviceUnitId) {
-        tbUserArchivesAllocationService.autoEditCrmAllocationBatch(SystemConstant.convertIdToLong(serviceUnitId));
+    public Result autoEdit(@Valid @RequestBody AutoAllocationParam allocationParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        tbUserArchivesAllocationService.autoEditCrmAllocationBatch(allocationParam);
         return ResultUtil.ok();
     }
 
@@ -112,4 +121,20 @@ public class TBUserArchivesAllocationController {
         tbUserArchivesAllocationService.unPublishSop(crmNo);
         return ResultUtil.ok();
     }
+
+    @ApiOperation(value = "人员调配管理-查询空闲工程师")
+    @RequestMapping(value = "/free_engineer", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = ArchivesSourceResult.class)})
+    @OperationLog
+    public Result findFreeEngineer(@ApiParam(value = "工程师类型", required = true) @RequestParam RoleTypeEnum roleType) {
+        return ResultUtil.ok(tbUserArchivesService.findFreeEngineerSourceByType(roleType));
+    }
+
+    @ApiOperation(value = "人员调配管理-查询空闲区域协调人")
+    @RequestMapping(value = "/free_coordinator", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = ArchivesSourceResult.class)})
+    @OperationLog
+    public Result findFreeCoordinator(@ApiParam(value = "服务单元id", required = true) @RequestParam String serviceUnitId) {
+        return ResultUtil.ok(tbUserArchivesService.findFreeCoordinatorByServiceId(SystemConstant.convertIdToLong(serviceUnitId)));
+    }
 }

+ 17 - 0
sop-server/src/main/java/com/qmth/sop/server/api/TBUserArchivesController.java

@@ -2,8 +2,10 @@ package com.qmth.sop.server.api;
 
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.sop.business.annotation.OperationLog;
+import com.qmth.sop.business.bean.params.UserArchivesAllocationParam;
 import com.qmth.sop.business.bean.params.UserArchivesParam;
 import com.qmth.sop.business.bean.query.UserArchivesQuery;
+import com.qmth.sop.business.bean.result.ArchivesSourceResult;
 import com.qmth.sop.business.bean.result.UserArchivesResult;
 import com.qmth.sop.business.bean.result.UserArchivesSubTotalResult;
 import com.qmth.sop.business.entity.SysUser;
@@ -21,6 +23,7 @@ import com.qmth.sop.common.util.Result;
 import com.qmth.sop.common.util.ResultUtil;
 import com.qmth.sop.common.util.ServletUtil;
 import io.swagger.annotations.*;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -30,7 +33,9 @@ import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 import java.text.ParseException;
+import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -151,4 +156,16 @@ public class TBUserArchivesController {
         TBTask tbTask = (TBTask) map.get(SystemConstant.TASK);
         return ResultUtil.ok(tbTask.getId());
     }
+
+    @ApiOperation(value = "人员档案管理-作废")
+    @RequestMapping(value = "/cancel", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "作废成功", response = Result.class)})
+    @OperationLog
+    public Result cancelUserArchives(@ApiParam(value = "人员档案id集合", required = true) @RequestParam List<String> userArchivesIdList) {
+        if (CollectionUtils.isNotEmpty(userArchivesIdList)) {
+            List<Long> archivesIdList = userArchivesIdList.stream().map(SystemConstant::convertIdToLong).collect(Collectors.toList());
+            tbUserArchivesService.cancelUserArchives(archivesIdList);
+        }
+        return ResultUtil.ok();
+    }
 }