فهرست منبع

花名册、用户管理调整

lizhenhao 2 سال پیش
والد
کامیت
cf0296f685

+ 39 - 16
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/roster/controller/RosterBaseController.java

@@ -3,6 +3,7 @@ package com.jeeplus.test.roster.controller;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -10,6 +11,8 @@ import com.google.common.collect.Lists;
 import com.jeeplus.aop.demo.annotation.DemoMode;
 import com.jeeplus.aop.logging.annotation.ApiLog;
 import com.jeeplus.common.beanvalidator.BeanValidators;
+import com.jeeplus.core.excel.ExcelOptions;
+import com.jeeplus.core.excel.ExportMode;
 import com.jeeplus.core.excel.utils.EasyPoiUtil;
 import com.jeeplus.core.query.QueryWrapperGenerator;
 import com.jeeplus.security.util.SecurityUtils;
@@ -35,9 +38,12 @@ import com.jeeplus.test.rank.service.dto.RankDTO;
 import com.jeeplus.test.rank.service.dto.RankSequenceDTO;
 import com.jeeplus.test.rank.service.mapstruct.RankSequenceWrapper;
 import com.jeeplus.test.rank.service.mapstruct.RankWrapper;
+import com.jeeplus.test.reimbursement.reimbursementInfo.service.dto.QueryListDto;
+import com.jeeplus.test.reimbursement.reimbursementInfo.service.dto.RetureListDto;
 import com.jeeplus.test.roster.domain.RosterBase;
 import com.jeeplus.test.roster.service.RosterBaseService;
 import com.jeeplus.test.roster.service.dto.RosterBaseDTO;
+import com.jeeplus.test.roster.service.dto.RosterBaseExportDTO;
 import com.jeeplus.test.roster.service.mapstruct.RosterBaseWrapper;
 import com.jeeplus.test.user.service.dto.FileUrlDto;
 import io.swagger.annotations.Api;
