lixing 4 yıl önce
ebeveyn
işleme
6adb260290

+ 6 - 8
fm-person/src/main/java/com/persagy/fm/department/controller/DepartmentController.java

@@ -175,13 +175,11 @@ public class DepartmentController {
         return ResultHelper.success();
     }
 
-//        @Autowired
-//        CreateDbService createDbService;
-//
-//        @PostMapping("/createDb")
-//        public CommonResult test() {
-//            createDbService.createDb("test");
-//            return ResultHelper.success();
-//        }
+    @ApiOperation(value = "获取当前登录人所在的集团部门信息")
+    @PostMapping("/groupDeps/get")
+    public CommonResult<Department> getGroupDep() {
+        Department groupDep = departmentService.getGroupDep();
+        return ResultHelper.single(groupDep);
+    }
 }
 

+ 9 - 0
fm-person/src/main/java/com/persagy/fm/department/service/IDepartmentService.java

@@ -144,4 +144,13 @@ public interface IDepartmentService {
      * @version V1.0 2021/4/1 6:06 下午
      */
     List<DepSimpleObjVO> getDepInfoList(List<String> depIds);
+
+    /**
+     * 获取当前登录人所在的集团部门
+     *
+     * @return 部门信息
+     * @author lixing
+     * @version V1.0 2021/4/25 10:54 上午
+     */
+    Department getGroupDep();
 }

+ 13 - 0
fm-person/src/main/java/com/persagy/fm/department/service/impl/DepartmentServiceImpl.java

@@ -538,4 +538,17 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             ).collect(Collectors.toList());
         }
     }
+
+    @Override
+    public Department getGroupDep() {
+        QueryDepartmentDTO queryDepartmentDTO = new QueryDepartmentDTO();
+        queryDepartmentDTO.setParentId(DepConstants.NO_PARENT_ID);
+        queryDepartmentDTO.setType(DepTypeEnum.GROUP.getType());
+        List<Department> departments = queryDepartmentList(queryDepartmentDTO);
+        if (!CollectionUtils.isEmpty(departments)) {
+            return departments.get(0);
+        } else {
+            throw new BusinessException(ResponseCode.B0300.getCode(), "无法获取当前登录人所在的集团部门");
+        }
+    }
 }

+ 8 - 7
fm-person/src/main/java/com/persagy/fm/person/controller/PersonController.java

@@ -129,13 +129,14 @@ public class PersonController {
         return ResultHelper.multi(pagedList);
     }
 
-//    @ApiOperation(value = "重置密码")
-//    @PostMapping("/password/reset")
-//    public CommonResult resetPassword(
-//            @Valid @RequestBody DeletePersonDTO deletePersonDTO) {
-//        personService.resetPassWord(deletePersonDTO.getId());
-//        return ResultHelper.success("重置成功");
-//    }
+    @ApiOperation(value = "根据名称分页查询")
+    @PostMapping("/queryByName")
+    @FormatMybatisQueryParams
+    public CommonResult<PageList<ResponsePersonListItemVO>> queryByName(
+            @Valid @RequestBody QueryByNameDTO queryByNameDTO) {
+        IPage<ResponsePersonListItemVO> pagedList = personService.queryByName(queryByNameDTO);
+        return ResultHelper.multi(pagedList);
+    }
 
     @ApiOperation(value = "禁用人员")
     @PostMapping("/disable")

+ 8 - 0
fm-person/src/main/java/com/persagy/fm/person/model/Person.java

