lixing 4 년 전
부모
커밋
877cdbc634

+ 17 - 12
fm-person/src/main/java/com/persagy/fm/department/service/impl/DepartmentServiceImpl.java

@@ -14,6 +14,7 @@ import com.persagy.fm.common.constant.enums.BoolEnum;
 import com.persagy.fm.common.constant.enums.ValidEnum;
 import com.persagy.fm.common.context.DefaultAppContext;
 import com.persagy.fm.common.model.dto.Sort;
+import com.persagy.fm.department.constant.DepConstants;
 import com.persagy.fm.department.constant.enums.DepTypeEnum;
 import com.persagy.fm.department.constant.enums.ResourceFromEnum;
 import com.persagy.fm.department.dao.DepartmentMapper;
@@ -198,7 +199,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                 !DepTypeEnum.GROUP.getType().equals(updateDepartmentDTO.getType())) {
             throw new IllegalArgumentException("部门类型不可编辑");
         }
-        // 部门名称或者父部门id发生变化,需要更新子部门的全路径
+        // 部门名称或者父部门id发生变化,对上级部门进行校验,需要更新子部门的全路径
         String fullPathAfterChange = getFullPathAfterChange(updateDepartmentDTO, department);
         updateSonDepsFullPath(department.getFullPath(), fullPathAfterChange);
 
@@ -226,6 +227,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
     }
 
     /**
+     * 对上级部门进行校验
      * 获取更新后的部门全路径
      *
      * @param updateDepartmentDTO 更新人员入参
@@ -250,14 +252,19 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         }
 
         // 如果上级部门发生了变化,级联更新自己和子部门的全路径
-        if (StringUtils.isNotBlank(updateDepartmentDTO.getParentId())) {
-            if (updateDepartmentDTO.getParentId().equals(department.getId())) {
-                throw new IllegalArgumentException("父部门不能选择自己");
+        String parentIdAfterChange = updateDepartmentDTO.getParentId();
+        if (StringUtils.isNotBlank(parentIdAfterChange)) {
+            // 上级部门不能是自己的子部门
+            Department parentDepAfterChange = queryDepartmentDetail(parentIdAfterChange);
+            String parentFullPathAfterChange = parentDepAfterChange.getFullPath();
+            if (parentFullPathAfterChange.equals(department.getFullPath()) ||
+                    parentFullPathAfterChange.startsWith(department.getFullPath() + DepConstants.FULL_PATH_SEPARATOR)) {
+                throw new IllegalArgumentException("上级部门不能选择自己或自己的子部门(包括子部门的子部门)");
             }
 
-            if (!updateDepartmentDTO.getParentId().equals(parentIdBeforeChange)) {
+            if (!parentIdAfterChange.equals(parentIdBeforeChange)) {
                 fullPathAfterChange = getDepFullPathWhenParentIdChange(
-                        nameAfterChange, updateDepartmentDTO.getParentId());
+                        nameAfterChange, parentIdAfterChange);
             }
         }
 
@@ -274,7 +281,6 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
      * @version V1.0 2021/4/11 7:30 下午
      */
     private String getDepFullPathWhenParentIdChange(String depName, String parentIdAfterChange) {
-        String separator = "-";
         // 获取更新后的父部门的全路径
         Department parentDep = queryDepartmentDetail(parentIdAfterChange);
         String parentFullPath = parentDep.getFullPath();
@@ -282,7 +288,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         if (StringUtils.isBlank(parentFullPath)) {
             return depName;
         } else {
-            return parentFullPath + separator + depName;
+            return parentFullPath + DepConstants.FULL_PATH_SEPARATOR + depName;
         }
     }
 
