Преглед изворни кода

add:服务区域规划,服务范围管理

caozixuan пре 1 година
родитељ
комит
7969ae0393

+ 44 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/params/ServiceScopeParam.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-11
+ */
+public class ServiceScopeParam {
+    @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;
+    }
+}

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

@@ -0,0 +1,43 @@
+package com.qmth.sop.business.bean.result;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 服务范围管理 - 派单小计
+ * @Author: CaoZixuan
+ * @Date: 2023-08-11
+ */
+public class CrmSubTotalResult {
+    @ApiModelProperty("共计服务派单")
+    private Integer totalCrmCount;
+
+    @ApiModelProperty("已划定派单")
+    private Integer bindCrmCount;
+
+    @ApiModelProperty("待划定派单")
+    private Integer unbindCrmCount;
+
+    public Integer getTotalCrmCount() {
+        return totalCrmCount;
+    }
+
+    public void setTotalCrmCount(Integer totalCrmCount) {
+        this.totalCrmCount = totalCrmCount;
+    }
+
+    public Integer getBindCrmCount() {
+        return bindCrmCount;
+    }
+
+    public void setBindCrmCount(Integer bindCrmCount) {
+        this.bindCrmCount = bindCrmCount;
+    }
+
+    public Integer getUnbindCrmCount() {
+        return unbindCrmCount;
+    }
+
+    public void setUnbindCrmCount(Integer unbindCrmCount) {
+        this.unbindCrmCount = unbindCrmCount;
+    }
+}

+ 9 - 1
sop-business/src/main/java/com/qmth/sop/business/mapper/TBCrmMapper.java

@@ -9,6 +9,8 @@ import com.qmth.sop.business.entity.TBCrm;
 import com.qmth.sop.common.enums.ProductTypeEnum;
 import com.qmth.sop.common.enums.ProductTypeEnum;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
+import java.util.List;
+
 /**
 /**
  * <p>
  * <p>
  * 派单信息表 Mapper 接口
  * 派单信息表 Mapper 接口
@@ -57,5 +59,11 @@ public interface TBCrmMapper extends BaseMapper<TBCrm> {
                                                 @Param("startTime") Long startTime,
                                                 @Param("startTime") Long startTime,
                                                 @Param("endTime") Long endTime);
                                                 @Param("endTime") Long endTime);
 
 
-    // TODO: 2023/8/10  根据服务单元id查询 
+    /**
+     * 根据服务单元id集合查询派单部分信息
+     *
+     * @param serviceIdList 服务单元id集合
+     * @return 派单信息
+     */
+    List<CrmServiceResult> findOrderListByServiceIds(@Param("serviceIdList") List<Long> serviceIdList);
 }
 }

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

@@ -2,7 +2,9 @@ package com.qmth.sop.business.service;
 
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.sop.business.bean.params.ServiceScopeParam;
 import com.qmth.sop.business.bean.result.CrmServiceResult;
 import com.qmth.sop.business.bean.result.CrmServiceResult;
+import com.qmth.sop.business.bean.result.CrmSubTotalResult;
 import com.qmth.sop.business.entity.TBCrm;
 import com.qmth.sop.business.entity.TBCrm;
 import com.qmth.sop.common.enums.ProductTypeEnum;
 import com.qmth.sop.common.enums.ProductTypeEnum;
 
 
@@ -54,4 +56,31 @@ public interface TBCrmService extends IService<TBCrm> {
      * @return 派单部分信息
      * @return 派单部分信息
      */
      */
     List<CrmServiceResult> findCrmOrderByServiceIdList(List<Long> serviceIdList);
     List<CrmServiceResult> findCrmOrderByServiceIdList(List<Long> serviceIdList);
+
+    /**
+     * 服务范围管理 - 批量划定派单和服务单元关系
+     *
+     * @param crmIdList     派单id集合
+     * @param serviceUnitId 服务单元id
+     */
+    /**
+     * 服务范围管理 - 批量划定派单和服务单元关系
+     *
+     * @param serviceScopeParam 服务范围划定参数
+     */
+    void bindCrmWithServiceBatch(ServiceScopeParam serviceScopeParam);
+
+    /**
+     * 服务范围管理 - 移除(解绑派单和服务单元)
+     *
+     * @param crmId 派单id
+     */
+    void unbindCrmWithService(Long crmId);
+
+    /**
+     * 服务范围管理 - 查询派单小计
+     *
+     * @return 派单小计
+     */
+    CrmSubTotalResult findCrmSubTotalData();
 }
 }

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

