From 9ec0ecb6e1a81f1ce55935b9ba7fbda6c3a8810a Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期三, 15 十月 2025 15:27:00 +0800
Subject: [PATCH] 员工导入

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java |  209 +++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 172 insertions(+), 37 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
index 5fa85d2..454d29b 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
@@ -13,6 +13,7 @@
 import com.ruoyi.common.core.domain.entity.SysDept;
 import com.ruoyi.common.core.domain.entity.SysRole;
 import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.entity.TDept;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.SecurityUtils;
@@ -20,12 +21,11 @@
 import com.ruoyi.common.utils.WebUtils;
 import com.ruoyi.framework.web.service.TokenService;
 import com.ruoyi.system.dto.SysUserUpdateStatusDTO;
-import com.ruoyi.system.importExcel.TSysUserImportExcel;
+import com.ruoyi.system.importExcel.EmployeeImportExcel;
 import com.ruoyi.system.query.SysUserQuery;
 import com.ruoyi.system.service.*;
 import com.ruoyi.system.vo.system.SysUserVO;
 import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.apache.poi.ss.usermodel.Workbook;
@@ -38,12 +38,13 @@
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.annotation.Resource;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URLEncoder;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -65,6 +66,8 @@
 
     @Autowired
     private ISysDeptService deptService;
+    @Autowired
+    private TDeptService tDeptService;
     @Autowired
     private TokenService tokenService;
 
@@ -185,59 +188,189 @@
     @ApiOperation(value = "员工导入")
     @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
     @PostMapping("/importUser")