@@ -85,20 +91,7 @@ public class RosterBaseController {
     @PreAuthorize("hasAuthority('roster:base:list')")
     @GetMapping("list")
     public ResponseEntity<IPage<RosterBaseDTO>> data(RosterBaseDTO rosterBaseDTO, Page<RosterBaseDTO> page) throws Exception {
-        RosterBase rosterBase = RosterBaseWrapper.INSTANCE.toEntity(rosterBaseDTO);
-        QueryWrapper<RosterBase> queryWrapper = QueryWrapperGenerator.buildQueryCondition ( rosterBase, RosterBase.class );
-        if(ObjectUtil.isNotEmpty(rosterBaseDTO)){
-            if(StringUtils.isNotBlank(rosterBaseDTO.getCompanyId())){
-                List<Office> list = officeService.list(new QueryWrapper<Office>().lambda().like(Office::getParentIds, rosterBaseDTO.getCompanyId()).eq(Office::getDelFlag, '0'));
-                List<String> ids = list.stream().map(Office::getId).collect(Collectors.toList());
-                queryWrapper.in("so.id",ids);
-            }else if(StringUtils.isNotBlank(rosterBaseDTO.getOfficeId())){
-                List<Office> list = officeService.list(new QueryWrapper<Office>().lambda().eq(Office::getId, rosterBaseDTO.getOfficeId()).eq(Office::getDelFlag, '0'));
-                List<String> ids = list.stream().map(Office::getId).collect(Collectors.toList());
-                queryWrapper.in("so.id",ids);
-            }
-        }
-        IPage<RosterBaseDTO> result = rosterBaseService.findList (page,queryWrapper);
+        IPage<RosterBaseDTO> result = rosterBaseService.findList (page,rosterBaseDTO);
         return ResponseEntity.ok (result);
     }
 
@@ -180,8 +173,8 @@ public class RosterBaseController {
     @ApiOperation(value = "下载模板")
     public void importFileTemplate(HttpServletResponse response) {
         String fileName = "花名册数据导入模板.xlsx";
-        List<RosterBaseDTO> list = Lists.newArrayList();
-        EasyPoiUtil.exportExcel ( list, "花名册数据",  "花名册数据", RosterBaseDTO.class, fileName, response );
+        List<RosterBaseExportDTO> list = Lists.newArrayList();
+        EasyPoiUtil.exportExcel ( list, "花名册数据",  "花名册数据", RosterBaseExportDTO.class, fileName, response );
     }
 
     /**
@@ -197,4 +190,34 @@ public class RosterBaseController {
         return rosterBaseService.importFile(file);
     }
 
+    /**
+     * 花名册数据导出
+     * @param rosterBaseDTO
+     * @param page
+     * @param options
+     * @param response
+     * @throws Exception
+     */
+    @ApiLog(value = "花名册导出", type = LogTypeEnum.EXPORT)
+    @GetMapping("exportFile")
+    @ApiOperation(value = "花名册导出")
+    public void exportFile(RosterBaseDTO rosterBaseDTO, Page <RosterBaseDTO> page, ExcelOptions options, HttpServletResponse response) throws Exception {
+        String fileName = options.getFilename();
+        String sheetName = options.getSheetName();
+        List<RosterBaseDTO> result = new ArrayList<>();
+        if ( ExportMode.current.equals ( options.getMode() ) ) {
+            result = rosterBaseService.findList (page,rosterBaseDTO).getRecords();
+        } else if (ExportMode.selected.equals ( options.getMode() )) {
+            result = rosterBaseService.findList (page,rosterBaseDTO).getRecords().stream ( ).filter ( item ->
+                    options.getSelectIds ( ).contains ( item.getId ( ) )
+            ).collect ( Collectors.toList ( ) );
+        } else {
+            page.setSize (-1);
+            page.setCurrent (0);
+            result = rosterBaseService.findList (page,rosterBaseDTO).getRecords();
+        }
+        EasyPoiUtil.exportExcel ( result, sheetName,  sheetName, RosterBaseDTO.class, fileName, response );
+
+    }
+
 }

+ 20 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/roster/mapper/xml/RosterBaseMapper.xml

@@ -58,6 +58,8 @@
     <collection property="rosterFamilyDTOList" ofType="com.jeeplus.test.roster.service.dto.RosterFamilyDTO" column="id" select="getFamilyList"></collection>
     <collection property="rosterCertificateDTOList" ofType="com.jeeplus.test.roster.service.dto.RosterCertificateDTO" column="id" select="getCertificateList"></collection>
     <collection property="rosterFilesDTOList" ofType="com.jeeplus.test.roster.service.dto.RosterFilesDTO" column="id" select="getFilesList"></collection>
+    <collection property="postList" ofType="com.jeeplus.sys.domain.Post" column="id" select="getPostList"></collection>
+    <collection property="roleList" ofType="com.jeeplus.sys.domain.Role" column="id" select="getRoleList"></collection>
   </resultMap>
 
   <sql id="Base_Column_List">
@@ -234,6 +236,24 @@
     rw.post_description
   </sql>
 
+  <select id="getPostList" resultType="com.jeeplus.sys.domain.Post">
+      select
+          distinct sp.id,
+          sp.name
+      from sys_user su
+      left join sys_user_post sup on su.id = sup.user_id
+      left join sys_post sp on sp.id = sup.post_id and sp.del_flag = '0'
+      where su.roster_id = #{id} and su.del_flag = '0'
+  </select>
+  <select id="getRoleList" resultType="com.jeeplus.sys.domain.Role">
+        select
+            distinct sr.id,
+            sr.name
+        from sys_user su
+        left join sys_user_role sur on su.id = sur.user_id
+        left join sys_role sr on sr.id = sur.role_id and sr.del_flag = '0'
+        where su.roster_id = #{id} and su.del_flag = '0'
+  </select>
   <select id="getContractDTO" resultType="com.jeeplus.test.roster.service.dto.RosterContractDTO">
     select
     <include refid="Contract_Column_List"></include>

+ 160 - 15
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/roster/service/RosterBaseService.java

@@ -3,16 +3,17 @@ package com.jeeplus.test.roster.service;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jeeplus.core.excel.utils.EasyPoiUtil;
+import com.jeeplus.core.query.QueryWrapperGenerator;
 import com.jeeplus.security.util.SecurityUtils;
 import com.jeeplus.sys.constant.enums.OfficeTypeEnum;
-import com.jeeplus.sys.domain.Cert;
-import com.jeeplus.sys.domain.Office;
-import com.jeeplus.sys.domain.User;
+import com.jeeplus.sys.domain.*;
 import com.jeeplus.sys.mapper.UserMapper;
 import com.jeeplus.sys.service.CertService;
 import com.jeeplus.sys.service.OfficeService;
@@ -98,14 +99,65 @@ public class RosterBaseService extends ServiceImpl<RosterBaseMapper, RosterBase>
     @Autowired
     private CertService certService;
 
-    public IPage<RosterBaseDTO> findList(Page<RosterBaseDTO> page, QueryWrapper<RosterBase> queryWrapper){
+    public IPage<RosterBaseDTO> findList(Page<RosterBaseDTO> page, RosterBaseDTO rosterBaseDTO) throws Exception {
+        RosterBase rosterBase = RosterBaseWrapper.INSTANCE.toEntity(rosterBaseDTO);
+        QueryWrapper<RosterBase> queryWrapper = QueryWrapperGenerator.buildQueryCondition ( rosterBase, RosterBase.class );
         queryWrapper.eq("rb.del_flag","0");
+        if(ObjectUtil.isNotEmpty(rosterBaseDTO)){
+            if(StringUtils.isNotBlank(rosterBaseDTO.getCompanyId())){
+                List<Office> list = officeService.list(new QueryWrapper<Office>().lambda().like(Office::getParentIds, rosterBaseDTO.getCompanyId()).eq(Office::getDelFlag, '0'));
+                List<String> ids = list.stream().map(Office::getId).collect(Collectors.toList());
+                queryWrapper.in("so.id",ids);
+            }else if(StringUtils.isNotBlank(rosterBaseDTO.getOfficeId())){
+                List<Office> list = officeService.list(new QueryWrapper<Office>().lambda().eq(Office::getId, rosterBaseDTO.getOfficeId()).eq(Office::getDelFlag, '0'));
+                List<String> ids = list.stream().map(Office::getId).collect(Collectors.toList());
+                queryWrapper.in("so.id",ids);
+            }
+            if (StringUtils.isNotBlank(rosterBaseDTO.getOfficeSelect())) {
+                //  根据部门筛选
+                List<User> userList = userService.list(new LambdaQueryWrapper<User>().eq(User::getOfficeId, rosterBaseDTO.getOfficeSelect()));
+                List<String> ids = userList.stream().distinct().map(User::getRosterId).collect(Collectors.toList());
+                queryWrapper.in("rb.id",ids);
+            }
+            if (StringUtils.isNotBlank(rosterBaseDTO.getPostSelect())) {
+                //  根据岗位筛选
+                List<User> userByPost = userService.getUserIdByPost(rosterBaseDTO.getPostSelect());
+                List<String> ids = userByPost.stream().distinct().map(User::getRosterId).collect(Collectors.toList());
+                queryWrapper.in("rb.id",ids);
+            }
+            if (ObjectUtil.isNotEmpty(rosterBaseDTO.getDates())) {
+                queryWrapper.between("rb.onboarding_date", rosterBaseDTO.getDates()[0], rosterBaseDTO.getDates()[1]);
+            }
+        }
         IPage<RosterBaseDTO> rosterBaseDTOIPage = rosterBaseMapper.findList(page, queryWrapper);
         if(CollectionUtil.isNotEmpty(rosterBaseDTOIPage.getRecords())){
             rosterBaseDTOIPage.getRecords().stream().forEach(item->{
-                if(StringUtils.isNotBlank(item.getHeadshot())){
-                    String fileTemporaryLookUrl = ossService.getFileTemporaryLookUrl(item.getHeadshot());
-                    item.setHeadshotLsUrl(fileTemporaryLookUrl);
+//                头像获取到新的临时地址展示
+//                if(StringUtils.isNotBlank(item.getHeadshot())){
+//                    String fileTemporaryLookUrl = ossService.getFileTemporaryLookUrl(item.getHeadshot());
+//                    item.setHeadshotLsUrl(fileTemporaryLookUrl);
+//                }
+                if (CollectionUtil.isNotEmpty(item.getPostList())) {
+                    String postNames = item.getPostList().stream().filter(filter ->{
+                        if(ObjectUtil.isNotEmpty(filter)) {
+                            if (StringUtils.isNotBlank(filter.getName())) {
+                                return true;
+                            }
+                        }
+                        return false;
+                    }).map(Post::getName).collect(Collectors.joining(","));
+                    item.setPostNames(postNames);
+                }
+                if (CollectionUtil.isNotEmpty(item.getRoleList())) {
+                    String roleNames = item.getRoleList().stream().filter(filter ->{
+                        if(ObjectUtil.isNotEmpty(filter)) {
+                            if (StringUtils.isNotBlank(filter.getName())) {
+                                return true;
+                            }
+                        }
+                        return false;
+                    }).map(Role::getName).collect(Collectors.joining(","));
+                    item.setRoleNames(roleNames);
                 }
             });
         }
@@ -200,8 +252,11 @@ public class RosterBaseService extends ServiceImpl<RosterBaseMapper, RosterBase>
         if(ObjectUtil.isNotEmpty(rosterBaseDTO)){
             if(StringUtils.isNotBlank(rosterBaseDTO.getId())){
                 RosterBase byId = this.getById(rosterBaseDTO.getId());
-                // 原数据的人员类型为员工,现在要修改成游客,那么就要将原数据关联的用户删除掉
+                // 原数据的人员类型为员工,现在要修改成游客,
+                // 原数据关联的用户删除掉
+                // 删除原数据关联表的数据,删除与游客无关的数据
                 if ("1".equals(byId.getPersonType()) && "2".equals(rosterBaseDTO.getPersonType())) {
+                    // 原数据关联的用户删除掉
                     // 通过花名册id查询用户
                     List<User> ulist = userService.list(new QueryWrapper<User>().lambda().eq(User::getRosterId, rosterBaseDTO.getId()));
                     if (CollectionUtil.isNotEmpty(ulist)) {
@@ -218,7 +273,8 @@ public class RosterBaseService extends ServiceImpl<RosterBaseMapper, RosterBase>
                             userMapper.deleteUserRole(i.getId());
                         });
                     }
-
+                    //  删除原数据关联表的数据,清空与游客无关的字段
+                    rosterBaseDTO = this.deleteRosterWorker(rosterBaseDTO);
                 }
                 // 身份证号唯一验证(排除自己)
                 if(StringUtils.isNotBlank(rosterBaseDTO.getIdCard())){
@@ -235,11 +291,6 @@ public class RosterBaseService extends ServiceImpl<RosterBaseMapper, RosterBase>
                     }
                 }
             }else{
-                //获取当前登录人信息
-                UserDTO userDTO = UserUtils.getCurrentUserDTO();
-                //工号生成
-                String serialNum = serialnumTplService.genSerialNum(userDTO.getCompanyDTO().getId(), RosterBaseDTO.BIZ_CODE);
-                rosterBaseDTO.setJobNo(serialNum);
                 // 身份证号唯一验证
                 if(StringUtils.isNotBlank(rosterBaseDTO.getIdCard())){
                     List<RosterBase> rosterBaseList = this.list(new QueryWrapper<RosterBase>().eq("id_card", rosterBaseDTO.getIdCard()));
@@ -255,11 +306,27 @@ public class RosterBaseService extends ServiceImpl<RosterBaseMapper, RosterBase>
                     }
                 }
             }
-
+            if ("1".equals(rosterBaseDTO.getPersonType())) { // 当前人员是员工时
+                //获取当前登录人信息
+                UserDTO userDTO = UserUtils.getCurrentUserDTO();
+                //工号生成
+                String serialNum = serialnumTplService.genSerialNum(userDTO.getCompanyDTO().getId(), RosterBaseDTO.BIZ_CODE);
+                if (StringUtils.isNotBlank(rosterBaseDTO.getId())) {
+                    RosterBase byId = this.getById(rosterBaseDTO.getId());
+                    if (StringUtils.isBlank(byId.getJobNo())) {
+                        rosterBaseDTO.setJobNo(serialNum);  // 游客转员工,保存时,生成工号
+                    }
+                } else {
+                    rosterBaseDTO.setJobNo(serialNum);  // 员工新增生成工号
+                }
+            }
         }
 
