From 809562f45f703f99f9f75618428cef59a6458799 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 30 三月 2026 17:39:05 +0800
Subject: [PATCH] yys 1.设备导入,人员导入

---
 src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java    |   12 ++
 src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java |    9 ++
 src/main/java/com/ruoyi/project/system/mapper/SysRoleMapper.java         |    2 
 src/main/java/com/ruoyi/staff/dto/StaffOnJobExcelDto.java                |   87 +++++++++++++++++++++
 src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java           |   34 +++++---
 src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java    |   45 ++++++++++
 src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java       |    9 ++
 src/main/resources/mapper/system/SysRoleMapper.xml                       |    1 
 8 files changed, 182 insertions(+), 17 deletions(-)

diff --git a/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java b/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
index f79d4d2..150f6d4 100644
--- a/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
+++ b/src/main/java/com/ruoyi/device/controller/DeviceLedgerController.java
@@ -3,7 +3,9 @@
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.device.dto.DeviceLedgerDto;
+import com.ruoyi.device.execl.DeviceLedgerExeclDto;
 import com.ruoyi.device.mapper.DeviceLedgerMapper;
 import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
 import com.ruoyi.device.pojo.DeviceLedger;
@@ -11,6 +13,7 @@
 import com.ruoyi.device.service.IDeviceLedgerService;
 import com.ruoyi.framework.aspectj.lang.annotation.Anonymous;
 import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.staff.dto.StaffOnJobExcelDto;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -79,7 +82,14 @@
          deviceLedgerService.export(response, ids);
     }
 
