瀏覽代碼

花名册调整,添加导入功能

lizhenhao 2 年之前
父節點
當前提交
daf93da1e7

+ 1 - 1
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/jobPosion/utils/BeanUtils.java

@@ -50,7 +50,7 @@ public class BeanUtils {
             Class clazz = (Class) object.getClass(); // 得到类对象
             Field fields[] = clazz.getDeclaredFields(); // 得到所有属性
             for (Field field : fields) {
-                if("serialVersionUID".equals(field.getName())){
+                if("serialVersionUID".equals(field.getName()) || "BIZ_CODE".equalsIgnoreCase(field.getName())){
                     continue;
                 }
                 field.setAccessible(true);

+ 38 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/roster/controller/RosterBaseController.java

@@ -2,20 +2,28 @@ 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.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 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.utils.EasyPoiUtil;
 import com.jeeplus.core.query.QueryWrapperGenerator;
+import com.jeeplus.security.util.SecurityUtils;
 import com.jeeplus.sys.constant.enums.LogTypeEnum;
 import com.jeeplus.sys.domain.Office;
 import com.jeeplus.sys.domain.User;
 import com.jeeplus.sys.service.OfficeService;
 import com.jeeplus.sys.service.UserService;
+import com.jeeplus.sys.service.dto.OfficeDTO;
+import com.jeeplus.sys.service.dto.RoleDTO;
 import com.jeeplus.sys.service.dto.UserDTO;
 import com.jeeplus.sys.service.mapstruct.UserWrapper;
 import com.jeeplus.sys.utils.StringUtils;
+import com.jeeplus.sys.utils.UserUtils;
 import com.jeeplus.test.oss.service.OssService;
 import com.jeeplus.test.rank.domain.Rank;
 import com.jeeplus.test.rank.domain.RankRRs;
@@ -41,6 +49,8 @@ import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.ConstraintViolationException;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -160,4 +170,32 @@ public class RosterBaseController {
         return ResponseEntity.ok (userDTOList);
     }
 
+    /**
+     * 下载导入花名册数据模板
+     *
+     * @param response
+     * @return
+     */
+    @PreAuthorize ("hasAnyAuthority('roster:base:import')")
+    @GetMapping("import/template")
+    @ApiOperation(value = "下载模板")
+    public void importFileTemplate(HttpServletResponse response) {
+        String fileName = "花名册数据导入模板.xlsx";
+        List<RosterBaseDTO> list = Lists.newArrayList();
+        EasyPoiUtil.exportExcel ( list, "花名册数据",  "花名册数据", RosterBaseDTO.class, fileName, response );
+    }
+
+    /**
+     * 导入花名册数据
+     *
+     * @return
+     */
+    @DemoMode
+    @PreAuthorize("hasAnyAuthority('roster:base:import')")
+    @PostMapping("import")
+    @ApiOperation(value = "导入花名册excel")
+    public ResponseEntity importFile(MultipartFile file) {
+        return rosterBaseService.importFile(file);
+    }
+
 }

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

@@ -305,6 +305,7 @@
     from roster_base rb
     left join sys_office so on rb.office_id = so.id and so.del_flag = '0'
     ${ew.customSqlSegment}
+    order by rb.create_date desc
   </select>
 
   <select id="queryById" resultMap="BaseResultMap">

+ 104 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/roster/service/RosterBaseService.java

@@ -7,9 +7,18 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 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.sys.constant.enums.OfficeTypeEnum;
+import com.jeeplus.sys.domain.Office;
+import com.jeeplus.sys.domain.User;
+import com.jeeplus.sys.service.OfficeService;
+import com.jeeplus.sys.service.UserService;
 import com.jeeplus.sys.service.dto.UserDTO;
+import com.jeeplus.sys.utils.DictUtils;
 import com.jeeplus.sys.utils.StringUtils;
 import com.jeeplus.sys.utils.UserUtils;
+import com.jeeplus.test.cw.invoice.service.dto.CwFinanceInvoiceDetailDTO;
+import com.jeeplus.test.jobPosion.service.dto.JobPositionDTO;
 import com.jeeplus.test.jobPosion.utils.BeanUtils;
 import com.jeeplus.test.mould.service.SerialnumTplService;
 import com.jeeplus.test.oss.service.OssService;
@@ -23,10 +32,14 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import static com.jeeplus.test.jobPosion.utils.BeanUtils.objectCheckIsNull;
+
 @Service
 @Transactional(rollbackFor = Exception.class)
 public class RosterBaseService extends ServiceImpl<RosterBaseMapper, RosterBase> {
@@ -64,6 +77,12 @@ public class RosterBaseService extends ServiceImpl<RosterBaseMapper, RosterBase>
     @Autowired
     private SerialnumTplService serialnumTplService;
 
+    @Autowired
+    private OfficeService officeService;
+
+    @Autowired
+    private UserService userService;
+
     public IPage<RosterBaseDTO> findList(Page<RosterBaseDTO> page, QueryWrapper<RosterBase> queryWrapper){
         queryWrapper.eq("rb.del_flag","0");
         IPage<RosterBaseDTO> rosterBaseDTOIPage = rosterBaseMapper.findList(page, queryWrapper);
@@ -280,4 +299,89 @@ public class RosterBaseService extends ServiceImpl<RosterBaseMapper, RosterBase>
         }
         return ResponseEntity.ok("花名册保存成功");
     }
+
+    // 导入花名册excel
+    public ResponseEntity importFile(MultipartFile file) {
+        try {
+            Integer successNum = 0;
+            List<RosterBase> rosterList = new ArrayList<>();
+            // 获取上传文件中的数据
+            List <RosterBaseDTO> list = EasyPoiUtil.importExcel ( file, 1, 1, RosterBaseDTO.class );
+            //去除excel中的空行
+            list = getExcelList(list);
+            for (RosterBaseDTO rosterBaseDTO : list) {
+                if (StringUtils.isBlank(rosterBaseDTO.getName())) {
+                    return ResponseEntity.badRequest().body ("导入花名册失败!文件中有姓名未填写");
+                }
+                // 查询这个人员姓名是否存在,已存在则抛出提示
+                List<RosterBase> rs = this.list(new QueryWrapper<RosterBase>().lambda().eq(RosterBase::getName, rosterBaseDTO.getName()));
+                if (CollectionUtil.isNotEmpty(rs)) {
+                    return ResponseEntity.badRequest().body ("导入花名册失败!人员“"+ rosterBaseDTO.getName() +"”已存在");
+                }
+                if (StringUtils.isBlank(rosterBaseDTO.getOfficeName())) {
+                    return ResponseEntity.badRequest().body ("导入花名册失败!文件中有部门未填写");
+                }
+                // 查询这个部门是否存在于当前系统中,不存在则不进行导入数据操作,抛出提示
+                List<Office> officeList = officeService.list(new QueryWrapper<Office>().lambda().eq(Office::getType, OfficeTypeEnum.OFFICE.getValue()).eq(Office::getName, rosterBaseDTO.getOfficeName()));
+                if (CollectionUtil.isEmpty(officeList)) {
+                    return ResponseEntity.badRequest().body("导入花名册失败!文件中含有不存在的部门,请重新填写");
+                }
+                // 部门填写符合要求,将部门名字转换为部门id
+                rosterBaseDTO.setOfficeId(officeList.get(0).getId());
+                if (StringUtils.isBlank(rosterBaseDTO.getCertificatesType())) {
+                    return ResponseEntity.badRequest().body ("导入花名册失败!文件中有证件类型未填写");
+                }
+                // 验证证件类型填写是否符合要求
+                String certificatesType = DictUtils.getDictValue(rosterBaseDTO.getCertificatesType(), "certificates_type","null");
+                if ("null".equals(certificatesType)) {
+                    return ResponseEntity.badRequest().body ("导入花名册失败!文件中有证件类型填写错误,请重新填写");
+                }
+                // 证件类型转换
+                rosterBaseDTO.setCertificatesType(certificatesType);
+                if (StringUtils.isBlank(rosterBaseDTO.getIdCard())) {
+                    return ResponseEntity.badRequest().body ("导入花名册失败!文件中有证件号未填写");
+                }
+                if (StringUtils.isBlank(rosterBaseDTO.getMobile())) {
+                    return ResponseEntity.badRequest().body ("导入花名册失败!文件中有电话号码未填写");
+                }
+                if (StringUtils.isBlank(rosterBaseDTO.getWorkerType())) {
+                    return ResponseEntity.badRequest().body ("导入花名册失败!文件中有员工类型未填写");
+                }
+                // 验证员工类型填写是否符合要求
+                String workerType = DictUtils.getDictValue(rosterBaseDTO.getWorkerType(), "worker_type","null");
+                if ("null".equals(workerType)) {
+                    return ResponseEntity.badRequest().body ("导入花名册失败!文件中有员工类型填写错误,请重新填写");
+                }
+                // 员工类型转换
+                rosterBaseDTO.setWorkerType(workerType);
+                // 新增数据
+                RosterBase rosterBase = RosterBaseWrapper.INSTANCE.toEntity(rosterBaseDTO);
+                rosterList.add(rosterBase);
+                successNum++;
+            }
+            if (CollectionUtil.isNotEmpty(rosterList)) {
+                this.saveBatch(rosterList);
+            }
+            return ResponseEntity.ok ( "已成功导入 " + successNum + " 条数据" );
+        } catch (Exception e) {
+            return ResponseEntity.badRequest().body ( "导入花名册失败!失败信息:" + e.getMessage ( ) );
+        }
+    }
+    /**
+     * 去除excel中的空行
+     * @param list
+     * @return
+     */
+    public ArrayList<RosterBaseDTO> getExcelList(List<RosterBaseDTO> list){
+
+        ArrayList<RosterBaseDTO> rosterBaseDTOS = new ArrayList<>();
+
+        list.stream().forEach(item->{
+            if(objectCheckIsNull(item)){
+                rosterBaseDTOS.add(item);
+            }
+        });
+
+        return rosterBaseDTOS;
+    }
 }

+ 7 - 0
jeeplus-module/jeeplus-test/src/main/java/com/jeeplus/test/roster/service/dto/RosterBaseDTO.java

@@ -1,5 +1,6 @@
 package com.jeeplus.test.roster.service.dto;
 
+import cn.afterturn.easypoi.excel.annotation.Excel;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.jeeplus.core.domain.BaseEntity;
 import com.jeeplus.core.service.dto.BaseDTO;
@@ -27,6 +28,7 @@ public class RosterBaseDTO extends BaseDTO {
     /**
      * 姓名
      */
+    @Excel(name="姓名",width = 25,orderNum = "1")
     private String name;
 
     /**
@@ -62,11 +64,13 @@ public class RosterBaseDTO extends BaseDTO {
     /**
      * 证件类型
      */
+    @Excel(name="证件类型",width = 25,orderNum = "3",dict = "certificates_type",addressList = true)
     private String certificatesType;
 
     /**
      * 证件号
      */
+    @Excel(name="证件号",width = 25,orderNum = "4")
     private String idCard;
 
     /**
@@ -92,6 +96,7 @@ public class RosterBaseDTO extends BaseDTO {
     /**
      * 手机号码
      */
+    @Excel(name="手机号码",width = 25,orderNum = "5")
     private String mobile;
 
     /**
@@ -102,6 +107,7 @@ public class RosterBaseDTO extends BaseDTO {
     /**
      * 员工类型
      */
+    @Excel(name="员工类型",width = 25,orderNum = "6",dict = "worker_type",addressList = true)
     private String workerType;
 
     /**
@@ -282,6 +288,7 @@ public class RosterBaseDTO extends BaseDTO {
     /**
      * 所属部门
      */
+    @Excel(name = "部门",width = 25,orderNum = "2")
     private String officeName;
 
     private static final long serialVersionUID = 1L;