@@ -36,4 +36,11 @@ public interface TBServiceRegionService extends IService<TBServiceRegion> {
      * @return 服务区域规划id
      * @return 服务区域规划id
      */
      */
     Long editServiceRegion(ServiceRegionParam serviceRegionParam);
     Long editServiceRegion(ServiceRegionParam serviceRegionParam);
+
+    /**
+     * 删除大区规划
+     *
+     * @param serviceRegionId 删除服务区域规划
+     */
+    void removeServiceRegion(Long serviceRegionId);
 }
 }

+ 72 - 2
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBCrmServiceImpl.java

@@ -1,17 +1,29 @@
 package com.qmth.sop.business.service.impl;
 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.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.sop.business.bean.params.ServiceScopeParam;
 import com.qmth.sop.business.bean.result.CrmServiceResult;
 import com.qmth.sop.business.bean.result.CrmServiceResult;
+import com.qmth.sop.business.bean.result.CrmSubTotalResult;
 import com.qmth.sop.business.entity.TBCrm;
 import com.qmth.sop.business.entity.TBCrm;
+import com.qmth.sop.business.entity.TBService;
 import com.qmth.sop.business.mapper.TBCrmMapper;
 import com.qmth.sop.business.mapper.TBCrmMapper;
 import com.qmth.sop.business.service.TBCrmService;
 import com.qmth.sop.business.service.TBCrmService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.sop.business.service.TBServiceService;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.contant.SystemConstant;
+import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.ProductTypeEnum;
 import com.qmth.sop.common.enums.ProductTypeEnum;