+
         RosterBase rosterBase = RosterBaseWrapper.INSTANCE.toEntity(rosterBaseDTO);
 
+
+
         // 新增或修改花名册数据
         this.saveOrUpdate(rosterBase);
 
@@ -275,6 +342,8 @@ public class RosterBaseService extends ServiceImpl<RosterBaseMapper, RosterBase>
                 rosterContract.setBaseId(rosterBase.getId());
                 rosterContractService.remove(new QueryWrapper<RosterContract>().eq("base_id",rosterBase.getId()));
                 rosterContractService.saveOrUpdate(rosterContract);
+            } else {
+                rosterContractService.remove(new QueryWrapper<RosterContract>().eq("base_id",rosterBase.getId()));
             }
             //保存银行卡信息
             if(CollectionUtil.isNotEmpty(rosterBaseDTO.getRosterBankCardsDTOList())){
@@ -614,4 +683,80 @@ public class RosterBaseService extends ServiceImpl<RosterBaseMapper, RosterBase>
         });
         return ResponseEntity.ok ("删除花名册成功");
     }
+
+    public RosterBaseDTO deleteRosterWorker (RosterBaseDTO rosterBaseDTO) {
+//        删除原数据关联表的数据
+        rosterBaseDTO.setRosterContractDTO(null);  // 删除合同信息
+        rosterBaseDTO.setRosterBankCardsDTOList(null);  // 删除银行卡信息
+        rosterBaseDTO.setRosterEducateDTOList(null);  // 删除教育经历
+        rosterBaseDTO.setRosterWorkDTOList(null);  // 删除工作经历
+        rosterBaseDTO.setRosterFamilyDTOList(null);  // 删除家庭成员
+        rosterBaseDTO.setRosterCertificateDTOList(null);  // 删除员工证书
+        rosterBaseDTO.setRosterLeadershipDTO(null);  // 删除直属领导
+        rosterBaseDTO.setCertDTOList(null);  //  关联用户的资质
+        rosterBaseDTO.setRoleIdList(null);  // 关联用户的角色
+        rosterBaseDTO.setPostIdList(null);  //  关联用户的岗位
+        rosterBaseDTO.setManageOfficeIds(null);  //  关联用户的管理部门
+        // 与游客无关字段置空
+        rosterBaseDTO.setOfficeId("");
+        rosterBaseDTO.setJobPositionId("");
+        rosterBaseDTO.setPositionId("");
+        rosterBaseDTO.setRankId("");
+        rosterBaseDTO.setJobNo("");
+        rosterBaseDTO.setContractType("");
+        rosterBaseDTO.setWorkerType("");
+        rosterBaseDTO.setOnboardingDate(null);
+        rosterBaseDTO.setSeniority("");
+        rosterBaseDTO.setContractCompany("");
+        rosterBaseDTO.setBirthDate(null);
+        rosterBaseDTO.setWorkPlace("");
+        rosterBaseDTO.setContactAddress("");
+        rosterBaseDTO.setEmploymentSituation("");
+        rosterBaseDTO.setWorkingHour("");
+        rosterBaseDTO.setAccountType("");
+        rosterBaseDTO.setAccountAddr("");
+        rosterBaseDTO.setOrigin("");
+        rosterBaseDTO.setLiveAddr("");
+        rosterBaseDTO.setHighestEducation("");
+        rosterBaseDTO.setPoliticalFace("");
+        rosterBaseDTO.setMaritalStatus("");
+        rosterBaseDTO.setEmergencyContactName("");
+        rosterBaseDTO.setEmergencyContactTel("");
+        rosterBaseDTO.setSpouseName("");
+        rosterBaseDTO.setChildName("");
+        rosterBaseDTO.setHeadshot("");
+        // 表删除无关字段
+        UpdateWrapper<RosterBase> wrapper = new UpdateWrapper<>();
+        wrapper.lambda()
+                .set(RosterBase::getOfficeId,null)
+                .set(RosterBase::getJobPositionId,null)
+                .set(RosterBase::getPositionId,null)
+                .set(RosterBase::getRankId,null)
+                .set(RosterBase::getJobNo,null)
+                .set(RosterBase::getContractType,null)
+                .set(RosterBase::getWorkerType,null)
+                .set(RosterBase::getOnboardingDate,null)
+                .set(RosterBase::getSeniority,null)
+                .set(RosterBase::getContractCompany,null)
+                .set(RosterBase::getBirthDate,null)
+                .set(RosterBase::getWorkPlace,null)
+                .set(RosterBase::getContactAddress,null)
+                .set(RosterBase::getEmploymentSituation,null)
+                .set(RosterBase::getWorkingHour,null)
+                .set(RosterBase::getAccountType,null)
+                .set(RosterBase::getAccountAddr,null)
+                .set(RosterBase::getOrigin,null)
+                .set(RosterBase::getLiveAddr,null)
+                .set(RosterBase::getHighestEducation,null)
+                .set(RosterBase::getPoliticalFace,null)
+                .set(RosterBase::getMaritalStatus,null)
+                .set(RosterBase::getEmergencyContactName,null)
+                .set(RosterBase::getEmergencyContactTel,null)
+                .set(RosterBase::getSpouseName,null)
+                .set(RosterBase::getChildName,null)
+                .set(RosterBase::getHeadshot,null)
+                .eq(RosterBase::getId,rosterBaseDTO.getId());
+        this.update(wrapper);
+        return rosterBaseDTO;
+    }
 }

