diff --git a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java index b2a9eb0e0..fc5dcc5cd 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java @@ -16,6 +16,7 @@ import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveItemDataDTO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveTaxAgentDataDTO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobAdjustRulePO; import com.engine.salary.enums.salaryformula.SalaryFormulaReferenceEnum; import com.engine.salary.enums.salaryformula.SalarySQLReferenceEnum; @@ -136,6 +137,39 @@ public class CalculateFormulaVarBO { return resultMap; } + /** + * 处理核算日期相关信息 + */ + private List handleSalarySobCycleDTO(SalaryAcctCalculateBO salaryAcctCalculateBO) { + + SalarySobCycleDTO salarySobCycleDTO = salaryAcctCalculateBO.getSalarySobCycleDTO(); + + salarySobCycleDTO.setSalaryDate(SalaryDateUtil.toDate(salarySobCycleDTO.getSalaryMonth(), 1)); + salarySobCycleDTO.setTaxDate(SalaryDateUtil.toDate(salarySobCycleDTO.getTaxCycle(), 1)); + salarySobCycleDTO.setSocialSecurityDate(SalaryDateUtil.toDate(salarySobCycleDTO.getSocialSecurityCycle(), 1)); + LocalDateRange salaryCycle = salarySobCycleDTO.getSalaryCycle(); + salarySobCycleDTO.setSalaryCycleFromDate(salaryCycle.getFromDate()); + salarySobCycleDTO.setSalaryCycleEndDate(salaryCycle.getEndDate()); + LocalDateRange attendCycle = salarySobCycleDTO.getAttendCycle(); + salarySobCycleDTO.setAttendCycleFromDate(attendCycle.getFromDate()); + salarySobCycleDTO.setAttendCycleEndDate(attendCycle.getEndDate()); + + Map map = JsonUtil.parseMap(salarySobCycleDTO, String.class); + + List formulaVarValues = Lists.newArrayList(); + Field[] declaredFields = SalarySobCycleDTO.class.getDeclaredFields(); + for (Field declaredField : declaredFields) { + if (declaredField.isAnnotationPresent(SalaryFormulaVar.class)) { + String fieldName = declaredField.getName(); + String fieldId = SalarySQLReferenceEnum.SALARY_CYCLE.getValue() + + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + + fieldName; + formulaVarValues.add(new FormulaVarValue().setFieldId(fieldId).setFieldValue(map.getOrDefault(fieldName, StringUtils.EMPTY))); + } + } + return formulaVarValues; + } + /** * 处理薪资核算结果 @@ -164,7 +198,7 @@ public class CalculateFormulaVarBO { } /** - * 处理薪资档案(会涉及调薪计薪规则) + * 处理薪资档案(会涉及调薪计薪规则)+处理核算日期 * * @param salaryAcctCalculateBO 薪资核算参数 * @param resultMap 返回结果集 @@ -179,6 +213,7 @@ public class CalculateFormulaVarBO { List formulaVarValues = resultMap.computeIfAbsent(key, k -> Lists.newArrayList()); // 将薪资档案的值转换成公式中的变量,填充到返回结果集中 formulaVarValues.addAll(handleSalaryArchiveItemVal(salaryAcctCalculateBO, salaryArchiveTaxAgentDataDTO.getSalaryItemValues(), salarySobAdjustRulePOMap)); + formulaVarValues.addAll(handleSalarySobCycleDTO(salaryAcctCalculateBO)); } } } diff --git a/src/com/engine/salary/entity/salarysob/dto/SalarySobCycleDTO.java b/src/com/engine/salary/entity/salarysob/dto/SalarySobCycleDTO.java index 65a482e20..5a575588f 100644 --- a/src/com/engine/salary/entity/salarysob/dto/SalarySobCycleDTO.java +++ b/src/com/engine/salary/entity/salarysob/dto/SalarySobCycleDTO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salarysob.dto; +import com.engine.salary.annotation.SalaryFormulaVar; import com.engine.salary.common.LocalDateRange; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; @@ -9,6 +10,7 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.time.YearMonth; +import java.util.Date; /** * 薪资账套的周期 @@ -24,24 +26,46 @@ import java.time.YearMonth; @AllArgsConstructor public class SalarySobCycleDTO { - //薪资账套id + //薪资账套id private Long salarySobId; - //薪资所属月 + //薪资所属月 @JsonSerialize(using = ToStringSerializer.class) private YearMonth salaryMonth; - //税款所属期 + + //税款所属期 @JsonSerialize(using = ToStringSerializer.class) private YearMonth taxCycle; - //社保福利所属期 + + //社保福利所属期 @JsonSerialize(using = ToStringSerializer.class) private YearMonth socialSecurityCycle; - //薪资周期") + //薪资周期") private LocalDateRange salaryCycle; - //考勤周期") + + //考勤周期") private LocalDateRange attendCycle; + + + /** + * 公式变量 + */ + @SalaryFormulaVar(defaultLabel = "薪资所属月", labelId = 86321, dataType = "string") + private Date salaryDate; + @SalaryFormulaVar(defaultLabel = "税款所属期", labelId = 86321, dataType = "string") + private Date taxDate; + @SalaryFormulaVar(defaultLabel = "社保福利所属期", labelId = 86321, dataType = "string") + private Date socialSecurityDate; + @SalaryFormulaVar(defaultLabel = "薪资周期起始日期", labelId = 86321, dataType = "string") + private Date salaryCycleFromDate; + @SalaryFormulaVar(defaultLabel = "薪资周期结束日期", labelId = 86321, dataType = "string") + private Date salaryCycleEndDate; + @SalaryFormulaVar(defaultLabel = "考勤周期起始日期", labelId = 86321, dataType = "string") + private Date attendCycleFromDate; + @SalaryFormulaVar(defaultLabel = "考勤周期结束日期", labelId = 86321, dataType = "string") + private Date attendCycleEndDate; } diff --git a/src/com/engine/salary/enums/salaryformula/SalarySQLReferenceEnum.java b/src/com/engine/salary/enums/salaryformula/SalarySQLReferenceEnum.java index 16ba69a64..f08a583d2 100644 --- a/src/com/engine/salary/enums/salaryformula/SalarySQLReferenceEnum.java +++ b/src/com/engine/salary/enums/salaryformula/SalarySQLReferenceEnum.java @@ -16,7 +16,8 @@ import java.util.Objects; public enum SalarySQLReferenceEnum implements BaseEnum { EMPLOYEE_INFO("employeeInfo", "员工基本信息", 85366), - SALARY_ACCT_EMPLOYEE("salaryAcctEmployee", "核算基本信息", 85368); + SALARY_ACCT_EMPLOYEE("salaryAcctEmployee", "核算基本信息", 85368), + SALARY_CYCLE("SalaryCycle", "核算日期", 85368); private String value; private String defaultLabel; diff --git a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java index a8486dfd4..c069b30b9 100644 --- a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java @@ -14,6 +14,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaTaxRateDTO; import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.taxrate.TaxRateBase; import com.engine.salary.enums.salaryformula.ReferenceTypeEnum; @@ -111,6 +112,9 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic case SALARY_ACCT_EMPLOYEE: vars = convert2FormulaVar(SalaryAcctEmployeePO.class, referenceEnum.getValue() + ""); break; + case SALARY_CYCLE: + vars = convert2FormulaVar(SalarySobCycleDTO.class, referenceEnum.getValue() + ""); + break; default: break; } diff --git a/src/com/engine/salary/util/SalaryDateUtil.java b/src/com/engine/salary/util/SalaryDateUtil.java index 024780761..3a5f362e2 100644 --- a/src/com/engine/salary/util/SalaryDateUtil.java +++ b/src/com/engine/salary/util/SalaryDateUtil.java @@ -115,6 +115,19 @@ public class SalaryDateUtil { } } + public static String getFormatDate(Date localDate) { + if (localDate == null) { + return StringUtils.EMPTY; + } + try { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(DATE_FORMATTER_PATTERN); + return simpleDateFormat.format(localDate); + } catch (Exception e) { + log.warn("格式化日期错误", e); + return StringUtils.EMPTY; + } + } + public static String getFormatLocalDate(LocalDateTime localDateTime) { if (localDateTime == null) { return StringUtils.EMPTY;