+import com.qmth.sop.common.enums.ServiceStatusEnum;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -23,6 +35,8 @@ import java.util.List;
  */
  */
 @Service
 @Service
 public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements TBCrmService {
 public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements TBCrmService {
+    @Resource
+    private TBServiceService tbServiceService;
 
 
     @Override
     @Override
     public IPage<CrmServiceResult> findServiceScopePage(Long serviceUnitId, String city, ProductTypeEnum productType, String customName, Boolean bindStatus, Integer pageNumber, Integer pageSize) {
     public IPage<CrmServiceResult> findServiceScopePage(Long serviceUnitId, String city, ProductTypeEnum productType, String customName, Boolean bindStatus, Integer pageNumber, Integer pageSize) {
@@ -48,7 +62,63 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
 
 
     @Override
     @Override
     public List<CrmServiceResult> findCrmOrderByServiceIdList(List<Long> serviceIdList) {
     public List<CrmServiceResult> findCrmOrderByServiceIdList(List<Long> serviceIdList) {
+        return this.baseMapper.findOrderListByServiceIds(serviceIdList);
+    }
+
+    @Transactional
+    @Override
+    public void bindCrmWithServiceBatch(ServiceScopeParam serviceScopeParam) {
+        List<Long> crmIdList = serviceScopeParam.getCrmIdList();
+        Long serviceUnitId = serviceScopeParam.getServiceUnitId();
+        if (CollectionUtils.isEmpty(crmIdList)) {
+            throw ExceptionResultEnum.ERROR.exception("未选择要划定的派单");
+        }
+
+        TBService tbService = tbServiceService.getById(serviceUnitId);
+        if (Objects.isNull(tbService) || !tbService.getEnable()) {
+            throw ExceptionResultEnum.ERROR.exception("服务单元不存在");
+        } else {
+            ServiceStatusEnum status = tbService.getStatus();
+            if (ServiceStatusEnum.FINISH.equals(status) || ServiceStatusEnum.CANCEL.equals(status)) {
+                throw ExceptionResultEnum.ERROR.exception("不能划定进已完结或已作废的服务单元");
+            }
+        }
+        List<TBCrm> tbCrmList = this.listByIds(crmIdList);
+        tbCrmList = tbCrmList.stream().peek(e -> e.setServiceId(serviceUnitId)).collect(Collectors.toList());
+        this.updateBatchById(tbCrmList);
+    }
+
+    @Transactional
+    @Override
+    public void unbindCrmWithService(Long crmId) {
+        TBCrm tbCrm = this.getById(crmId);
+        if (Objects.isNull(tbCrm)) {
+            throw ExceptionResultEnum.ERROR.exception("未找到派单信息");
+        }
+        Long serviceUnitId = tbCrm.getServiceId();
+        TBService tbService = tbServiceService.getById(serviceUnitId);
+        if (Objects.nonNull(tbService)) {
+            ServiceStatusEnum status = tbService.getStatus();
+            if (ServiceStatusEnum.FINISH.equals(status)) {
+                throw ExceptionResultEnum.ERROR.exception("服务单元的当前状态更新为" + ServiceStatusEnum.FINISH.name() + "不允许移除");
+            }
+        }
+    }
 
 
-        return null;
+    @Override
+    public CrmSubTotalResult findCrmSubTotalData() {
+        List<TBCrm> tbCrmList = this.list(new QueryWrapper<TBCrm>().lambda().eq(TBCrm::getEnable, true));
+        int totalCrmCount = tbCrmList.size();
+        int bindCrmCount = 0;
+        int unbindCrmCount = 0;
+        if (totalCrmCount > 0) {
+            bindCrmCount = (int) tbCrmList.stream().filter(e -> e.getServiceId() != null).count();
+            unbindCrmCount = (int) tbCrmList.stream().filter(e -> e.getServiceId() == null).count();
+        }
+        CrmSubTotalResult crmSubTotalResult = new CrmSubTotalResult();
+        crmSubTotalResult.setTotalCrmCount(totalCrmCount);
+        crmSubTotalResult.setBindCrmCount(bindCrmCount);
+        crmSubTotalResult.setUnbindCrmCount(unbindCrmCount);
+        return crmSubTotalResult;
     }
     }
 }
 }

+ 59 - 3
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionServiceImpl.java

@@ -1,20 +1,24 @@
 package com.qmth.sop.business.service.impl;
 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.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.sop.business.bean.dto.AreaDto;
 import com.qmth.sop.business.bean.dto.AreaDto;
 import com.qmth.sop.business.bean.params.ServiceRegionParam;
 import com.qmth.sop.business.bean.params.ServiceRegionParam;
+import com.qmth.sop.business.bean.result.CrmServiceResult;
 import com.qmth.sop.business.bean.result.ServiceRegionResult;
 import com.qmth.sop.business.bean.result.ServiceRegionResult;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.TBService;
 import com.qmth.sop.business.entity.TBService;
 import com.qmth.sop.business.entity.TBServiceRegion;
 import com.qmth.sop.business.entity.TBServiceRegion;
+import com.qmth.sop.business.entity.TBServiceRegionDetail;
 import com.qmth.sop.business.mapper.TBServiceRegionMapper;
 import com.qmth.sop.business.mapper.TBServiceRegionMapper;
 import com.qmth.sop.business.service.*;
 import com.qmth.sop.business.service.*;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.RoleTypeEnum;
 import com.qmth.sop.common.enums.RoleTypeEnum;
 import com.qmth.sop.common.enums.ServiceStatusEnum;
 import com.qmth.sop.common.enums.ServiceStatusEnum;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
@@ -51,9 +55,50 @@ public class TBServiceRegionServiceImpl extends ServiceImpl<TBServiceRegionMappe
         }
         }
         IPage<ServiceRegionResult> page = this.baseMapper.findServiceRegionPage(new Page<>(pageNumber, pageSize), serviceUnitId, leadId, city, ServiceStatusEnum.CANCEL);
         IPage<ServiceRegionResult> page = this.baseMapper.findServiceRegionPage(new Page<>(pageNumber, pageSize), serviceUnitId, leadId, city, ServiceStatusEnum.CANCEL);
         List<ServiceRegionResult> records = page.getRecords();
         List<ServiceRegionResult> records = page.getRecords();
