Эх сурвалжийг харах

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

wangliang 1 жил өмнө
parent
commit
4510474b84

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

@@ -61,8 +61,8 @@ public class TBServiceRegionController {
     @RequestMapping(value = "/remove", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = ServiceRegionResult.class)})
     @OperationLog
-    public Result removeServiceRegion(@ApiParam(value = "服务单元id") @RequestParam(required = false) String serviceUnitId) {
-        tbServiceRegionService.removeServiceRegion(SystemConstant.convertIdToLong(serviceUnitId));
+    public Result removeServiceRegion(@ApiParam(value = "服务单元id") @RequestParam(required = false) String serviceRegionId) {
+        tbServiceRegionService.removeServiceRegion(SystemConstant.convertIdToLong(serviceRegionId));
         return ResultUtil.ok();
     }
 }

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

@@ -113,4 +113,16 @@ public interface TBCrmMapper extends BaseMapper<TBCrm> {
      */
     List<TBCrm> findOccupiedCrm(@Param("userId") Long userId,
                                 @Param("userArchivesId") Long userArchivesId);
+
+    /**
+     * 根据绑定的服务单元id和客户地址查询符合条件的派单
+     *
+     * @param serviceUnitId 服务单元id
+     * @param province      省份
+     * @param city          城市
+     * @return 派单集合
+     */
+    List<TBCrm> findByTBCrmListByServiceUnitIdAndAddress(@Param("serviceUnitId") Long serviceUnitId,
+                                                         @Param("province") String province,
+                                                         @Param("city") String city);
 }

+ 12 - 0
sop-business/src/main/java/com/qmth/sop/business/mapper/TBServiceRegionMapper.java

@@ -9,6 +9,8 @@ import com.qmth.sop.business.entity.TBServiceRegion;
 import com.qmth.sop.common.enums.ServiceStatusEnum;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * <p>
  * 服务区域规划表 Mapper 接口
@@ -32,4 +34,14 @@ public interface TBServiceRegionMapper extends BaseMapper<TBServiceRegion> {
                                                      @Param("leadId") Long leadId,
                                                      @Param("city") String city,
                                                      @Param("serviceStatus") ServiceStatusEnum serviceStatus);
+
+    /**
+     * 根据服务单元id和派单号查询大区经理
+     *
+     * @param serviceUnitId 服务单元id
+     * @param crmNo         派单号
+     * @return 大区经理id集合
+     */
+    List<Long> findRegionLeaderByServiceUnitIdAndCrmNo(@Param("serviceUnitId") Long serviceUnitId,
+                                                       @Param("crmNo") String crmNo);
 }

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

@@ -152,4 +152,14 @@ public interface TBCrmService extends IService<TBCrm> {
      * @param status 要更新的派单状态
      */
     void updateCrmStatus(String crmNo, CrmStatusEnum status);
+
+    /**
+     * 根据服务单元id和地址查询复核的crm派单集合
+     *
+     * @param serviceUnitId 服务单元id
+     * @param province      省份
+     * @param city          城市
+     * @return 派单
+     */
+    List<TBCrm> findByTBCrmListByServiceUnitIdAndAddress(Long serviceUnitId, String province, String city);
 }

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

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qmth.sop.business.bean.params.ServiceRegionParam;
 import com.qmth.sop.business.bean.result.ServiceRegionResult;
-import com.qmth.sop.business.bean.result.ServiceUnitResult;
 import com.qmth.sop.business.entity.TBServiceRegion;
 
 /**
@@ -44,6 +43,7 @@ public interface TBServiceRegionService extends IService<TBServiceRegion> {
      */
     void removeServiceRegion(Long serviceRegionId);
 