@@ -336,16 +342,15 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
      * @version V1.0 2021/4/11 7:27 下午
      */
     private void updateSonDepsFullPath(String fullPathBeforeChange, String fullPathAfterChange) {
-        String separator = "-";
         // 根据部门全路径查询子部门
         QueryDepartmentDTO queryDepartmentDTO = new QueryDepartmentDTO();
-        queryDepartmentDTO.setFullPath(fullPathBeforeChange + separator);
+        queryDepartmentDTO.setFullPath(fullPathBeforeChange + DepConstants.FULL_PATH_SEPARATOR);
         List<Department> sonDeps = queryDepartmentList(queryDepartmentDTO);
         // 修改子部门全路径
         for (Department sonDep : sonDeps) {
             String tmpFullPath = sonDep.getFullPath();
-            tmpFullPath = tmpFullPath.replaceFirst(fullPathBeforeChange + separator,
-                    fullPathAfterChange + separator);
+            tmpFullPath = tmpFullPath.replaceFirst(fullPathBeforeChange + DepConstants.FULL_PATH_SEPARATOR,
+                    fullPathAfterChange + DepConstants.FULL_PATH_SEPARATOR);
             sonDep.setFullPath(tmpFullPath);
         }
 

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/person/model/dto/UpsertPersonDTO.java

@@ -26,7 +26,7 @@ public class UpsertPersonDTO {
     @ApiModelProperty(value = "姓名", required = true)
     @NotNull(message = "姓名不能为空")
     @Length(max = 20, message = "姓名长度不能大于20")
-    @Pattern(regexp = RegexConstants.TEXT_REGEX, message = "姓名" + RegexConstants.TEXT_REGEX_WARNING)
+    @Pattern(regexp = RegexConstants.ALL_REGEX, message = "姓名" + RegexConstants.ALL_REGEX_WARNING)
     private String name;
 
     @Pattern(regexp = RegexConstants.EN_NUM_BLANK_REGEX, message = "工号" + RegexConstants.EN_NUM_REGEX_WARNING)

+ 12 - 0
fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonServiceImpl.java

@@ -146,6 +146,9 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
     private void saveAccountRole(
             String accountId, String mainDuty,
             List<String> otherDuties, List<String> otherRoles) {
+        if (otherDuties.contains(mainDuty)) {
+            throw new IllegalArgumentException("副岗不能选择和主岗相同的岗位");
+        }
         // 保存主岗
         if (StringUtils.isNotBlank(mainDuty)) {
             saveAccountRole(accountId, mainDuty, AccountRoleTypeEnum.MAIN_DUTY.getType());
@@ -511,6 +514,11 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
      */
     private Person updatePersonBaseInfo(UpdatePersonDTO updatePersonDTO, String personId) {
         Person person = getById(personId);
+        // 直接上级不能选择自己
+        Long leaderAfterChange = updatePersonDTO.getLeader();
+        if (personId.equals(leaderAfterChange.toString())) {
+            throw new IllegalArgumentException("不能选择自己作为直接上级");
+        }
         person = ConvertPersonTool.INSTANCE.convertUpdateDto2Entity(person, updatePersonDTO);
         person.setNamePinyin(PinyinUtil.getPinyin(person.getName(), ""));
         List<String> professions = updatePersonDTO.getProfessions();
@@ -600,6 +608,9 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
     private Boolean accountRoleChanged(
             List<SaasAccountRole> saasAccountRoles, String mainDuty,
             List<String> otherDuties, List<String> otherRoles) {
+        if (otherDuties.contains(mainDuty)) {
+            throw new IllegalArgumentException("副岗不能选择和主岗相同的岗位");
+        }
         // 校验主岗是否发生变化
         List<SaasAccountRole> mainDuties = saasAccountRoles.stream().filter(
                 saasAccountRole -> AccountRoleTypeEnum.MAIN_DUTY.getType().equals(saasAccountRole.getCasType())
@@ -1089,6 +1100,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
 
         QueryWrapper<Person> personQueryWrapper = new QueryWrapper<>();
         personQueryWrapper.eq(Person.PROP_VALID, ValidEnum.TRUE.getType());
+        personQueryWrapper.ne(Person.PROP_JOB_NUMBER, "");
         personQueryWrapper.orderByDesc(Person.PROP_CREATIONTIME);
 
         IPage<Person> pageParam = new Page<>(1, 1, true);

+ 6 - 3
fm-person/src/main/java/com/persagy/fm/saas/role/controller/SaasRoleController.java

@@ -10,6 +10,7 @@ import com.persagy.fm.saas.role.model.dto.AddSaasRoleDTO;
 import com.persagy.fm.saas.role.model.dto.DeleteSaasRoleDTO;
 import com.persagy.fm.saas.role.model.dto.PageQuerySaasRoleDTO;
 import com.persagy.fm.saas.role.model.dto.UpdateSaasRoleDTO;
+import com.persagy.fm.saas.role.model.vo.SaasRoleIdVO;
 import com.persagy.fm.saas.role.model.vo.SaasRoleListItemVO;
 import com.persagy.fm.saas.role.service.ISaasRoleService;
 import io.swagger.annotations.Api;
@@ -37,10 +38,12 @@ public class SaasRoleController {
 
     @ApiOperation(value = "创建")
     @PostMapping("/create")
-    public CommonResult createSaasRole(
+    public CommonResult<SaasRoleIdVO> createSaasRole(
             @Valid @RequestBody AddSaasRoleDTO addSaasRoleDTO) {
-        saasRoleService.createSaasRole(addSaasRoleDTO);
-        return ResultHelper.success("创建成功");
+        String roleId = saasRoleService.createSaasRole(addSaasRoleDTO);
+        SaasRoleIdVO saasRoleIdVO = new SaasRoleIdVO();
+        saasRoleIdVO.setId(roleId);
+        return ResultHelper.single(saasRoleIdVO);
     }
 
     //    @ApiOperation(value = "详情")