Explorar o código

add:派单状态

caozixuan hai 1 ano
pai
achega
4c9f4e09dc

+ 7 - 6
sop-business/src/main/java/com/qmth/sop/business/bean/result/UserArchivesAllocationResult.java

@@ -3,6 +3,7 @@ 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.business.bean.dto.AllocationDto;
+import com.qmth.sop.common.enums.CrmStatusEnum;
 import com.qmth.sop.common.enums.ProductTypeEnum;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -87,8 +88,8 @@ public class UserArchivesAllocationResult {
     @ApiModelProperty("助理工程师差额(取反)")
     private Integer assistantUnDistributed;
 
-    @ApiModelProperty("是否发布")
-    private Boolean publish;
+    @ApiModelProperty("派单状态")
+    private CrmStatusEnum crmStatus;
 
     // --编辑页面用的附加信息
     @ApiModelProperty("用户分配的数据")
@@ -302,11 +303,11 @@ public class UserArchivesAllocationResult {
         this.allocationDtoList = allocationDtoList;
     }
 
-    public Boolean getPublish() {
-        return publish;
+    public CrmStatusEnum getCrmStatus() {
+        return crmStatus;
     }
 
-    public void setPublish(Boolean publish) {
-        this.publish = publish;
+    public void setCrmStatus(CrmStatusEnum crmStatus) {
+        this.crmStatus = crmStatus;
     }
 }

+ 12 - 0
sop-business/src/main/java/com/qmth/sop/business/entity/TBCrm.java

@@ -3,6 +3,7 @@ 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.base.BaseEntity;
+import com.qmth.sop.common.enums.CrmStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -76,6 +77,9 @@ public class TBCrm extends BaseEntity implements Serializable {
     @NotNull(message = "是否启用不能为空")
     private Boolean enable;
 
+    @ApiModelProperty(value = "派单状态(UN_PUBLISH(\"未发布\"),PUBLISH(\"已发布\"),FINISH(\"已完成\");)")
+    private CrmStatusEnum status;
+
     public String getCrmNo() {
         return crmNo;
     }
@@ -179,4 +183,12 @@ public class TBCrm extends BaseEntity implements Serializable {
     public void setRegionCoordinatorId(Long regionCoordinatorId) {
         this.regionCoordinatorId = regionCoordinatorId;
     }
+
+    public CrmStatusEnum getStatus() {
+        return status;
+    }
+
+    public void setStatus(CrmStatusEnum status) {
+        this.status = status;
+    }
 }

+ 10 - 0
sop-business/src/main/java/com/qmth/sop/business/mapper/TBCrmMapper.java

@@ -103,4 +103,14 @@ public interface TBCrmMapper extends BaseMapper<TBCrm> {
      * @return sop派单信息
      */
     List<SopCrmInfo> findSopCrmInfoBySopNo(@Param("sopNo") String sopNo);
+
+    /**
+     * 查询工程师正在哪个派单上
+     *
+     * @param userId         工程师用户id
+     * @param userArchivesId 工程师档案id
+     * @return 被占用的派单
+     */
+    List<TBCrm> findOccupiedCrm(@Param("userId") Long userId,
+                                @Param("userArchivesId") Long userArchivesId);
 }

+ 9 - 0
sop-business/src/main/java/com/qmth/sop/business/service/TBCrmService.java

@@ -134,4 +134,13 @@ public interface TBCrmService extends IService<TBCrm> {
      * @return 签到中派单信息
      */
     SopCrmInfo findSopCrmInfoBySop(String sopNo);
+
+    /**
+     * 根据工程师 用户id或档案id
+     *
+     * @param userId         用户id
+     * @param userArchivesId 档案id
+     * @return 正在进行的派单(被占用的)
+     */
+    TBCrm findOccupiedCrm(Long userId, Long userArchivesId);
 }

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

@@ -5,10 +5,10 @@ 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.TBCrmResult;
 import com.qmth.sop.business.bean.result.UserArchivesAllocationResult;
 import com.qmth.sop.business.bean.result.UserArchivesAllocationSubTotalResult;
 import com.qmth.sop.business.entity.TBUserArchivesAllocation;
-import com.qmth.sop.common.enums.RoleTypeEnum;
 
 import java.util.List;
 

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

@@ -167,6 +167,7 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
             tBCrm.setEnable(true);
             SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
             if (Objects.isNull(tBCrm.getId())) {// 新增
+                tBCrm.setStatus(CrmStatusEnum.UN_PUBLISH);
                 tBCrm.insertInfo(sysUser.getId());
             } else { // 修改
                 tBCrm.updateInfo(sysUser.getId());
@@ -282,4 +283,17 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
         }
         return sopCrmInfoList.get(0);
     }
+
+    @Override
+    public TBCrm findOccupiedCrm(Long userId, Long userArchivesId) {
+        TBCrm result = null;
+        List<TBCrm> tbCrmList = this.baseMapper.findOccupiedCrm(userId, userArchivesId);
+        if (CollectionUtils.isNotEmpty(tbCrmList)) {
+            if (tbCrmList.size() > 1) {
+                throw ExceptionResultEnum.ERROR.exception("被多个派单占用异常");
+            }
+            result = tbCrmList.get(0);
+        }
+        return result;
+    }
 }

+ 6 - 9
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBDingServiceImpl.java

@@ -2,9 +2,7 @@ package com.qmth.sop.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.activiti.service.ActivitiService;
 import com.qmth.sop.business.bean.dto.DateFormDto;
 import com.qmth.sop.business.bean.dto.SopCrmInfo;
 import com.qmth.sop.business.bean.params.DingSaveParam;
@@ -50,7 +48,7 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
     @Resource
     private SysDingDateService sysDingDateService;
     @Resource
-    private ActivitiService activitiService;
+    private TBSopInfoService tbSopInfoService;
 
     @Override
     public DingElementResult findDingElements(String sopNo, Long userId) {
@@ -78,6 +76,7 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
                 dingElementResult.setSignInAddress(singInAddress);
                 dingElementResult.setSignOutAddress(signOutAddress);
                 dingElementResult.setSignOutTime(signOutTime);
+                dingElementResult.setDingSopNo(tbDing.getDingSopNo());
             }
         }
         return dingElementResult;