-        // 涉及的服务单元id集合
-        List<Long> serviceUnitIdList = records.stream().map(ServiceRegionResult::getServiceUnitId).distinct().collect(Collectors.toList());
-        // TODO: 2023/8/10 和派单关联
+        if (records.size() > 0) {
+            // 涉及的服务单元id集合
+            List<Long> serviceUnitIdList = records.stream().map(ServiceRegionResult::getServiceUnitId).distinct().collect(Collectors.toList());
+
+            // 派单
+            List<CrmServiceResult> crmServiceResultList = tbCrmService.findCrmOrderByServiceIdList(serviceUnitIdList);
+            // 规划位置
+            List<Long> serviceRegionIdList = records.stream().map(ServiceRegionResult::getServiceRegionId).distinct().collect(Collectors.toList());
+            List<TBServiceRegionDetail> tbServiceRegionDetailList = tbServiceRegionDetailService.list(new QueryWrapper<TBServiceRegionDetail>().lambda().eq(TBServiceRegionDetail::getServiceRegionId, serviceRegionIdList));
+
+            for (ServiceRegionResult record : records) {
+                Long unitId = record.getServiceUnitId();
+                Long regionId = record.getServiceRegionId();
+
+                List<TBServiceRegionDetail> detailList = tbServiceRegionDetailList
+                        .stream()
+                        .filter(e -> regionId.equals(e.getServiceRegionId()))
+                        .collect(Collectors.toList());
+                if (CollectionUtils.isNotEmpty(detailList)) {
+                    int orderCount = 0;
+                    StringBuilder regionInfo = new StringBuilder();
+                    for (TBServiceRegionDetail detail : detailList) {
+                        String detailProvince = detail.getProvince();
+                        String detailCity = detail.getCity();
+                        String regionInfoCell = detailProvince + detailCity;
+
+                        List<CrmServiceResult> crmList = crmServiceResultList.stream()
+                                .filter(e -> unitId.equals(e.getServiceUnitId())
+                                        && detailProvince.equals(e.getProvince())
+                                        && detailCity.equals(e.getCity()))
+                                .collect(Collectors.toList());
+                        int count = crmList.size();
+                        regionInfoCell = regionInfoCell + "(" + count + ")";
+                        orderCount = orderCount + count;
+                        regionInfo.append(regionInfoCell).append("、");
+                    }
+                    if (regionInfo.length() > 0) {
+                        regionInfo = new StringBuilder(regionInfo.substring(0, regionInfo.length() - 1));
+                    }
+                    record.setOrderCount(orderCount);
+                    record.setRegionInfo(regionInfo.toString());
+                }
+            }
+        }
         return page;
         return page;
     }
     }
 
 
@@ -98,4 +143,15 @@ public class TBServiceRegionServiceImpl extends ServiceImpl<TBServiceRegionMappe
         tbServiceRegionDetailService.bindServiceRegionAreas(serviceRegionId, areaDtoList);
         tbServiceRegionDetailService.bindServiceRegionAreas(serviceRegionId, areaDtoList);
         return serviceRegionId;
         return serviceRegionId;
     }
     }
+
+    @Transactional
+    @Override
+    public void removeServiceRegion(Long serviceRegionId) {
+        TBServiceRegion tbServiceRegion = this.getById(serviceRegionId);
+        if (Objects.isNull(tbServiceRegion)) {
+            throw ExceptionResultEnum.ERROR.exception("服务区域规划不存在");
+        }
+        tbServiceRegion.setEnable(false);
+        this.updateById(tbServiceRegion);
+    }
 }
 }

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

@@ -24,6 +24,7 @@
                 LEFT JOIN
                 LEFT JOIN
             sys_level sl ON sc.level_id = sl.id
             sys_level sl ON sc.level_id = sl.id
         <where>
         <where>
