|
@@ -123,10 +123,17 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
|
|
|
|
|
|
@Transactional
|
|
|
@Override
|
|
|
- public void bindCrmWithServiceBatch(ServiceScopeParam serviceScopeParam) {
|
|
|
- List<Long> crmIdList = serviceScopeParam.getCrmIdList();
|
|
|
+ public void bindCrmWithService(ServiceScopeParam serviceScopeParam) {
|
|
|
+ SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
|
|
|
+ Long crmId = serviceScopeParam.getCrmId();
|
|
|
Long serviceUnitId = serviceScopeParam.getServiceUnitId();
|
|
|
- if (CollectionUtils.isEmpty(crmIdList)) {
|
|
|
+ RegionManagerSelectedTypeEnum leadType = serviceScopeParam.getLeadType();
|
|
|
+ Long leadId = serviceScopeParam.getLeadId();
|
|
|
+ if (RegionManagerSelectedTypeEnum.BY_PERSON.equals(leadType) && (leadId == null || leadId == 0)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("指定大区经理模式必须选择大区经理");
|
|
|
+ }
|
|
|
+
|
|
|
+ if (crmId == null || crmId == 0) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("未选择要划定的派单");
|
|
|
}
|
|
|
|
|
@@ -139,21 +146,83 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
|
|
|
throw ExceptionResultEnum.ERROR.exception("不能划定进已完结或已作废的服务单元");
|
|
|
}
|
|
|
}
|
|
|
- List<TBCrm> tbCrmList = this.listByIds(crmIdList);
|
|
|
- // 派单调配资源变换
|
|
|
- for (TBCrm dbCrm : tbCrmList) {
|
|
|
- this.crmReBindServiceUnit(dbCrm.getCrmNo(), dbCrm.getServiceId(), serviceUnitId);
|
|
|
+ TBCrm tbCrm = this.getById(crmId);
|
|
|
+ if (Objects.isNull(tbCrm)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("未找到派单");
|
|
|
+ }
|
|
|
+ Long customId = tbCrm.getCustomId();
|
|
|
+ CrmBindResult crmBindResult = this.findCrmBindInfo(serviceUnitId, customId);
|
|
|
+ RegionManagerSelectedTypeEnum defaultLeadType = crmBindResult.getLeadType();
|
|
|
+ Long defaultLeadId = crmBindResult.getLeadId();
|
|
|
+ boolean canEdit = crmBindResult.isCanEdit();
|
|
|
+ String customName = crmBindResult.getCustomName();
|
|
|
+ List<Long> similarCrmIdList = crmBindResult.getSimilarCrmIdList();
|
|
|
+
|
|
|
+ if (canEdit) {
|
|
|
+ // 可以更改
|
|
|
+ switch (leadType) {
|
|
|
+ case BY_AREA:
|
|
|
+ // 按地区匹配
|
|
|
+ ServiceRegionDetailResult serviceRegionDetailResult = tbServiceRegionDetailService.findRegionDetail(
|
|
|
+ serviceUnitId, tbCrm.getCrmNo());
|
|
|
+ UpdateWrapper<TBCrm> areaUpdateWrapper = new UpdateWrapper<>();
|
|
|
+ areaUpdateWrapper.lambda().set(TBCrm::getServiceId, serviceUnitId).set(TBCrm::getLeadType, leadType)
|
|
|
+ .set(TBCrm::getUpdateId, requestUser.getId())
|
|
|
+ .set(TBCrm::getUpdateTime, System.currentTimeMillis());
|
|
|
+ if (Objects.nonNull(serviceRegionDetailResult)) {
|
|
|
+ areaUpdateWrapper.lambda().set(TBCrm::getLeadId, serviceRegionDetailResult.getLeadId())
|
|
|
+ .set(TBCrm::getRegionId, serviceRegionDetailResult.getServiceRegionId())
|
|
|
+ .set(TBCrm::getRegionDetailId, serviceRegionDetailResult.getServiceRegionDetailId());
|
|
|
+ }
|
|
|
+ if (leadType.equals(defaultLeadType)) {
|
|
|
+ // 更新自己信息
|
|
|
+ areaUpdateWrapper.lambda().eq(TBCrm::getId, crmId);
|
|
|
+ } else {
|
|
|
+ // 更新同类派单信息
|
|
|
+ areaUpdateWrapper.lambda().in(TBCrm::getId, similarCrmIdList);
|
|
|
+ }
|
|
|
+ this.update(areaUpdateWrapper);
|
|
|
+
|
|
|
+ break;
|
|
|
+ case BY_PERSON:
|
|
|
+ // 直接指定大区经理
|
|
|
+ UpdateWrapper<TBCrm> personUpdateWrapper = new UpdateWrapper<>();
|
|
|
+ personUpdateWrapper.lambda().set(TBCrm::getServiceId, serviceUnitId).set(TBCrm::getLeadType, leadType)
|
|
|
+ .set(TBCrm::getLeadId, leadId).set(TBCrm::getUpdateId, requestUser.getId())
|
|
|
+ .set(TBCrm::getUpdateTime, System.currentTimeMillis());
|
|
|
+ if (leadType.equals(defaultLeadType) && leadId.equals(defaultLeadId)) {
|
|
|
+ // 更新自己信息
|
|
|
+ personUpdateWrapper.lambda().eq(TBCrm::getId, crmId);
|
|
|
+ } else {
|
|
|
+ // 更新同类派单信息
|
|
|
+ personUpdateWrapper.lambda().in(TBCrm::getId, similarCrmIdList);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 不可更改
|
|
|
+ if (!Objects.equals(leadType, defaultLeadType) || !Objects.equals(leadId, defaultLeadId)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception(String.format("客户[%s]在该服务单元下已经有发布的sop,无法更改绑定信息", customName));
|
|
|
+ }
|
|
|
+ tbCrm.setServiceId(serviceUnitId);
|
|
|
+ tbCrm.setLeadType(defaultLeadType);
|
|
|
+ tbCrm.setLeadId(defaultLeadId);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Transactional
|
|
|
@Override
|
|
|
public void unbindCrmWithService(Long crmId) {
|
|
|
+ SysUser requestUser = (SysUser) ServletUtil.getRequestUser();
|
|
|
TBCrm tbCrm = this.getById(crmId);
|
|
|
if (Objects.isNull(tbCrm)) {
|
|
|
throw ExceptionResultEnum.ERROR.exception("未找到派单信息");
|
|
|
}
|
|
|
+ if (CrmStatusEnum.PUBLISH.equals(tbCrm.getStatus())) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception(String.format("已发布的派单[%s]不能移出,请先撤销发布", tbCrm.getCrmNo()));
|
|
|
+ }
|
|
|
Long serviceUnitId = tbCrm.getServiceId();
|
|
|
+
|
|
|
TBService tbService = tbServiceService.getById(serviceUnitId);
|
|
|
if (Objects.nonNull(tbService)) {
|
|
|
ServiceStatusEnum status = tbService.getStatus();
|
|
@@ -161,7 +230,10 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
|
|
|
throw ExceptionResultEnum.ERROR.exception("服务单元的当前状态更新为" + ServiceStatusEnum.FINISH.name() + "不允许移除");
|
|
|
}
|
|
|
}
|
|
|
- this.crmReBindServiceUnit(tbCrm.getCrmNo(), serviceUnitId, null);
|
|
|
+ UpdateWrapper<TBCrm> updateWrapper = new UpdateWrapper<>();
|
|
|
+ updateWrapper.lambda().eq(TBCrm::getId, crmId).set(TBCrm::getServiceId, null).set(TBCrm::getLeadType, null)
|
|
|
+ .set(TBCrm::getLeadId, null).set(TBCrm::getRegionId, null).set(TBCrm::getRegionDetailId, null).set(TBCrm::getUpdateId, requestUser.getId()).set(TBCrm::getUpdateTime, System.currentTimeMillis());
|
|
|
+ this.update(updateWrapper);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -388,7 +460,7 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public CrmProjectResult findCrmProjectInfo(String sopNo, Long crmDetailId,String crmNo) {
|
|
|
+ public CrmProjectResult findCrmProjectInfo(String sopNo, Long crmDetailId, String crmNo) {
|
|
|
CrmProjectResult result = new CrmProjectResult();
|
|
|
TBCrmDetail tbCrmDetail = null;
|
|
|
if (crmDetailId != null && crmDetailId > 0) {
|
|
@@ -482,6 +554,7 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
|
|
|
return this.baseMapper.findByTBCrmListByServiceUnitIdAndAddress(serviceUnitId, province, city);
|
|
|
}
|
|
|
|
|
|
+ @Deprecated
|
|
|
@Transactional
|
|
|
@Override
|
|
|
public void crmReBindServiceUnit(String crmNo, Long oldServiceUnitId, Long newServiceUnitId) {
|
|
@@ -731,21 +804,66 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public CrmBindResult findCrmBindInfo(Long serviceUnitId, Long customId) {
|
|
|
+ RegionManagerSelectedTypeEnum leadType = null;
|
|
|
+ Long leadId = null;
|
|
|
+ boolean canEdit = true;
|
|
|
+ SysCustom sysCustom = sysCustomService.getById(customId);
|
|
|
+ if (Objects.isNull(sysCustom)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("未找到客户");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<TBCrm> sameCrmList = this.list(new QueryWrapper<TBCrm>().lambda().eq(TBCrm::getCustomId, customId)
|
|
|
+ .eq(TBCrm::getServiceId, serviceUnitId));
|
|
|
+ if (CollectionUtils.isNotEmpty(sameCrmList)) {
|
|
|
+ // 对于同一服务单元同客户下有发布sop的,不允许更换大区经理,上述两图中内容置灰,不可更换大区经理。一旦更换大区经理,该客户的所有派单均更换大区经理
|
|
|
+ List<RegionManagerSelectedTypeEnum> leadTypeList = sameCrmList.stream().map(TBCrm::getLeadType).collect(Collectors.toList());
|
|
|
+ if (leadTypeList.size() != 1) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("客户在服务单元下存在不同的大区经理指定方式");
|
|
|
+ }
|
|
|
+ leadType = leadTypeList.get(0);
|
|
|
+ List<Long> leadIdList = sameCrmList.stream().map(TBCrm::getLeadId).collect(Collectors.toList());
|
|
|
+ if (leadIdList.size() != 1) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("客户在服务单元下存在不同的大区经理");
|
|
|
+ }
|
|
|
+ leadId = leadIdList.get(0);
|
|
|
+ if (sameCrmList.stream().anyMatch(e -> CrmStatusEnum.PUBLISH.equals(e.getStatus()))) {
|
|
|
+ canEdit = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ CrmBindResult crmBindResult = new CrmBindResult();
|
|
|
+ crmBindResult.setSimilarCrmIdList(sameCrmList.stream().map(TBCrm::getId).distinct().collect(Collectors.toList()));
|
|
|
+ crmBindResult.setCanEdit(canEdit);
|
|
|
+ if (leadId != null) {
|
|
|
+ SysUser leader = sysUserService.getById(leadId);
|
|
|
+ if (Objects.isNull(leader)) {
|
|
|
+ throw ExceptionResultEnum.ERROR.exception("未找到大区经理用户");
|
|
|
+ }
|
|
|
+ crmBindResult.setLeadId(leadId);
|
|
|
+ crmBindResult.setLeadName(leader.getRealName());
|
|
|
+ }
|
|
|
+ crmBindResult.setLeadType(leadType);
|
|
|
+ crmBindResult.setCustomName(sysCustom.getName());
|
|
|
+ return crmBindResult;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据sop用户身份类型构建用户档案信息
|
|
|
- * @param datasource 数据源
|
|
|
+ *
|
|
|
+ * @param datasource 数据源
|
|
|
* @param sopRoleTypeEnum 身份
|
|
|
* @return 用户档案信息
|
|
|
*/
|
|
|
- private List<UserArchivesDto> buildUserArchivesDtoList(List<TBUserArchivesAllocation> datasource, SopRoleTypeEnum sopRoleTypeEnum){
|
|
|
- return datasource.stream()
|
|
|
- .filter(e -> sopRoleTypeEnum.equals(e.getSopRoleType())).flatMap(e -> {
|
|
|
- UserArchivesDto dto = new UserArchivesDto();
|
|
|
- Long userArchivesId = e.getArchivesId();
|
|
|
- dto.setUserArchivesId(userArchivesId);
|
|
|
- dto.setUserId(e.getUserId());
|
|
|
- dto.setName(tbUserArchivesService.getById(userArchivesId).getName());
|
|
|
- return Stream.of(dto);
|
|
|
- }).collect(Collectors.toList());
|
|
|
+ private List<UserArchivesDto> buildUserArchivesDtoList(List<TBUserArchivesAllocation> datasource,
|
|
|
+ SopRoleTypeEnum sopRoleTypeEnum) {
|
|
|
+ return datasource.stream().filter(e -> sopRoleTypeEnum.equals(e.getSopRoleType())).flatMap(e -> {
|
|
|
+ UserArchivesDto dto = new UserArchivesDto();
|
|
|
+ Long userArchivesId = e.getArchivesId();
|
|
|
+ dto.setUserArchivesId(userArchivesId);
|
|
|
+ dto.setUserId(e.getUserId());
|
|
|
+ dto.setName(tbUserArchivesService.getById(userArchivesId).getName());
|
|
|
+ return Stream.of(dto);
|
|
|
+ }).collect(Collectors.toList());
|
|
|
}
|
|
|
}
|