feat(oa): 新增工资明细批量插入接口支持字符串格式数字- 新增 BatchInsertSalaryStringDto 和 SalaryDetailStringDto 类用于处理字符串格式的工资数据

- 在 OaSalaryMasterController 中添加新的批量插入接口
- 实现 SalaryStringConverter 工具类用于字符串数据转换
- 优化了前端数据传输格式,支持驼峰命名的字符串数字
This commit is contained in:
2025-09-08 16:31:16 +08:00
parent f37e0eb53a
commit ec1e0be293
4 changed files with 575 additions and 0 deletions

View File

@@ -0,0 +1,115 @@
package com.ruoyi.oa.utils;
import com.ruoyi.oa.domain.bo.OaSalaryDetailBo;
import com.ruoyi.oa.domain.bo.OaSalaryMasterBo;
import com.ruoyi.oa.domain.dto.BatchInsertSalaryStringDto;
import com.ruoyi.oa.domain.dto.SalaryDetailStringDto;
import cn.hutool.core.collection.CollUtil;
import java.util.List;
import java.util.stream.Collectors;
/**
* 工资字符串数据转换工具类
*
* @author Joshi
* @date 2025-09-08
*/
public class SalaryStringConverter {
/**
* 将字符串格式的请求DTO转换为后端BO对象
*
* @param requestDto 字符串格式的请求DTO
* @return 后端BO对象
*/
public static OaSalaryMasterBo convertToMasterBo(BatchInsertSalaryStringDto requestDto) {
if (requestDto == null) {
return null;
}
OaSalaryMasterBo masterBo = new OaSalaryMasterBo();
masterBo.setUnitName(requestDto.getUnitName());
masterBo.setSalaryPeriod(requestDto.getSalaryPeriod());
masterBo.setGmApproval(requestDto.getGmApproval());
masterBo.setFinanceAudit(requestDto.getFinanceAudit());
masterBo.setCashier(requestDto.getCashier());
masterBo.setDeptManager(requestDto.getDeptManager());
masterBo.setOperator(requestDto.getOperator());
masterBo.setRemark(requestDto.getRemark());
// 转换明细列表
if (CollUtil.isNotEmpty(requestDto.getSalaryDetailList())) {
List<OaSalaryDetailBo> detailBoList = requestDto.getSalaryDetailList().stream()
.map(SalaryStringConverter::convertToDetailBo)
.collect(Collectors.toList());
masterBo.setSalaryDetailList(detailBoList);
}
return masterBo;
}
/**
* 将字符串格式的明细DTO转换为后端明细BO对象
*
* @param stringDto 字符串格式的明细DTO
* @return 后端明细BO对象
*/
public static OaSalaryDetailBo convertToDetailBo(SalaryDetailStringDto stringDto) {
if (stringDto == null) {
return null;
}
OaSalaryDetailBo detailBo = new OaSalaryDetailBo();
// 基本信息
detailBo.setDetailId(stringDto.getDetailId());
detailBo.setMainId(stringDto.getMainId());
detailBo.setSerialNumber(stringDto.getSerialNumberAsLong());
detailBo.setDept(stringDto.getDept());
detailBo.setName(stringDto.getName());
detailBo.setRemark(stringDto.getRemark());
// 工资项目 - 使用转换方法
detailBo.setBasicSalary(stringDto.getBasicSalaryAsDecimal());
detailBo.setPostSalary(stringDto.getPostSalaryAsDecimal());
detailBo.setMealAllowance(stringDto.getMealAllowanceAsDecimal());
detailBo.setHousingAllowance(stringDto.getHousingAllowanceAsDecimal());
detailBo.setBusAllowance(stringDto.getBusAllowanceAsDecimal());
detailBo.setBusinessDaysOther(stringDto.getBusinessDaysOtherAsLong());
detailBo.setBusinessAllowance(stringDto.getBusinessAllowanceAsDecimal());
detailBo.setSocialSecurityAllowance(stringDto.getSocialSecurityAllowanceAsDecimal());
// 加班相关
detailBo.setOvertimeHours(stringDto.getOvertimeHoursAsDecimal());
detailBo.setOvertimeRate(stringDto.getOvertimeRateAsDecimal());
detailBo.setOvertimeTotal(stringDto.getOvertimeTotalAsDecimal());
detailBo.setBusinessDays(stringDto.getBusinessDaysAsLong());
// 扣款项目
detailBo.setLeaveDeduction(stringDto.getLeaveDeductionAsDecimal());
detailBo.setOtherDeduction(stringDto.getOtherDeductionAsDecimal());
detailBo.setGrossSalary(stringDto.getGrossSalaryAsDecimal());
// 个人缴费
detailBo.setPersonalPension(stringDto.getPersonalPensionAsDecimal());
detailBo.setPersonalMedical(stringDto.getPersonalMedicalAsDecimal());
detailBo.setPersonalUnemployment(stringDto.getPersonalUnemploymentAsDecimal());
detailBo.setPersonalBigMedical(stringDto.getPersonalBigMedicalAsDecimal());
detailBo.setPersonalHousingFund(stringDto.getPersonalHousingFundAsDecimal());
detailBo.setPersonalTax(stringDto.getPersonalTaxAsDecimal());
detailBo.setNetSalary(stringDto.getNetSalaryAsDecimal());
// 企业缴费
detailBo.setEnterprisePension(stringDto.getEnterprisePensionAsDecimal());
detailBo.setEnterpriseMedical(stringDto.getEnterpriseMedicalAsDecimal());
detailBo.setEnterpriseInjury(stringDto.getEnterpriseInjuryAsDecimal());
detailBo.setEnterpriseUnemployment(stringDto.getEnterpriseUnemploymentAsDecimal());
detailBo.setEnterpriseMaternity(stringDto.getEnterpriseMaternityAsDecimal());
detailBo.setEnterpriseHousingFund(stringDto.getEnterpriseHousingFundAsDecimal());
detailBo.setEnterpriseBigMedical(stringDto.getEnterpriseBigMedicalAsDecimal());
detailBo.setUnitTotalExpense(stringDto.getUnitTotalExpenseAsDecimal());
return detailBo;
}
}