Selaa lähdekoodia

add:派单发布撤回

caozixuan 1 vuosi sitten
vanhempi
commit
8add15553d

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

@@ -9,6 +9,7 @@ import com.qmth.sop.business.bean.result.CrmServiceResult;
 import com.qmth.sop.business.bean.result.CrmSubTotalResult;
 import com.qmth.sop.business.bean.result.TBCrmResult;
 import com.qmth.sop.business.entity.TBCrm;
+import com.qmth.sop.common.enums.CrmStatusEnum;
 import com.qmth.sop.common.enums.ProductTypeEnum;
 
 import java.util.List;
@@ -143,4 +144,12 @@ public interface TBCrmService extends IService<TBCrm> {
      * @return 正在进行的派单(被占用的)
      */
     TBCrm findOccupiedCrm(Long userId, Long userArchivesId);
+
+    /**
+     * 更新派单发布状态
+     *
+     * @param crmNo  派单号
+     * @param status 要更新的派单状态
+     */
+    void updateCrmStatus(String crmNo, CrmStatusEnum status);
 }

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

@@ -5,7 +5,6 @@ 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;

+ 35 - 4
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBCrmServiceImpl.java

@@ -10,10 +10,7 @@ import com.qmth.sop.business.bean.dto.SopCrmInfo;
 import com.qmth.sop.business.bean.dto.UserArchivesDto;
 import com.qmth.sop.business.bean.params.ServiceScopeParam;
 import com.qmth.sop.business.bean.result.*;
-import com.qmth.sop.business.entity.SysUser;
-import com.qmth.sop.business.entity.TBCrm;
-import com.qmth.sop.business.entity.TBService;
-import com.qmth.sop.business.entity.TBUserArchivesAllocation;
+import com.qmth.sop.business.entity.*;
 import com.qmth.sop.business.mapper.TBCrmMapper;
 import com.qmth.sop.business.service.*;
 import com.qmth.sop.common.contant.SystemConstant;
@@ -296,4 +293,38 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
         }
         return result;
     }
+
+    @Transactional
+    @Override
+    public void updateCrmStatus(String crmNo, CrmStatusEnum status) {
+        TBCrm tbCrm = this.findByCrmNo(crmNo);
+        switch (status) {
+            case UN_PUBLISH: // 撤回
+                tbCrm.setStatus(CrmStatusEnum.UN_PUBLISH);
+                break;
+            case PUBLISH: // 发布
+                tbCrm.setStatus(CrmStatusEnum.PUBLISH);
+                break;
+            case FINISH: // 完结
+                tbCrm.setStatus(CrmStatusEnum.FINISH);
+                // crm完结 释放工程师资源
+                List<CrmArchivesAllocationResult> crmArchivesAllocationResultList = tbUserArchivesAllocationService.findAllocationByCrmNo(crmNo);
+                List<Long> engineerArchivesIdList = crmArchivesAllocationResultList
+                        .stream()
+                        .filter(e -> !RoleTypeEnum.REGION_COORDINATOR.equals(e.getType()))
+                        .map(CrmArchivesAllocationResult::getArchivesId)
+                        .distinct()
+                        .collect(Collectors.toList());
+
+                if (CollectionUtils.isNotEmpty(engineerArchivesIdList)) {
+                    UpdateWrapper<TBUserArchives> updateWrapper = new UpdateWrapper<>();
+                    updateWrapper.lambda()
+                            .set(TBUserArchives::getStatus, UserArchivesStatusEnum.FREE)
+                            .in(TBUserArchives::getId, engineerArchivesIdList);
+                    tbUserArchivesService.update(updateWrapper);
+                }
+                break;
+        }
+        this.updateById(tbCrm);
+    }
 }

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

@@ -386,6 +386,9 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
         if (serviceUnitId == null || serviceUnitId == 0) {
             throw ExceptionResultEnum.ERROR.exception("该派单还未绑定服务单元,不能发布");
         }
+        if (!CrmStatusEnum.UN_PUBLISH.equals(tbCrm.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception("只有'未发布'状态的派单才能发布,该派单当前状态为[" + tbCrm.getStatus() + "]");
+        }
         Long crmId = tbCrm.getId();
         List<Long> crmIdList = new ArrayList<>();
         crmIdList.add(crmId);
@@ -398,8 +401,16 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
         UserArchivesAllocationResult crmSource = crmSourceList.get(0);
         ProductTypeEnum productType = crmSource.getCustomType();
 
-        // 发布校验
-        // TODO: 2023/9/6  发布校验
+        // 发布校验(至少有一名区域协调人和一名实施工程师)
+        Integer coordinatorDistributed = crmSource.getCoordinatorDistributed();
+        if (coordinatorDistributed < 1) {
+            throw ExceptionResultEnum.ERROR.exception(String.format("派单号为[%s]的派单发布失败,派单至少要有一个区域协调人", crmNo));
+        }
+        Integer effectDistributed = crmSource.getEffectDistributed();
+        if (effectDistributed < 1) {
+            throw ExceptionResultEnum.ERROR.exception(String.format("派单号为[%s]的派单发布失败,派单至少要有一个实施工程师", crmNo));
+        }
+
         List<TFCustomFlow> tfCustomFlowList = tfCustomFlowService.findFlowDeploymentList();
         String flowDeploymentId = null;
         switch (productType) {
@@ -436,11 +447,20 @@ public class TBUserArchivesAllocationServiceImpl extends ServiceImpl<TBUserArchi
         }
         sopPublishParam.setFlowDeploymentId(flowDeploymentId);
         tbSopInfoService.sopPublish(sopPublishParam);
+
+        // 更新tbCrm状态为发布
+        tbCrmService.updateCrmStatus(crmNo, CrmStatusEnum.PUBLISH);
     }
 
     @Override
     public void unPublishSop(String crmNo) {
-        // TODO: 2023/8/21 crm流程撤销发布
+        TBCrm tbCrm = tbCrmService.findByCrmNo(crmNo);
+        if (!CrmStatusEnum.PUBLISH.equals(tbCrm.getStatus())) {
+            throw ExceptionResultEnum.ERROR.exception("只有'已发布'状态的派单才能撤回,该派单当前状态为[" + tbCrm.getStatus() + "]");
+        }
+        tbCrmService.updateCrmStatus(crmNo, CrmStatusEnum.UN_PUBLISH);
+        // TODO: 2023/9/8 流程作废
+
     }
 
     /**