-    @PostMapping("import")
+    @ApiOperation("涓嬭浇妯℃澘")
+    @PostMapping("/downloadTemplate")
+    public void downloadTemplate(HttpServletResponse response) {
+        ExcelUtil<DeviceLedgerExeclDto> util = new ExcelUtil<>(DeviceLedgerExeclDto.class);
+        util.importTemplateExcel(response, "璁惧瀵煎叆妯℃澘");
+    }
+
+    @PostMapping("/import")
     @ApiOperation("瀵煎叆璁惧鍙拌处")
     public AjaxResult importData(MultipartFile file) throws IOException {
         Boolean b = deviceLedgerService.importData(file);
diff --git a/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java b/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
index 0067da9..01906d6 100644
--- a/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
+++ b/src/main/java/com/ruoyi/device/execl/DeviceLedgerExeclDto.java
@@ -1,9 +1,14 @@
 package com.ruoyi.device.execl;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.Date;
 
 @Data
 public class DeviceLedgerExeclDto {
@@ -14,6 +19,18 @@
      */
     @Excel(name = "璁惧鍚嶇О" ,sort = 1)
     private String deviceName;
+
+    /**
+     * 璁惧绫诲瀷
+     */
+    @Excel(name = "璁惧绫诲瀷",sort = 0,combo = {"鐢熶骇璁惧","鍔炲叕璁惧","妫�鏌ヨ澶�","杩愯緭璁惧","鍏朵粬璁惧"})
+    private String type;
+
+    @ApiModelProperty("璁″垝杩愯鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "璁″垝杩愯鏃堕棿",sort = 10,dateFormat = "yyyy-MM-dd")
+    private Date planRuntimeTime;
 
     /**
      * 瑙勬牸鍨嬪彿
@@ -36,8 +53,8 @@
     /**
      * 鏁伴噺
      */
-    @Excel(name = "鏁伴噺",sort = 5)
-    private BigDecimal number;
+    @Excel(name = "鏁伴噺",sort = 5, type = Excel.Type.EXPORT)
+    private BigDecimal number = BigDecimal.ONE;
 
     /**
      * 鍚◣鍗曚环
@@ -48,7 +65,7 @@
     /**
      * 鍚◣鎬讳环
      */
-    @Excel(name = "鍚◣鎬讳环",sort = 7)
+    @Excel(name = "鍚◣鎬讳环",sort = 7, type = Excel.Type.EXPORT)
     private BigDecimal taxIncludingPriceTotal;
 
     /**
@@ -60,17 +77,8 @@
     /**
      * 涓嶅惈绋庢�讳环
      */
-    @Excel(name = "涓嶅惈绋庢�讳环",sort = 9)
+    @Excel(name = "涓嶅惈绋庢�讳环",sort = 9, type = Excel.Type.EXPORT)
     private BigDecimal unTaxIncludingPriceTotal;
-//
-//    /**
-//     * 褰曞叆鏃堕棿
-//     *
-//     */
-//    @Excel(name = "褰曞叆鏃堕棿",sort = 10)
-//    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-//    private LocalDateTime createTime;
-
 
 
     /**
diff --git a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java b/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
index b614149..e3c732a 100644
--- a/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/device/service/impl/DeviceLedgerServiceImpl.java
@@ -4,6 +4,8 @@
 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.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -23,6 +25,8 @@
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -112,6 +116,11 @@
                 deviceLedger.setCreateUser(SecurityUtils.getUserId().intValue());
             }
             BeanUtils.copyProperties(c,deviceLedger);
+            // 閫氳繃鍚◣鍗曚环銆佹暟閲忋�佺◣鐜囪绠楀惈绋庢�讳环锛屼笉鍚◣鎬讳环
+            deviceLedger.setTaxIncludingPriceTotal(c.getTaxIncludingPriceUnit());
+            deviceLedger.setNumber(BigDecimal.ONE);
+            deviceLedger.setPlanRuntimeTime(DateUtils.toLocalDate(c.getPlanRuntimeTime()));
+            deviceLedger.setUnTaxIncludingPriceTotal(deviceLedger.getTaxIncludingPriceTotal().divide(BigDecimal.ONE.add(c.getTaxRate()),2, RoundingMode.HALF_UP));
             deviceLedgerMapper.insert(deviceLedger);
         });
 
diff --git a/src/main/java/com/ruoyi/project/system/mapper/SysRoleMapper.java b/src/main/java/com/ruoyi/project/system/mapper/SysRoleMapper.java
index 507159b..f61cf5a 100644
--- a/src/main/java/com/ruoyi/project/system/mapper/SysRoleMapper.java
+++ b/src/main/java/com/ruoyi/project/system/mapper/SysRoleMapper.java
@@ -1,6 +1,8 @@
 package com.ruoyi.project.system.mapper;
 
 import java.util.List;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.project.system.domain.SysRole;
 
 /**
diff --git a/src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java b/src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java
index 8e3d6b6..8ef5a4b 100644
--- a/src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java
+++ b/src/main/java/com/ruoyi/staff/controller/StaffOnJobController.java
@@ -1,6 +1,7 @@
 package com.ruoyi.staff.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.aspectj.lang.annotation.Log;
 import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
 import com.ruoyi.framework.web.domain.AjaxResult;
@@ -13,6 +14,7 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
+import com.ruoyi.staff.dto.StaffOnJobExcelDto;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
@@ -105,6 +107,13 @@
         return AjaxResult.success(staffOnJobService.renewContract(id, staffContract));
     }
 
+    @ApiOperation("涓嬭浇妯℃澘")
+    @PostMapping("/downloadTemplate")
+    public void downloadTemplate(HttpServletResponse response) {
+        ExcelUtil<StaffOnJobExcelDto> util = new ExcelUtil<>(StaffOnJobExcelDto.class);
+        util.importTemplateExcel(response, "鍦ㄨ亴鍛樺伐妯℃澘");
+    }
+
     /**
      * 鍦ㄨ亴鍛樺伐瀵煎叆
      */
diff --git a/src/main/java/com/ruoyi/staff/dto/StaffOnJobExcelDto.java b/src/main/java/com/ruoyi/staff/dto/StaffOnJobExcelDto.java
new file mode 100644
index 0000000..8ebc195
--- /dev/null
+++ b/src/main/java/com/ruoyi/staff/dto/StaffOnJobExcelDto.java
@@ -0,0 +1,87 @@
+package com.ruoyi.staff.dto;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import com.ruoyi.staff.pojo.StaffEducation;
+import com.ruoyi.staff.pojo.StaffEmergencyContact;
+import com.ruoyi.staff.pojo.StaffWorkExperience;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class StaffOnJobExcelDto {
+
+    /**
+     * 鐘舵��(0:绂昏亴;1:鍦ㄨ亴)
+     */
+    private Integer staffState = 1;
+
+
+    /**
+     * 鍛樺伐缂栧彿
+     */
+    @Excel(name = "鍛樺伐缂栧彿", cellType = Excel.ColumnType.STRING, sort = 2,prompt = "鐢ㄦ埛鐧诲綍鍚�")
+    private String staffNo;
+
+    /**
+     * 鍛樺伐濮撳悕
+     */
+    @Excel(name = "鍛樺伐濮撳悕", sort = 3,prompt = "鐢ㄦ埛鏄电О")
+    private String staffName;
+
+    /**
+     * 鎬у埆
+     */
+    @Excel(name = "鎬у埆", sort = 4)
+    private String sex;
+
+    /**
+     * 閮ㄩ棬鍚嶇О
+     */
+    @Excel(name = "閮ㄩ棬鍚嶇О", sort = 5,prompt = "璇峰墠寰�绯荤粺鏌ョ湅鏈夊摢浜涢儴闂ㄥ彲浠ョ粦瀹氾紝涓ユ牸鎸夌収閮ㄩ棬鍚嶇О缁戝畾")
+    private String sysDeptName;
+
+    /**
+     * 瑙掕壊
+     */
+    @Excel(name = "瑙掕壊", sort = 6,prompt = "璇峰墠寰�绯荤粺鏌ョ湅鏈夊摢浜涜鑹插彲浠ョ粦瀹氾紝涓ユ牸鎸夌収瑙掕壊鍚嶇О缁戝畾")
+    private String roleName;
+
+
+    /**
+     * 鎵嬫満
+     */
+    @Excel(name = "鎵嬫満", sort = 13)
+    private String phone;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "鍚堝悓寮�濮嬫椂闂�")
+    @Excel(name = "鍚堝悓寮�濮嬫棩鏈�", width = 30, dateFormat = "yyyy-MM-dd", sort = 15)
+    private Date contractStartTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "鍚堝悓缁撴潫鏃堕棿")
+    @Excel(name = "鍚堝悓缁撴潫鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd", sort = 16)
+    private Date contractEndTime;
+
+    @ApiModelProperty(value = "鍚堝悓鏈熼檺")
+    @Excel(name = "鍚堝悓鏈熼檺", sort = 17)
+    private String contractTerm;
+
+
+    @ApiModelProperty(value = "鍑虹敓鏃ユ湡")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "鍑虹敓鏃ユ湡", width = 30, dateFormat = "yyyy-MM-dd", sort = 18)
+    private Date birthDate;
+}
diff --git a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
index 073733b..3613da3 100644
--- a/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
+++ b/src/main/java/com/ruoyi/staff/service/impl/StaffOnJobServiceImpl.java
@@ -10,12 +10,17 @@
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.dto.WordDateDto;
+import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.domain.SysPost;
+import com.ruoyi.project.system.domain.SysRole;
 import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.mapper.SysDeptMapper;
 import com.ruoyi.project.system.mapper.SysPostMapper;