+            AND tbc.enable
             <if test="serviceUnitId != null">
             <if test="serviceUnitId != null">
                 AND tbc.service_id = #{serviceUnitId}
                 AND tbc.service_id = #{serviceUnitId}
             </if>
             </if>
@@ -78,6 +79,7 @@
                 LEFT JOIN
                 LEFT JOIN
             sys_user creator ON tbc.create_id = creator.id
             sys_user creator ON tbc.create_id = creator.id
         <where>
         <where>
+            AND tbc.enable
             AND tbc.service_id IS NULL
             AND tbc.service_id IS NULL
             <if test="crmUserId != null">
             <if test="crmUserId != null">
                 AND tbc.custom_id = #{crmUserId}
                 AND tbc.custom_id = #{crmUserId}
@@ -100,4 +102,31 @@
         </where>
         </where>
         ORDER BY tbc.create_time DESC
         ORDER BY tbc.create_time DESC
     </select>
     </select>
+
+    <select id="findOrderListByServiceIds" resultType="com.qmth.sop.business.bean.result.CrmServiceResult">
+        SELECT
+            tbc.id AS crmId,
+            tbc.name AS crmNo,
+            tbc.custom_id AS customId,
+            sc.type AS productType,
+            sc.name AS customName,
+            sc.province,
+            sc.city,
+            tbc.service_id AS serviceUnitId
+        FROM
+            t_b_crm tbc
+                LEFT JOIN
+            t_b_service tbs ON tbc.service_id = tbs.id AND tbs.enable
+                LEFT JOIN
+            sys_custom sc ON tbc.custom_id = sc.id
+        <where>
+            AND tbc.enable
+            <if test="serviceIdList != null and serviceIdList.size > 0">
+                AND tbc.service_id IN
+                <foreach collection="serviceIdList" item="item" index="index" open="(" separator="," close=")">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+    </select>
 </mapper>
 </mapper>

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

@@ -16,6 +16,7 @@
                 LEFT JOIN
                 LEFT JOIN
             sys_user leader ON tbsr.lead_id = leader.id
             sys_user leader ON tbsr.lead_id = leader.id
         <where>
         <where>
+            AND tbsr.enable
             AND tbs.enable
             AND tbs.enable
             <if test="serviceUnitId != null">
             <if test="serviceUnitId != null">
                 AND tbsr.service_id = #{serviceUnitId}
                 AND tbsr.service_id = #{serviceUnitId}

+ 4 - 1
sop-common/src/main/java/com/qmth/sop/common/contant/SystemConstant.java

@@ -132,7 +132,10 @@ public class SystemConstant {
     public static final String PREFIX_URL_LOG = "/sys/log";
     public static final String PREFIX_URL_LOG = "/sys/log";
     public static final String PREFIX_URL_NOTICE = "/sys/notice";
     public static final String PREFIX_URL_NOTICE = "/sys/notice";
     public static final String PREFIX_URL_MESSAGE = "/sys/message";
     public static final String PREFIX_URL_MESSAGE = "/sys/message";
-    public static final String PREFIX_URL_SERVICE_UNIT = "/service/unit";
+    public static final String PREFIX_URL_SERVICE_CRM = "/service/crm";
+    public static final String PREFIX_URL_SERVICE_SERVICE_UNIT = "/service/service/unit";
+    public static final String PREFIX_URL_SERVICE_SERVICE_SCOPE = "/service/service/scope";
+    public static final String PREFIX_URL_SERVICE_SERVICE_REGION = "/service/service/region";
     public static final String PREFIX_URL_ROLE = "/admin/role";
     public static final String PREFIX_URL_ROLE = "/admin/role";
     public static final String PREFIX_URL_DELAY_WARN = "/admin/tb/delay/warn";
     public static final String PREFIX_URL_DELAY_WARN = "/admin/tb/delay/warn";
     public static final String PREFIX_URL_DELAY_WARN_DETAIL = "/admin/tb/delay/warn/detail";
     public static final String PREFIX_URL_DELAY_WARN_DETAIL = "/admin/tb/delay/warn/detail";

+ 6 - 1
sop-server/src/main/java/com/qmth/sop/server/api/TBCrmController.java

@@ -1,6 +1,9 @@
 package com.qmth.sop.server.api;
 package com.qmth.sop.server.api;
 
 
 
 
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.sop.common.contant.SystemConstant;
+import io.swagger.annotations.Api;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
@@ -13,8 +16,10 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @author wangliang
  * @since 2023-08-01
  * @since 2023-08-01
  */
  */
+
+@Api(tags = "派单管理前端控制器")
 @RestController
 @RestController
-@RequestMapping("/t-bcrm")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SERVICE_CRM)
 public class TBCrmController {
 public class TBCrmController {
 
 
 }
 }

