浏览代码

add:服务单元管理

caozixuan 1 年之前
父节点
当前提交
80570271c5

+ 7 - 4
sop-api/src/main/java/com/qmth/sop/server/api/SysController.java

@@ -10,10 +10,7 @@ import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.exception.ApiException;
 import com.qmth.boot.core.cache.service.CacheService;
-import com.qmth.sop.business.bean.dto.OrgDto;
-import com.qmth.sop.business.bean.dto.OrgDtoNotTree;
-import com.qmth.sop.business.bean.dto.RoleDto;
-import com.qmth.sop.business.bean.dto.UserDto;
+import com.qmth.sop.business.bean.dto.*;
 import com.qmth.sop.business.bean.params.LoginParam;
 import com.qmth.sop.business.bean.result.AttachmentResult;
 import com.qmth.sop.business.bean.result.EditResult;
@@ -533,6 +530,9 @@ public class SysController {
     public Result queryServiceUnit(@ApiParam(value = "业务类型") @RequestParam(required = false) ProductTypeEnum type,
                                    @ApiParam(value = "服务状态") @RequestParam(required = false) ServiceStatusEnum status,
                                    @ApiParam(value = "服务单元名称") @RequestParam(required = false) String name) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        DataPermissionDto dpr = sysUserService.buildUserDataPermission(requestUser.getId());
+
         QueryWrapper<TBService> queryWrapper = new QueryWrapper<>();
         if (Objects.nonNull(type)) {
             queryWrapper.lambda().eq(TBService::getType, type);
@@ -543,6 +543,9 @@ public class SysController {
         if (name != null && name.length() > 0) {
             queryWrapper.lambda().like(TBService::getName, SystemConstant.translateSpecificSign(name));
         }
+        if (dpr.getHasBusiness()) {
+            queryWrapper.lambda().eq(TBService::getServiceLeadId, dpr.getRequestUserId());
+        }
         List<TBService> tbServiceList = tbServiceService.list(queryWrapper);
         return ResultUtil.ok(tbServiceList);
     }

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

@@ -89,7 +89,11 @@ public class TBServiceScopeController {
     @RequestMapping(value = "/subTotal", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "查询成功", response = Result.class)})
     @OperationLog
-    public Result findCrmSubTotalData() {
-        return ResultUtil.ok(tbCrmService.findCrmSubTotalData());
+    public Result findCrmSubTotalData(@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) {
+        return ResultUtil.ok(tbCrmService.findCrmSubTotalData(SystemConstant.convertIdToLong(serviceUnitId), city, productType, customName, bindStatus));
     }
 }

+ 134 - 0
sop-business/src/main/java/com/qmth/sop/business/bean/dto/DataPermissionDto.java

@@ -0,0 +1,134 @@
+package com.qmth.sop.business.bean.dto;
+
+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-09-13
+ */
+public class DataPermissionDto {
+    @ApiModelProperty("请求的用户id")
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long requestUserId;
+
+    @ApiModelProperty("是系统管理员?")
+    private Boolean hasAdmin;
+
+    @ApiModelProperty("是总负责人?")
+    private Boolean hasPmo;
+
+    @ApiModelProperty("是业务线负责人(服务单元负责人)?")
+    private Boolean hasBusiness;
+
+    @ApiModelProperty("是大区经理?")
+    private Boolean hasRegionManager;
+
+    @ApiModelProperty("是区域协调人?")
+    private Boolean hasRegionCoordinator;
+
+    @ApiModelProperty("是实施工程师?")
+    private Boolean hasEffectEngineer;
+
+    @ApiModelProperty("是助理工程师?")
+    private Boolean hasAssistantEngineer;
+
+    @ApiModelProperty("是质量检测员?")
+    private Boolean hasQA;
+
+    @ApiModelProperty("是技术客服?")
+    private Boolean hasCustom;
+
+    @ApiModelProperty("是客户经理?")
+    private Boolean hasAccountManager;
+
+    public Long getRequestUserId() {
+        return requestUserId;
+    }
+
+    public void setRequestUserId(Long requestUserId) {
+        this.requestUserId = requestUserId;
+    }
+
+    public Boolean getHasAdmin() {
+        return hasAdmin;
+    }
+
+    public void setHasAdmin(Boolean hasAdmin) {
+        this.hasAdmin = hasAdmin;
+    }
+
+    public Boolean getHasPmo() {
+        return hasPmo;
+    }
+
+    public void setHasPmo(Boolean hasPmo) {
+        this.hasPmo = hasPmo;
+    }
+
+    public Boolean getHasBusiness() {
+        return hasBusiness;
+    }
+
+    public void setHasBusiness(Boolean hasBusiness) {
+        this.hasBusiness = hasBusiness;
+    }
+
+    public Boolean getHasRegionManager() {
+        return hasRegionManager;
+    }
+
+    public void setHasRegionManager(Boolean hasRegionManager) {
+        this.hasRegionManager = hasRegionManager;
+    }
+
+    public Boolean getHasRegionCoordinator() {
+        return hasRegionCoordinator;
+    }
+
+    public void setHasRegionCoordinator(Boolean hasRegionCoordinator) {
+        this.hasRegionCoordinator = hasRegionCoordinator;
+    }
+
+    public Boolean getHasEffectEngineer() {
+        return hasEffectEngineer;
+    }
+
+    public void setHasEffectEngineer(Boolean hasEffectEngineer) {
+        this.hasEffectEngineer = hasEffectEngineer;
+    }
+
+    public Boolean getHasAssistantEngineer() {
+        return hasAssistantEngineer;
+    }
+
+    public void setHasAssistantEngineer(Boolean hasAssistantEngineer) {
+        this.hasAssistantEngineer = hasAssistantEngineer;
+    }
+
+    public Boolean getHasQA() {
+        return hasQA;
+    }
+
+    public void setHasQA(Boolean hasQA) {
+        this.hasQA = hasQA;
+    }
+
+    public Boolean getHasCustom() {
+        return hasCustom;
+    }
+
+    public void setHasCustom(Boolean hasCustom) {
+        this.hasCustom = hasCustom;
+    }
+
+    public Boolean getHasAccountManager() {
+        return hasAccountManager;
+    }
+
+    public void setHasAccountManager(Boolean hasAccountManager) {
+        this.hasAccountManager = hasAccountManager;
+    }
+}

+ 3 - 4
sop-business/src/main/java/com/qmth/sop/business/bean/result/SysDingGroupResult.java

@@ -29,7 +29,7 @@ public class SysDingGroupResult extends SysDingGroup implements Serializable {
     private String createName;
 
     @ApiModelProperty(value = "供应商")
-    private Long supplier;
+    private String supplier;
 
     @ApiModelProperty(value = "服务单元状态")
     private ServiceStatusEnum status;
@@ -55,15 +55,14 @@ public class SysDingGroupResult extends SysDingGroup implements Serializable {
         this.service = service;
     }
 
-    public Long getSupplier() {
+    public String getSupplier() {
         return supplier;
     }
 
-    public void setSupplier(Long supplier) {
+    public void setSupplier(String supplier) {
         this.supplier = supplier;
     }
 
-
     public String getCreateName() {
         return createName;
     }

+ 3 - 2
sop-business/src/main/java/com/qmth/sop/business/entity/SysDingGroup.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.sop.common.base.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+import org.hibernate.validator.constraints.Range;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
@@ -25,7 +26,8 @@ public class SysDingGroup extends BaseEntity implements Serializable {
 
     @ApiModelProperty(value = "服务单元id")
     @JsonSerialize(using = ToStringSerializer.class)
-    @NotBlank(message = "服务单元id不能为空")
+    @NotNull(message = "服务单元id不能为空")
+    @Range(min = 1L, message = "服务单元id不能为空")
     private Long serviceId;
 
     @ApiModelProperty(value = "名称")
@@ -53,7 +55,6 @@ public class SysDingGroup extends BaseEntity implements Serializable {
     private Integer reissueCardCount;
 
     @ApiModelProperty(value = "是否启用,0:停用,1:启用")
-    @NotNull(message = "是否启用不能为空")
     private Boolean enable;
 
     public Long getServiceId() {

+ 0 - 2
sop-business/src/main/java/com/qmth/sop/business/entity/TBCrm.java

@@ -70,11 +70,9 @@ public class TBCrm extends BaseEntity implements Serializable {
     private Long regionCoordinatorId;
 
     @ApiModelProperty(value = "是否crm同步,false:否,true:是")
-    @NotNull(message = "是否crm同步不能为空")
     private Boolean sync;
 
     @ApiModelProperty(value = "是否启用,0:停用,1:启用")
-    @NotNull(message = "是否启用不能为空")
     private Boolean enable;
 
     @ApiModelProperty(value = "派单状态(UN_PUBLISH(\"未发布\"),PUBLISH(\"已发布\"),FINISH(\"已完成\");)")

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

@@ -3,6 +3,7 @@ package com.qmth.sop.business.mapper;
 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.dto.DataPermissionDto;
 import com.qmth.sop.business.bean.dto.SopCrmInfo;
 import com.qmth.sop.business.bean.result.CrmProjectResult;
 import com.qmth.sop.business.bean.result.CrmServiceResult;
@@ -24,6 +25,7 @@ import java.util.Map;
  * @since 2023-08-01
  */
 public interface TBCrmMapper extends BaseMapper<TBCrm> {
+
     /**
      * 服务范围管理派单分页查询
      *
@@ -33,6 +35,7 @@ public interface TBCrmMapper extends BaseMapper<TBCrm> {
      * @param productType   业务类型
      * @param customName    客户名称
      * @param bindStatus    派单是否绑定服务单元
+     * @param dpr           数据权限
      * @return 分页查询结果
      */
     IPage<CrmServiceResult> findServiceScopePage(@Param("iPage") Page<SysLogResult> iPage,
@@ -40,7 +43,26 @@ public interface TBCrmMapper extends BaseMapper<TBCrm> {
                                                  @Param("city") String city,
                                                  @Param("productType") ProductTypeEnum productType,
                                                  @Param("customName") String customName,
-                                                 @Param("bindStatus") Boolean bindStatus);
+                                                 @Param("bindStatus") Boolean bindStatus,
+                                                 @Param("dpr") DataPermissionDto dpr);
+
+    /**
+     * 服务范围管理派单分页查询
+     *
+     * @param serviceUnitId 服务单元id
+     * @param city          城市
+     * @param productType   业务类型
+     * @param customName    客户名称
+     * @param bindStatus    派单是否绑定服务单元
+     * @param dpr           数据权限
+     * @return 分页查询结果
+     */
+    List<CrmServiceResult> findServiceScopeList(@Param("serviceUnitId") Long serviceUnitId,
+                                                @Param("city") String city,
+                                                @Param("productType") ProductTypeEnum productType,
+                                                @Param("customName") String customName,
+                                                @Param("bindStatus") Boolean bindStatus,
+                                                @Param("dpr") DataPermissionDto dpr);
 
 
     /**

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

@@ -2,6 +2,7 @@ package com.qmth.sop.business.service;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qmth.sop.business.bean.dto.DataPermissionDto;
 import com.qmth.sop.business.bean.dto.UserDto;
 import com.qmth.sop.business.bean.result.*;
 import com.qmth.sop.business.entity.SysUser;
@@ -157,4 +158,12 @@ public interface SysUserService extends IService<SysUser> {
      * @return 用户集合
      */
     List<SysUserBriefResult> findUserListByRoleType(RoleTypeEnum roleType);
+
+    /**
+     * 构建用户数据权限
+     *
+     * @param userId 用户id
+     * @return 用户数据权限
+     */
+    DataPermissionDto buildUserDataPermission(Long userId);
 }

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

@@ -76,12 +76,18 @@ public interface TBCrmService extends IService<TBCrm> {
      */
     void unbindCrmWithService(Long crmId);
 
+
     /**
      * 服务范围管理 - 查询派单小计
      *
+     * @param serviceUnitId 服务单元id
+     * @param city          城市
+     * @param productType   客户类型
+     * @param customName    客户名称
+     * @param bindStatus    绑定状态
      * @return 派单小计
      */
-    CrmSubTotalResult findCrmSubTotalData();
+    CrmSubTotalResult findCrmSubTotalData(Long serviceUnitId, String city, ProductTypeEnum productType, String customName, Boolean bindStatus);
 
     /**
      * 根据编号查询crm

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

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.qmth.sop.business.bean.result.SysDingGroupResult;
 import com.qmth.sop.business.entity.SysDingGroup;
 import com.qmth.sop.business.entity.SysDingObj;
-import com.qmth.sop.business.entity.SysLevelRole;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.mapper.SysDingGroupMapper;
 import com.qmth.sop.business.service.SysDingGroupService;
@@ -59,6 +58,7 @@ public class SysDingGroupServiceImpl extends ServiceImpl<SysDingGroupMapper, Sys
         SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         sysDingGroup.setCreateId(sysUser.getId());
         sysDingGroup.setCreateTime(System.currentTimeMillis());
+        sysDingGroup.setEnable(true);
         this.saveOrUpdate(sysDingGroup);
         sysDingGroup.getDingObjs().forEach(e -> {
             e.setDingGroupId(sysDingGroup.getId());

+ 23 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/SysUserServiceImpl.java

@@ -8,6 +8,7 @@ import com.qmth.boot.api.exception.ApiException;
 import com.qmth.boot.core.enums.Platform;
 import com.qmth.sop.business.bean.auth.AuthBean;
 import com.qmth.sop.business.bean.auth.ExpireTimeBean;
+import com.qmth.sop.business.bean.dto.DataPermissionDto;
 import com.qmth.sop.business.bean.dto.UserDto;
 import com.qmth.sop.business.bean.dto.VerifyCodeCheckDto;
 import com.qmth.sop.business.bean.result.*;
@@ -466,4 +467,26 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     public List<SysUserBriefResult> findUserListByRoleType(RoleTypeEnum roleType) {
         return this.baseMapper.findByRoleType(roleType);
     }
+
+    @Override
+    public DataPermissionDto buildUserDataPermission(Long userId) {
+        if (userId == null || userId == 0) {
+            throw ExceptionResultEnum.ERROR.exception("无法获取当前登录人id");
+        }
+        List<SysRole> sysRoleList = sysUserRoleService.listRoleByUserId(userId);
+        List<RoleTypeEnum> roleTypeList = sysRoleList.stream().map(SysRole::getType).distinct().collect(Collectors.toList());
+        DataPermissionDto dto = new DataPermissionDto();
+        dto.setRequestUserId(userId);
+        dto.setHasAdmin(roleTypeList.contains(RoleTypeEnum.ADMIN));
+        dto.setHasPmo(roleTypeList.contains(RoleTypeEnum.PMO));
+        dto.setHasBusiness(roleTypeList.contains(RoleTypeEnum.BUSSINESS));
+        dto.setHasRegionManager(roleTypeList.contains(RoleTypeEnum.REGION_MANAGER));
+        dto.setHasRegionCoordinator(roleTypeList.contains(RoleTypeEnum.REGION_COORDINATOR));
+        dto.setHasEffectEngineer(roleTypeList.contains(RoleTypeEnum.EFFECT_ENGINEER));
+        dto.setHasAssistantEngineer(roleTypeList.contains(RoleTypeEnum.ASSISTANT_ENGINEER));
+        dto.setHasQA(roleTypeList.contains(RoleTypeEnum.QA));
+        dto.setHasCustom(roleTypeList.contains(RoleTypeEnum.CUSTOM));
+        dto.setHasAccountManager(roleTypeList.contains(RoleTypeEnum.ACCOUNT_MANAGER));
+        return dto;
+    }
 }

+ 13 - 6
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBCrmServiceImpl.java

@@ -6,6 +6,7 @@ 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.boot.api.exception.ApiException;
+import com.qmth.sop.business.bean.dto.DataPermissionDto;
 import com.qmth.sop.business.bean.dto.SopCrmInfo;
 import com.qmth.sop.business.bean.dto.UserArchivesDto;
 import com.qmth.sop.business.bean.params.ServiceScopeParam;
@@ -47,6 +48,8 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
     private TBUserArchivesService tbUserArchivesService;
     @Resource
     private TBServiceRegionService tbServiceRegionService;
+    @Resource
+    private SysUserService sysUserService;
 
     @Override
     public IPage<CrmServiceResult> findServiceScopePage(Long serviceUnitId, String city, ProductTypeEnum productType, String customName, Boolean bindStatus, Integer pageNumber, Integer pageSize) {
@@ -56,7 +59,9 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
         if (customName != null && customName.length() > 0) {
             customName = SystemConstant.translateSpecificSign(customName);
         }
-        return this.baseMapper.findServiceScopePage(new Page<>(pageNumber, pageSize), serviceUnitId, city, productType, customName, bindStatus);
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        DataPermissionDto dpr = sysUserService.buildUserDataPermission(requestUser.getId());
+        return this.baseMapper.findServiceScopePage(new Page<>(pageNumber, pageSize), serviceUnitId, city, productType, customName, bindStatus, dpr);
     }
 
     @Override
@@ -128,14 +133,16 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
     }
 
     @Override
-    public CrmSubTotalResult findCrmSubTotalData() {
-        List<TBCrm> tbCrmList = this.list(new QueryWrapper<TBCrm>().lambda().eq(TBCrm::getEnable, true));
-        int totalCrmCount = tbCrmList.size();
+    public CrmSubTotalResult findCrmSubTotalData(Long serviceUnitId, String city, ProductTypeEnum productType, String customName, Boolean bindStatus) {
+        SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
+        DataPermissionDto dpr = sysUserService.buildUserDataPermission(requestUser.getId());
+        List<CrmServiceResult> crmServiceResultList = this.baseMapper.findServiceScopeList(serviceUnitId, city, productType, customName, bindStatus, dpr);
+        int totalCrmCount = crmServiceResultList.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();
+            bindCrmCount = (int) crmServiceResultList.stream().filter(e -> e.getServiceUnitId() != null).count();
+            unbindCrmCount = (int) crmServiceResultList.stream().filter(e -> e.getServiceUnitId() == null).count();
         }
         CrmSubTotalResult crmSubTotalResult = new CrmSubTotalResult();
         crmSubTotalResult.setTotalCrmCount(totalCrmCount);

+ 12 - 0
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBServiceServiceImpl.java

@@ -7,9 +7,11 @@ 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.SysDingGroup;
 import com.qmth.sop.business.entity.SysUser;
 import com.qmth.sop.business.entity.TBService;
 import com.qmth.sop.business.mapper.TBServiceMapper;
+import com.qmth.sop.business.service.SysDingGroupService;
 import com.qmth.sop.business.service.SysUserRoleService;
 import com.qmth.sop.business.service.TBServiceService;
 import com.qmth.sop.common.contant.SystemConstant;
@@ -19,6 +21,7 @@ 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 org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -36,6 +39,8 @@ import java.util.Objects;
 public class TBServiceServiceImpl extends ServiceImpl<TBServiceMapper, TBService> implements TBServiceService {
     @Resource
     private SysUserRoleService sysUserRoleService;
+    @Resource
+    private SysDingGroupService sysDingGroupService;
 
     @Override
     public List<TBService> listEnable(Long id) {
@@ -74,11 +79,13 @@ public class TBServiceServiceImpl extends ServiceImpl<TBServiceMapper, TBService
             // id不存在新增
             tbService.setEnable(true);
             tbService.setStatus(ServiceStatusEnum.NEW);
+            tbService.setCreateId(requestUser.getId());
             this.save(tbService);
             id = tbService.getId();
         } else {
             // id存在更新
             tbService.setId(id);
+            tbService.setUpdateId(requestUser.getUpdateId());
             this.updateById(tbService);
         }
         return id;
@@ -121,6 +128,11 @@ public class TBServiceServiceImpl extends ServiceImpl<TBServiceMapper, TBService
             throw ExceptionResultEnum.ERROR.exception(String.format("只有[%s]状态的服务单元可以被发布,当前状态[%s]", ServiceStatusEnum.NEW, status));
         }
         // TODO: 2023/8/8 业务校验 服务单元完成了相关准备工作:服务范围划定、供应商划定
+        List<SysDingGroup> sysDingGroupList = sysDingGroupService.list(new QueryWrapper<SysDingGroup>().lambda().eq(SysDingGroup::getServiceId,serviceUnitId));
+        if (CollectionUtils.isEmpty(sysDingGroupList)){
+            throw ExceptionResultEnum.ERROR.exception("未完成考勤组设置的服务单元不能发布");
+        }
+
         tbService.setStatus(ServiceStatusEnum.PUBLISH);
         this.updateById(tbService);
     }

+ 6 - 1
sop-business/src/main/resources/db/log/caozixuan_update_log.sql

@@ -274,4 +274,9 @@ UPDATE sys_privilege SET related = '277' WHERE (id = '94');
 UPDATE sys_privilege SET related = '282' WHERE (id = '95');
 UPDATE sys_privilege SET related = '278' WHERE (id = '96');
 UPDATE sys_privilege SET related = '281' WHERE (id = '97');
-UPDATE sys_privilege SET related = '281' WHERE (id = '106');
+UPDATE sys_privilege SET related = '281' WHERE (id = '106');
+
+-- 2023-09-13
+-- 服务范围设置
+UPDATE sys_privilege SET related = '2006,2007' WHERE (id = '228');
+UPDATE sys_privilege SET related = '2006,2007' WHERE (id = '231');

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

@@ -18,7 +18,7 @@
         FROM
             t_b_crm tbc
                 LEFT JOIN
-            t_b_service tbs ON tbc.service_id = tbs.id AND tbs.enable AND tbs.status != '已作废'
+            t_b_service tbs ON tbc.service_id = tbs.id AND tbs.enable AND tbs.status != 'CANCEL'
                 LEFT JOIN
             sys_custom sc ON tbc.custom_id = sc.id
                 LEFT JOIN
@@ -47,6 +47,65 @@
                     </otherwise>
                 </choose>
             </if>
+            <if test="dpr != null">
+                <if test="dpr.hasBusiness">
+                    AND tbs.service_lead_id = #{dpr.requestUserId}
+                </if>
+            </if>
+        </where>
+        ORDER BY serviceUnitName,tbc.create_time DESC
+    </select>
+
+    <select id="findServiceScopeList" resultType="com.qmth.sop.business.bean.result.CrmServiceResult">
+        SELECT
+            tbc.service_id AS serviceUnitId,
+            IFNULL(tbs.name, '--') AS serviceUnitName,
+            tbc.id AS crmId,
+            tbc.name AS crmNo,
+            tbc.custom_id AS customId,
+            sc.name AS customName,
+            sc.type AS productType,
+            sc.province,
+            sc.city,
+            sc.area,
+            sl.level
+        FROM
+            t_b_crm tbc
+        LEFT JOIN
+            t_b_service tbs ON tbc.service_id = tbs.id AND tbs.enable AND tbs.status != 'CANCEL'
+        LEFT JOIN
+            sys_custom sc ON tbc.custom_id = sc.id
+        LEFT JOIN
+            sys_level sl ON sc.level_id = sl.id
+        <where>
+            AND tbc.enable
+            <if test="serviceUnitId != null">
+                AND tbc.service_id = #{serviceUnitId}
+            </if>
+            <if test="city != null and city != ''">
+                AND sc.city LIKE CONCAT('%',#{city},'%')
+            </if>
+            <if test="productType != null">
+                AND sc.type = #{productType}
+            </if>
+            <if test="customName != null and customName != ''">
+                AND sc.name LIKE CONCAT('%',#{customName},'%')
+            </if>
+            <if test="bindStatus != null">
+                <choose>
+                    <when test="bindStatus">
+                        AND tbc.service_id IS NOT NULL
+                    </when>
+                    <otherwise>
+                        AND tbc.service_id IS NULL
+                    </otherwise>
+                </choose>
+            </if>
+            <if test="dpr != null">
+                <if test="dpr.hasBusiness">
+                    AND tbs.service_lead_id = #{dpr.requestUserId}
+                </if>
+            </if>
         </where>
         ORDER BY serviceUnitName,tbc.create_time DESC
     </select>
@@ -324,4 +383,5 @@
         </where>
     </select>
 
+
 </mapper>