+ 42 - 4
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/roster/service/dto/RosterBaseDTO.java

@@ -9,6 +9,8 @@ import com.jeeplus.core.domain.BaseEntity;
 import com.jeeplus.core.query.Query;
 import com.jeeplus.core.query.QueryType;
 import com.jeeplus.core.service.dto.BaseDTO;
+import com.jeeplus.sys.domain.Post;
+import com.jeeplus.sys.domain.Role;
 import com.jeeplus.sys.service.dto.CertDTO;
 import com.jeeplus.sys.service.dto.OfficeDTO;
 import com.jeeplus.sys.service.dto.PostDTO;
@@ -75,13 +77,13 @@ public class RosterBaseDTO extends BaseDTO {
     /**
      * 证件类型
      */
-    @Excel(name="证件类型",width = 25,orderNum = "3",dict = "certificates_type",addressList = true)
+    @Excel(name="证件类型",width = 25,orderNum = "6",dict = "certificates_type")
     private String certificatesType;
 
     /**
      * 证件号
      */
-    @Excel(name="证件号",width = 25,orderNum = "4")
+    @Excel(name="证件号",width = 25,orderNum = "7")
     private String idCard;
 
     /**
@@ -118,12 +120,13 @@ public class RosterBaseDTO extends BaseDTO {
     /**
      * 员工类型
      */
-    @Excel(name="员工类型",width = 25,orderNum = "6",dict = "worker_type",addressList = true)
+    @Excel(name="员工类型",width = 25,orderNum = "9",dict = "worker_type")
     private String workerType;
 
     /**
      * 入职日期
      */
+    @Excel(name="入职日期",width = 25,orderNum = "10",exportFormat = "yyyy-MM-dd")
     private Date onboardingDate;
 
     /**
@@ -305,7 +308,7 @@ public class RosterBaseDTO extends BaseDTO {
     /**
      * 人员类型  1员工  2游客
      */
-    @Excel(name="人员类型",width = 25,orderNum = "7",dict = "roster_person_type",addressList = true)
+    @Excel(name="人员类型",width = 25,orderNum = "8",dict = "roster_person_type")
     private String personType;
 
     /**
@@ -328,7 +331,42 @@ public class RosterBaseDTO extends BaseDTO {
      */
     private String manageOfficeIds;
 
+    /**
+     * 列表页面筛选条件:部门
+     */
+    private String officeSelect;
+
+    /**
+     * 列表页面筛选条件:岗位
+     */
+    private String postSelect;
 
+    /**
+     * 列表页面筛选条件:入职时间(区间)
+     */
+    private String[] dates;
+
+    /**
+     * 岗位
+     */
+    private List<Post> postList;
+
+    /**
+     * 角色
+     */
+    private List<Role> roleList;
+
+    /**
+     * 岗位名称(逗号分隔)
+     */
+    @Excel(name="岗位",width = 25,orderNum = "4")
+    private String postNames;
+
+    /**
+     * 角色名称(逗号分隔)
+     */
+    @Excel(name="角色",width = 25,orderNum = "3")
+    private String roleNames;
 
     private static final long serialVersionUID = 1L;
 }