-    public R<String> importUser(@RequestPart("file") MultipartFile file) {
-        List<SysRole> sysRoles = roleService.selectRoleAll();
+    public R<Object> importUser(@RequestPart("file") MultipartFile file) {
         ImportParams params = new ImportParams();
-//        params.setTitleRows(1); // 标题行数
-        params.setHeadRows(1); //表头行数
+        params.setHeadRows(1); // 表头行数
         InputStream inputStream = null;
-//        List<CustomerImportFailedData> failedData = new ArrayList<>();
-        List<TSysUserImportExcel> locationExcelList;
+        List<EmployeeImportExcel> employeeExcelList;
+        
         try {
             inputStream = file.getInputStream();
-            locationExcelList = ExcelImportUtil.importExcel(inputStream,
-                    TSysUserImportExcel.class, params);
+            employeeExcelList = ExcelImportUtil.importExcel(inputStream,
+                    EmployeeImportExcel.class, params);
         } catch (Exception e) {
             e.printStackTrace();
-            throw new ServiceException("员工导入失败!");
+            throw new ServiceException("员工导入失败: " + e.getMessage());
         } finally {
-            try {
-                inputStream.close();
-            } catch (IOException e) {
-                throw new ServiceException(e.getMessage());
+            if (inputStream != null) {
+                try {
+                    inputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
             }
         }
-        if (CollectionUtils.isEmpty(locationExcelList)) {
+        
+        if (CollectionUtils.isEmpty(employeeExcelList)) {
             throw new ServiceException("员工数据为空!");
+        }
+        
+        int successCount = 0;
+        int failCount = 0;
+        List<String> errorMessages = new ArrayList<>();
+        
+        for (EmployeeImportExcel employeeExcel : employeeExcelList) {
+            try {
+                // 数据验证
 
+
+                // 数据验证
+                if (StringUtils.isEmpty(employeeExcel.getNickName())) {
+                    errorMessages.add("第" + (successCount + failCount + 1) + "行:姓名为空");
+                    failCount++;
+                    continue;
+                }
+                
+                if (StringUtils.isEmpty(employeeExcel.getPhoneNumber())) {
+                    errorMessages.add("第" + (successCount + failCount + 1) + "行:联系电话为空");
+                    failCount++;
+                    continue;
+                }
+                
+                // 转换并保存用户
+                SysUser sysUser = convertToSysUser(employeeExcel);
+                if (StringUtils.isEmpty(employeeExcel.getDepartment())) {
+                    errorMessages.add("第" + (successCount + failCount + 1) + "行:所在股室为空");
+                    failCount++;
+                    continue;
+                }
+
+                TDept dept = tDeptService.lambdaQuery().eq(TDept::getDeptName, employeeExcel.getDepartment())
+                        .last("limit 1").one();
+                if (dept == null){
+                    errorMessages.add("第" + (successCount + failCount + 1) + "行:所在股室不存在");
+                    failCount++;
+                    continue;
+                }
+                sysUser.setDeptId(dept.getId().toString());
+                userService.insertUser(sysUser);
+                successCount++;
+                
+            } catch (Exception e) {
+                errorMessages.add("第" + (successCount + failCount + 1) + "行:" + e.getMessage());
+                failCount++;
+                e.printStackTrace();
+            }
         }
+        
         JSONObject result = new JSONObject();
-        List<SysUser> sysUsers = new ArrayList<>();
-        for (TSysUserImportExcel locationExcel : locationExcelList) {
-            System.err.println(locationExcel);
-            SysUser sysUser = new SysUser();
-            sysUser.setStatus("0");
-            sysUser.setDelFlag("0");
-            sysUser.setCreateBy(getUsername());
-            userService.insertUser(sysUser);
+        result.put("successCount", successCount);
+        result.put("failCount", failCount);
+        result.put("totalCount", successCount + failCount);
+        if (!errorMessages.isEmpty()) {
+            result.put("errorMessages", errorMessages);
+            return R.fail(result.get("errorMessages"));
         }
-        if (!result.isEmpty()) {
-            return R.ok(result.toString());
+        
+        return R.ok("导入完成", result.toString());
+    }
+
+    /**
+     * 解析日期字符串为Date对象
+     * @param dateStr 日期字符串,格式如:2022.09
+     * @return Date对象
+     */
+    private Date parseDate(String dateStr) {
+        if (StringUtils.isEmpty(dateStr)) {
+            return null;
         }
-        return R.ok();
+        try {
+            // 支持 YYYY.MM 格式
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
+            return sdf.parse(dateStr);
+        } catch (ParseException e) {
+            try {
+                // 支持 YYYY-MM 格式
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+                return sdf.parse(dateStr);
+            } catch (ParseException ex) {
+                try {
+                    // 支持 YYYY-MM-DD 格式
+                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                    return sdf.parse(dateStr);
+                } catch (ParseException exc) {
+                    return null;
+                }
+            }
+        }
+    }
+
+    /**
+     * 将EmployeeImportExcel转换为SysUser
+     * @param employeeExcel 员工导入Excel数据
+     * @return SysUser对象
+     */
+    private SysUser convertToSysUser(EmployeeImportExcel employeeExcel) {
+        SysUser sysUser = new SysUser();
+        sysUser.setPassword(SecurityUtils.encryptPassword("123456"));
+
+        // 基本信息
+        sysUser.setNickName(employeeExcel.getNickName());
+        sysUser.setUserName(employeeExcel.getPhoneNumber());
+        sysUser.setPhonenumber(employeeExcel.getPhoneNumber());
+        // 性别转换
+        if ("男".equals(employeeExcel.getSex())) {
+            sysUser.setSex("0");
+        } else if ("女".equals(employeeExcel.getSex())) {
+            sysUser.setSex("1");
+        } else {
+            sysUser.setSex("0");
+        }
+        
+        // 身份证
+        sysUser.setIdCard(employeeExcel.getIdCard());
+        
+        // 政治面貌
+        sysUser.setPoliticalOutlook(employeeExcel.getPoliticalOutlook());
+
+        // 时间字段
+        sysUser.setParticipationTime(parseDate(employeeExcel.getParticipationTime()));
+        sysUser.setCompanyTime(parseDate(employeeExcel.getCompanyTime()));
+        sysUser.setPositionTime(parseDate(employeeExcel.getPositionTime()));
+        // 学历信息
+        sysUser.setFirstDegree(employeeExcel.getFirstDegree());
+        sysUser.setFirstCollege(employeeExcel.getFirstCollege());
+        sysUser.setFirstMajor(employeeExcel.getFirstMajor());
+        sysUser.setHighestDegree(employeeExcel.getHighestDegree());
+        sysUser.setHighestCollege(employeeExcel.getHighestCollege());
+        sysUser.setHighestMajor(employeeExcel.getHighestMajor());
+        
+        // 职务和部门
+        sysUser.setPosition(employeeExcel.getPosition());
+        sysUser.setOrganization(employeeExcel.getOrganization());
+        
+        // 系统字段
+        sysUser.setStatus("0"); // 正常状态
+        sysUser.setDelFlag("0"); // 未删除
+        sysUser.setCreateBy(getUsername());
+        
+        return sysUser;
     }
 
     @ApiOperation(value = "员工导入模板下载")
     @GetMapping("/importDownload")
     public void importDownload() {
-        List<TSysUserImportExcel> locationImportExcels = new ArrayList<>();
-        TSysUserImportExcel tLocationImportExcel = new TSysUserImportExcel();
-        locationImportExcels.add(tLocationImportExcel);
-        Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), TSysUserImportExcel.class, locationImportExcels);
+        List<EmployeeImportExcel> employeeImportExcels = new ArrayList<>();
+        EmployeeImportExcel employeeImportExcel = new EmployeeImportExcel();
+        employeeImportExcels.add(employeeImportExcel);
+        ExportParams exportParams = new ExportParams();
+        exportParams.setTitle("员工信息导入模板");
+        exportParams.setSheetName("员工信息");
+        Workbook workbook = ExcelExportUtil.exportExcel(exportParams, EmployeeImportExcel.class, employeeImportExcels);
         HttpServletResponse response = WebUtils.response();
         ServletOutputStream outputStream = null;
         try {
-            String fileName = URLEncoder.encode("员工导入模板.xls", "utf-8");
+            String fileName = URLEncoder.encode("员工信息导入模板.xls", "utf-8");
             response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
             response.setHeader("content-Type", "application/vnd.ms-excel");
             response.setHeader("Pragma", "no-cache");
@@ -248,10 +381,12 @@
             e.printStackTrace();
             System.out.println("员工导入模板下载失败!");
         } finally {
-            try {
-                outputStream.close();
-            } catch (IOException e) {
-                e.printStackTrace();
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
             }
         }
     }

--
Gitblit v1.7.1