@@ -194,8 +193,11 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
                     dingFormResult.setSignOutInfo(out);
                     exceptionCount++;
                 }
+                formList.add(dingFormResult);
             }
         }
+
+
         DingStatisticResult dingStatisticResult = new DingStatisticResult();
         dingStatisticResult.setDingFormList(formList);
         dingStatisticResult.setWorkDays(workCount);
@@ -235,12 +237,7 @@ public class TBDingServiceImpl extends ServiceImpl<TBDingMapper, TBDing> impleme
                 .eq(TBDing::getUserId, userId)
                 .eq(TBDing::getSignDate, signDate));
 
-        IPage<WorkTaskResult> sopPage = activitiService.getFlowTaskList(new Page<>(1, 100000), userId, TFCustomTypeEnum.SOP_FLOW, serviceId, null, null, crmNo);
-        List<String> otherSopNoList = sopPage.getRecords()
-                .stream()
-                .map(WorkTaskResult::getCode)
-                .distinct()
-                .collect(Collectors.toList());
+        List<String> otherSopNoList = tbSopInfoService.findFlowPassageByCrmNo(crmNo);
 
         if (CollectionUtils.isEmpty(tbDingList)) {
             // 没有这天的打卡记录 - 新增打卡记录

+ 7 - 3
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBUserArchivesAllocationServiceImpl.java

@@ -65,7 +65,7 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
         area = SystemConstant.translateSpecificSign(area);
         customName = SystemConstant.translateSpecificSign(customName);
         List<UserArchivesAllocationResult> list = this.baseMapper.findCrmAllocationSubTotal(serviceUnitId, province, city, area, customName, gap, null);
-        Integer publishedCrmCount = Math.toIntExact(list.stream().filter(UserArchivesAllocationResult::getPublish).count());
+        Integer publishedCrmCount = Math.toIntExact(list.stream().filter(e -> CrmStatusEnum.PUBLISH.equals(e.getCrmStatus())).count());
         Integer totalCrmCount = list.size();
 
         Integer coordinatorQuota = list.stream().mapToInt(UserArchivesAllocationResult::getCoordinatorQuota).sum();
@@ -147,9 +147,13 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
                     }
                     TBUserArchives tbUserArchives = tbUserArchivesService.findByUserId(userId);
                     if (!UserArchivesStatusEnum.FREE.equals(tbUserArchives.getStatus())) {
-                        throw ExceptionResultEnum.ERROR.exception("不能分配非空闲状态的用户");
+                        TBCrm occupiedCrm = tbCrmService.findOccupiedCrm(userId, null);
+                        if (Objects.isNull(occupiedCrm)) {
+                            throw ExceptionResultEnum.ERROR.exception("人员占用状态异常");
+                        }
+                        throw ExceptionResultEnum.ERROR.exception(String.format("该工程师已经被派单号为[%s],名称为[%s],状态为[%s]的派单占用,请先将工程师从派单中移出", occupiedCrm.getCrmNo(), occupiedCrm.getName(), occupiedCrm.getStatus()));
                     }