+ 336 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/roster/service/dto/RosterBaseExportDTO.java

@@ -0,0 +1,336 @@
+package com.jeeplus.test.roster.service.dto;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.jeeplus.core.service.dto.BaseDTO;
+import com.jeeplus.sys.service.dto.CertDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * roster_base
+ * @author 
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class RosterBaseExportDTO extends BaseDTO {
+
+    public static final String BIZ_CODE = "3";
+
+    /**
+     * 备注信息
+     */
+    private String remarks;
+
+    /**
+     * 姓名
+     */
+    @Excel(name="姓名",width = 25,orderNum = "1")
+    private String name;
+
+    /**
+     * 部门id
+     */
+    private String officeId;
+
+    /**
+     * 公司id
+     */
+    private String companyId;
+
+    /**
+     * 职位id
+     */
+    private String jobPositionId;
+
+    /**
+     * 职务id
+     */
+    private String positionId;
+
+    /**
+     * 职级id
+     */
+    private String rankId;
+
+    /**
+     * 工号
+     */
+    private String jobNo;
+
+    /**
+     * 证件类型
+     */
+    @Excel(name="证件类型",width = 25,orderNum = "3",dict = "certificates_type",addressList = true)
+    private String certificatesType;
+
+    /**
+     * 证件号
+     */
+    @Excel(name="证件号",width = 25,orderNum = "4")
+    private String idCard;
+
+    /**
+     * 证件照正面
+     */
+    private String certificatesFront;
+
+    /**
+     * 证件照正面
+     */
+    private String certificatesFrontLsUrl;
+
+    /**
+     * 证件照反面
+     */
+    private String certificatesBack;
+
+    /**
+     * 证件照反面
+     */
+    private String certificatesBackLsUrl;
+
+    /**
+     * 手机号码
+     */
+    @Excel(name="电话号码",width = 25,orderNum = "5")
+    private String mobile;
+
+    /**
+     * 合同类型
+     */
+    private String contractType;
+
+    /**
+     * 员工类型
+     */
+    @Excel(name="员工类型",width = 25,orderNum = "6",dict = "worker_type",addressList = true)
+    private String workerType;
+
+    /**
+     * 入职日期
+     */
+    private Date onboardingDate;
+
+    /**
+     * 历史工龄
+     */
+    private String seniority;
+
+    /**
+     * 合同公司
+     */
+    private String contractCompany;
+
+    /**
+     * 性别
+     */
+    private String sex;
+
+    /**
+     * 出生日期
+     */
+    private Date birthDate;
+
+    /**
+     * 工作地点
+     */
+    private String workPlace;
+
+    /**
+     * 联系地址
+     */
+    private String contactAddress;
+
+    /**
+     * 入职年度就业情形
+     */
+    private String employmentSituation;
+
+    /**
+     * 工时制度
+     */
+    private String workingHour;
+
+    /**
+     * 民族
+     */
+    private String ethnic;
+
+    /**
+     * 户口类型
+     */
+    private String accountType;
+
+    /**
+     * 户口所在地
+     */
+    private String accountAddr;
+
+    /**
+     * 籍贯
+     */
+    private String origin;
+
+    /**
+     * 居住地址
+     */
+    private String liveAddr;
+
+    /**
+     * 最高学历
+     */
+    private String highestEducation;
+
+    /**
+     * 政治面貌
+     */
+    private String politicalFace;
+
+    /**
+     * 婚姻状况
+     */
+    private String maritalStatus;
+
+    /**
+     * 血型
+     */
+    private String bloodType;
+
+    /**
+     * 紧急联系人姓名
+     */
+    private String emergencyContactName;
+
+    /**
+     * 紧急联系人电话
+     */
+    private String emergencyContactTel;
+
+    /**
+     * 配偶姓名
+     */
+    private String spouseName;
+
+    /**
+     * 孩子姓名
+     */
+    private String childName;
+
+    /**
+     * QQ
+     */
+    private String qq;
+
+    /**
+     * 微信
+     */
+    private String wechat;
+
+    /**
+     * 个人邮箱
+     */
+    private String email;
+
+    /**
+     * 合同信息
+     */
+    private RosterContractDTO rosterContractDTO;
+
+    /**
+     * 银行卡信息
+     */
+    private List<RosterBankCardsDTO> rosterBankCardsDTOList;
+
+    /**
+     * 教育经历
+     */
+    private List<RosterEducateDTO> rosterEducateDTOList;
+
+    /**
+     * 工作经历
+     */
+    private List<RosterWorkDTO> rosterWorkDTOList;
+
+    /**
+     * 家庭成员
+     */
+    private List<RosterFamilyDTO> rosterFamilyDTOList;
+
+    /**
+     * 员工证书
+     */
+    private List<RosterCertificateDTO> rosterCertificateDTOList;
+
+    /**
+     * 附件
+     */
+    private List<RosterFilesDTO> rosterFilesDTOList;
+
+    /**
+     * 头像
+     */
+    private String headshot;
+
+    /**
+     * 头像
+     */
+    private String headshotLsUrl;
+
+    /**
+     * 直属领导
+     */
+    private RosterLeadershipDTO rosterLeadershipDTO;
+
+    /**
+     * 所属部门
+     */
+    @Excel(name = "部门",width = 25,orderNum = "2")
+    private String officeName;
+
+    /**
+     * 人员类型  1员工  2游客
+     */
+    @Excel(name="人员类型",width = 25,orderNum = "7",dict = "roster_person_type",addressList = true)
+    private String personType;
+
+    /**
+     * 执业资格证列表
+     */
+    private List<CertDTO> certDTOList;
+
+    /**
+     * 角色信息
+     */
+    private List<String> roleIdList;
+
+    /**
+     * 岗位信息
+     */
+    private List<String> postIdList;
+
+    /**
+     * 管理的部门名称
+     */
+    private String manageOfficeIds;
+
+    /**
+     * 列表页面筛选条件:部门
+     */
+    private String officeSelect;
+
+    /**
+     * 列表页面筛选条件:岗位
+     */
+    private String postSelect;
+
+    /**
+     * 列表页面筛选条件:入职时间(区间)
+     */
+    private String[] dates;
+
+
+    private static final long serialVersionUID = 1L;
+}

