Browse Source

add: 区域范围规划修改或作废时对应的派单资源清空(颗粒度市级)

caozixuan 1 year ago
parent
commit
435a07323a

+ 43 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/AreaResult.java

@@ -0,0 +1,43 @@
+package com.qmth.sop.business.bean.result;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 区域结果值
+ * @Author: CaoZixuan
+ * @Date: 2023-11-17
+ */
+public class AreaResult {
+    @ApiModelProperty("服务区域规划id")
+    private Long regionDetailId;
+
+    @ApiModelProperty("省")
+    private String province;
+
+    @ApiModelProperty("市")
+    private String city;
+
+    public Long getRegionDetailId() {
+        return regionDetailId;
+    }
+
+    public void setRegionDetailId(Long regionDetailId) {
+        this.regionDetailId = regionDetailId;
+    }
+
+    public String getProvince() {
+        return province;
+    }
+
+    public void setProvince(String province) {
+        this.province = province;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+}

+ 13 - 2
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionDetailServiceImpl.java

@@ -18,6 +18,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -47,14 +48,14 @@ public class TBServiceRegionDetailServiceImpl extends ServiceImpl<TBServiceRegio
         // 删除之前绑定的区域
         this.remove(new QueryWrapper<TBServiceRegionDetail>().lambda().eq(TBServiceRegionDetail::getServiceRegionId, serviceRegionId));
 
+        List<TBCrm> willUpdateCrmList = new ArrayList<>();
         // 添加新绑定区域
         List<TBServiceRegionDetail> tbServiceRegionDetailList = areaDtoList.stream().flatMap(e -> {
             // 批量更新相关的派单的大区经理
             String province = e.getProvince();
             String city = e.getCity();
             List<TBCrm> tbCrmList = tbCrmService.findByTBCrmListByServiceUnitIdAndAddress(serviceUnitId, province, city);
-            tbCrmList = tbCrmList.stream().peek(crm -> crm.setLeadId(leaderId)).collect(Collectors.toList());
-            tbCrmService.updateBatchById(tbCrmList);
+            willUpdateCrmList.addAll(tbCrmList);
 
             TBServiceRegionDetail detail = new TBServiceRegionDetail();
             detail.setId(SystemConstant.getDbUuid());
@@ -67,6 +68,16 @@ public class TBServiceRegionDetailServiceImpl extends ServiceImpl<TBServiceRegio
             return Stream.of(detail);
         }).collect(Collectors.toList());
         this.saveBatch(tbServiceRegionDetailList);
+
+        if (CollectionUtils.isNotEmpty(willUpdateCrmList)) {
+            for (TBCrm tbCrm : willUpdateCrmList) {
+                ServiceRegionDetailResult result = this.findRegionDetail(tbCrm.getServiceId(), tbCrm.getCrmNo());
+                tbCrm.setLeadId(result.getLeadId());
+                tbCrm.setRegionId(result.getServiceRegionId());
+                tbCrm.setRegionDetailId(result.getServiceRegionDetailId());
+            }
+            tbCrmService.updateBatchById(willUpdateCrmList);
+        }
     }
 
     @Override

+ 54 - 14
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionServiceImpl.java

@@ -19,6 +19,7 @@ import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.RoleTypeEnum;
 import com.qmth.sop.common.enums.ServiceStatusEnum;
+import com.qmth.sop.common.enums.UserArchivesStatusEnum;
 import com.qmth.sop.common.util.ServletUtil;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
@@ -50,6 +51,10 @@ public class TBServiceRegionServiceImpl extends ServiceImpl<TBServiceRegionMappe
     private TBCrmService tbCrmService;
     @Resource
     private SysUserRoleService sysUserRoleService;
