Explorar o código

Merge branch 'dev_v1.0.0' of http://git.qmth.com.cn/sop/server into dev_v1.0.0

shudonghui hai 1 ano
pai
achega
0c42643cd3
Modificáronse 20 ficheiros con 554 adicións e 66 borrados
  1. 65 0
      sop-business/src/main/java/com/qmth/sop/business/bean/dto/AreaDto.java
  2. 72 0
      sop-business/src/main/java/com/qmth/sop/business/bean/params/ServiceRegionParam.java
  3. 92 0
      sop-business/src/main/java/com/qmth/sop/business/bean/result/ServiceRegionResult.java
  4. 2 2
      sop-business/src/main/java/com/qmth/sop/business/entity/TBServiceRegionDetail.java
  5. 2 2
      sop-business/src/main/java/com/qmth/sop/business/mapper/TBServiceRegionDetailMapper.java
  6. 21 2
      sop-business/src/main/java/com/qmth/sop/business/mapper/TBServiceRegionMapper.java
  7. 10 0
      sop-business/src/main/java/com/qmth/sop/business/service/SysUserRoleService.java
  8. 0 16
      sop-business/src/main/java/com/qmth/sop/business/service/TBServiceRegionDeatilService.java
  9. 25 0
      sop-business/src/main/java/com/qmth/sop/business/service/TBServiceRegionDetailService.java
  10. 24 1
      sop-business/src/main/java/com/qmth/sop/business/service/TBServiceRegionService.java
  11. 19 0
      sop-business/src/main/java/com/qmth/sop/business/service/impl/SysUserRoleServiceImpl.java
  12. 0 20
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionDeatilServiceImpl.java
  13. 45 0
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionDetailServiceImpl.java
  14. 83 2
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionServiceImpl.java
  15. 3 11
      sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceServiceImpl.java
  16. 5 2
      sop-business/src/main/resources/db/log/caozixuan_update_log.sql
  17. 1 1
      sop-business/src/main/resources/mapper/TBServiceRegionDeatilMapper.xml
  18. 36 0
      sop-business/src/main/resources/mapper/TBServiceRegionMapper.xml
  19. 47 5
      sop-server/src/main/java/com/qmth/sop/server/api/TBServiceController.java
  20. 2 2
      sop-server/src/main/java/com/qmth/sop/server/api/TBServiceRegionDetailController.java

+ 65 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/dto/AreaDto.java

@@ -0,0 +1,65 @@
+package com.qmth.sop.business.bean.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 区域dto
+ * @Author: CaoZixuan
+ * @Date: 2023-08-09
+ */
+public class AreaDto {
+    @ApiModelProperty(value = "国家")
+    private String country;
+
+    @ApiModelProperty(value = "省份")
+    private String province;
+
+    @ApiModelProperty(value = "城市")
+    private String city;
+
+    @ApiModelProperty(value = "县区")
+    private String area;
+
+    @ApiModelProperty(value = "地址")
+    private String address;
+
+    public String getCountry() {
+        return country;
+    }
+
+    public void setCountry(String country) {
+        this.country = country;
+    }
+
+    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;
+    }
+
+    public String getArea() {
+        return area;
+    }
+
+    public void setArea(String area) {
+        this.area = area;
+    }
+
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+}

+ 72 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/params/ServiceRegionParam.java

@@ -0,0 +1,72 @@
+package com.qmth.sop.business.bean.params;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import com.qmth.sop.business.annotation.EditKey;
+import com.qmth.sop.business.bean.dto.AreaDto;
+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-09
+ */
+public class ServiceRegionParam {
+    @EditKey
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty("服务区域规划id")
+    private Long serviceRegionId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty("服务单元id")
+    @NotNull(message = "请提供服务单元")
+    @Range(min = 1L, message = "请提供服务单元")
+    private Long serviceUnitId;
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty("大区经理id")
+    @NotNull(message = "请提供大区经理")
+    @Range(min = 1L, message = "请提供大区经理")
+    private Long leadId;
+
+    @ApiModelProperty("地区集合")
+    @NotEmpty(message = "请提供区域划分")
+    private List<AreaDto> areaDtoList;
+
+    public Long getServiceRegionId() {
+        return serviceRegionId;
+    }
+
+    public void setServiceRegionId(Long serviceRegionId) {
+        this.serviceRegionId = serviceRegionId;
+    }
+
+    public Long getServiceUnitId() {
+        return serviceUnitId;
+    }
+
+    public void setServiceUnitId(Long serviceUnitId) {
+        this.serviceUnitId = serviceUnitId;
+    }
+
+    public Long getLeadId() {
+        return leadId;
+    }
+
+    public void setLeadId(Long leadId) {
+        this.leadId = leadId;
+    }
+
+    public List<AreaDto> getAreaDtoList() {
+        return areaDtoList;
+    }
+
+    public void setAreaDtoList(List<AreaDto> areaDtoList) {
+        this.areaDtoList = areaDtoList;
+    }
+}