+ 9 - 2
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/core/excel/ExcelDiceAddressListHandlerImpl.java

@@ -1,6 +1,7 @@
 package com.jeeplus.core.excel;
 
 import cn.afterturn.easypoi.handler.inter.IExcelDictHandler;
+import cn.hutool.core.util.ObjectUtil;
 import com.jeeplus.sys.service.dto.DictValueDTO;
 import com.jeeplus.sys.utils.DictUtils;
 
@@ -49,11 +50,17 @@ public class ExcelDiceAddressListHandlerImpl implements IExcelDictHandler {
 
     @Override
     public String toName(String dict, Object obj, String name, Object value) {
-        return DictUtils.getDictLabel (value.toString (), dict, null);
+        if (ObjectUtil.isNotEmpty(value)) {
+            return DictUtils.getDictLabel (value.toString (), dict, null);
+        }
+        return "";
     }
 
     @Override
     public String toValue(String dict, Object obj, String name, Object value) {
-        return DictUtils.getDictLabel (value.toString (), dict, null);
+        if (ObjectUtil.isNotEmpty(value)) {
+            return DictUtils.getDictLabel (value.toString (), dict, null);
+        }
+        return "";
     }
 }

+ 5 - 0
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/mapper/UserMapper.java

@@ -222,4 +222,9 @@ public interface UserMapper extends BaseMapper<User> {
      * 修改用户的管理部门
      */
     void updateUserManageOffice(@Param("officeIds") String officeIds,@Param("userId") String userId);
+
+    /**
+     * 根据岗位id获取用户
+     */
+    List<User> getUserByPost(String postId);
 }

