lixing 4 年之前
父節點
當前提交
d4e3655c77

+ 11 - 5
fm-person/src/main/java/com/persagy/fm/person/controller/PersonController.java

@@ -19,6 +19,7 @@ import com.persagy.fm.person.service.IPersonService;
 import com.persagy.fm.saas.project.model.vo.ProjectTreeItemVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -196,28 +197,33 @@ public class PersonController {
     public CommonResult<DuplicateVO> checkDuplicate(@RequestBody CheckDuplicateDTO checkDuplicateDTO) {
         DuplicateVO duplicateVO = new DuplicateVO();
         duplicateVO.setDuplicate(false);
+
+        Person person = null;
+        if (StringUtils.isNotBlank(checkDuplicateDTO.getPersonId())) {
+            person = personService.queryPersonProfile(checkDuplicateDTO.getPersonId());
+        }
         // 校验身份证号
-        if (personService.checkDuplicateIdNumber(checkDuplicateDTO.getIdNumber())) {
+        if (personService.checkDuplicateIdNumber(checkDuplicateDTO.getIdNumber(), person)) {
             duplicateVO.setDuplicate(true);
             return ResultHelper.single(duplicateVO, "身份证号重复");
         }
         // 校验账号
-        if (personService.checkDuplicateUserName(checkDuplicateDTO.getUsername())) {
+        if (personService.checkDuplicateUserName(checkDuplicateDTO.getUsername(), person)) {
             duplicateVO.setDuplicate(true);
             return ResultHelper.single(duplicateVO, "账号已被使用");
         }
         // 校验手机号
-        if (personService.checkDuplicatePhoneNum(checkDuplicateDTO.getPhoneNumber())) {
+        if (personService.checkDuplicatePhoneNum(checkDuplicateDTO.getPhoneNumber(), person)) {
             duplicateVO.setDuplicate(true);
             return ResultHelper.single(duplicateVO, "手机号已被使用");
         }
         // 校验工号
-        if (personService.checkDuplicateJobNumber(checkDuplicateDTO.getJobNumber())) {
+        if (personService.checkDuplicateJobNumber(checkDuplicateDTO.getJobNumber(), person)) {
             duplicateVO.setDuplicate(true);
             return ResultHelper.single(duplicateVO, "工号已被使用");
         }
         // 校验邮箱
-        if (personService.checkDuplicateMail(checkDuplicateDTO.getMail())) {
+        if (personService.checkDuplicateMail(checkDuplicateDTO.getMail(), person)) {
             duplicateVO.setDuplicate(true);
             return ResultHelper.single(duplicateVO, "邮箱已被使用");
         }

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

@@ -10,6 +10,7 @@ import lombok.Data;
 @Data
 @ApiModel(value = "校验属性重复入参")
 public class CheckDuplicateDTO {
+    private String personId;
     private String idNumber;
     private String phoneNumber;
     private String username;

+ 55 - 0
fm-person/src/main/java/com/persagy/fm/person/service/IPersonService.java

@@ -207,6 +207,17 @@ public interface IPersonService {
     Boolean checkDuplicatePhoneNum(String phoneNumber);
 
     /**
+     * 校验重复的手机号,如果没变动不校验
+     *
+     * @param phoneNumber 手机号
+     * @param person 当前人员
+     * @return 是否重复
+     * @author lixing
+     * @version V1.0 2021/4/7 11:39 上午
+     */
+    Boolean checkDuplicatePhoneNum(String phoneNumber, Person person);
+
+    /**
      * 校验重复的身份证号
      *
      * @param idNumber 身份证号
@@ -217,6 +228,17 @@ public interface IPersonService {
     Boolean checkDuplicateIdNumber(String idNumber);
 
     /**
+     * 校验重复的身份证号,如果没变动不校验
+     *
+     * @param idNumber 身份证号
+     * @param person 当前人员
+     * @return 是否重复
+     * @author lixing
+     * @version V1.0 2021/4/7 11:40 上午
+     */
+    Boolean checkDuplicateIdNumber(String idNumber, Person person);
+
+    /**
      * 校验重复的登录名
      *
      * @param username 登录名
@@ -227,6 +249,17 @@ public interface IPersonService {
     Boolean checkDuplicateUserName(String username);
 
     /**
+     * 校验重复的登录名,如果没变动不校验
+     *
+     * @param username 登录名
+     * @param person 当前人员
+     * @return 是否重复
+     * @author lixing
+     * @version V1.0 2021/4/7 11:40 上午
+     */
+    Boolean checkDuplicateUserName(String username, Person person);
+
+    /**
      * 校验重复的工号
      *
      * @param jobNumber 工号
@@ -237,6 +270,17 @@ public interface IPersonService {
     Boolean checkDuplicateJobNumber(String jobNumber);
 
     /**
+     * 校验重复的工号,如果没变动不校验
+     *
+     * @param jobNumber 工号
+     * @param person 当前人员
+     * @return 是否重复
+     * @author lixing
+     * @version V1.0 2021/4/7 11:40 上午
+     */
+    Boolean checkDuplicateJobNumber(String jobNumber, Person person);
+
+    /**
      * 校验重复的邮箱
      *
      * @param mail 邮箱
@@ -247,6 +291,17 @@ public interface IPersonService {
     Boolean checkDuplicateMail(String mail);
 
     /**
+     * 校验重复的邮箱,如果没变动不校验
+     *
+     * @param mail 邮箱
+     * @param person 当前人员
+     * @return 是否重复
+     * @author lixing
+     * @version V1.0 2021/4/7 11:40 上午
+     */
+    Boolean checkDuplicateMail(String mail, Person person);
+
+    /**
      * 根据专业id查询人员
      *
      * @param professionId 专业id

+ 117 - 6
fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonServiceImpl.java

@@ -10,7 +10,6 @@ import com.persagy.fm.common.constant.enums.ValidEnum;
 import com.persagy.fm.common.context.DefaultAppContext;
 import com.persagy.fm.common.model.vo.SimpleObjVO;
 import com.persagy.fm.common.utils.ListUtil;
-import com.persagy.fm.department.model.Department;
 import com.persagy.fm.department.model.vo.DepSimpleObjVO;
 import com.persagy.fm.department.service.IDepartmentService;
 import com.persagy.fm.person.dao.PersonMapper;
@@ -336,6 +335,38 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
     }
 
     /**
+     * 校验重复项
+     *
+     * @param updatePerson4FrontEndDTO 更新人员入参
+     * @author lixing
+     * @version V1.0 2021/3/22 9:53 上午
+     */
+    private void checkUpdatePersonDTO(UpdatePerson4FrontEndDTO updatePerson4FrontEndDTO) {
+        String personId = updatePerson4FrontEndDTO.getId();
+        Person person = getById(personId);
+        // 校验身份证号
+        if (checkDuplicateIdNumber(updatePerson4FrontEndDTO.getIdNumber(), person)) {
+            throw new IllegalArgumentException("身份证号重复");
+        }
+        // 校验账号
+        if (checkDuplicateUserName(updatePerson4FrontEndDTO.getUsername(), person)) {
+            throw new IllegalArgumentException("账号已被使用");
+        }
+        // 校验手机号
+        if (checkDuplicatePhoneNum(updatePerson4FrontEndDTO.getPhoneNum(), person)) {
+            throw new IllegalArgumentException("手机号已被使用");
+        }
+        // 校验工号
+        if (checkDuplicateJobNumber(updatePerson4FrontEndDTO.getJobNumber(), person)) {
+            throw new IllegalArgumentException("工号已被使用");
+        }
+        // 校验邮箱
+        if (checkDuplicateMail(updatePerson4FrontEndDTO.getMail(), person)) {
+            throw new IllegalArgumentException("邮箱已被使用");
+        }
+    }
+
+    /**
      * 校验身份证号重复
      *
      * @param idNumber 身份证号
@@ -466,6 +497,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
     @Override
     @Transactional
     public void updatePerson(UpdatePerson4FrontEndDTO updatePerson4FrontEndDTO) {
+        checkUpdatePersonDTO(updatePerson4FrontEndDTO);
         String personId = updatePerson4FrontEndDTO.getId();
         // 更新人员基本信息
         Person person = updatePersonBaseInfo(updatePerson4FrontEndDTO, personId);
@@ -534,7 +566,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
      * 校验直接上级
      *
      * @param leaderId 直接上级id
-     * @param person 人员对象
+     * @param person   人员对象
      * @author lixing
      * @version V1.0 2021/4/22 11:43 上午
      */
@@ -1002,9 +1034,9 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
     /**
      * 批量更新时,验证人员的主副岗是否重复
      *
-     * @param mainDuty 更新条件中的主岗,为空代表不更新
+     * @param mainDuty    更新条件中的主岗,为空代表不更新
      * @param otherDuties 更新条件中的副岗,为空代表不更新
-     * @param personId 人员id
+     * @param personId    人员id
      * @author lixing
      * @version V1.0 2021/4/21 7:44 下午
      */
@@ -1019,7 +1051,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
             String personMainDuty = mainDuty;
             if (mainDuty == null) {
                 SimpleObjVO mainDutyVO = accountRoleVO.getMainDuty();
-                personMainDuty = mainDutyVO == null? null: mainDutyVO.getId();
+                personMainDuty = mainDutyVO == null ? null : mainDutyVO.getId();
             }
             List<String> personOtherDuties = otherDuties;
             if (otherDuties == null) {
@@ -1029,7 +1061,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
                             map(SimpleObjVO::getId).collect(Collectors.toList());
                 }
             }
-            if(!CollectionUtils.isEmpty(personOtherDuties)
+            if (!CollectionUtils.isEmpty(personOtherDuties)
                     && StringUtils.isNotBlank(personMainDuty)
                     && personOtherDuties.contains(personMainDuty)) {
                 throw new IllegalArgumentException("人员主岗与副岗不能出现重合");
@@ -1243,4 +1275,83 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
         List<Person> result = list(queryWrapper);
         return packagePageResult(result, result.size());
     }
+
+    @Override
+    public Boolean checkDuplicatePhoneNum(String phoneNumber, Person person) {
+        if (StringUtils.isBlank(phoneNumber)) {
+            return false;
+        }
+        SaasAccountListItemVO saasAccountListItemVO = saasAccountService.querySaasAccountDetail(person.getAccountId());
+        String accountPhoneNumber = saasAccountListItemVO.getPhoneNum();
+        if (phoneNumber.equals(accountPhoneNumber)) {
+            return false;
+        } else {
+            return checkDuplicatePhoneNum(phoneNumber);
+        }
+    }
+
+    @Override
+    public Boolean checkDuplicateIdNumber(String idNumber, Person person) {
+        if (StringUtils.isBlank(idNumber)) {
+            return false;
+        }
+        if (person == null) {
+            return checkDuplicateIdNumber(idNumber);
+        }
+        String personIdNumber = person.getIdNumber();
+        if (idNumber.equals(personIdNumber)) {
+            return false;
+        } else {
+            return checkDuplicateIdNumber(idNumber);
+        }
+    }
+
+    @Override
+    public Boolean checkDuplicateUserName(String username, Person person) {
+        if (StringUtils.isBlank(username)) {
+            return false;
+        }
+        if (person == null) {
+            return checkDuplicateUserName(username);
+        }
+        String personUsername = person.getUsername();
+        if (username.equals(personUsername)) {
+            return false;
+        } else {
+            return checkDuplicateUserName(username);
+        }
+    }
+
+    @Override
+    public Boolean checkDuplicateJobNumber(String jobNumber, Person person) {
+        if (StringUtils.isBlank(jobNumber)) {
+            return false;
+        }
+        if (person == null) {
+            return checkDuplicateJobNumber(jobNumber);
+        }
+        String personJobNumber = person.getJobNumber();
+        if (jobNumber.equals(personJobNumber)) {
+            return false;
+        } else {
+            return checkDuplicateJobNumber(jobNumber);
+        }
+    }
+
+    @Override
+    public Boolean checkDuplicateMail(String mail, Person person) {
+        if (StringUtils.isBlank(mail)) {
+            return false;
+        }
+        if (person == null) {
+            return checkDuplicateMail(mail);
+        }
+        SaasAccountListItemVO saasAccountListItemVO = saasAccountService.querySaasAccountDetail(person.getAccountId());
+        String accountMail = saasAccountListItemVO.getMail();
+        if (mail.equals(accountMail)) {
+            return false;
+        } else {
+            return checkDuplicateMail(mail);
+        }
+    }
 }