+ 92 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/result/ServiceRegionResult.java

@@ -0,0 +1,92 @@
+package com.qmth.sop.business.bean.result;
+
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Description: 服务区域规划查询结果
+ * @Author: CaoZixuan
+ * @Date: 2023-08-09
+ */
+public class ServiceRegionResult {
+    @ApiModelProperty(value = "服务区域规划id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long serviceRegionId;
+
+    @ApiModelProperty(value = "服务单元id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long serviceUnitId;
+
+    @ApiModelProperty(value = "服务单元名称")
+    private String serviceUnitName;
+
+    @ApiModelProperty(value = "大区经理")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long leadId;
+
+    @ApiModelProperty(value = "大区经理名称")
+    private String leadName;
+
+    @ApiModelProperty(value = "区域规划信息")
+    private String regionInfo;
+
+    @ApiModelProperty(value = "派单共计")
+    private Integer orderCount;
+
+    public Long getServiceRegionId() {
+        return serviceRegionId;
+    }
+
+    public void setServiceRegionId(Long serviceRegionId) {
+        this.serviceRegionId = serviceRegionId;
+    }
+
+    public Long getServiceUnitId() {
+        return serviceUnitId;
+    }
+
+    public void setServiceUnitId(Long serviceUnitId) {
+        this.serviceUnitId = serviceUnitId;
+    }
+
+    public String getServiceUnitName() {
+        return serviceUnitName;
+    }
+
+    public void setServiceUnitName(String serviceUnitName) {
+        this.serviceUnitName = serviceUnitName;
+    }
+
+    public Long getLeadId() {
+        return leadId;
+    }
+
+    public void setLeadId(Long leadId) {
+        this.leadId = leadId;
+    }
+
+    public String getLeadName() {
+        return leadName;
+    }
+
+    public void setLeadName(String leadName) {
+        this.leadName = leadName;
+    }
+
+    public String getRegionInfo() {
+        return regionInfo;
+    }
+
+    public void setRegionInfo(String regionInfo) {
+        this.regionInfo = regionInfo;
+    }
+
+    public Integer getOrderCount() {
+        return orderCount;
+    }
+
+    public void setOrderCount(Integer orderCount) {
+        this.orderCount = orderCount;
+    }
+}

+ 2 - 2
sop-business/src/main/java/com/qmth/sop/business/entity/TBServiceRegionDeatil.java → sop-business/src/main/java/com/qmth/sop/business/entity/TBServiceRegionDetail.java

@@ -15,8 +15,8 @@ import java.io.Serializable;
  * @author wangliang
  * @since 2023-08-01
  */
-@ApiModel(value="TBServiceRegionDeatil对象", description="服务区域规划明细表")
-public class TBServiceRegionDeatil implements Serializable {
+@ApiModel(value="TBServiceRegionDetail对象", description="服务区域规划明细表")
+public class TBServiceRegionDetail implements Serializable {
 
     private static final long serialVersionUID = 1L;
 

+ 2 - 2
sop-business/src/main/java/com/qmth/sop/business/mapper/TBServiceRegionDeatilMapper.java → sop-business/src/main/java/com/qmth/sop/business/mapper/TBServiceRegionDetailMapper.java

@@ -1,6 +1,6 @@
 package com.qmth.sop.business.mapper;
 
-import com.qmth.sop.business.entity.TBServiceRegionDeatil;
+import com.qmth.sop.business.entity.TBServiceRegionDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
@@ -11,6 +11,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author wangliang
  * @since 2023-08-01
  */
-public interface TBServiceRegionDeatilMapper extends BaseMapper<TBServiceRegionDeatil> {
+public interface TBServiceRegionDetailMapper extends BaseMapper<TBServiceRegionDetail> {
 
 }

+ 21 - 2
sop-business/src/main/java/com/qmth/sop/business/mapper/TBServiceRegionMapper.java

@@ -1,7 +1,13 @@
 package com.qmth.sop.business.mapper;
 
-import com.qmth.sop.business.entity.TBServiceRegion;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.qmth.sop.business.bean.result.ServiceRegionResult;
+import com.qmth.sop.business.bean.result.SysLogResult;
+import com.qmth.sop.business.entity.TBServiceRegion;
+import com.qmth.sop.common.enums.ServiceStatusEnum;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -12,5 +18,18 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2023-08-01
  */
 public interface TBServiceRegionMapper extends BaseMapper<TBServiceRegion> {
-
+    /**
+     * 服务区域规划分页查询
+     *
+     * @param iPage         分页参数
+     * @param serviceUnitId 服务单元id
+     * @param leadId        大区经理id
+     * @param city          区域城市
+     * @return 分页查询结果
+     */
+    IPage<ServiceRegionResult> findServiceRegionPage(@Param("iPage") Page<SysLogResult> iPage,
+                                                     @Param("serviceUnitId") Long serviceUnitId,
+                                                     @Param("leadId") Long leadId,
+                                                     @Param("city") String city,
+                                                     @Param("serviceStatus") ServiceStatusEnum serviceStatus);
 }

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

@@ -5,6 +5,7 @@ import com.qmth.sop.business.bean.result.MenuResult;
 import com.qmth.sop.business.entity.SysRole;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.SysUserRole;
+import com.qmth.sop.common.enums.RoleTypeEnum;
 
 import java.util.List;
 
@@ -33,6 +34,15 @@ public interface SysUserRoleService extends IService<SysUserRole> {
      */
     List<SysRole> listRoleByUserId(Long userId);
 
+    /**
+     * 用户是否包含某些类型的角色
+     *
+     * @param userId    用户
+     * @param roleTypes 角色类型枚举
+     * @return true:是 false:否
+     */
+    boolean userContainsRoles(Long userId, RoleTypeEnum... roleTypes);
+
     /**
      * 新增用户权限
      *

+ 0 - 16
sop-business/src/main/java/com/qmth/sop/business/service/TBServiceRegionDeatilService.java

@@ -1,16 +0,0 @@
-package com.qmth.sop.business.service;
-
-import com.qmth.sop.business.entity.TBServiceRegionDeatil;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * <p>
- * 服务区域规划明细表 服务类
- * </p>
- *
- * @author wangliang
- * @since 2023-08-01
- */
-public interface TBServiceRegionDeatilService extends IService<TBServiceRegionDeatil> {
-
-}

+ 25 - 0
sop-business/src/main/java/com/qmth/sop/business/service/TBServiceRegionDetailService.java

@@ -0,0 +1,25 @@
+package com.qmth.sop.business.service;
+
+import com.qmth.sop.business.bean.dto.AreaDto;
+import com.qmth.sop.business.entity.TBServiceRegionDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 服务区域规划明细表 服务类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2023-08-01
+ */
+public interface TBServiceRegionDetailService extends IService<TBServiceRegionDetail> {
+    /**
+     * 绑定服务单元的区域规划详情
+     *
+     * @param serviceRegionId 服务单元规划
+     * @param areaDtoList     区域信息
+     */
+    void bindServiceRegionAreas(Long serviceRegionId, List<AreaDto> areaDtoList);
+}

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

@@ -1,7 +1,11 @@
 package com.qmth.sop.business.service;
 
-import com.qmth.sop.business.entity.TBServiceRegion;
+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;
 
 /**
  * <p>
@@ -13,4 +17,23 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface TBServiceRegionService extends IService<TBServiceRegion> {
 
+    /**
+     * 根据条件分页查询服务区域规划结果
+     *
+     * @param serviceUnitId 服务单元id
+     * @param leadId        领导人id
+     * @param city          城市
+     * @param pageNumber    分页页数
+     * @param pageSize      分页容量
+     * @return 分页查询结果
+     */
+    IPage<ServiceRegionResult> findServiceRegionPage(Long serviceUnitId, Long leadId, String city, Integer pageNumber, Integer pageSize);
+
+    /**
+     * 服务区域规划编辑
+     *
+     * @param serviceRegionParam 服务区域规划参数
+     * @return 服务区域规划id
+     */
+    Long editServiceRegion(ServiceRegionParam serviceRegionParam);
 }

+ 19 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysUserRoleServiceImpl.java

@@ -8,13 +8,18 @@ import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.SysUserRole;
 import com.qmth.sop.business.mapper.SysUserRoleMapper;
 import com.qmth.sop.business.service.SysUserRoleService;
+import com.qmth.sop.common.enums.ExceptionResultEnum;
+import com.qmth.sop.common.enums.RoleTypeEnum;
 import com.qmth.sop.common.util.ServletUtil;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -46,6 +51,20 @@ public class SysUserRoleServiceImpl extends ServiceImpl<SysUserRoleMapper, SysUs
         return this.baseMapper.listRoleByUserId(userId);
     }
 
+    @Override
+    public boolean userContainsRoles(Long userId, RoleTypeEnum... roleTypes) {
+        boolean result = false;
+        List<SysRole> sysRoleList = this.listRoleByUserId(userId);
+        if (CollectionUtils.isNotEmpty(sysRoleList)) {
+            List<RoleTypeEnum> targetRoleTypeList = Arrays.stream(roleTypes).collect(Collectors.toList());
+            List<RoleTypeEnum> userRoleTypeList = sysRoleList.stream().map(SysRole::getType).collect(Collectors.toList());
+            if (userRoleTypeList.containsAll(targetRoleTypeList)) {
+                result = true;
+            }
+        }
+        return result;
+    }
+
     /**
      * 新增用户权限
      *

+ 0 - 20
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionDeatilServiceImpl.java

@@ -1,20 +0,0 @@
-package com.qmth.sop.business.service.impl;
-
-import com.qmth.sop.business.entity.TBServiceRegionDeatil;
-import com.qmth.sop.business.mapper.TBServiceRegionDeatilMapper;
-import com.qmth.sop.business.service.TBServiceRegionDeatilService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- * 服务区域规划明细表 服务实现类
- * </p>
- *
- * @author wangliang
- * @since 2023-08-01
- */
-@Service
-public class TBServiceRegionDeatilServiceImpl extends ServiceImpl<TBServiceRegionDeatilMapper, TBServiceRegionDeatil> implements TBServiceRegionDeatilService {
-
-}

+ 45 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionDetailServiceImpl.java

@@ -0,0 +1,45 @@
+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.TBServiceRegionDetail;
+import com.qmth.sop.business.mapper.TBServiceRegionDetailMapper;
+import com.qmth.sop.business.service.TBServiceRegionDetailService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * <p>
+ * 服务区域规划明细表 服务实现类
+ * </p>
+ *
+ * @author wangliang
+ * @since 2023-08-01
+ */
+@Service
+public class TBServiceRegionDetailServiceImpl extends ServiceImpl<TBServiceRegionDetailMapper, TBServiceRegionDetail> implements TBServiceRegionDetailService {
+
+    @Transactional
+    @Override
+    public void bindServiceRegionAreas(Long serviceRegionId, List<AreaDto> areaDtoList) {
+        // 删除之前绑定的区域
+        this.remove(new QueryWrapper<TBServiceRegionDetail>().lambda().eq(TBServiceRegionDetail::getServiceRegionId, serviceRegionId));
+        // 添加新绑定区域
+        List<TBServiceRegionDetail> tbServiceRegionDetailList = areaDtoList.stream().flatMap(e -> {
+            TBServiceRegionDetail detail = new TBServiceRegionDetail();
+            detail.setServiceRegionId(serviceRegionId);
+            detail.setCountry(e.getCountry());
+            detail.setProvince(e.getProvince());
+            detail.setCity(e.getCity());
+            detail.setArea(e.getArea());
+            detail.setAddress(e.getAddress());
+            return Stream.of(detail);
+        }).collect(Collectors.toList());
+        this.saveBatch(tbServiceRegionDetailList);
+    }
+}

+ 83 - 2
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceRegionServiceImpl.java

@@ -1,10 +1,27 @@
 package com.qmth.sop.business.service.impl;
 
+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.bean.dto.AreaDto;
+import com.qmth.sop.business.bean.params.ServiceRegionParam;
+import com.qmth.sop.business.bean.result.ServiceRegionResult;
+import com.qmth.sop.business.entity.SysUser;
+import com.qmth.sop.business.entity.TBService;
 import com.qmth.sop.business.entity.TBServiceRegion;
 import com.qmth.sop.business.mapper.TBServiceRegionMapper;
-import com.qmth.sop.business.service.TBServiceRegionService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.sop.business.service.*;
+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 org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -16,5 +33,69 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class TBServiceRegionServiceImpl extends ServiceImpl<TBServiceRegionMapper, TBServiceRegion> implements TBServiceRegionService {
+    @Resource
+    private TBServiceService tbServiceService;
+    @Resource
+    private SysUserService sysUserService;
+    @Resource
+    private TBServiceRegionDetailService tbServiceRegionDetailService;
+    @Resource
+    private SysUserRoleService sysUserRoleService;
+    @Resource
+    private TBCrmService tbCrmService;
+
+    @Override
+    public IPage<ServiceRegionResult> findServiceRegionPage(Long serviceUnitId, Long leadId, String city, Integer pageNumber, Integer pageSize) {
+        if (city != null && city.length() > 0) {
+            city = SystemConstant.translateSpecificSign(city);
+        }
+        IPage<ServiceRegionResult> page = this.baseMapper.findServiceRegionPage(new Page<>(pageNumber, pageSize), serviceUnitId, leadId, city, ServiceStatusEnum.CANCEL);
+        List<ServiceRegionResult> records = page.getRecords();
+        // 涉及的服务单元id集合
+        List<Long> serviceUnitIdList = records.stream().map(ServiceRegionResult::getServiceUnitId).distinct().collect(Collectors.toList());
+        // TODO: 2023/8/10 和派单关联
+        return page;
+    }
+
+    @Transactional
+    @Override
+    public Long editServiceRegion(ServiceRegionParam serviceRegionParam) {
+        Long serviceRegionId = serviceRegionParam.getServiceRegionId();
+        Long serviceUnitId = serviceRegionParam.getServiceUnitId();
+        Long leadId = serviceRegionParam.getLeadId();
+        List<AreaDto> areaDtoList = serviceRegionParam.getAreaDtoList();
+
+        TBService tbServiceUnit = tbServiceService.getById(serviceUnitId);
+        if (Objects.isNull(tbServiceUnit)) {
+            throw ExceptionResultEnum.ERROR.exception("服务单元不存在");
+        }
+
+        SysUser leader = sysUserService.getById(leadId);
+        if (Objects.isNull(leader)) {
+            throw ExceptionResultEnum.ERROR.exception("大区经理不存在");
+        }
+        if (!sysUserRoleService.userContainsRoles(leadId, RoleTypeEnum.REGION_MANAGER)) {
+            throw ExceptionResultEnum.ERROR.exception("所选用户没有大区经理角色");
+        }
+
+
+        TBServiceRegion tbServiceRegion = new TBServiceRegion();
+        tbServiceRegion.setServiceId(serviceUnitId);
+        tbServiceRegion.setLeadId(leadId);
+
+        // 更新区域规划信息
+        if (Objects.isNull(serviceRegionId)) {
+            // 新增
+            tbServiceRegion.setEnable(true);
+            this.save(tbServiceRegion);
+        } else {
+            // 编辑
+            this.updateById(tbServiceRegion);
+        }
+        serviceRegionId = tbServiceRegion.getId();
 
+        // 更新详细信息
+        tbServiceRegionDetailService.bindServiceRegionAreas(serviceRegionId, areaDtoList);
+        return serviceRegionId;
+    }
 }

+ 3 - 11
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceServiceImpl.java

@@ -7,7 +7,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.sop.business.bean.params.ServiceUnitParam;
 import com.qmth.sop.business.bean.result.ReductionResult;
 import com.qmth.sop.business.bean.result.ServiceUnitResult;
-import com.qmth.sop.business.entity.SysRole;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.TBService;
 import com.qmth.sop.business.mapper.TBServiceMapper;
@@ -18,14 +17,12 @@ import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.ProductTypeEnum;
 import com.qmth.sop.common.enums.RoleTypeEnum;
 import com.qmth.sop.common.enums.ServiceStatusEnum;
-import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.List;
 import java.util.Objects;
-import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -57,17 +54,12 @@ public class TBServiceServiceImpl extends ServiceImpl<TBServiceMapper, TBService
         Integer regionProjectCount = serviceUnitParam.getRegionProjectCount();
         ReductionResult reduction = this.reduction(regionPeopleCount, regionProjectCount);
 
-
         if (endTime < startTime) {
             throw ExceptionResultEnum.ERROR.exception("服务截止时间不能小于服务开始时间");
         }
-        List<SysRole> sysRoleList = sysUserRoleService.listRoleByUserId(leaderId);
-        if (CollectionUtils.isNotEmpty(sysRoleList)) {
-            if (!sysRoleList.stream().map(SysRole::getType).collect(Collectors.toList()).contains(RoleTypeEnum.BUSSINESS)) {
-                throw ExceptionResultEnum.ERROR.exception("不包含'业务线负责人'角色的用户不能充当服务单元的负责人");
-            }
-        } else {
-            throw ExceptionResultEnum.ERROR.exception("不包含'业务线负责人'角色的用户不能充当服务单元负责人");
+
+        if (!sysUserRoleService.userContainsRoles(leaderId, RoleTypeEnum.BUSSINESS)) {
+            throw ExceptionResultEnum.ERROR.exception("不包含'业务线负责人'角色的用户不能充当服务单元的负责人");
         }
 
         TBService tbService = new TBService();

+ 5 - 2
sop-business/src/main/resources/db/log/caozixuan_update_log.sql

@@ -1,4 +1,4 @@
--- 2023.8.7 日志管理表字段更改
+-- 2023/08/07 日志管理表字段更改
 ALTER TABLE `sys_log` ADD COLUMN `user_id` bigint(0) NOT NULL COMMENT '用户id' AFTER `id`;
 
 ALTER TABLE `sys_log` ADD COLUMN `user_name` varchar(100) NULL DEFAULT NULL COMMENT '用户名称' AFTER `user_id`;
@@ -9,4 +9,7 @@ ALTER TABLE `sys_log` ADD COLUMN `args` mediumtext NULL COMMENT '请求的参数
 
 ALTER TABLE `sys_log` ADD COLUMN `run_time` bigint(0) NULL DEFAULT NULL COMMENT '请求的响应时间' AFTER `create_time`;
 
-ALTER TABLE `sys_log` ADD COLUMN `run_status` varchar(64) NULL DEFAULT NULL COMMENT '请求的结果' AFTER `run_time`;
+ALTER TABLE `sys_log` ADD COLUMN `run_status` varchar(64) NULL DEFAULT NULL COMMENT '请求的结果' AFTER `run_time`;
+
+-- 2023/08/10 更改表名
+ALTER TABLE t_b_service_region_deatil RENAME TO t_b_service_region_detail;

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

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.qmth.sop.business.mapper.TBServiceRegionDeatilMapper">
+<mapper namespace="com.qmth.sop.business.mapper.TBServiceRegionDetailMapper">
 
 </mapper>

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

@@ -2,4 +2,40 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.qmth.sop.business.mapper.TBServiceRegionMapper">
 
+    <select id="findServiceRegionPage" resultType="com.qmth.sop.business.bean.result.ServiceRegionResult">
+        SELECT
+            tbsr.id AS serviceRegionId,
+            tbs.id AS serviceUnitId,
+            tbs.name AS serviceUnitName,
+            leader.id AS leadId,
+            leader.real_name AS leadName
+        FROM
+            t_b_service_region tbsr
+                LEFT JOIN
+            t_b_service tbs ON tbsr.service_id = tbs.id
+                LEFT JOIN
+            sys_user leader ON tbsr.lead_id = leader.id
+        <where>
+            AND tbs.enable
+            <if test="serviceUnitId != null">
+                AND tbsr.service_id = #{serviceUnitId}
+            </if>
+            <if test="leadId != null">
+                AND tbsr.lead_id = #{leadId}
+            </if>
+            <if test="city != null and city != ''">
+                AND EXISTS( SELECT
+                    1
+                FROM
+                    t_b_service_region_detail tbsrd
+                WHERE
+                    tbsr.id = tbsrd.service_region_id
+                    AND tbsrd.city LIKE CONCAT('%',#{city},'%'))
+            </if>
+            <if test="serviceStatus != null">
+                AND tbs.status = #{serviceStatus}
+            </if>
+        </where>
+        ORDER BY tbsr.create_time DESC
+    </select>
 </mapper>

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

@@ -2,21 +2,22 @@ package com.qmth.sop.server.api;
 
 
 import com.qmth.boot.api.constant.ApiConstant;
+import com.qmth.sop.business.bean.params.ServiceUnitParam;
 import com.qmth.sop.business.bean.result.SysLogResult;
+import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.service.TBServiceService;
 import com.qmth.sop.common.contant.SystemConstant;
 import com.qmth.sop.common.enums.ProductTypeEnum;
 import com.qmth.sop.common.enums.ServiceStatusEnum;
 import com.qmth.sop.common.util.Result;
 import com.qmth.sop.common.util.ResultUtil;
+import com.qmth.sop.common.util.ServletUtil;
 import io.swagger.annotations.*;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.validation.Valid;
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 
@@ -50,5 +51,46 @@ public class TBServiceController {
         return ResultUtil.ok(tbServiceService.page(type, SystemConstant.convertIdToLong(serviceLeadId), status, createStartTime, createEndTime, serviceUnitName, pageNumber, pageSize));
     }
 
+    @ApiOperation(value = "服务单元管理-编辑")
+    @RequestMapping(value = "/edit", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "更新成功", response = Result.class)})
+    public Result editServiceUnit(@Valid @RequestBody ServiceUnitParam serviceUnitParam, BindingResult bindingResult) {
+        if (bindingResult.hasErrors()) {
+            return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
+        }
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(tbServiceService.edit(serviceUnitParam, requestUser));
+    }
 
+    @ApiOperation(value = "服务单元管理-作废")
+    @RequestMapping(value = "/cancel", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "作废成功", response = Result.class)})
+    public Result cancelServiceUnit(@ApiParam(value = "服务单元id", required = true) @RequestParam String id) {
+        tbServiceService.cancelServiceUnit(SystemConstant.convertIdToLong(id));
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "服务单元管理-发布")
+    @RequestMapping(value = "/publish", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "发布成功", response = Result.class)})
+    public Result publishServiceUnit(@ApiParam(value = "服务单元id", required = true) @RequestParam String id) {
+        tbServiceService.publishServiceUnit(SystemConstant.convertIdToLong(id));
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "服务单元管理-关闭")
+    @RequestMapping(value = "/cloze", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "作废成功", response = Result.class)})
+    public Result clozeServiceUnit(@ApiParam(value = "服务单元id", required = true) @RequestParam String id) {
+        tbServiceService.clozeServiceUnit(SystemConstant.convertIdToLong(id));
+        return ResultUtil.ok();
+    }
+
+    @ApiOperation(value = "服务单元管理-重启")
+    @RequestMapping(value = "/restart", method = RequestMethod.POST)
+    @ApiResponses({@ApiResponse(code = 200, message = "重启成功", response = Result.class)})
+    public Result restartServiceUnit(@ApiParam(value = "服务单元id", required = true) @RequestParam String id) {
+        tbServiceService.restartServiceUnit(SystemConstant.convertIdToLong(id));
+        return ResultUtil.ok();
+    }
 }

+ 2 - 2
sop-server/src/main/java/com/qmth/sop/server/api/TBServiceRegionDeatilController.java → sop-server/src/main/java/com/qmth/sop/server/api/TBServiceRegionDetailController.java

@@ -14,7 +14,7 @@ import org.springframework.web.bind.annotation.RestController;
  * @since 2023-08-01
  */
 @RestController
-@RequestMapping("/t-bservice-region-deatil")
-public class TBServiceRegionDeatilController {
+@RequestMapping("/t-bservice-region-detail")
+public class TBServiceRegionDetailController {
 
 }