+
     /**
      * 查询大区经理
      *

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

@@ -45,6 +45,8 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
     private SysRoleService sysRoleService;
     @Resource
     private TBUserArchivesService tbUserArchivesService;
+    @Resource
+    private TBServiceRegionService tbServiceRegionService;
 
     @Override
     public IPage<CrmServiceResult> findServiceScopePage(Long serviceUnitId, String city, ProductTypeEnum productType, String customName, Boolean bindStatus, Integer pageNumber, Integer pageSize) {
@@ -92,7 +94,13 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
             }
         }
         List<TBCrm> tbCrmList = this.listByIds(crmIdList);
-        tbCrmList = tbCrmList.stream().peek(e -> e.setServiceId(serviceUnitId)).collect(Collectors.toList());
+        tbCrmList = tbCrmList.stream().peek(e -> {
+            Long regionLeaderId = tbServiceRegionService.findRegionLeader(serviceUnitId, e.getCrmNo());
+            if (Objects.nonNull(regionLeaderId)) {
+                e.setLeadId(regionLeaderId);
+            }
+            e.setServiceId(serviceUnitId);
+        }).collect(Collectors.toList());
         this.updateBatchById(tbCrmList);
     }
 
@@ -112,7 +120,10 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
             }
         }
         UpdateWrapper<TBCrm> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.lambda().set(TBCrm::getServiceId, null).eq(TBCrm::getId, tbCrm.getId());
+        updateWrapper.lambda()
+                .set(TBCrm::getServiceId, null)
+                .set(TBCrm::getLeadId, null)
+                .eq(TBCrm::getId, tbCrm.getId());
         this.update(updateWrapper);
     }
 
@@ -201,8 +212,13 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
     public boolean batchZone(long serviceId, long[] crmIds) {
         List<Long> crmIdList = Arrays.stream(crmIds).boxed().collect(Collectors.toList());
         List<TBCrm> tbCrmList = this.listByIds(crmIdList);
-        tbCrmList.forEach(e -> e.setServiceId(serviceId));
-
+        tbCrmList.forEach(e -> {
+            Long regionLeaderId = tbServiceRegionService.findRegionLeader(serviceId, e.getCrmNo());
+            if (Objects.nonNull(regionLeaderId)) {
+                e.setLeadId(regionLeaderId);
+            }
+            e.setServiceId(serviceId);
+        });
         return this.updateBatchById(tbCrmList);
     }
 
@@ -328,4 +344,9 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
         }
         this.updateById(tbCrm);
     }
+
+    @Override
+    public List<TBCrm> findByTBCrmListByServiceUnitIdAndAddress(Long serviceUnitId, String province, String city) {
+        return this.baseMapper.findByTBCrmListByServiceUnitIdAndAddress(serviceUnitId, province, city);
+    }
 }

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

@@ -3,13 +3,18 @@ package com.qmth.sop.business.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.sop.business.bean.dto.AreaDto;
+import com.qmth.sop.business.entity.TBCrm;
+import com.qmth.sop.business.entity.TBServiceRegion;
 import com.qmth.sop.business.entity.TBServiceRegionDetail;
 import com.qmth.sop.business.mapper.TBServiceRegionDetailMapper;
+import com.qmth.sop.business.service.TBCrmService;
 import com.qmth.sop.business.service.TBServiceRegionDetailService;
+import com.qmth.sop.business.service.TBServiceRegionService;
 import com.qmth.sop.common.contant.SystemConstant;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -24,20 +29,36 @@ import java.util.stream.Stream;
  */
 @Service
 public class TBServiceRegionDetailServiceImpl extends ServiceImpl<TBServiceRegionDetailMapper, TBServiceRegionDetail> implements TBServiceRegionDetailService {
+    @Resource
+    private TBCrmService tbCrmService;
+    @Resource
+    private TBServiceRegionService tbServiceRegionService;
 
     @Transactional
     @Override
     public void bindServiceRegionAreas(Long serviceRegionId, List<AreaDto> areaDtoList) {
+        TBServiceRegion db = tbServiceRegionService.getById(serviceRegionId);
+        Long serviceUnitId = db.getServiceId();
+        Long leaderId = db.getServiceId();
+
         // 删除之前绑定的区域
         this.remove(new QueryWrapper<TBServiceRegionDetail>().lambda().eq(TBServiceRegionDetail::getServiceRegionId, serviceRegionId));
+
         // 添加新绑定区域
         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);
+
             TBServiceRegionDetail detail = new TBServiceRegionDetail();
             detail.setId(SystemConstant.getDbUuid());
             detail.setServiceRegionId(serviceRegionId);
             detail.setCountry(e.getCountry());
-            detail.setProvince(e.getProvince());
-            detail.setCity(e.getCity());
+            detail.setProvince(province);
+            detail.setCity(city);
             detail.setArea(e.getArea());
             detail.setAddress(e.getAddress());
             return Stream.of(detail);

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

@@ -1,6 +1,7 @@
 package com.qmth.sop.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -145,6 +146,16 @@ public class TBServiceRegionServiceImpl extends ServiceImpl<TBServiceRegionMappe
             serviceRegionId = tbServiceRegion.getId();
         } else {
             // 编辑
+            TBServiceRegion db = this.getById(serviceRegionId);
+            Long dbLeadId = db.getLeadId();
+            Long dbServiceUnitId = db.getServiceId();
+
+            // 清空之前派单绑定的大区经理
+            UpdateWrapper<TBCrm> crmUpdateWrapper = new UpdateWrapper<>();
+            crmUpdateWrapper.lambda()
+                    .eq(TBCrm::getServiceId, dbServiceUnitId)
+                    .eq(TBCrm::getLeadId, dbLeadId)
+                    .set(TBCrm::getLeadId, null);
             this.updateById(tbServiceRegion);
         }
 