-                    tbUserArchives.setStatus(UserArchivesStatusEnum.NON_EXECUTION_SOP);
+                    tbUserArchives.setStatus(UserArchivesStatusEnum.OCCUPIED);
                     tbUserArchivesService.updateById(tbUserArchives);
 
                     TBUserArchivesAllocation tbUserArchivesAllocation = new TBUserArchivesAllocation();

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

@@ -237,3 +237,6 @@ 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 ('2046', '考勤打卡保存', '/api/admin/tb/ding/ding_save', 'URL', '26', '3', 'SYS', '1', '1', '0');
 UPDATE sys_privilege SET related = '3017,2044,2045,2046' WHERE (id = '26');
 
+-- 2023-09-07
+ALTER TABLE t_b_crm
+    ADD COLUMN status VARCHAR(20) NOT NULL COMMENT '派单状态(UN_PUBLISH(\"未发布\"),PUBLISH(\"已发布\"),FINISH(\"已完成\");)' AFTER update_time;

+ 17 - 0
sop-business/src/main/resources/mapper/TBCrmMapper.xml

@@ -287,5 +287,22 @@
             </if>
         </where>
     </select>
+    <select id="findOccupiedCrm" resultType="com.qmth.sop.business.entity.TBCrm">
+        SELECT
+            tbc.*
+        FROM
+            t_b_user_archives_allocation tbuaa
+                LEFT JOIN
+            t_b_crm tbc ON tbuaa.crm_no = tbc.crm_no
+        <where>
+            <if test="userId != null">
+                AND tbuaa.user_id = #{userId}
+            </if>
+            <if test="userArchivesId != null">
+                AND tbuaa.archives_id = #{userArchivesId}
+            </if>
+            AND tbc.status != 'FINISH'
+        </where>
+    </select>
 
 </mapper>

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

@@ -24,15 +24,14 @@
                  1 AS coordinatorQuota,
                  IFNULL(effectQ.quota, 0) AS effectQuota,
                  IFNULL(assistantQ.quota, 0) AS assistantQuota,
-                 IFNULL(coordinatorR.reality, 0) AS coordinatorDistributed,
+                 IF(tbc.region_coordinator_id IS NULL, 0, 1) AS coordinatorDistributed,
                  IFNULL(effectR.reality, 0) AS effectDistributed,
                  IFNULL(assistantR.reality, 0) AS assistantDistributed,
-                 1 + IFNULL(effectQ.quota, 0) + IFNULL(assistantQ.quota, 0) AS quota,
-                 IFNULL(coordinatorR.reality, 0) + IFNULL(effectR.reality, 0) + IFNULL(assistantR.reality, 0) AS distributed,
-                 IF(1 - IFNULL(coordinatorR.reality, 0) &lt; 0, 0, 1 - IFNULL(coordinatorR.reality, 0)) AS coordinatorUnDistributed,
+                 IF(tbc.region_coordinator_id IS NULL, 0, 1) + IFNULL(effectR.reality, 0) + IFNULL(assistantR.reality, 0) AS distributed,
+                 IF(tbc.region_coordinator_id IS NULL, 1, 0) AS coordinatorUnDistributed,
                  IF(IFNULL(effectQ.quota, 0) - IFNULL(effectR.reality, 0) &lt; 0, 0, IFNULL(effectQ.quota, 0) - IFNULL(effectR.reality, 0)) AS effectUnDistributed,
                  IF(IFNULL(assistantQ.quota, 0) - IFNULL(assistantR.reality, 0) &lt; 0, 0, IFNULL(assistantQ.quota, 0) - IFNULL(assistantR.reality, 0)) AS assistantUnDistributed,
-                 IFNULL(coordinatorR.publish, FALSE) AS publish
+                 tbc.status AS status
              FROM
                  t_b_crm tbc
                      LEFT JOIN t_b_service tbs ON tbc.service_id = tbs.id
@@ -52,12 +51,6 @@
                                         LEFT JOIN sys_role sr ON sr.id = slr.role_id
                                 WHERE
                                     sr.type = 'ASSISTANT_ENGINEER') assistantQ ON assistantQ.level_id = sl.id