+ 1 - 1
sop-server/src/main/java/com/qmth/sop/server/api/TBServiceController.java

@@ -31,7 +31,7 @@ import javax.validation.constraints.Min;
  */
  */
 @Api(tags = "服务单元管理前端控制器")
 @Api(tags = "服务单元管理前端控制器")
 @RestController
 @RestController
-@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SERVICE_UNIT)
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SERVICE_SERVICE_UNIT)
 public class TBServiceController {
 public class TBServiceController {
     @Resource
     @Resource
     private TBServiceService tbServiceService;
     private TBServiceService tbServiceService;

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

@@ -1,9 +1,21 @@
 package com.qmth.sop.server.api;
 package com.qmth.sop.server.api;
 
 
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.sop.business.bean.params.ServiceRegionParam;
+import com.qmth.sop.business.bean.result.ServiceRegionResult;
+import com.qmth.sop.business.service.TBServiceRegionService;
+import com.qmth.sop.common.contant.SystemConstant;
+import com.qmth.sop.common.util.Result;
+import com.qmth.sop.common.util.ResultUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
 
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -13,8 +25,40 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @author wangliang
  * @since 2023-08-01
  * @since 2023-08-01
  */
  */
+@Api(tags = "服务区域规划前端控制器")
 @RestController
 @RestController
-@RequestMapping("/t-bservice-region")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SERVICE_SERVICE_REGION)
 public class TBServiceRegionController {
 public class TBServiceRegionController {
+    @Resource
+    private TBServiceRegionService tbServiceRegionService;
 
 
-}
+    @ApiOperation(value = "服务区域规划-分页查询")
+    @RequestMapping(value = "/page", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = ServiceRegionResult.class)})
+    public Result findServiceRegionPage(@ApiParam(value = "服务单元id") @RequestParam(required = false) String serviceUnitId,
+                                        @ApiParam(value = "大区经理") @RequestParam(required = false) String leadId,
+                                        @ApiParam(value = "城市") @RequestParam(required = false) String city,
+                                        @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                                        @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+
+        return ResultUtil.ok(tbServiceRegionService.findServiceRegionPage(SystemConstant.convertIdToLong(serviceUnitId), SystemConstant.convertIdToLong(leadId), city, pageNumber, pageSize));
+    }
+
+    @ApiOperation(value = "服务区域规划-编辑")
+    @RequestMapping(value = "/edit", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "操作成功", response = Result.class)})
+    public Result bindCrmWithServiceBatch(@Valid @RequestBody ServiceRegionParam serviceRegionParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        return ResultUtil.ok(tbServiceRegionService.editServiceRegion(serviceRegionParam));
+    }
+
+    @ApiOperation(value = "服务区域规划-删除")
+    @RequestMapping(value = "/remove", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "删除成功", response = ServiceRegionResult.class)})
+    public Result removeServiceRegion(@ApiParam(value = "服务单元id") @RequestParam(required = false) String serviceUnitId) {
+        tbServiceRegionService.removeServiceRegion(SystemConstant.convertIdToLong(serviceUnitId));
+        return ResultUtil.ok();
+    }
+}

+ 73 - 4
sop-server/src/main/java/com/qmth/sop/server/api/TBServiceScopeController.java