+ 8 - 0
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/mapper/xml/UserMapper.xml

@@ -389,4 +389,12 @@
 		update sys_user set manage_office_ids = #{officeIds} where id = #{userId}
 	</update>
 
+	<select id="getUserByPost" resultType="com.jeeplus.sys.domain.User">
+		select
+		distinct u.id,
+		u.roster_id
+		from sys_user_post sup
+		left join sys_user u on u.id = sup.user_id and u.del_flag = 0
+		where sup.post_id = #{postId}
+	</select>
 </mapper>

+ 13 - 0
jeeplus-platform/jeeplus-admin/src/main/java/com/jeeplus/sys/service/UserService.java

@@ -515,12 +515,20 @@ public class UserService  extends ServiceImpl<UserMapper, User> {
 		User u = this.getById(user.getId());
 		if (StringUtils.isNotBlank(u.getRosterId())) {
 			r.setId(u.getRosterId()); // 花名册id
+			r.setWorkerType("1");  //  员工类型: 全职
+			RosterBaseC roster = rosterBaseCService.getById(u.getRosterId());
+			if (ObjectUtil.isNotEmpty(roster)) {
+				if (StringUtils.isNotBlank(roster.getWorkerType())) {
+					r.setWorkerType(roster.getWorkerType());  //  如果花名册的员工类型有值,则不修改花名册的员工类型
+				}
+			}
 		} else {
 			UserDTO userDTO = UserUtils.getCurrentUserDTO();
 			String serialNum = serialnumTplCService.genSerialNum(userDTO.getCompanyDTO().getId(), "3");
 			r.setJobNo(serialNum); // 花名册工号
 			user.setNo(serialNum); // 用户工号
 			r.setPersonType("1");  //  人员类型: 员工
+			r.setWorkerType("1");  //  员工类型: 全职
 		}
 		// 保存花名册数据
 		rosterBaseCService.saveOrUpdate(r);
@@ -544,4 +552,9 @@ public class UserService  extends ServiceImpl<UserMapper, User> {
 	public List<Cert> getCertListByUserId(String userId) {
 		return certService.list(new QueryWrapper<Cert>().lambda().eq(Cert::getUserId,userId));
 	}
+
+	// 根据岗位id查询用户
+	public List<User> getUserIdByPost(String postId) {
+		return userMapper.getUserByPost(postId);
+	}
 }