+    @Resource
+    private TBUserArchivesAllocationService tbUserArchivesAllocationService;
+    @Resource
+    private TBUserArchivesService tbUserArchivesService;
 
     @Override
     public IPage<ServiceRegionResult> findServiceRegionPage(Long serviceUnitId, String regionName, Long leadId, String city, Integer pageNumber, Integer pageSize) {
@@ -125,12 +130,17 @@ public class TBServiceRegionServiceImpl extends ServiceImpl<TBServiceRegionMappe
     @Transactional
     @Override
     public Long editServiceRegion(ServiceRegionParam serviceRegionParam) {
-        // TODO: 2023/11/16  范围更改的时候删除调配数据 
+        final String sign = "-";
+
         Long serviceRegionId = serviceRegionParam.getServiceRegionId();
         Long serviceUnitId = serviceRegionParam.getServiceUnitId();
         String regionName = serviceRegionParam.getRegionName();
         Long leadId = serviceRegionParam.getLeadId();
         List<AreaDto> areaDtoList = serviceRegionParam.getAreaDtoList();
+        List<String> areaStrList = areaDtoList.stream().flatMap(e -> {
+            String areaStr = e.getProvince() + sign + e.getCity();
+            return Stream.of(areaStr);
+        }).collect(Collectors.toList());
 
         TBService tbServiceUnit = tbServiceService.getById(serviceUnitId);
         if (Objects.isNull(tbServiceUnit)) {
@@ -173,25 +183,55 @@ public class TBServiceRegionServiceImpl extends ServiceImpl<TBServiceRegionMappe
             serviceRegionId = tbServiceRegion.getId();
         } else {
             // 编辑
-            TBServiceRegion db = this.getById(serviceRegionId);
             List<TBServiceRegionDetail> tbServiceRegionDetailList = tbServiceRegionDetailService
                     .list(new QueryWrapper<TBServiceRegionDetail>()
                             .lambda()
-                            .eq(TBServiceRegionDetail::getServiceRegionId,serviceRegionId));
+                            .eq(TBServiceRegionDetail::getServiceRegionId, serviceRegionId));
 
+            // 将要删除的服务区域规划
+            List<Long> willDeleteRegionDetailIdList = tbServiceRegionDetailList.stream().filter(e -> {
+                        String key = e.getProvince() + sign + e.getCity();
+                        return !areaStrList.contains(key);
+                    }).map(TBServiceRegionDetail::getId)
+                    .distinct()
+                    .collect(Collectors.toList());
 
 
-            Long dbLeadId = db.getLeadId();
-            Long dbServiceUnitId = db.getServiceId();
-            tbServiceRegion.setId(serviceRegionId);
+            // 清空之前派单绑定的资源信息
+            if (CollectionUtils.isNotEmpty(willDeleteRegionDetailIdList)) {
+                List<TBCrm> willDisposeCrmList = tbCrmService.list(new QueryWrapper<TBCrm>().lambda().in(TBCrm::getRegionDetailId, willDeleteRegionDetailIdList));
 
-            // 清空之前派单绑定的大区经理
-            UpdateWrapper<TBCrm> crmUpdateWrapper = new UpdateWrapper<>();
-            crmUpdateWrapper.lambda()
-                    .eq(TBCrm::getServiceId, dbServiceUnitId)
-                    .eq(TBCrm::getLeadId, dbLeadId)
-                    .set(TBCrm::getLeadId, null);
-            tbCrmService.update(crmUpdateWrapper);
+                for (TBCrm tbCrm : willDisposeCrmList) {
+                    // 之前派单有划定在服务单元 -> 解绑派单所有资源信息
+                    List<TBUserArchivesAllocation> dbAllocationList = tbUserArchivesAllocationService.list(new QueryWrapper<TBUserArchivesAllocation>().lambda()
+                            .eq(TBUserArchivesAllocation::getCrmNo, tbCrm.getCrmNo())
+                            .eq(TBUserArchivesAllocation::getServiceId, tbCrm.getServiceId()));
+
+                    if (CollectionUtils.isNotEmpty(dbAllocationList)) {
+                        // 释放工程师资源
+                        List<Long> archivesIdList = dbAllocationList.stream().map(TBUserArchivesAllocation::getArchivesId).distinct().collect(Collectors.toList());
+                        if (CollectionUtils.isNotEmpty(archivesIdList)) {
+                            UpdateWrapper<TBUserArchives> archivesUpdateWrapper = new UpdateWrapper<>();
+                            archivesUpdateWrapper.lambda()
+                                    .in(TBUserArchives::getId, archivesIdList)
+                                    .set(TBUserArchives::getStatus, UserArchivesStatusEnum.FREE);
+                            tbUserArchivesService.update(archivesUpdateWrapper);
+                        }
+                        // 删除之前的派单分配详情
+                        tbUserArchivesAllocationService.removeByIds(dbAllocationList.stream().map(TBUserArchivesAllocation::getId).distinct().collect(Collectors.toList()));
+                    }
+                }
+
+                UpdateWrapper<TBCrm> crmUpdateWrapper = new UpdateWrapper<>();
+                crmUpdateWrapper.lambda()
+                        .in(TBCrm::getRegionDetailId, willDeleteRegionDetailIdList)
+                        .set(TBCrm::getRegionCoordinatorId, null)
+                        .set(TBCrm::getRegionId, null)
+                        .set(TBCrm::getRegionDetailId, null)
+                        .set(TBCrm::getLeadId, null);
+                tbCrmService.update(crmUpdateWrapper);
+            }
+            tbServiceRegion.setId(serviceRegionId);
             this.updateById(tbServiceRegion);
         }
 
@@ -232,7 +272,7 @@ public class TBServiceRegionServiceImpl extends ServiceImpl<TBServiceRegionMappe
             // 同时清除派单和大区经理的关系
             Long serviceId = tbServiceRegion.getServiceId();
             TBService tbService = tbServiceService.getById(serviceId);
-            if (ServiceStatusEnum.FINISH.equals(tbService.getStatus())){
+            if (ServiceStatusEnum.FINISH.equals(tbService.getStatus())) {
                 throw ExceptionResultEnum.ERROR.exception(ServiceStatusEnum.FINISH.getTitle() + "的服务单元不能作废");
             }