@@ -1,10 +1,13 @@
 package com.persagy.fm.person.model;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.persagy.fm.common.model.entity.AuditableEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import net.minidev.json.annotate.JsonIgnore;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -61,8 +64,13 @@ public class Person extends AuditableEntity<Person> implements Serializable {
     private String profession;
 
     @ApiModelProperty("直接领导")
+    @TableField(updateStrategy = FieldStrategy.IGNORED)
     private String leader;
 
+    @ApiModelProperty(value = "是否是部门主管", hidden = true)
+    @TableField(exist = false)
+    private String isLeader;
+
     public static String PROP_NAME = "name";
     public static String PROP_USERNAME = "username";
     public static String PROP_ACCOUNT_ID = "account_id";

+ 2 - 0
fm-person/src/main/java/com/persagy/fm/person/model/dto/UpsertPerson4FrontEndDTO.java

@@ -4,6 +4,7 @@ import com.persagy.fm.common.constant.RegexConstants;
 import com.persagy.fm.saas.project.model.dto.UpsertSaasProjectDTO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 import net.minidev.json.annotate.JsonIgnore;
 import org.hibernate.validator.constraints.Length;
 
@@ -19,6 +20,7 @@ import java.util.List;
  * @author lixing
  * @version V1.0 2021/3/23 11:09 上午
  **/
+@EqualsAndHashCode(callSuper = true)
 @Data
 public class UpsertPerson4FrontEndDTO extends UpsertPersonDTO{
     @ApiModelProperty(value = "项目权限")

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

@@ -75,7 +75,7 @@ public class UpsertPersonDTO {
     private List<String> otherDuties;
 
     @ApiModelProperty(value = "直接上级")
-    private Long leader;
+    private String leader;
 
     @ApiModelProperty(value = "专业")
     private List<String> professions;

+ 3 - 0
fm-person/src/main/java/com/persagy/fm/person/model/vo/ResponsePersonItemVO.java

@@ -47,6 +47,9 @@ public class ResponsePersonItemVO {
     @ApiModelProperty(value = "员工类型", notes = "com.persagy.fm.person.constant.enums.PersonTypeEnum")
     private SimpleObjVO personTypeVO;
 
+    @ApiModelProperty(value = "头像")
+    private String headPortrait;
+
     @ApiModelProperty(value = "手机号码")
     private String phoneNum;
 

+ 6 - 0
fm-person/src/main/java/com/persagy/fm/person/model/vo/ResponsePersonListItemVO.java

@@ -43,6 +43,9 @@ public class ResponsePersonListItemVO {
     @ApiModelProperty("账号")
     private String username;
 
+    @ApiModelProperty(value = "头像")
+    private String headPortrait;
+
     @ApiModelProperty("主岗信息")
     private SimpleObjVO mainDuty;
 
@@ -62,6 +65,9 @@ public class ResponsePersonListItemVO {
     @ApiModelProperty("所属部门")
     private List<DepSimpleObjVO> deps;
 
+    @ApiModelProperty("是否是部门主管")
+    private String isLeader;
+
 //    public SimpleObjVO getPersonTypeVO() {
 //        return personTypeVO == null ? new SimpleObjVO() : personTypeVO;
 //    }

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

@@ -340,4 +340,14 @@ public interface IPersonService {
      * @version V1.0 2021/4/22 3:28 下午
      */
     IPage<ResponsePersonListItemVO> queryByUserName(QueryByUserNameDTO queryByUserNameDTO);
+
+    /**
+     * 根据姓名查询
+     *
+     * @param queryByNameDTO 查询参数
+     * @return 分页列表
+     * @author lixing
+     * @version V1.0 2021/4/25 3:04 下午
+     */
+    IPage<ResponsePersonListItemVO> queryByName(QueryByNameDTO queryByNameDTO);
 }

+ 42 - 18
fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonServiceImpl.java

@@ -412,8 +412,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
         if (StringUtils.isBlank(idCard)) {
             return null;
         }
-        QueryWrapper<Person> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(Person.PROP_VALID, ValidEnum.TRUE.getType());
+        QueryWrapper<Person> queryWrapper = getDefaultPersonQueryWrapper();
         queryWrapper.eq(Person.PROP_ID_NUMBER, idCard);
         return list(queryWrapper);
     }
@@ -431,8 +430,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
             return null;
         }
 
-        QueryWrapper<Person> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(Person.PROP_VALID, ValidEnum.TRUE.getType());
+        QueryWrapper<Person> queryWrapper = getDefaultPersonQueryWrapper();
         queryWrapper.eq(Person.PROP_USERNAME, username);
         return list(queryWrapper);
     }
@@ -449,8 +447,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
         if (StringUtils.isBlank(jobNumber)) {
             return null;
         }
-        QueryWrapper<Person> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(Person.PROP_VALID, ValidEnum.TRUE.getType());
+        QueryWrapper<Person> queryWrapper = getDefaultPersonQueryWrapper();
         queryWrapper.eq(Person.PROP_JOB_NUMBER, jobNumber);
         return list(queryWrapper);
     }
@@ -547,9 +544,13 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
     private Person updatePersonBaseInfo(UpdatePerson4FrontEndDTO updatePerson4FrontEndDTO, String personId) {
         Person person = getById(personId);
         // 直接上级不能选择自己
-        Long leaderAfterChange = updatePerson4FrontEndDTO.getLeader();
+        String leaderAfterChange = updatePerson4FrontEndDTO.getLeader();
         checkLeader(leaderAfterChange, person);
         person = ConvertPersonTool.INSTANCE.convertUpdateDto2Entity(person, updatePerson4FrontEndDTO);
+        // 数据库中leader是long型,这里加一个特殊处理
+        if ("".equals(person.getLeader())) {
+            person.setLeader(null);
+        }
         person.setNamePinyin(PinyinUtil.getPinyin(person.getName(), ""));
         List<String> professions = updatePerson4FrontEndDTO.getProfessions();
         if (CollectionUtils.isEmpty(professions)) {
@@ -570,19 +571,19 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
      * @author lixing
      * @version V1.0 2021/4/22 11:43 上午
      */
-    private void checkLeader(Long leaderId, Person person) {
-        if (leaderId == null) {
+    private void checkLeader(String leaderId, Person person) {
+        if (StringUtils.isBlank(leaderId)) {
             return;
         }
         String personId = person.getId();
-        if (personId.equals(leaderId.toString())) {
+        if (personId.equals(leaderId)) {
             throw new IllegalArgumentException("不能选择自己作为直接上级");
         }
         // 不能选择直接上级是自己的员工作为上级
         List<Person> people = queryByLeader(Long.valueOf(personId));
         people.forEach(tmpPerson -> {
             String tmpPersonId = tmpPerson.getId();
-            if (tmpPersonId.equals(leaderId.toString())) {
+            if (tmpPersonId.equals(leaderId)) {
                 throw new IllegalArgumentException("不能选择自己的下级作为直接上级");
             }
         });
@@ -764,8 +765,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
         if (StringUtils.isBlank(accountId)) {
             throw new IllegalArgumentException("根据账号id查询人员,账号id为空");
         }
-        QueryWrapper<Person> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(Person.PROP_VALID, ValidEnum.TRUE.getType());
+        QueryWrapper<Person> queryWrapper = getDefaultPersonQueryWrapper();
         queryWrapper.eq(Person.PROP_ACCOUNT_ID, accountId);
         List<Person> people = list(queryWrapper);
         if (!CollectionUtils.isEmpty(people)) {
@@ -848,9 +848,10 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
                 }
             }
 
-            // 设置账号的过期时间
+            // 设置账号的过期时间和头像
             SaasAccountListItemVO saasAccountListItemVO = saasAccountService.querySaasAccountDetail(
                     responsePersonListItem.getAccountId());
+            responsePersonListItem.setHeadPortrait(saasAccountListItemVO.getHeadPortrait());
             String validLast = saasAccountListItemVO.getValidLast();
             if (ExpireTypeEnum.EXPIRY_DATE.getType().equals(validLast)) {
                 responsePersonListItem.setExpireDate(saasAccountListItemVO.getValidEndTime());
@@ -1108,6 +1109,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
         SaasAccountListItemVO saasAccountListItemVO = saasAccountService.querySaasAccountDetail(accountId);
         responsePersonItemVO.setMail(saasAccountListItemVO.getMail());
         responsePersonItemVO.setPhoneNum(saasAccountListItemVO.getPhoneNum());
+        responsePersonItemVO.setHeadPortrait(saasAccountListItemVO.getHeadPortrait());
         if (ExpireTypeEnum.EXPIRY_DATE.getType().equals(saasAccountListItemVO.getValidLast())) {
             responsePersonItemVO.setExpireDate(saasAccountListItemVO.getValidEndTime());
         }
@@ -1219,8 +1221,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
     public LatestJobNumberVO queryLatestJobNumber() {
         LatestJobNumberVO latestJobNumberVO = new LatestJobNumberVO();
 
-        QueryWrapper<Person> personQueryWrapper = new QueryWrapper<>();
-        personQueryWrapper.eq(Person.PROP_VALID, ValidEnum.TRUE.getType());
+        QueryWrapper<Person> personQueryWrapper = getDefaultPersonQueryWrapper();
         personQueryWrapper.ne(Person.PROP_JOB_NUMBER, "");
         personQueryWrapper.orderByDesc(Person.PROP_CREATIONTIME);
 
@@ -1269,8 +1270,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
 
     @Override
     public IPage<ResponsePersonListItemVO> queryByUserName(QueryByUserNameDTO queryByUserNameDTO) {
-        QueryWrapper<Person> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq(Person.PROP_VALID, ValidEnum.TRUE.getType());
+        QueryWrapper<Person> queryWrapper = getDefaultPersonQueryWrapper();
         queryWrapper.eq(Person.PROP_USERNAME, queryByUserNameDTO.getUsername());
         List<Person> result = list(queryWrapper);
         return packagePageResult(result, result.size());
@@ -1281,6 +1281,9 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
         if (StringUtils.isBlank(phoneNumber)) {
             return false;
         }
+        if (person == null) {
+            return checkDuplicatePhoneNum(phoneNumber);
+        }
         SaasAccountListItemVO saasAccountListItemVO = saasAccountService.querySaasAccountDetail(person.getAccountId());
         String accountPhoneNumber = saasAccountListItemVO.getPhoneNum();
         if (phoneNumber.equals(accountPhoneNumber)) {
@@ -1354,4 +1357,25 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
             return checkDuplicateMail(mail);
         }
     }
+
+    @Override
+    public IPage<ResponsePersonListItemVO> queryByName(QueryByNameDTO queryByNameDTO) {
+        QueryWrapper<Person> queryWrapper = getDefaultPersonQueryWrapper();
+        queryWrapper.like(Person.PROP_NAME, queryByNameDTO.getName());
+        List<Person> result = list(queryWrapper);
+        return packagePageResult(result, result.size());
+    }
+
+    /**
+     * 获取人员默认查询参数对象
+     *
+     * @return QueryWrapper
+     * @author lixing
+     * @version V1.0 2021/4/25 3:07 下午
+     */
+    private QueryWrapper<Person> getDefaultPersonQueryWrapper() {
+        QueryWrapper<Person> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(Person.PROP_VALID, ValidEnum.TRUE.getType());
+        return queryWrapper;
+    }
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/saas/account/service/impl/SaasAccountServiceImpl.java

@@ -36,7 +36,7 @@ public class SaasAccountServiceImpl implements ISaasAccountService {
 
     @Override
     public List<SaasAccountListItemVO> querySaasAccountList(PageQuerySaasAccountDTO pageQuerySaasAccountDTO) {
-        pageQuerySaasAccountDTO.setDefaultValueNoAccountId();
+        pageQuerySaasAccountDTO.setPageInfo();
         FmResponseContent<List<SaasAccountListItemVO>> listFmResponseContent = saasAccountClient.
                 querySaasAccountPageList(pageQuerySaasAccountDTO);
         return listFmResponseContent.getContent();

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/saas/common/model/dto/SaasBasePageDTO.java

@@ -30,7 +30,7 @@ public class SaasBasePageDTO extends SaasBaseDTO{
      * @author lixing
      * @version V1.0 2021/4/7 10:09 上午
      */
-    private void setPageInfo() {
+    public void setPageInfo() {
         if (this.page == null) {
             this.setPage(PageQueryConstants.DEFAULT_PAGE);
         }

+ 22 - 6
fm-person/src/main/resources/mapper/PersonMapper.xml

@@ -59,21 +59,37 @@
     </sql>
 
     <sql id="selectPersonInfo">
-        select p.id as id, p.name as name, p.profession as profession, p.account_id as account_id, p.person_type as
-                       person_type, p.username as username, w.is_leader as is_leader
+        select p.id          as id,
+               p.name        as name,
+               p.profession  as profession,
+               p.account_id  as account_id,
+               p.person_type as
+                                person_type,
+               p.username    as username,
+               w.is_leader   as is_leader
         from person p,
              work_resume w
     </sql>
 
-    <select id="queryPersonListByNameOrUserName" parameterType="com.persagy.fm.person.model.dto.PageQueryPersonByNameOrUserNameDTO"
+    <sql id="orderBy">
+        order by
+        <if test="depId != null and depId != ''">
+            if(w.dep_id=#{depId} and w.is_leader="1", 0, 1),
+        </if>
+        p.name_pinyin
+    </sql>
+
+    <select id="queryPersonListByNameOrUserName"
+            parameterType="com.persagy.fm.person.model.dto.PageQueryPersonByNameOrUserNameDTO"
             resultType="com.persagy.fm.person.model.Person">
         <include refid="selectPersonInfo"/>
         <include refid="queryPersonByNameOrUsernameExpression"/>
-        order by w.is_leader desc, p.name_pinyin
+        <include refid="orderBy"/>
         limit #{startIndex}, #{size}
     </select>
 
-    <select id="queryCountByNameOrUserName" parameterType="com.persagy.fm.person.model.dto.PageQueryPersonByNameOrUserNameDTO"
+    <select id="queryCountByNameOrUserName"
+            parameterType="com.persagy.fm.person.model.dto.PageQueryPersonByNameOrUserNameDTO"
             resultType="int">
         select count(*) total
         from person p,
@@ -86,7 +102,7 @@
             resultType="com.persagy.fm.person.model.Person">
         <include refid="selectPersonInfo"/>
         <include refid="queryPersonWhereExpression"/>
-        order by w.is_leader desc, p.name_pinyin
+        <include refid="orderBy"/>
         limit #{startIndex}, #{size}
     </select>