Ver Fonte

1、新增工资导入功能
2、新增查询员工工资详情功能

fuwb há 2 meses atrás
pai
commit
6bc39b7b99

+ 22 - 6
zjugis-module-business/zjugis-module-business-biz/src/main/java/com/zjugis/module/business/flow/salary/controller/SalaryInfoController.java

@@ -4,11 +4,8 @@ import com.zjugis.framework.workflow.model.BaseController;
 import com.zjugis.module.business.flow.salary.dto.SalaryInfoPageDTO;
 import com.zjugis.module.business.flow.salary.service.ISalaryInfoService;
 import com.zjugis.module.business.flow.supplierinfo.dto.SupplierInfoPageDTO;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 
@@ -35,7 +32,26 @@ public class SalaryInfoController extends BaseController {
         return success(salaryInfoService.selectSalaryInfoPage(createReqVO));
     }
 
+    /**
+     * 上传工资文件
+     *
+     * @return
+     */
+    @PostMapping("/upload/file")
+    public String uploadSalaryFile(@RequestParam("file")MultipartFile file, @RequestParam("type") String personalType) {
+        return success(salaryInfoService.uploadSalaryFile(file, personalType));
+    }
 
-
+    /**
+     * 获取对应用户的工资详情
+     *
+     * @param id
+     * @param importId
+     * @return
+     */
+    @GetMapping("/detail")
+    public String getSalaryDetail(@RequestParam("id") String id, @RequestParam("importId") String importId) {
+        return success(salaryInfoService.getSalaryDetail(id, importId));
+    }
 
 }

+ 104 - 4
zjugis-module-business/zjugis-module-business-biz/src/main/java/com/zjugis/module/business/flow/salary/entity/SalaryInfo.java

