|
@@ -2,13 +2,17 @@ package com.poteviohealth.cgp.sso.module.system.service.dept;
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.poteviohealth.cgp.sso.framework.common.enums.CommonStatusEnum;
|
|
import com.poteviohealth.cgp.sso.framework.common.enums.CommonStatusEnum;
|
|
|
import com.poteviohealth.cgp.sso.framework.common.util.object.BeanUtils;
|
|
import com.poteviohealth.cgp.sso.framework.common.util.object.BeanUtils;
|
|
|
import com.poteviohealth.cgp.sso.framework.datapermission.core.annotation.DataPermission;
|
|
import com.poteviohealth.cgp.sso.framework.datapermission.core.annotation.DataPermission;
|
|
|
import com.poteviohealth.cgp.sso.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
|
|
import com.poteviohealth.cgp.sso.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
|
|
|
import com.poteviohealth.cgp.sso.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
|
|
import com.poteviohealth.cgp.sso.module.system.controller.admin.dept.vo.dept.DeptSaveReqVO;
|
|
|
import com.poteviohealth.cgp.sso.module.system.dal.dataobject.dept.DeptDO;
|
|
import com.poteviohealth.cgp.sso.module.system.dal.dataobject.dept.DeptDO;
|
|
|
|
|
+import com.poteviohealth.cgp.sso.module.system.dal.dataobject.sequence.SequenceDO;
|
|
|
import com.poteviohealth.cgp.sso.module.system.dal.mysql.dept.DeptMapper;
|
|
import com.poteviohealth.cgp.sso.module.system.dal.mysql.dept.DeptMapper;
|
|
|
|
|
+import com.poteviohealth.cgp.sso.module.system.dal.mysql.sequence.SequenceMapper;
|
|
|
import com.poteviohealth.cgp.sso.module.system.dal.mysql.user.AdminUserMapper;
|
|
import com.poteviohealth.cgp.sso.module.system.dal.mysql.user.AdminUserMapper;
|
|
|
import com.poteviohealth.cgp.sso.module.system.dal.redis.RedisKeyConstants;
|
|
import com.poteviohealth.cgp.sso.module.system.dal.redis.RedisKeyConstants;
|
|
|
import com.google.common.annotations.VisibleForTesting;
|
|
import com.google.common.annotations.VisibleForTesting;
|
|
@@ -18,10 +22,12 @@ import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.cache.annotation.CacheEvict;
|
|
import org.springframework.cache.annotation.CacheEvict;
|
|
|
import org.springframework.cache.annotation.Cacheable;
|
|
import org.springframework.cache.annotation.Cacheable;
|
|
|
|
|
+import org.springframework.security.core.parameters.P;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
|
+import java.text.DecimalFormat;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
|
|
|
|
import static com.poteviohealth.cgp.sso.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
import static com.poteviohealth.cgp.sso.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
@@ -42,6 +48,12 @@ public class DeptServiceImpl implements DeptService {
|
|
|
private DeptMapper deptMapper;
|
|
private DeptMapper deptMapper;
|
|
|
@Resource
|
|
@Resource
|
|
|
private AdminUserMapper adminUserMapper;
|
|
private AdminUserMapper adminUserMapper;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private SequenceMapper sequenceMapper;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ private static final DecimalFormat dfCompany = new DecimalFormat("000");
|
|
|
|
|
+ private static final DecimalFormat dfinstitution = new DecimalFormat("0000");
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
@CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST,
|
|
@CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST,
|
|
@@ -56,7 +68,7 @@ public class DeptServiceImpl implements DeptService {
|
|
|
// 校验部门名的唯一性
|
|
// 校验部门名的唯一性
|
|
|
validateDeptNameUnique(null, createReqVO.getParentId(), createReqVO.getName());
|
|
validateDeptNameUnique(null, createReqVO.getParentId(), createReqVO.getName());
|
|
|
// 校验部门编码唯一性
|
|
// 校验部门编码唯一性
|
|
|
- validateDeptCodeUnique(null, createReqVO.getParentId(), createReqVO.getCode());
|
|
|
|
|
|
|
+// validateDeptCodeUnique(null, createReqVO.getParentId(), createReqVO.getCode());
|
|
|
|
|
|
|
|
if(!createReqVO.getParentId().equals(DeptDO.PARENT_ID_ROOT)){
|
|
if(!createReqVO.getParentId().equals(DeptDO.PARENT_ID_ROOT)){
|
|
|
DeptDO parentDept = deptMapper.selectById(createReqVO.getParentId());
|
|
DeptDO parentDept = deptMapper.selectById(createReqVO.getParentId());
|
|
@@ -68,12 +80,58 @@ public class DeptServiceImpl implements DeptService {
|
|
|
}else{
|
|
}else{
|
|
|
createReqVO.setLevel(1);
|
|
createReqVO.setLevel(1);
|
|
|
}
|
|
}
|
|
|
|
|
+ //自动生成部门编码
|
|
|
|
|
+ String code = constructDeptCode(createReqVO);
|
|
|
|
|
+ if(StringUtils.isEmpty(code)){
|
|
|
|
|
+ throw exception(DEPT_NULL_PARAM);
|
|
|
|
|
+ }
|
|
|
|
|
+ createReqVO.setCode(code);
|
|
|
// 插入部门
|
|
// 插入部门
|
|
|
DeptDO dept = BeanUtils.toBean(createReqVO, DeptDO.class);
|
|
DeptDO dept = BeanUtils.toBean(createReqVO, DeptDO.class);
|
|
|
deptMapper.insert(dept);
|
|
deptMapper.insert(dept);
|
|
|
return dept.getId();
|
|
return dept.getId();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private String constructDeptCode(DeptSaveReqVO createReqVO) {
|
|
|
|
|
+ String deptCode = StringUtils.EMPTY;
|
|
|
|
|
+
|
|
|
|
|
+ if(Objects.isNull(createReqVO.getParentId())|| Objects.isNull(createReqVO.getLevel())) {
|
|
|
|
|
+ return deptCode;
|
|
|
|
|
+ }
|
|
|
|
|
+ SequenceDO sequenceDO = null;
|
|
|
|
|
+ if(createReqVO.getLevel()==1){
|
|
|
|
|
+ sequenceDO = sequenceMapper.selectOne(new QueryWrapper<SequenceDO>().lambda().eq(SequenceDO::getName, "dept").eq(SequenceDO::getType, "group"));
|
|
|
|
|
+ }
|
|
|
|
|
+ if(createReqVO.getLevel()==2){
|
|
|
|
|
+ sequenceDO = sequenceMapper.selectOne(new QueryWrapper<SequenceDO>().lambda().eq(SequenceDO::getName, "dept").eq(SequenceDO::getType, "company"));
|
|
|
|
|
+ }
|
|
|
|
|
+ if(createReqVO.getLevel()==3){
|
|
|
|
|
+ sequenceDO = sequenceMapper.selectOne(new QueryWrapper<SequenceDO>().lambda().eq(SequenceDO::getName, "dept").eq(SequenceDO::getType, "institution"));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if(Objects.nonNull(sequenceDO)){
|
|
|
|
|
+ Integer currentValue = sequenceDO.getCurrentValue()+1;
|
|
|
|
|
+ int updateNum = sequenceMapper.update(new UpdateWrapper<SequenceDO>().lambda().set(SequenceDO::getCurrentValue, currentValue).set(SequenceDO::getVersion, sequenceDO.getVersion() + 1).eq(SequenceDO::getId, sequenceDO.getId()));
|
|
|
|
|
+ if(updateNum==0){
|
|
|
|
|
+ return deptCode;
|
|
|
|
|
+ }
|
|
|
|
|
+ if(createReqVO.getLevel()==1 ){
|
|
|
|
|
+ deptCode = String.valueOf(createReqVO.getAreaId())+dfCompany.format(currentValue);
|
|
|
|
|
+ } else if(createReqVO.getLevel()==2){
|
|
|
|
|
+ deptCode = String.valueOf(createReqVO.getAreaId())+dfCompany.format(currentValue)+"0000";
|
|
|
|
|
+ }
|
|
|
|
|
+ else{
|
|
|
|
|
+ DeptDO deptDO = this.deptMapper.selectById(createReqVO.getParentId());
|
|
|
|
|
+ if(Objects.nonNull(deptDO)){
|
|
|
|
|
+ String companyCode = deptDO.getCode().substring(6,9);
|
|
|
|
|
+ deptCode = String.valueOf(createReqVO.getAreaId())+companyCode+dfinstitution.format(currentValue);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return deptCode;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
@CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST,
|
|
@CacheEvict(cacheNames = RedisKeyConstants.DEPT_CHILDREN_ID_LIST,
|
|
|
allEntries = true) // allEntries 清空所有缓存,因为操作一个部门,涉及到多个缓存
|
|
allEntries = true) // allEntries 清空所有缓存,因为操作一个部门,涉及到多个缓存
|
|
@@ -89,7 +147,7 @@ public class DeptServiceImpl implements DeptService {
|
|
|
// 校验部门名的唯一性
|
|
// 校验部门名的唯一性
|
|
|
validateDeptNameUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName());
|
|
validateDeptNameUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getName());
|
|
|
// 校验部门编码唯一性
|
|
// 校验部门编码唯一性
|
|
|
- validateDeptCodeUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getCode());
|
|
|
|
|
|
|
+// validateDeptCodeUnique(updateReqVO.getId(), updateReqVO.getParentId(), updateReqVO.getCode());
|
|
|
DeptDO deptDO = deptMapper.selectById(updateReqVO.getId());
|
|
DeptDO deptDO = deptMapper.selectById(updateReqVO.getId());
|
|
|
if(deptDO.getParentId().compareTo(updateReqVO.getParentId())!=0
|
|
if(deptDO.getParentId().compareTo(updateReqVO.getParentId())!=0
|
|
|
&&!updateReqVO.getParentId().equals(DeptDO.PARENT_ID_ROOT)){
|
|
&&!updateReqVO.getParentId().equals(DeptDO.PARENT_ID_ROOT)){
|
|
@@ -97,6 +155,7 @@ public class DeptServiceImpl implements DeptService {
|
|
|
updateReqVO.setLevel(parentDept.getLevel()+1);
|
|
updateReqVO.setLevel(parentDept.getLevel()+1);
|
|
|
updateReqVO.setTreePath(StringUtils.isNotEmpty(parentDept.getTreePath())?parentDept.getTreePath()+","+parentDept.getId():String.valueOf(parentDept.getId()));
|
|
updateReqVO.setTreePath(StringUtils.isNotEmpty(parentDept.getTreePath())?parentDept.getTreePath()+","+parentDept.getId():String.valueOf(parentDept.getId()));
|
|
|
}
|
|
}
|
|
|
|
|
+ updateReqVO.setCode(null);
|
|
|
// 更新部门
|
|
// 更新部门
|
|
|
DeptDO updateObj = BeanUtils.toBean(updateReqVO, DeptDO.class);
|
|
DeptDO updateObj = BeanUtils.toBean(updateReqVO, DeptDO.class);
|
|
|
deptMapper.updateById(updateObj);
|
|
deptMapper.updateById(updateObj);
|