+import com.ruoyi.project.system.mapper.SysRoleMapper;
 import com.ruoyi.project.system.mapper.SysUserMapper;
 import com.ruoyi.project.system.service.impl.SysUserServiceImpl;
 import com.ruoyi.staff.dto.StaffOnJobDto;
+import com.ruoyi.staff.dto.StaffOnJobExcelDto;
 import com.ruoyi.staff.mapper.*;
 import com.ruoyi.staff.pojo.*;
 import com.ruoyi.staff.service.IStaffOnJobService;
@@ -46,6 +51,13 @@
 
     @Autowired
     private StaffOnJobMapper staffOnJobMapper;
+
+    @Autowired
+    private SysDeptMapper sysDeptMapper;
+
+    @Autowired
+    private SysRoleMapper sysRoleMapper;
+
     @Autowired
     private SysPostMapper sysPostMapper;
 
@@ -310,11 +322,38 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean importData(MultipartFile file) {
         try {
-            ExcelUtil<StaffOnJob> util = new ExcelUtil<>(StaffOnJob.class);
-            List<StaffOnJob> staffOnJobs = util.importExcel(file.getInputStream());
-            return saveOrUpdateBatch(staffOnJobs);
+            ExcelUtil<StaffOnJobExcelDto> util = new ExcelUtil<>(StaffOnJobExcelDto.class);
+            List<StaffOnJobExcelDto> staffOnJobs = util.importExcel(file.getInputStream());
+            if (CollectionUtils.isEmpty(staffOnJobs)){
+                return false;
+            }
+            // 鑾峰彇鎵�鏈夐儴闂ㄦ暟鎹�
+            List<SysDept> sysDepts = sysDeptMapper.selectList(Wrappers.<SysDept>lambdaQuery().eq(SysDept::getDelFlag, 0));
+            // 鑾峰彇鎵�鏈夎鑹叉暟鎹�
+            List<SysRole> sysRoles = sysRoleMapper.selectRoleAll();
+            staffOnJobs.forEach(staffOnJob -> {
+                StaffOnJobDto staffOnJobDto = new StaffOnJobDto();
+                BeanUtils.copyProperties(staffOnJob, staffOnJobDto);
+                // 閫氳繃鍚嶇О鑾峰彇閮ㄩ棬id
+                staffOnJobDto.setSysDeptId(// ... existing code ...
+                        sysDepts.stream()
+                            .filter(dept -> dept.getDeptName() != null && dept.getDeptName().equals(staffOnJob.getSysDeptName()))
+                            .findFirst()
+                            .map(SysDept::getDeptId)
+                            .orElse(null)
+                        );
+                // 閫氳繃鍚嶇О鑾峰彇瑙掕壊id
+                staffOnJobDto.setRoleId(sysRoles.stream()
+                        .filter(role -> role.getRoleName() != null && role.getRoleName().equals(staffOnJob.getRoleName()))
+                        .findFirst()
+                        .map(SysRole::getRoleId)
+                        .orElse( null));
+                add(staffOnJobDto);
+            });
+            return true;
         } catch (Exception e) {
             e.printStackTrace();
             return false;
diff --git a/src/main/resources/mapper/system/SysRoleMapper.xml b/src/main/resources/mapper/system/SysRoleMapper.xml
index 92ab684..9e16cf7 100644
--- a/src/main/resources/mapper/system/SysRoleMapper.xml
+++ b/src/main/resources/mapper/system/SysRoleMapper.xml
@@ -62,6 +62,7 @@
 	
 	<select id="selectRoleAll" resultMap="SysRoleResult">
 		<include refid="selectRoleVo"/>
+		WHERE r.del_flag = '0'
 	</select>
 	
 	<select id="selectRoleListByUserId" parameterType="Long" resultType="Long">

--
Gitblit v1.9.3