@@ -54,7 +54,7 @@ public class SalaryInfo extends BaseEntity {
     /**
      * 导入id
      */
-    private Integer importId;
+    private String importId;
 
     /**
      * 排序序号
@@ -105,17 +105,17 @@ public class SalaryInfo extends BaseEntity {
     /**
      * 应发工资合计
      */
-    private BigDecimal totalPayable;
+    private Double totalPayable;
 
     /**
      * 扣发工资合计
      */
-    private BigDecimal totalDeducted;
+    private Double totalDeducted;
 
     /**
      * 实发工资
      */
-    private BigDecimal actualPay;
+    private Double actualPay;
 
     /**
      * 流程ID
@@ -125,501 +125,601 @@ public class SalaryInfo extends BaseEntity {
     /**
      * 扩展字段 1
      */
+    @TableField("ext_field_1")
     private String extField1;
 
     /**
      * 扩展字段 2
      */
+    @TableField("ext_field_2")
     private String extField2;
 
     /**
      * 扩展字段 3
      */
+    @TableField("ext_field_3")
     private String extField3;
 
     /**
      * 扩展字段 4
      */
+    @TableField("ext_field_4")
     private String extField4;
 
     /**
      * 扩展字段 5
      */
+    @TableField("ext_field_5")
     private String extField5;
 
     /**
      * 扩展字段 6
      */
+    @TableField("ext_field_6")
     private String extField6;
 
     /**
      * 扩展字段 7
      */
+    @TableField("ext_field_7")
     private String extField7;
 
     /**
      * 扩展字段 8
      */
+    @TableField("ext_field_8")
     private String extField8;
 
     /**
      * 扩展字段 9
      */
+    @TableField("ext_field_9")
     private String extField9;
 
     /**
      * 扩展字段 10
      */
+    @TableField("ext_field_10")
     private String extField10;
 
     /**
      * 扩展字段 11
      */
+    @TableField("ext_field_11")
     private String extField11;
 
     /**
      * 扩展字段 12
      */
+    @TableField("ext_field_12")
     private String extField12;
 
     /**
      * 扩展字段 13
      */
+    @TableField("ext_field_13")
     private String extField13;
 
     /**
      * 扩展字段 14
      */
+    @TableField("ext_field_14")
     private String extField14;
 
     /**
      * 扩展字段 15
      */
+    @TableField("ext_field_15")
     private String extField15;
 
     /**
      * 扩展字段 16
      */
+    @TableField("ext_field_16")
     private String extField16;
 
     /**
      * 扩展字段 17
      */
+    @TableField("ext_field_17")
     private String extField17;
 
     /**
      * 扩展字段 18
      */
+    @TableField("ext_field_18")
     private String extField18;
 
     /**
      * 扩展字段 19
      */
+    @TableField("ext_field_19")
     private String extField19;
 
     /**
      * 扩展字段 20
      */
+    @TableField("ext_field_20")
     private String extField20;
 
     /**
      * 扩展字段 21
      */
+    @TableField("ext_field_21")
     private String extField21;
 
     /**
      * 扩展字段 22
      */
+    @TableField("ext_field_22")
     private String extField22;
 
     /**
      * 扩展字段 23
      */
+    @TableField("ext_field_23")
     private String extField23;
 
     /**
      * 扩展字段 24
      */
+    @TableField("ext_field_24")
     private String extField24;
 
     /**
      * 扩展字段 25
      */
+    @TableField("ext_field_25")
     private String extField25;
 
     /**
      * 扩展字段 26
      */
+    @TableField("ext_field_26")
     private String extField26;
 
     /**
      * 扩展字段 27
      */
+    @TableField("ext_field_27")
     private String extField27;
 
     /**
      * 扩展字段 28
      */
+    @TableField("ext_field_28")
     private String extField28;
 
     /**
      * 扩展字段 29
      */
+    @TableField("ext_field_29")
     private String extField29;
 
     /**
      * 扩展字段 30
      */
+    @TableField("ext_field_30")
     private String extField30;
 
     /**
      * 扩展字段 31
      */
+    @TableField("ext_field_31")
     private String extField31;
 
     /**
      * 扩展字段 32
      */
+    @TableField("ext_field_32")
     private String extField32;
 
     /**
      * 扩展字段 33
      */
+    @TableField("ext_field_33")
     private String extField33;
 
     /**
      * 扩展字段 34
      */
+    @TableField("ext_field_34")
     private String extField34;
 
     /**
      * 扩展字段 35
      */
+    @TableField("ext_field_35")
     private String extField35;
 
     /**
      * 扩展字段 36
      */
+    @TableField("ext_field_36")
     private String extField36;
 
     /**
      * 扩展字段 37
      */
+    @TableField("ext_field_37")
     private String extField37;
 
     /**
      * 扩展字段 38
      */
+    @TableField("ext_field_38")
     private String extField38;
 
     /**
      * 扩展字段 39
      */
+    @TableField("ext_field_39")
     private String extField39;
 
     /**
      * 扩展字段 40
      */
+    @TableField("ext_field_40")
     private String extField40;
 
     /**
      * 扩展字段 41
      */
+    @TableField("ext_field_41")
     private String extField41;
 
     /**
      * 扩展字段 42
      */
+    @TableField("ext_field_42")
     private String extField42;
 
     /**
      * 扩展字段 43
      */
+    @TableField("ext_field_43")
     private String extField43;
 
     /**
      * 扩展字段 44
      */
+    @TableField("ext_field_44")
     private String extField44;
 
     /**
      * 扩展字段 45
      */
+    @TableField("ext_field_45")
     private String extField45;
 
     /**
      * 扩展字段 46
      */
+    @TableField("ext_field_46")
     private String extField46;
 
     /**
      * 扩展字段 47
      */
+    @TableField("ext_field_47")
     private String extField47;
 
     /**
      * 扩展字段 48
      */
+    @TableField("ext_field_48")
     private String extField48;
 
     /**
      * 扩展字段 49
      */
+    @TableField("ext_field_49")
     private String extField49;
 
     /**
      * 扩展字段 50
      */
+    @TableField("ext_field_50")
     private String extField50;
 
     /**
      * 扩展字段 51
      */
+    @TableField("ext_field_51")
     private String extField51;
 
     /**
      * 扩展字段 52
      */
+    @TableField("ext_field_52")
     private String extField52;
 
     /**
      * 扩展字段 53
      */
+    @TableField("ext_field_53")
     private String extField53;
 
     /**
      * 扩展字段 54
      */
+    @TableField("ext_field_54")
     private String extField54;
 
     /**
      * 扩展字段 55
      */
+    @TableField("ext_field_55")
     private String extField55;
 
     /**
      * 扩展字段 56
      */
+    @TableField("ext_field_56")
     private String extField56;
 
     /**
      * 扩展字段 57
      */
+    @TableField("ext_field_57")
     private String extField57;
 
     /**
      * 扩展字段 58
      */
+    @TableField("ext_field_58")
     private String extField58;
 
     /**
      * 扩展字段 59
      */
+    @TableField("ext_field_59")
     private String extField59;
 
     /**
      * 扩展字段 60
      */
+    @TableField("ext_field_60")
     private String extField60;
 
     /**
      * 扩展字段 61
      */
+    @TableField("ext_field_61")
     private String extField61;
 
     /**
      * 扩展字段 62
      */
+    @TableField("ext_field_62")
     private String extField62;
 
     /**
      * 扩展字段 63
      */
+    @TableField("ext_field_63")
     private String extField63;
 
     /**
      * 扩展字段 64
      */
+    @TableField("ext_field_64")
     private String extField64;
 
     /**
      * 扩展字段 65
      */
+    @TableField("ext_field_65")
     private String extField65;
 
     /**
      * 扩展字段 66
      */
+    @TableField("ext_field_66")
     private String extField66;
 
     /**
      * 扩展字段 67
      */
+    @TableField("ext_field_67")
     private String extField67;
 
     /**
      * 扩展字段 68
      */
+    @TableField("ext_field_68")
     private String extField68;
 
     /**
      * 扩展字段 69
      */
+    @TableField("ext_field_69")
     private String extField69;
 
     /**
      * 扩展字段 70
      */
+    @TableField("ext_field_70")
     private String extField70;
 
     /**
      * 扩展字段 71
      */
+    @TableField("ext_field_71")
     private String extField71;
 
     /**
      * 扩展字段 72
      */
+    @TableField("ext_field_72")
     private String extField72;
 
     /**
      * 扩展字段 73
      */
+    @TableField("ext_field_73")
     private String extField73;
 
     /**
      * 扩展字段 74
      */
+    @TableField("ext_field_74")
     private String extField74;
 
     /**
      * 扩展字段 75
      */
+    @TableField("ext_field_75")
     private String extField75;
 
     /**
      * 扩展字段 76
      */
+    @TableField("ext_field_76")
     private String extField76;
 
     /**
      * 扩展字段 77
      */
+    @TableField("ext_field_77")
     private String extField77;
 
     /**
      * 扩展字段 78
      */
+    @TableField("ext_field_78")
     private String extField78;
 
     /**
      * 扩展字段 79
      */
+    @TableField("ext_field_79")
     private String extField79;
 
     /**
      * 扩展字段 80
      */
+    @TableField("ext_field_80")
     private String extField80;
 
     /**
      * 扩展字段 81
      */
+    @TableField("ext_field_81")
     private String extField81;
 
     /**
      * 扩展字段 82
      */
+    @TableField("ext_field_82")
     private String extField82;
 
     /**
      * 扩展字段 83
      */
+    @TableField("ext_field_83")
     private String extField83;
 
     /**
      * 扩展字段 84
      */
+    @TableField("ext_field_84")
     private String extField84;
 
     /**
      * 扩展字段 85
      */
+    @TableField("ext_field_85")
     private String extField85;
 
     /**
      * 扩展字段 86
      */
+    @TableField("ext_field_86")
     private String extField86;
 
     /**
      * 扩展字段 87
      */
+    @TableField("ext_field_87")
     private String extField87;
 
     /**
      * 扩展字段 88
      */
+    @TableField("ext_field_88")
     private String extField88;
 
     /**
      * 扩展字段 89
      */
+    @TableField("ext_field_89")
     private String extField89;
 
     /**
      * 扩展字段 90
      */
+    @TableField("ext_field_90")
     private String extField90;
 
     /**
      * 扩展字段 91
      */
+    @TableField("ext_field_91")
     private String extField91;
 
     /**
      * 扩展字段 92
      */
+    @TableField("ext_field_92")
     private String extField92;
 
     /**
      * 扩展字段 93
      */
+    @TableField("ext_field_93")
     private String extField93;
 
     /**
      * 扩展字段 94
      */
+    @TableField("ext_field_94")
     private String extField94;
 
     /**
      * 扩展字段 95
      */
+    @TableField("ext_field_95")
     private String extField95;
 
     /**
      * 扩展字段 96
      */
+    @TableField("ext_field_96")
     private String extField96;
 
     /**
      * 扩展字段 97
      */
+    @TableField("ext_field_97")
     private String extField97;
 
     /**
      * 扩展字段 98
      */
+    @TableField("ext_field_98")
     private String extField98;
 
     /**
      * 扩展字段 99
      */
+    @TableField("ext_field_99")
     private String extField99;
 
     /**
      * 扩展字段 100
      */
+    @TableField("ext_field_100")
     private String extField100;
 
 

+ 9 - 0
zjugis-module-business/zjugis-module-business-biz/src/main/java/com/zjugis/module/business/flow/salary/service/ISalaryInfoService.java

@@ -3,7 +3,12 @@ package com.zjugis.module.business.flow.salary.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zjugis.module.business.flow.salary.dto.SalaryInfoPageDTO;
+import com.zjugis.module.business.flow.salary.entity.SalaryInfo;
+import com.zjugis.module.business.flow.salary.vo.SalaryInfoDetailVO;
 import com.zjugis.module.business.flow.salary.vo.SalaryInfoVO;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
 
 /**
  * 工资信息表 服务类
@@ -15,4 +20,8 @@ public interface ISalaryInfoService {
 
     Page<SalaryInfoVO> selectSalaryInfoPage(SalaryInfoPageDTO createReqVO);
 
+    String uploadSalaryFile(MultipartFile file, String personalType);
+
+    List<SalaryInfoDetailVO> getSalaryDetail(String id, String importId);
+
 }

+ 1 - 0
zjugis-module-business/zjugis-module-business-biz/src/main/java/com/zjugis/module/business/flow/salary/service/ISalaryInfoSettingsService.java

@@ -1,6 +1,7 @@
 package com.zjugis.module.business.flow.salary.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zjugis.module.business.flow.salary.entity.SalaryInfoSettings;
 
 /**
  * 工资设置表 服务类

+ 223 - 3
zjugis-module-business/zjugis-module-business-biz/src/main/java/com/zjugis/module/business/flow/salary/service/impl/SalaryInfoServiceImpl.java

@@ -1,17 +1,33 @@
 package com.zjugis.module.business.flow.salary.service.impl;
 
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.log.Log;
+import cn.hutool.poi.excel.ExcelReader;
+import cn.hutool.poi.excel.ExcelUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zjugis.framework.excel.core.util.ExcelUtils;
 import com.zjugis.module.business.flow.salary.dto.SalaryInfoPageDTO;
+import com.zjugis.module.business.flow.salary.entity.SalaryImport;
 import com.zjugis.module.business.flow.salary.entity.SalaryInfo;
+import com.zjugis.module.business.flow.salary.entity.SalaryInfoSettings;
 import com.zjugis.module.business.flow.salary.service.ISalaryInfoService;
+import com.zjugis.module.business.flow.salary.service.ISalaryInfoSettingsService;
+import com.zjugis.module.business.flow.salary.vo.SalaryInfoDetailVO;
 import com.zjugis.module.business.flow.salary.vo.SalaryInfoVO;
-import com.zjugis.module.business.flow.supplierinfo.entity.SupplierInfo;
+import com.zjugis.module.business.mapper.SalaryImportMapper;
 import com.zjugis.module.business.mapper.SalaryInfoMapper;
+import com.zjugis.module.business.mapper.SalaryInfoSettingsMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.time.LocalDateTime;
+import java.util.*;
 
 /**
  * 工资信息表 服务实现类
@@ -21,8 +37,42 @@ import javax.annotation.Resource;
  */
 @Service
 public class SalaryInfoServiceImpl implements ISalaryInfoService {
+    private static final Log log = Log.get(SalaryInfoServiceImpl.class);
     @Resource
-    private SalaryInfoMapper salaryInfoMapper;
+    private SalaryInfoMapper infoMapper;
+    @Resource
+    private SalaryImportMapper importMapper;
+    @Resource
+    private SalaryInfoSettingsMapper settingsMapper;
+
+    private static final Map<String, String> FIXED_FIELD_MAP = new LinkedHashMap<String, String>() {{
+        put("序号", "workerid");
+        put("年度", "year");
+        put("月份", "month");
+        put("导入时间", "import_date");
+        put("姓名", "name");
+        put("人员类型", "personnel_type_desc");
+        put("身份证", "id_card");
+        put("银行号", "bank_card");
+        put("银行", "bank");
+        put("单位", "work_unint");
+        put("应发合计", "total_payable");
+        put("扣发合计", "total_deducted");
+        put("实发合计", "actual_pay");
+    }};
+
+    private static final Map<String, Method> METHOD_MAP = new HashMap<>();
+
+    static {
+        SalaryInfo info = new SalaryInfo();
+        Method[] methods = info.getClass().getMethods();
+        for (Method method : methods) {
+            String methodName = method.getName();
+            if (methodName.startsWith("set")) {
+                METHOD_MAP.put(methodName, method);
+            }
+        }
+    }
 
     @Override
     public Page<SalaryInfoVO> selectSalaryInfoPage(SalaryInfoPageDTO createReqVO) {
@@ -39,6 +89,176 @@ public class SalaryInfoServiceImpl implements ISalaryInfoService {
             wrapper.eq(SalaryInfo::getName, createReqVO.getName())
                     .orderByDesc(SalaryInfo::getImportDate);
         }
-        return salaryInfoMapper.selectSalaryInfoPage(page, wrapper);
+        return infoMapper.selectSalaryInfoPage(page, wrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public String uploadSalaryFile(MultipartFile file, String personalType) {
+        LocalDateTime dateTime = LocalDateTime.now();
+        // 在oa_salary_import生成一条当前时间导入数据的记录,并返回导入ID
+        String importId = insertImportTable(dateTime, personalType);
+        /*
+         * 解析 Excel 文件
+         * 1、根据表头生成中文对应字段的字段列表,并入库oa_salary_info_settings表,用于记录各表的字段,展示详情时可用
+         * 2、生成个人的工资信息数据,并入库oa_salary_info表
+         */
+        try {
+            ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
+            List<List<Object>> rows = reader.read();
+            if (!rows.isEmpty()) {
+                List<Object> headList = rows.get(0);
+                List<SalaryInfoSettings> settingsList = insertSalaryInfoSettings(dateTime, importId, headList);
+                List<SalaryInfo> salaryInfos = new ArrayList<>(rows.size() - 1);
+                for (int i = 1; i < rows.size(); i++) {
+                    List<Object> row = rows.get(i);
+                    Object o = row.get(0);
+                    if (!"".equals(o) && o != null) {
+                        SalaryInfo salaryInfo = new SalaryInfo();
+                        salaryInfo.setIsvalid(1);
+                        salaryInfo.setImportDate(dateTime);
+                        salaryInfo.setImportId(importId);
+                        salaryInfo.setPersonnelType(personalType);
+                        salaryInfo.setSortOrder(i);
+                        salaryInfo.setCreateTime(dateTime);
+                        for (int j = 0; j < row.size(); j++) {
+                            SalaryInfoSettings infoSettings = settingsList.get(j);
+                            String description = infoSettings.getFieldDescription();
+                            String fieldName = infoSettings.getFieldName();
+                            StringBuilder lastFieldName = new StringBuilder("set");
+                            spliceClassSetOrGet(fieldName, lastFieldName);
+                            Method method = METHOD_MAP.get(lastFieldName.toString());
+                            try {
+                                Object obj = row.get(j);
+                                String value = String.valueOf(obj);
+                                if (obj instanceof Double && (description.contains("应发") || description.contains("扣发") || description.contains("实发"))) {
+                                    double v = Double.parseDouble(value);
+                                    method.invoke(salaryInfo, v);
+                                } else if("年度".equals(description) || "月份".equals(description)) {
+                                    Integer v = Integer.parseInt(value);
+                                    method.invoke(salaryInfo, v);
+                                } else {
+                                    method.invoke(salaryInfo, value);
+                                }
+                            } catch (Exception e) {
+                                log.error("工资导入数据出错:{}", e.getMessage());
+                            }
+                        }
+                        if (salaryInfo.getYear() == null) {
+                            salaryInfo.setYear(dateTime.getYear());
+                        }
+                        if (salaryInfo.getMonth() == null) {
+                            salaryInfo.setMonth(dateTime.getMonthValue());
+                        }
+                        salaryInfos.add(salaryInfo);
+                    }
+                }
+                // 工资数据入库
+                if (!salaryInfos.isEmpty()) {
+                    salaryInfos.forEach(it -> infoMapper.insert(it));
+                }
+                return "文件导入完成";
+            }
+        } catch (IOException e) {
+            log.error("文件解析出错:{}", e.getMessage());
+        }
+        return "导入文件出错";
+    }
+
+    @Override
+    public List<SalaryInfoDetailVO> getSalaryDetail(String id, String importId) {
+        List<SalaryInfoSettings> settingsList = settingsMapper.selectList(new LambdaQueryWrapper<SalaryInfoSettings>()
+                .eq(SalaryInfoSettings::getImportId, importId).orderByAsc(SalaryInfoSettings::getSortOrder));
+        SalaryInfo salaryInfo = infoMapper.selectOne(new LambdaQueryWrapper<SalaryInfo>()
+                .eq(SalaryInfo::getId, id).eq(SalaryInfo::getImportId, importId));
+        List<SalaryInfoDetailVO> res = new ArrayList<>(settingsList.size());
+        if (!settingsList.isEmpty()) {
+            for (SalaryInfoSettings settings : settingsList) {
+                SalaryInfoDetailVO vo = new SalaryInfoDetailVO();
+                String description = settings.getFieldDescription();
+                String fieldName = settings.getFieldName();
+                StringBuilder lastFieldName = new StringBuilder("get");
+                spliceClassSetOrGet(fieldName, lastFieldName);
+                try {
+                    Method method = salaryInfo.getClass().getMethod(lastFieldName.toString());
+                    Object invoke = method.invoke(salaryInfo);
+                    vo.setKey(description);
+                    vo.setValue(invoke);
+                } catch (Exception e) {
+                    log.error("工资查询详情数据出错:{}", e.getMessage());
+                }
+                res.add(vo);
+            }
+        }
+        return res;
+    }
+
+
+    /**
+     * 根据人员类型及当前时间生成一条工资导入数据记录,并返回主键ID
+     *
+     * @param dateTime
+     * @param personalType
+     * @return
+     */
+    private String insertImportTable(LocalDateTime dateTime, String personalType) {
+        SalaryImport salaryImport = new SalaryImport();
+        salaryImport.setImportTime(dateTime);
+        salaryImport.setYear(dateTime.getYear());
+        salaryImport.setMonth(dateTime.getMonthValue());
+        salaryImport.setPersonnelType(personalType);
+        salaryImport.setIsvalid(1);
+        importMapper.insert(salaryImport);
+        return salaryImport.getId();
+    }
+
+    /**
+     * 插入工资表每一个字段及字段描述
+     *
+     * @param dateTime
+     * @param importId
+     * @param headList
+     */
+    private List<SalaryInfoSettings> insertSalaryInfoSettings(LocalDateTime dateTime, String importId, List<Object> headList) {
+        int k = 1;
+        List<SalaryInfoSettings> setList = new ArrayList<>(headList.size());
+        for (int i = 0; i < headList.size(); i++) {
+            SalaryInfoSettings settings = new SalaryInfoSettings();
+            String head = String.valueOf(headList.get(i));
+            settings.setImportId(importId);
+            if (FIXED_FIELD_MAP.containsKey(head)) {
+                settings.setFieldName(FIXED_FIELD_MAP.get(head));
+            } else {
+                settings.setFieldName("ext_field_" + k);
+                k++;
+            }
+            settings.setFieldDescription(head);
+            settings.setSortOrder(i + 1);
+            settings.setCreateTime(dateTime);
+            settings.setIsvalid(1);
+            setList.add(settings);
+        }
+        if (!setList.isEmpty()) {
+            setList.forEach(it -> settingsMapper.insert(it));
+        }
+        return setList;
+    }
+
+    /**
+     * 拼接类的set和get方法
+     *
+     * @param fieldName
+     * @param lastFieldName
+     */
+    private void spliceClassSetOrGet(String fieldName, StringBuilder lastFieldName) {
+        if (fieldName.contains("_")) {
+            String[] field_names = fieldName.split("_");
+            for (String propertyName : field_names) {
+                lastFieldName.append(propertyName.substring(0, 1).toUpperCase()).append(propertyName.substring(1));
+            }
+        } else {
+            lastFieldName.append(fieldName.substring(0, 1).toUpperCase()).append(fieldName.substring(1));
+        }
     }
+
 }

+ 20 - 0
zjugis-module-business/zjugis-module-business-biz/src/main/java/com/zjugis/module/business/flow/salary/vo/SalaryInfoDetailVO.java

@@ -0,0 +1,20 @@
+package com.zjugis.module.business.flow.salary.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author: Fuwb
+ * @date: 2025/4/8
+ * @time: 17:06
+ * @description:
+ */
+@Data
+public class SalaryInfoDetailVO implements Serializable {
+    private static final long serialVersionUID = -4343444863125791370L;
+
+    private String key;
+
+    private Object value;
+}

+ 5 - 2
zjugis-module-business/zjugis-module-business-biz/src/main/java/com/zjugis/module/business/flow/salary/vo/SalaryInfoVO.java

@@ -1,12 +1,10 @@
 package com.zjugis.module.business.flow.salary.vo;
 
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
 
 import java.io.Serializable;
-import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 /**
@@ -25,6 +23,11 @@ public class SalaryInfoVO implements Serializable {
     @TableId(type = IdType.ASSIGN_UUID)
     private String id;
 
+    /**
+     * 导入ID
+     */
+    private String importId;
+
     /**
      * 工资记录对应的年度
      */