@@ -180,12 +191,31 @@ public class TBServiceRegionServiceImpl extends ServiceImpl<TBServiceRegionMappe
         if (Objects.isNull(tbServiceRegion)) {
             throw ExceptionResultEnum.ERROR.exception("服务区域规划不存在");
         }
+        // 同时清除派单和大区经理的关系
+        Long serviceId = tbServiceRegion.getServiceId();
+        Long leadId = tbServiceRegion.getLeadId();
+        UpdateWrapper<TBCrm> crmUpdateWrapper = new UpdateWrapper<>();
+        crmUpdateWrapper.lambda()
+                .eq(TBCrm::getServiceId, serviceId)
+                .eq(TBCrm::getLeadId, leadId)
+                .set(TBCrm::getLeadId, null);
+        tbCrmService.update(crmUpdateWrapper);
+
+        // 删除派单规划
         tbServiceRegion.setEnable(false);
         this.updateById(tbServiceRegion);
     }
 
     @Override
     public Long findRegionLeader(Long serviceUnitId, String crmNo) {
-        return null;
+        Long result = null;
+        List<Long> regionLeaderId = this.baseMapper.findRegionLeaderByServiceUnitIdAndCrmNo(serviceUnitId, crmNo);
+        if (CollectionUtils.isNotEmpty(regionLeaderId)) {
+            if (regionLeaderId.size() > 1) {
+                throw ExceptionResultEnum.ERROR.exception(String.format("派单号为[%s]的派单可匹配多个大区经理", crmNo));
+            }
+            result = regionLeaderId.get(0);
+        }
+        return result;
     }
 }

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

@@ -304,5 +304,24 @@
             AND tbc.status != 'FINISH'
         </where>
     </select>
+    <select id="findByTBCrmListByServiceUnitIdAndAddress" resultType="com.qmth.sop.business.entity.TBCrm">
+        SELECT
+            tbc.*
+        FROM
+            t_b_crm tbc
+                LEFT JOIN
+            sys_custom sc ON tbc.custom_id = sc.id
+        <where>
+            <if test="serviceUnitId != null">
+                AND tbc.service_id = #{serviceUnitId}
+            </if>
+            <if test="province != null and province != ''">
+                AND sc.province = #{province}
+            </if>
+            <if test="city != null and city != ''">
+                AND sc.city = #{city}
+            </if>
+        </where>
+    </select>
 
 </mapper>

+ 30 - 0
sop-business/src/main/resources/mapper/TBServiceRegionMapper.xml

@@ -39,4 +39,34 @@
         </where>
         ORDER BY tbsr.create_time DESC
     </select>
+    <select id="findRegionLeaderByServiceUnitIdAndCrmNo" resultType="java.lang.Long">
+        SELECT
+            tbsr.lead_id
+        FROM
+            t_b_service_region_detail tbsrd
+                LEFT JOIN
+            t_b_service_region tbsr ON tbsrd.service_region_id = tbsr.id
+                LEFT JOIN
+            t_b_service tbs ON tbsr.service_id = tbs.id AND tbs.enable
+                AND tbs.type != 'CANCEL'
+        <where>
+            <if test="crmNo != null and crmNo != '' and serviceUnitId != null">
+                AND EXISTS( SELECT
+                    1
+                FROM
+                (
+                SELECT
+                    tbc.crm_no,tbc.service_id, sc.province, sc.city
+                FROM
+                    t_b_crm tbc
+                LEFT JOIN sys_custom sc ON tbc.custom_id = sc.id) crmInfo
+                WHERE
+                    crmInfo.service_id = tbs.id
+                    AND crmInfo.province = tbsrd.province
+                    AND crmInfo.city = tbsrd.city
+                    AND crmInfo.service_id = #{serviceUnitId}
+                    AND crmInfo.crm_no = #{crmNo})
+            </if>
+        </where>
+    </select>
 </mapper>