-                     LEFT JOIN (SELECT
-                                    crm_no,
-                                    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 GROUP BY crm_no) coordinatorR ON coordinatorR.crm_no = tbc.crm_no
                      LEFT JOIN (SELECT
                                     tbuaa.crm_no, COUNT(*) AS reality
                                 FROM
@@ -119,15 +112,15 @@
                 1 AS coordinatorQuota,
                 IFNULL(effectQ.quota, 0) AS effectQuota,
                 IFNULL(assistantQ.quota, 0) AS assistantQuota,
-                IFNULL(coordinatorR.reality, 0) AS coordinatorDistributed,
+                IF(tbc.region_coordinator_id IS NULL, 0, 1) AS coordinatorDistributed,
                 IFNULL(effectR.reality, 0) AS effectDistributed,
                 IFNULL(assistantR.reality, 0) AS assistantDistributed,
                 1 + IFNULL(effectQ.quota, 0) + IFNULL(assistantQ.quota, 0) AS quota,
-                IFNULL(coordinatorR.reality, 0) + IFNULL(effectR.reality, 0) + IFNULL(assistantR.reality, 0) AS distributed,
-                IF(1 - IFNULL(coordinatorR.reality, 0) &lt; 0, 0, 1 - IFNULL(coordinatorR.reality, 0)) AS coordinatorUnDistributed,
+                IF(tbc.region_coordinator_id IS NULL, 0, 1) + IFNULL(effectR.reality, 0) + IFNULL(assistantR.reality, 0) AS distributed,
+                IF(tbc.region_coordinator_id IS NULL, 1, 0) AS coordinatorUnDistributed,
                 IF(IFNULL(effectQ.quota, 0) - IFNULL(effectR.reality, 0) &lt; 0, 0, IFNULL(effectQ.quota, 0) - IFNULL(effectR.reality, 0)) AS effectUnDistributed,
                 IF(IFNULL(assistantQ.quota, 0) - IFNULL(assistantR.reality, 0) &lt; 0, 0, IFNULL(assistantQ.quota, 0) - IFNULL(assistantR.reality, 0)) AS assistantUnDistributed,
-                IFNULL(coordinatorR.publish, FALSE) AS publish
+                tbc.status AS status
              FROM
                  t_b_crm tbc
                      LEFT JOIN t_b_service tbs ON tbc.service_id = tbs.id
@@ -147,12 +140,6 @@
                                         LEFT JOIN sys_role sr ON sr.id = slr.role_id
                                 WHERE
                                     sr.type = 'ASSISTANT_ENGINEER') assistantQ ON assistantQ.level_id = sl.id
-                     LEFT JOIN (SELECT
-                                    crm_no,
-                                    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 GROUP BY crm_no) coordinatorR ON coordinatorR.crm_no = tbc.crm_no
                      LEFT JOIN (SELECT
                                     tbuaa.crm_no, COUNT(*) AS reality
                                 FROM

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

@@ -0,0 +1,22 @@
+package com.qmth.sop.common.enums;
+
+/**
+ * @Description: 派单状态枚举
+ * @Author: CaoZixuan
+ * @Date: 2023-09-07
+ */
+public enum CrmStatusEnum {
+    UN_PUBLISH("未发布"),
+    PUBLISH("已发布"),
+    FINISH("已完成");
+
+    CrmStatusEnum(String title) {
+        this.title = title;
+    }
+
+    private final String title;
+
+    public String getTitle() {
+        return title;
+    }
+}

+ 4 - 4
sop-common/src/main/java/com/qmth/sop/common/enums/DingStatusEnum.java

@@ -6,10 +6,10 @@ package com.qmth.sop.common.enums;
  * @Date: 2023-09-04
  */
 public enum DingStatusEnum {
-    SIGN("打卡", "正常打卡"),
-    NO_SIGN("未打卡", "未打卡"),
-    RE_SIGN("补卡", "sop结束才可以申请补卡"),
-    OTHER("在其他sop打卡", "打卡记录在同时进行的其他sop上");
+    SIGN("打卡", "正常打卡,显示时间和打卡地点"),
+    NO_SIGN("未打卡", "未打卡,显示未打卡"),
+    RE_SIGN("补卡", "补卡,显示补卡"),
+    OTHER("在其他sop打卡", "显示'--'");
 
     DingStatusEnum(String title, String desc) {
         this.title = title;

+ 2 - 3
sop-common/src/main/java/com/qmth/sop/common/enums/UserArchivesStatusEnum.java

@@ -7,8 +7,7 @@ package com.qmth.sop.common.enums;
  */
 public enum UserArchivesStatusEnum {
     FREE("空闲"),
-    NON_EXECUTION_SOP("未执行SOP"),
-    EXECUTION_SOP("执行SOP"),
+    OCCUPIED("被占用"),
     ;
     private final String title;
 
@@ -19,4 +18,4 @@ public enum UserArchivesStatusEnum {
     public String getTitle() {
         return title;
     }
-}
+}