@@ -1,9 +1,22 @@
 package com.qmth.sop.server.api;
 package com.qmth.sop.server.api;
 
 
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.sop.business.bean.params.ServiceScopeParam;
+import com.qmth.sop.business.bean.result.CrmServiceResult;
+import com.qmth.sop.business.service.TBCrmService;
+import com.qmth.sop.common.contant.SystemConstant;
+import com.qmth.sop.common.enums.ProductTypeEnum;
+import com.qmth.sop.common.util.Result;
+import com.qmth.sop.common.util.ResultUtil;
+import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
 
 
-import org.springframework.web.bind.annotation.RestController;
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -13,8 +26,64 @@ import org.springframework.web.bind.annotation.RestController;
  * @author wangliang
  * @author wangliang
  * @since 2023-08-01
  * @since 2023-08-01
  */
  */
+@Api(tags = "服务范围管理前端控制器")
 @RestController
 @RestController
-@RequestMapping("/t-bservice-scope")
+@RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_SERVICE_SERVICE_SCOPE)
 public class TBServiceScopeController {
 public class TBServiceScopeController {
+    @Resource
+    private TBCrmService tbCrmService;
 
 
-}
+    @ApiOperation(value = "服务范围管理-分页查询")
+    @RequestMapping(value = "/page", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = CrmServiceResult.class)})
+    public Result findServiceScopePage(@ApiParam(value = "服务单元id") @RequestParam(required = false) String serviceUnitId,
+                                       @ApiParam(value = "城市") @RequestParam(required = false) String city,
+                                       @ApiParam(value = "客户类型") @RequestParam(required = false) ProductTypeEnum productType,
+                                       @ApiParam(value = "客户名称") @RequestParam(required = false) String customName,
+                                       @ApiParam(value = "派单绑定状态") @RequestParam(required = false) Boolean bindStatus,
+                                       @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                                       @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+
+        return ResultUtil.ok(tbCrmService.findServiceScopePage(SystemConstant.convertIdToLong(serviceUnitId), city, productType, customName, bindStatus, pageNumber, pageSize));
+    }
+
+    @ApiOperation(value = "服务范围管理-新增服务范围-未绑定派单分页查询")
+    @RequestMapping(value = "/unbind/page", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = CrmServiceResult.class)})
+    public Result findUnbindOrderPage(@ApiParam(value = "派单人") @RequestParam(required = false) String crmUserId,
+                                      @ApiParam(value = "客户类型") @RequestParam(required = false) ProductTypeEnum productType,
+                                      @ApiParam(value = "客户名称") @RequestParam(required = false) String customName,
+                                      @ApiParam(value = "项目单号") @RequestParam(required = false) String crmNo,
+                                      @ApiParam(value = "派单时间-起始") @RequestParam(required = false) Long startTime,
+                                      @ApiParam(value = "派单时间-截止") @RequestParam(required = false) Long endTime,
+                                      @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber,
+                                      @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) {
+        return ResultUtil.ok(tbCrmService.findUnbindOrderPage(SystemConstant.convertIdToLong(crmUserId), productType, customName, crmNo, startTime, endTime, pageNumber, pageSize));
+    }
+
+    @ApiOperation(value = "服务范围管理-批量划定派单和服务单元关系")
+    @RequestMapping(value = "/bind_batch", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "操作成功", response = Result.class)})
+    public Result bindCrmWithServiceBatch(@Valid @RequestBody ServiceScopeParam serviceScopeParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        tbCrmService.bindCrmWithServiceBatch(serviceScopeParam);
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "服务范围管理-移出")
+    @RequestMapping(value = "/unbind", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "操作成功", response = Result.class)})
+    public Result unbind(@ApiParam(value = "派单id") @RequestParam(required = false) String crmId) {
+        tbCrmService.unbindCrmWithService(SystemConstant.convertIdToLong(crmId));
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "服务范围管理-派单小计")
+    @RequestMapping(value = "/subTotal", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
+    public Result findCrmSubTotalData() {
+        return ResultUtil.ok(tbCrmService.findCrmSubTotalData());
+    }
+}