ソースを参照

fix:bug
1.解决考勤组设置可以批量选择供应商(服务单元-供应商-考勤对象 唯一)
2.解决派单管理修改时不选择服务单元派单和服务单元没有解绑的问题

caozixuan 1 年間 前
コミット
dca23064cd

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

@@ -12,7 +12,6 @@ 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.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;

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

@@ -1,7 +1,8 @@
 package com.qmth.sop.business.bean.result;
 
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.sop.business.entity.SysDingGroup;
-import com.qmth.sop.business.entity.SysDingObj;
 import com.qmth.sop.common.enums.ServiceStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -35,7 +36,11 @@ public class SysDingGroupResult extends SysDingGroup implements Serializable {
     private ServiceStatusEnum status;
 
     @ApiModelProperty(value = "适用考勤对象")
-    private List<SysDingGroupRoleResult> dingObjs= new ArrayList<>();
+    private List<SysDingGroupRoleResult> dingObjs = new ArrayList<>();
+
+    @JsonSerialize(using = ToStringSerializer.class)
+    @ApiModelProperty(value = "供应商id集合")
+    private List<Long> supplierIdList;
 
     public List<SysDingGroupRoleResult> getDingObjs() {
         return dingObjs;
@@ -46,7 +51,6 @@ public class SysDingGroupResult extends SysDingGroup implements Serializable {
     }
 
 
-
     public String getService() {
         return service;
     }
@@ -78,4 +82,12 @@ public class SysDingGroupResult extends SysDingGroup implements Serializable {
     public void setStatus(ServiceStatusEnum status) {
         this.status = status;
     }
+
+    public List<Long> getSupplierIdList() {
+        return supplierIdList;
+    }
+
+    public void setSupplierIdList(List<Long> supplierIdList) {
+        this.supplierIdList = supplierIdList;
+    }
 }

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

@@ -1,5 +1,7 @@
 package com.qmth.sop.business.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import com.qmth.sop.common.base.BaseEntity;

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

@@ -4,23 +4,25 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 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.SysUser;
-import com.qmth.sop.business.entity.TBService;
+import com.qmth.sop.business.bean.result.SysDingGroupRoleResult;
+import com.qmth.sop.business.entity.*;
 import com.qmth.sop.business.mapper.SysDingGroupMapper;
-import com.qmth.sop.business.service.SysDingGroupService;
-import com.qmth.sop.business.service.SysDingObjService;
-import com.qmth.sop.business.service.TBServiceService;
+import com.qmth.sop.business.service.*;
+import com.qmth.sop.common.base.BaseEntity;
+import com.qmth.sop.common.enums.DingObjTypeEnum;
 import com.qmth.sop.common.enums.ExceptionResultEnum;
 import com.qmth.sop.common.enums.ServiceStatusEnum;
 import com.qmth.sop.common.util.ServletUtil;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * 考勤组表 服务实现.
@@ -38,6 +40,10 @@ public class SysDingGroupServiceImpl extends ServiceImpl<SysDingGroupMapper, Sys
     SysDingObjService sysDingObjService;
     @Resource
     TBServiceService tbServiceService;
+    @Resource
+    SysSupplierService sysSupplierService;
+    @Resource
+    SysRoleService sysRoleService;
 
     /**
      * 查询列表
@@ -63,15 +69,72 @@ public class SysDingGroupServiceImpl extends ServiceImpl<SysDingGroupMapper, Sys
     @Transactional
     public void add(SysDingGroupResult sysDingGroup) {
         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());
-            sysDingObjService.save(e);
-        });
 
+        // 新增校验
+        Long serviceUnitId = sysDingGroup.getServiceId();
+        List<Long> supplierIdList = sysDingGroup.getSupplierIdList();
+        if (!CollectionUtils.isEmpty(supplierIdList)) {
+            List<SysDingGroupRoleResult> sysDingGroupRoleResultList = sysDingGroup.getDingObjs();
+            List<Long> roleIdList = sysDingGroupRoleResultList.stream()
+                    .filter(e -> DingObjTypeEnum.DING.equals(e.getType()))
+                    .map(SysDingObj::getRoleId).distinct()
+                    .collect(Collectors.toList());
+
+            for (Long supplierId : supplierIdList) {
+                List<Long> sysDingGroupIdList = this.list(new QueryWrapper<SysDingGroup>().lambda()
+                                .eq(SysDingGroup::getServiceId, serviceUnitId)
+                                .eq(SysDingGroup::getSupplierId, supplierId))
+                        .stream()
+                        .map(BaseEntity::getId)
+                        .collect(Collectors.toList());
+
+                if (!CollectionUtils.isEmpty(sysDingGroupIdList)) {
+                    List<Long> dbRoleIdList = sysDingObjService.list(new QueryWrapper<SysDingObj>()
+                                    .lambda()
+                                    .in(SysDingObj::getDingGroupId, sysDingGroupIdList))
+                            .stream()
+                            .map(SysDingObj::getRoleId).distinct().collect(Collectors.toList());
+
+
+                    List<Long> alreadyRoleIdList = roleIdList.stream().filter(dbRoleIdList::contains).collect(Collectors.toList());
+                    if (!CollectionUtils.isEmpty(alreadyRoleIdList)) {
+                        // 已存在的角色id集合
+                        SysSupplier sysSupplier = sysSupplierService.getById(supplierId);
+                        if (Objects.isNull(sysSupplier)) {
+                            throw ExceptionResultEnum.ERROR.exception("供应商不存在");
+                        }
+                        TBService tbServiceUnit = tbServiceService.getById(serviceUnitId);
+                        if (Objects.isNull(tbServiceUnit)) {
+                            throw ExceptionResultEnum.ERROR.exception("服务单元不存在");
+                        }
+                        String supplierName = sysSupplier.getName();
+                        String serviceUnitName = tbServiceUnit.getName();
+
+                        String roleNames = sysRoleService.list(new QueryWrapper<SysRole>()
+                                        .lambda()
+                                        .in(SysRole::getId))
+                                .stream()
+                                .map(SysRole::getName)
+                                .collect(Collectors.joining(","));
+
+                        String error = String.format("新增失败,服务单元[%s],供应商[%s],使用考勤对象为[%s] 的考勤组设置已经存在", serviceUnitName, supplierName, roleNames);
+                        throw ExceptionResultEnum.ERROR.exception(error);
+                    }
+                }
+                SysDingGroup sysDingGroupEntity = new SysDingGroup();
+                BeanUtils.copyProperties(sysDingGroup, sysDingGroupEntity);
+                sysDingGroupEntity.setSupplierId(supplierId);
+
+                sysDingGroupEntity.setCreateId(sysUser.getId());
+                sysDingGroupEntity.setCreateTime(System.currentTimeMillis());
+                sysDingGroupEntity.setEnable(true);
+                this.saveOrUpdate(sysDingGroupEntity);
+                sysDingGroup.getDingObjs().forEach(e -> {
+                    e.setDingGroupId(sysDingGroupEntity.getId());
+                    sysDingObjService.save(e);
+                });
+            }
+        }
     }
 
     /**

+ 19 - 8
sop-business/src/main/java/com/qmth/sop/business/service/impl/TBCrmServiceImpl.java

@@ -163,7 +163,7 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
 
     @Override
     public TBCrm findByCrmNo(String crmNo) {
-        List<TBCrm> tbCrmList = this.list(new QueryWrapper<TBCrm>().lambda().eq(TBCrm::getCrmNo, crmNo).eq(TBCrm::getEnable,true));
+        List<TBCrm> tbCrmList = this.list(new QueryWrapper<TBCrm>().lambda().eq(TBCrm::getCrmNo, crmNo).eq(TBCrm::getEnable, true));
         if (CollectionUtils.isEmpty(tbCrmList)) {
             throw ExceptionResultEnum.ERROR.exception("派单不存在[" + crmNo + "]");
         }
@@ -205,11 +205,22 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
             }
             boolean result = saveOrUpdate(tBCrm);
             Long serviceId = tBCrm.getServiceId();
-            if (result && serviceId != null && serviceId > 0) {
-                Long regionLeaderId = tbServiceRegionService.findRegionLeader(serviceId, tBCrm.getCrmNo());
-                UpdateWrapper<TBCrm> updateWrapper = new UpdateWrapper<>();
-                updateWrapper.lambda().eq(TBCrm::getId, tBCrm.getId()).set(TBCrm::getLeadId, regionLeaderId);
-                this.update(updateWrapper);
+            if (result) {
+                if (serviceId != null && serviceId > 0) {
+                    // 有服务单元 -> 绑定服务单元和大区经理
+                    Long regionLeaderId = tbServiceRegionService.findRegionLeader(serviceId, tBCrm.getCrmNo());
+                    UpdateWrapper<TBCrm> updateWrapper = new UpdateWrapper<>();
+                    updateWrapper.lambda().eq(TBCrm::getId, tBCrm.getId()).set(TBCrm::getLeadId, regionLeaderId);
+                    this.update(updateWrapper);
+                } else {
+                    // 有服务单元 -> 解绑服务单元和大区经理
+                    UpdateWrapper<TBCrm> updateWrapper = new UpdateWrapper<>();
+                    updateWrapper.lambda()
+                            .eq(TBCrm::getId, tBCrm.getId())
+                            .set(TBCrm::getLeadId, null)
+                            .set(TBCrm::getServiceId, null);
+                    this.update(updateWrapper);
+                }
             }
             tbUserArchivesAllocationService.crmReBindServiceUnit(tBCrm.getCrmNo(), oldServiceUnitId, serviceId);
             return result;
@@ -264,8 +275,8 @@ public class TBCrmServiceImpl extends ServiceImpl<TBCrmMapper, TBCrm> implements
         List<TBCrm> tbCrmList = this.listByIds(crmIdList);
         for (TBCrm tbCrm : tbCrmList) {
             Long serviceId = tbCrm.getServiceId();
-            if (serviceId != null && serviceId > 0){
-                throw ExceptionResultEnum.ERROR.exception(String.format("已经划分的派单[%s]不能作废",tbCrm.getCrmNo()));
+            if (serviceId != null && serviceId > 0) {
+                throw ExceptionResultEnum.ERROR.exception(String.format("已经划分的派单[%s]不能作废", tbCrm.getCrmNo()));
             }
             tbCrm.setEnable(false);
         }