From 57fdc79e7b161111bb7359189c2f137408b7df93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 18 Oct 2024 15:58:43 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E8=BD=AC=E6=8D=A2=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/AttendQuoteDataServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index 750f11ec2..48648cc57 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -382,7 +382,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa List employeeIds = SalaryEntityUtil.properties(salaryEmployees, DataCollectionEmployee::getEmployeeId, Collectors.toList()); List salaryArchiveDataDTOS = getSalaryArchiveService(user).getSalaryArchiveTaxAgentData(salarySobCycleDTO.getSalaryCycle(), employeeIds, taxAgentId); // 转换成薪资核算人员po - Date salaryDate = SalaryDateUtil.dateStrToLocalTime(salaryYearMonth + "-01"); + Date salaryDate = SalaryDateUtil.dateStrToLocalDate(salaryYearMonth + "-01"); List salaryAcctEmployeePOS = SalaryAcctEmployeeBO.convert2Employee(salaryEmployees, SalaryAcctRecordPO.builder().salarySobId(salarySobId).salaryMonth(salaryDate).build(), salaryArchiveDataDTOS, (long) user.getUID()); //过滤掉不属于当前账套扣缴义务人的人员 From 988b82751e729765d0a8bdbf9ee70ca08a43a421 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 18 Oct 2024 16:21:14 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E8=80=83=E5=8B=A4=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../attend/service/impl/RemoteAttend4SalaryServiceImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java b/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java index 95e1618ac..eeddfd41d 100644 --- a/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java +++ b/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java @@ -131,11 +131,10 @@ public class RemoteAttend4SalaryServiceImpl extends Service implements RemoteAtt @Override public List> getDatas(Attend4Salary attend4Salary) { - ValidUtil.doValidator(attend4Salary); - log.info("salaryAttend开始获取的考勤数据,参数{}", attend4Salary); List> list = new ArrayList<>(); try { + ValidUtil.doValidator(attend4Salary); Map paramsMap = new HashMap(); paramsMap.put("pageIndex", 1); paramsMap.put("pageSize", 500); @@ -152,6 +151,8 @@ public class RemoteAttend4SalaryServiceImpl extends Service implements RemoteAtt Map temp = new HashMap(); temp.put("data", JSONObject.toJSONString(paramsMap)); temp.put("reportType", "month"); + + log.info("salaryAttend开始获取的考勤数据,参数{}", temp); list = (List>) commandExecutor.execute(new GetKQReportCmd(temp, user)).get("datas"); if (isLog) { log.info("salaryAttend获取的考勤数据,{}", JSONUtils.toJSONString(list)); From af34b8a5b5a368037db1280685cec701c952b31d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 18 Oct 2024 16:49:17 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E5=8D=95=E5=85=83=E6=A0=BC=E9=94=81?= =?UTF-8?q?=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryAcctResultServiceImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 2e8258f96..854e81663 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -1016,10 +1016,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (param.getLockStatus() == LockStatusEnum.LOCK) { lockItemIds.add(salaryItemId); } else { - lockItemIds.remove(salaryItemId); + lockItemIds.removeIf(salaryItemId::equals); } - salaryAcctEmployeePO.setLockItems(lockItemIds); + salaryAcctEmployeePO.setLockItems(Lists.newArrayList(new HashSet(lockItemIds))); getSalaryAcctEmployeeService(user).lock(salaryAcctEmployeePO); } @@ -1046,7 +1046,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } else { lockItemIds.removeAll(salaryItemIds); } - salaryAcctEmployeePO.setLockItems(lockItemIds); + salaryAcctEmployeePO.setLockItems(Lists.newArrayList(new HashSet(lockItemIds))); getSalaryAcctEmployeeService(user).lock(salaryAcctEmployeePO); }); From 2bd336fc1654bfdce2c179d5345bed55592294f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 18 Oct 2024 16:54:34 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E5=8D=95=E5=85=83=E6=A0=BC=E9=94=81?= =?UTF-8?q?=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryAcctResultServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 854e81663..f34e0b844 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -1078,7 +1078,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (CollectionUtils.isEmpty(salaryAcctEmployeeIds)) { return Collections.emptyList(); } - List> partition = Lists.partition((List) salaryAcctEmployeeIds, 200); + List> partition = Lists.partition(salaryAcctEmployeeIds, 200); List result = new ArrayList<>(); partition.forEach(empIds -> { SalaryAcctResultPO build = SalaryAcctResultPO.builder().salaryAcctEmpIds(empIds).salaryItemIds(salaryItemIds).build(); From 8c5c3d5949d2c45b95cae8c35e1721177ed45535 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 22 Oct 2024 15:00:19 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E6=9F=A5?= =?UTF-8?q?=E7=9C=8B=E9=99=90=E5=88=B6=E7=B1=BB=E5=9E=8B=E7=BA=A6=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/SalaryMySalaryBillListDTO.java | 34 +--- .../dto/salaryBillViewingLimitSetting.java | 5 + .../enums/salarybill/MonthTypeEnum.java | 82 ++++++++ .../salarybill/SalarySendStatusEnum.java | 5 - ...SalaryTemplateTextContentPositionEnum.java | 5 - .../salarybill/SalaryTemplateVarEnum.java | 5 - .../SalaryTemplateWatermarkTypeEnum.java | 5 - .../salarybill/SalaryTemplateWhetherEnum.java | 5 - .../impl/SalaryBillBaseSetServiceImpl.java | 12 +- .../service/impl/SalarySendServiceImpl.java | 180 +++++++----------- .../sys/constant/SalarySysConstant.java | 5 + 11 files changed, 172 insertions(+), 171 deletions(-) create mode 100644 src/com/engine/salary/enums/salarybill/MonthTypeEnum.java diff --git a/src/com/engine/salary/entity/salaryBill/dto/SalaryMySalaryBillListDTO.java b/src/com/engine/salary/entity/salaryBill/dto/SalaryMySalaryBillListDTO.java index af239ee5f..0cce85393 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/SalaryMySalaryBillListDTO.java +++ b/src/com/engine/salary/entity/salaryBill/dto/SalaryMySalaryBillListDTO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salaryBill.dto; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -16,47 +17,18 @@ import java.util.Date; @Builder @NoArgsConstructor @AllArgsConstructor -////"我的工资单") -//@TableOperates(value = { -// @Operates(index = 0, text = "查看", labelId = 90821) -//}, tableType = WeaTableTypeEnum.NONE) public class SalaryMySalaryBillListDTO { -// 主键id") -// @WeaFormat( -// label = "id", -// tableColumn = @TableColumn(hide = "true") -// ) -// @JsonSerialize(using = ToStringSerializer.class) private Long id; -// 薪资所属月") -// @WeaFormat( -// label = "薪资所属月", -// labelId = 87614, -// tableColumn = @TableColumn(width = "20%") -// ) -// @JsonFormat(pattern = "yyyy-MM") + @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8") private Date salaryYearMonth; -// 核算次数") private String acctTimes; -// 个税扣缴义务人") -// @WeaFormat( -// label = "个税扣缴义务人", -// labelId = 86184, -// tableColumn = @TableColumn(width = "40%") -// ) private String taxAgent; -// 发放时间") -// @WeaFormat( -// label = "发放时间", -// labelId = 93634, -// tableColumn = @TableColumn(width = "40%") -// ) -// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date sendTime; diff --git a/src/com/engine/salary/entity/salaryBill/dto/salaryBillViewingLimitSetting.java b/src/com/engine/salary/entity/salaryBill/dto/salaryBillViewingLimitSetting.java index 8bd3a1ceb..fbe9752bf 100644 --- a/src/com/engine/salary/entity/salaryBill/dto/salaryBillViewingLimitSetting.java +++ b/src/com/engine/salary/entity/salaryBill/dto/salaryBillViewingLimitSetting.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salaryBill.dto; +import com.engine.salary.enums.salarybill.MonthTypeEnum; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -19,6 +20,10 @@ import lombok.NoArgsConstructor; @AllArgsConstructor public class salaryBillViewingLimitSetting { + /** + * 月份限制类型 + */ + private MonthTypeEnum monthType; /** * 查看几月内的工资单 diff --git a/src/com/engine/salary/enums/salarybill/MonthTypeEnum.java b/src/com/engine/salary/enums/salarybill/MonthTypeEnum.java new file mode 100644 index 000000000..ea6f8b34a --- /dev/null +++ b/src/com/engine/salary/enums/salarybill/MonthTypeEnum.java @@ -0,0 +1,82 @@ +package com.engine.salary.enums.salarybill; + +import com.engine.salary.enums.BaseEnum; + +import java.util.Arrays; +import java.util.Objects; + +/** + * 工资单限制月份类型 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum MonthTypeEnum implements BaseEnum { + + SALARY_DATE(0, "薪资所属月", 93286), + SEND_DATE(1, "发放日期", 93212); + + private int value; + + private String defaultLabel; + + private int labelId; + + MonthTypeEnum(int value, String defaultLabel, int labelId) { + this.value = value; + this.defaultLabel = defaultLabel; + this.labelId = labelId; + } + + @Override + public Integer getValue() { + return value; + } + + @Override + public String getDefaultLabel() { + return defaultLabel; + } + + @Override + public Integer getLabelId() { + return labelId; + } + + public static String getDefaultLabelByValue(Integer value) { + if (value == null) { + return ""; + } + MonthTypeEnum[] enumAry = MonthTypeEnum.values(); + for(int i = 0; i < Arrays.asList(enumAry).size(); i++){ + if (Integer.valueOf(enumAry[i].getValue()).equals(value)) { + return enumAry[i].getDefaultLabel(); + } + } + return ""; + } + + public static String getNameByValue(Integer value) { + if (value == null) { + return ""; + } + MonthTypeEnum[] enumAry = MonthTypeEnum.values(); + for(int i = 0; i < Arrays.asList(enumAry).size(); i++){ + if (Integer.valueOf(enumAry[i].getValue()).equals(value)) { + return enumAry[i].name(); + } + } + return ""; + } + + public static MonthTypeEnum parseByValue(int value) { + for (MonthTypeEnum e : MonthTypeEnum.values()) { + if (Objects.equals(e.getValue(), value)) { + return e; + } + } + return SALARY_DATE; + } +} diff --git a/src/com/engine/salary/enums/salarybill/SalarySendStatusEnum.java b/src/com/engine/salary/enums/salarybill/SalarySendStatusEnum.java index aa6ef65f7..85624f462 100644 --- a/src/com/engine/salary/enums/salarybill/SalarySendStatusEnum.java +++ b/src/com/engine/salary/enums/salarybill/SalarySendStatusEnum.java @@ -4,11 +4,6 @@ import com.engine.salary.enums.BaseEnum; import java.util.Arrays; -/** - * @Description: 工资单开关项 - * @Author: wangxiangzhong - * @Date: 2021/12/9 15:56 - */ public enum SalarySendStatusEnum implements BaseEnum { UNSEND(0, "未发放", 93286), diff --git a/src/com/engine/salary/enums/salarybill/SalaryTemplateTextContentPositionEnum.java b/src/com/engine/salary/enums/salarybill/SalaryTemplateTextContentPositionEnum.java index d7e46be19..0a827320b 100644 --- a/src/com/engine/salary/enums/salarybill/SalaryTemplateTextContentPositionEnum.java +++ b/src/com/engine/salary/enums/salarybill/SalaryTemplateTextContentPositionEnum.java @@ -1,10 +1,5 @@ package com.engine.salary.enums.salarybill; -/** - * @Description: 文本内容位置 - * @Author: wangxiangzhong - * @Date: 2021/12/9 13:22 - */ public enum SalaryTemplateTextContentPositionEnum { BEFORE(1, "薪资项目前", 92937), AFTER(2, "薪资项目后", 92938); diff --git a/src/com/engine/salary/enums/salarybill/SalaryTemplateVarEnum.java b/src/com/engine/salary/enums/salarybill/SalaryTemplateVarEnum.java index dfdc7ec8d..685904b29 100644 --- a/src/com/engine/salary/enums/salarybill/SalaryTemplateVarEnum.java +++ b/src/com/engine/salary/enums/salarybill/SalaryTemplateVarEnum.java @@ -1,10 +1,5 @@ package com.engine.salary.enums.salarybill; -/** - * @Description: 工资单插入变量 - * @Author: wangxiangzhong - * @Date: 2021/12/9 13:13 - */ public enum SalaryTemplateVarEnum { CORPORATENAME("CORPORATENAME", "公司名称", 92936), diff --git a/src/com/engine/salary/enums/salarybill/SalaryTemplateWatermarkTypeEnum.java b/src/com/engine/salary/enums/salarybill/SalaryTemplateWatermarkTypeEnum.java index 00a3834f1..ff054639d 100644 --- a/src/com/engine/salary/enums/salarybill/SalaryTemplateWatermarkTypeEnum.java +++ b/src/com/engine/salary/enums/salarybill/SalaryTemplateWatermarkTypeEnum.java @@ -2,11 +2,6 @@ package com.engine.salary.enums.salarybill; import com.engine.salary.enums.BaseEnum; -/** - * @Description: 水印类型 - * @Author: wangxiangzhong - * @Date: 2021/12/9 13:13 - */ public enum SalaryTemplateWatermarkTypeEnum implements BaseEnum { DEFAULT("DEFAULT", "系统默认水印", 220057), diff --git a/src/com/engine/salary/enums/salarybill/SalaryTemplateWhetherEnum.java b/src/com/engine/salary/enums/salarybill/SalaryTemplateWhetherEnum.java index e407d8262..87dd585fa 100644 --- a/src/com/engine/salary/enums/salarybill/SalaryTemplateWhetherEnum.java +++ b/src/com/engine/salary/enums/salarybill/SalaryTemplateWhetherEnum.java @@ -2,11 +2,6 @@ package com.engine.salary.enums.salarybill; import java.util.Arrays; -/** - * @Description: 工资单开关项 - * @Author: wangxiangzhong - * @Date: 2021/12/9 15:56 - */ public enum SalaryTemplateWhetherEnum { TRUE(1, "是", 84967), FALSE(0, "否", 84968); diff --git a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java index 392ddb58c..0a8220c6f 100644 --- a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java @@ -11,6 +11,7 @@ import com.engine.salary.entity.salaryBill.dto.salaryBillViewingLimitSetting; import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO; import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; import com.engine.salary.entity.salaryBill.po.SalaryBillWatermarkPO; +import com.engine.salary.enums.salarybill.MonthTypeEnum; import com.engine.salary.enums.salarybill.SalaryTemplateWatermarkTypeEnum; import com.engine.salary.service.SalaryBillBaseSetService; import com.engine.salary.service.SalaryBillWatermarkService; @@ -31,6 +32,7 @@ import weaver.hrm.User; import java.util.*; +import static com.engine.salary.enums.salarybill.MonthTypeEnum.SALARY_DATE; import static com.engine.salary.sys.constant.SalarySysConstant.*; /** @@ -113,6 +115,7 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB salaryBillViewingLimitSetting salaryBillViewingLimitDTO = saveParam.getSalaryBillViewingLimitSetting(); if (salaryBillViewingLimitDTO != null) { getSalarySysConfService(user).saveSettingByType(Util.null2String(salaryBillViewingLimitDTO.getLimitMonth()), SALARY_BILL_VIEWING_LIMIT_MONTH, "工资单时效性设置", "billSend"); + getSalarySysConfService(user).saveSettingByType(salaryBillViewingLimitDTO.getMonthType()==null?"0":salaryBillViewingLimitDTO.getMonthType().getValue().toString(), SALARY_BILL_LIMIT_MONTH_TYPE, "工资单查询限制月份类型", "billSend"); getSalarySysConfService(user).saveSettingByType(salaryBillViewingLimitDTO.getBurningAfterReadingMin() == null ? " " : salaryBillViewingLimitDTO.getBurningAfterReadingMin().toString(), SALARY_BILL_BURNING_AFTER_READING_MIN, "工资单查看后销毁设置", "billSend"); } return StringUtils.EMPTY; @@ -175,7 +178,14 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB if (limitMonthSetting != null && NumberUtils.isNumber(limitMonthSetting.getConfValue())) { limitMonth = Integer.parseInt(limitMonthSetting.getConfValue()); } - return salaryBillViewingLimitSetting.builder().limitMonth(limitMonth).build(); + + SalarySysConfPO limitMonthType = getSalarySysConfService(user).getOneByCode(SALARY_BILL_LIMIT_MONTH_TYPE); + MonthTypeEnum monthType = SALARY_DATE; + if (limitMonthType != null && NumberUtils.isNumber(limitMonthType.getConfValue())) { + monthType = MonthTypeEnum.parseByValue(Integer.parseInt(limitMonthType.getConfValue())); + } + + return salaryBillViewingLimitSetting.builder().monthType(monthType).limitMonth(limitMonth).build(); } @Override diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 30019d8fc..071d9359c 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -44,10 +44,7 @@ import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum; -import com.engine.salary.enums.salarybill.BillConfimStatusEnum; -import com.engine.salary.enums.salarybill.BillReadStatusEnum; -import com.engine.salary.enums.salarybill.SalarySendStatusEnum; -import com.engine.salary.enums.salarybill.SalaryTemplateReplenishRuleEnum; +import com.engine.salary.enums.salarybill.*; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -492,10 +489,18 @@ public class SalarySendServiceImpl extends Service implements SalarySendService } //工资单查看时效性 - Date limitMonth = getLimitMonth(); - if (limitMonth != null && limitMonth.after(salarySendInfo.getSalaryMonth())) { - salaryBillViewingLimitSetting salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "仅能查看" + salaryBillViewingLimitSetting.getLimitMonth() + "月内的工资单")); + salaryBillViewingLimitSetting salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); + Date limitMonth = getLimitMonth(salaryBillViewingLimitSetting); + if (limitMonth != null) { + if (salaryBillViewingLimitSetting.getMonthType() == MonthTypeEnum.SALARY_DATE) { + if (limitMonth.after(salarySendInfo.getSalaryMonth())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "仅能查看" + salaryBillViewingLimitSetting.getLimitMonth() + "月内的工资单")); + } + } else { + if (limitMonth.after(salarySendInfo.getSendTime())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "仅能查看" + salaryBillViewingLimitSetting.getLimitMonth() + "月内的工资单")); + } + } } // 获取、记录首次查看时间 @@ -691,12 +696,16 @@ public class SalarySendServiceImpl extends Service implements SalarySendService } - - private Date getLimitMonth() { - //工资单时效性 - salaryBillViewingLimitSetting salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); + //工资单时效性 + private Date getLimitMonth(salaryBillViewingLimitSetting salaryBillViewingLimitSetting) { if (salaryBillViewingLimitSetting.getLimitMonth() != 0) { - LocalDate localDate = LocalDate.now().plusMonths(-salaryBillViewingLimitSetting.getLimitMonth()).withDayOfMonth(1); + MonthTypeEnum monthType = salaryBillViewingLimitSetting.getMonthType(); + LocalDate localDate; + if (monthType == MonthTypeEnum.SALARY_DATE) { + localDate = LocalDate.now().plusMonths(-salaryBillViewingLimitSetting.getLimitMonth()+1).withDayOfMonth(1); + } else { + localDate = LocalDate.now().plusMonths(-salaryBillViewingLimitSetting.getLimitMonth()); + } return SalaryDateUtil.localDateToDate(localDate); } return null; @@ -796,11 +805,25 @@ public class SalarySendServiceImpl extends Service implements SalarySendService @Override public PageInfo mySalaryBillListPage(SalaryBillQueryParam queryParam) { - //工资单时效 - queryParam.setStartSalaryMonth(getLimitMonth()); - List list = salarySendInfoMapper.mySalaryBillList(queryParam); - list.forEach(dto -> dto.setEmployeeId(Long.valueOf(user.getUID()))); + + //工资单时效 + salaryBillViewingLimitSetting salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); + Date limitMonth = getLimitMonth(salaryBillViewingLimitSetting); + list = list.stream() + .filter(dto -> { + if (limitMonth != null) { + if (salaryBillViewingLimitSetting.getMonthType() == MonthTypeEnum.SALARY_DATE) { + return !limitMonth.after(dto.getSalaryYearMonth()); + } else { + return !limitMonth.after(dto.getSendTime()); + } + } + return true; + }) + .peek(dto -> dto.setEmployeeId((long) user.getUID())) + .collect(Collectors.toList()); + PageInfo pageInfo = new PageInfo<>(list, SalaryMySalaryBillListDTO.class); pageInfo.setTotal(list.size()); pageInfo.setPageNum(queryParam.getCurrent()); @@ -816,11 +839,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService Set otherSalaryAcctRecordIds = null; if (queryParam.getMergeCountTax() != null && queryParam.getMergeCountTax()) { //查询关联的核酸id,这里认为一次发放只对应一条核算记录 - Long salaryAccRecordId = - salarySendInfoMapper.listSalaryAccRecordIds(queryParam).stream().findFirst().orElse(null); + Long salaryAccRecordId = salarySendInfoMapper.listSalaryAccRecordIds(queryParam).stream().findFirst().orElse(null); // 查询合并计税的其他薪资核算记录 - List otherSalaryAcctRecordPOS = - getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAccRecordId); + List otherSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAccRecordId); if (CollectionUtils.isEmpty(otherSalaryAcctRecordPOS)) { return new PageInfo<>(); } @@ -831,8 +852,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService } } List list = getSalarySendInfoMapper().detailList(queryParam, otherSalaryAcctRecordIds); - return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), - list, SalarySendDetailListDTO.class); + return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, SalarySendDetailListDTO.class); } /** @@ -858,9 +878,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService } companyName = subCompanyComInfo.getSubCompanyname(resourceComInfo.getSubCompanyID(currentEmployeeId + "")); } - return theme - .replace("${companyName}", companyName) - .replace("${salaryMonth}", new SimpleDateFormat("yyyy年MM月").format(salaryMonth)); + return theme.replace("${companyName}", companyName).replace("${salaryMonth}", new SimpleDateFormat("yyyy年MM月").format(salaryMonth)); } /** @@ -872,30 +890,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService */ private SalaryTemplatePO buildSalaryTemplateContent(String salaryTemplateContent) { Map map = JsonUtil.parseMap(salaryTemplateContent, Object.class); - SalaryTemplatePO build = SalaryTemplatePO.builder() - .id(Long.valueOf(map.getOrDefault("id", "0").toString())) - .ackFeedbackStatus(Integer.valueOf(map.getOrDefault("ackFeedbackStatus", "0").toString())) - .autoAckDays(Integer.valueOf(map.getOrDefault("autoAckDays", "0").toString())) - .feedbackUrl(map.getOrDefault("feedbackUrl", "").toString()) - .mobileFeedbackUrl(map.getOrDefault("mobileFeedbackUrl", "").toString()) - .name(map.getOrDefault("name", "").toString()) - .salarySobId(Long.valueOf(map.getOrDefault("salarySobId", "0").toString())) - .useType(Integer.valueOf(map.getOrDefault("useType", "0").toString())) - .description(map.getOrDefault("description", "").toString()) - .emailStatus(Integer.valueOf(map.getOrDefault("emailStatus", "0").toString())) - .sendEmailId(Long.valueOf(map.getOrDefault("sendEmailId", "0").toString())) - .msgStatus(Integer.valueOf(map.getOrDefault("msgStatus", "0").toString())) - .salaryWatermark(map.getOrDefault("salaryWatermark", StringUtils.EMPTY).toString()) - .theme(map.getOrDefault("theme", "").toString()) - .background(map.getOrDefault("background", "").toString()) - .textContent(map.getOrDefault("textContent", "").toString()) - .textContentPosition(Integer.valueOf(map.getOrDefault("textContentPosition", "0").toString())) - .salaryItemNullStatus(Integer.valueOf(map.getOrDefault("salaryItemNullStatus", "0").toString())) - .salaryItemZeroStatus(Integer.valueOf(map.getOrDefault("salaryItemZeroStatus", "0").toString())) - .salaryItemSetting(map.getOrDefault("salaryItemSetting", "").toString()) - .replenishName(map.getOrDefault("replenishName", "").toString()) - .replenishSalaryItemSetting(map.getOrDefault("replenishSalaryItemSetting", "").toString()) - .build(); + SalaryTemplatePO build = SalaryTemplatePO.builder().id(Long.valueOf(map.getOrDefault("id", "0").toString())).ackFeedbackStatus(Integer.valueOf(map.getOrDefault("ackFeedbackStatus", "0").toString())).autoAckDays(Integer.valueOf(map.getOrDefault("autoAckDays", "0").toString())).feedbackUrl(map.getOrDefault("feedbackUrl", "").toString()).mobileFeedbackUrl(map.getOrDefault("mobileFeedbackUrl", "").toString()).name(map.getOrDefault("name", "").toString()).salarySobId(Long.valueOf(map.getOrDefault("salarySobId", "0").toString())).useType(Integer.valueOf(map.getOrDefault("useType", "0").toString())).description(map.getOrDefault("description", "").toString()).emailStatus(Integer.valueOf(map.getOrDefault("emailStatus", "0").toString())).sendEmailId(Long.valueOf(map.getOrDefault("sendEmailId", "0").toString())).msgStatus(Integer.valueOf(map.getOrDefault("msgStatus", "0").toString())).salaryWatermark(map.getOrDefault("salaryWatermark", StringUtils.EMPTY).toString()).theme(map.getOrDefault("theme", "").toString()).background(map.getOrDefault("background", "").toString()).textContent(map.getOrDefault("textContent", "").toString()).textContentPosition(Integer.valueOf(map.getOrDefault("textContentPosition", "0").toString())).salaryItemNullStatus(Integer.valueOf(map.getOrDefault("salaryItemNullStatus", "0").toString())).salaryItemZeroStatus(Integer.valueOf(map.getOrDefault("salaryItemZeroStatus", "0").toString())).salaryItemSetting(map.getOrDefault("salaryItemSetting", "").toString()).replenishName(map.getOrDefault("replenishName", "").toString()).replenishSalaryItemSetting(map.getOrDefault("replenishSalaryItemSetting", "").toString()).build(); Object feedbackStatus = map.get("feedbackStatus"); if (feedbackStatus == null || StringUtils.isBlank(feedbackStatus.toString())) { build.setFeedbackStatus(build.getAckFeedbackStatus()); @@ -919,27 +914,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService } if (CollectionUtils.isNotEmpty(employeeInformation.getItems())) { //获取员工信息的字段名和中文描述的map关系 - SalaryFormulaEmployeeDTO salaryFormulaEmployeeDTO = SalaryFormulaEmployeeDTO.builder().employeeId(simpleEmployee.getEmployeeId()) - .birthday(simpleEmployee.getBirthday()) - .departmentId(simpleEmployee.getDepartmentId()) - .departmentName(simpleEmployee.getDepartmentName()) - .subcompanyName(simpleEmployee.getSubcompanyName()) - .email(StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail()) - .jobcall(simpleEmployee.getJobcall()) - .jobcallId(simpleEmployee.getJobcallId()) - .companystartdate(simpleEmployee.getCompanystartdate()) - .sex("0".equals(simpleEmployee.getSex()) ? "男" : "女") - .mobile(StringUtils.isEmpty(simpleEmployee.getMobile()) ? "" : simpleEmployee.getMobile()) - .jobtitleName(simpleEmployee.getJobtitleName()) - .jobtitleId(simpleEmployee.getJobtitleId()) - .status(simpleEmployee.getStatus() == null ? "" : simpleEmployee.getStatus()) - .statusName(simpleEmployee.getStatus() == null ? "" : UserStatusEnum.parseByValue(new Integer(Util.null2s(simpleEmployee.getStatus(),"1"))).getDefaultLabel()) - .telephone(StringUtils.isEmpty(simpleEmployee.getTelephone()) ? "" : simpleEmployee.getTelephone()) - .username(StringUtils.isEmpty(simpleEmployee.getUsername()) ? "" : simpleEmployee.getUsername()) - .workcode(StringUtils.isEmpty(simpleEmployee.getWorkcode()) ? "" : simpleEmployee.getWorkcode()) - .idNo(Util.null2String(simpleEmployee.getIdNo())) - .taxAgentName(taxAgentName) - .build(); + SalaryFormulaEmployeeDTO salaryFormulaEmployeeDTO = SalaryFormulaEmployeeDTO.builder().employeeId(simpleEmployee.getEmployeeId()).birthday(simpleEmployee.getBirthday()).departmentId(simpleEmployee.getDepartmentId()).departmentName(simpleEmployee.getDepartmentName()).subcompanyName(simpleEmployee.getSubcompanyName()).email(StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail()).jobcall(simpleEmployee.getJobcall()).jobcallId(simpleEmployee.getJobcallId()).companystartdate(simpleEmployee.getCompanystartdate()).sex("0".equals(simpleEmployee.getSex()) ? "男" : "女").mobile(StringUtils.isEmpty(simpleEmployee.getMobile()) ? "" : simpleEmployee.getMobile()).jobtitleName(simpleEmployee.getJobtitleName()).jobtitleId(simpleEmployee.getJobtitleId()).status(simpleEmployee.getStatus() == null ? "" : simpleEmployee.getStatus()).statusName(simpleEmployee.getStatus() == null ? "" : UserStatusEnum.parseByValue(new Integer(Util.null2s(simpleEmployee.getStatus(), "1"))).getDefaultLabel()).telephone(StringUtils.isEmpty(simpleEmployee.getTelephone()) ? "" : simpleEmployee.getTelephone()).username(StringUtils.isEmpty(simpleEmployee.getUsername()) ? "" : simpleEmployee.getUsername()).workcode(StringUtils.isEmpty(simpleEmployee.getWorkcode()) ? "" : simpleEmployee.getWorkcode()).idNo(Util.null2String(simpleEmployee.getIdNo())).taxAgentName(taxAgentName).build(); List items = employeeInformation.getItems(); Set> entries = employeeField.entrySet(); for (SalaryTemplateSalaryItemListDTO e : items) { @@ -1008,8 +983,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService map.put("jobNum", Objects.equals(employeeType, 1) ? extEmp.getWorkcode() : e.getJobNum()); map.put("email", Objects.equals(employeeType, 1) ? extEmp.getEmail() : e.getEmail()); salaryItems.forEach(i -> { - Optional optional = salaryAccountingResults.stream() - .filter(r -> r.getEmployeeId().equals(e.getEmployeeId()) && r.getSalaryItemId().equals(Long.valueOf(i.getSalaryItemId()))).findFirst(); + Optional optional = salaryAccountingResults.stream().filter(r -> r.getEmployeeId().equals(e.getEmployeeId()) && r.getSalaryItemId().equals(Long.valueOf(i.getSalaryItemId()))).findFirst(); map.put(i.getSalaryItemId() + SalaryItemConstant.DYNAMIC_SUFFIX, optional.isPresent() ? optional.get().getResultValue() : ""); }); @@ -1026,8 +1000,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService * @return */ @Override - public List> buildDetailList(List list, - List salaryAcctEmployees, List salaryAcctResultValues) { + public List> buildDetailList(List list, List salaryAcctEmployees, List salaryAcctResultValues) { List> listMaps = new ArrayList<>(); if (CollectionUtils.isEmpty(list)) { return listMaps; @@ -1124,19 +1097,15 @@ public class SalarySendServiceImpl extends Service implements SalarySendService } // 正常模板 if (!isReplenish && StringUtils.isNotEmpty(salaryTemplate.getSalaryItemSetting())) { - List salaryTemplateShowSetData = JsonUtil.parseList(salaryTemplate.getSalaryItemSetting(), - SalaryTemplateSalaryItemSetListDTO.class); + List salaryTemplateShowSetData = JsonUtil.parseList(salaryTemplate.getSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class); salaryTemplateShowSetData.stream().filter(f -> !f.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID)).forEach(e -> { salaryItems.addAll(e.getItems()); }); } // 补发模板 if (isReplenish && StringUtils.isNotEmpty(salaryTemplate.getReplenishSalaryItemSetting())) { - List salaryTemplateShowSetData = JsonUtil.parseList(salaryTemplate.getReplenishSalaryItemSetting(), - SalaryTemplateSalaryItemSetListDTO.class); - salaryTemplateShowSetData.stream().filter(f -> !f.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID)).forEach(e -> - salaryItems.addAll(e.getItems()) - ); + List salaryTemplateShowSetData = JsonUtil.parseList(salaryTemplate.getReplenishSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class); + salaryTemplateShowSetData.stream().filter(f -> !f.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID)).forEach(e -> salaryItems.addAll(e.getItems())); } return salaryItems; } @@ -1152,8 +1121,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService if (param.getSalarySendRangeIds() != null) { //如果传了范围id,则使用范围id发放 - ids = getSalarySendRangeService(user) - .getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.GRANT); + ids = getSalarySendRangeService(user).getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.GRANT); if (ids.isEmpty()) {// 由于查出来是空的,会导致全部发放,在此进行拦截 throw new SalaryRunTimeException("工资发放范围内没有匹配员工"); } @@ -1404,8 +1372,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService // 获取可撤回的工资单 if (param.getSalarySendRangeIds() != null) { //如果传了范围id,则使用范围id撤回 - ids = getSalarySendRangeService(user) - .getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.WITHDRAW); + ids = getSalarySendRangeService(user).getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.WITHDRAW); if (ids.isEmpty()) {// 由于查出来是空的,会导致全部发放,在此进行拦截 throw new SalaryRunTimeException("工资撤回范围内没有匹配的员工"); } @@ -1578,7 +1545,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService header.add(SalaryI18nUtil.getI18nLabel(86317, "工号")); Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, dto -> dto.getSalaryItemId() + SalaryConstant.DYNAMIC_SUFFIX); List sortedSalaryItems = new ArrayList<>(); - for(String column : queryParam.getColumns()) { + for (String column : queryParam.getColumns()) { if (column.contains(SalaryConstant.DYNAMIC_SUFFIX)) { SalaryTemplateSalaryItemListDTO salaryTemplateSalaryItemListDTO = salaryItemMap.get(column); if (salaryTemplateSalaryItemListDTO != null) { @@ -1679,8 +1646,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService SalaryAcctResultQueryParam queryParam = SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salarySendPO.getSalaryAccountingId()).build(); // 查询薪资核算人员 - List salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user) - .listByResultQueryParam(queryParam); + List salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listByResultQueryParam(queryParam); if (org.apache.commons.collections4.CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { return Collections.emptyMap(); @@ -1712,13 +1678,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService Map map = new HashMap<>(); Map> acctResultMap = SalaryEntityUtil.group2Map(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryItemId); salaryItemPOS.stream().filter(item -> SalaryDataTypeEnum.NUMBER.getValue().equals(item.getDataType())).forEach(item -> { - BigDecimal sum = Optional.ofNullable(acctResultMap.get(item.getId())) - .orElse(new ArrayList<>()) - .stream() - .map(SalaryAcctResultPO::getResultValue) - .filter(NumberUtils::isCreatable) - .map(BigDecimal::new) - .reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal sum = Optional.ofNullable(acctResultMap.get(item.getId())).orElse(new ArrayList<>()).stream().map(SalaryAcctResultPO::getResultValue).filter(NumberUtils::isCreatable).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add); map.put(item.getId() + SalaryItemConstant.DYNAMIC_SUFFIX, SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap(), salaryItemIdKeySalarySobItemPOMap)); }); return map; @@ -1812,8 +1772,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService @Override public List listUnConfirmedSendInfo(List salarySobIds) { - if (CollectionUtils.isEmpty(salarySobIds)) - return Collections.emptyList(); + if (CollectionUtils.isEmpty(salarySobIds)) return Collections.emptyList(); return getSalarySendInfoMapper().listUnConfirmedSendInfo(salarySobIds); } @@ -1914,18 +1873,14 @@ public class SalarySendServiceImpl extends Service implements SalarySendService List itemSetListDTOS = listDTOS.stream().filter(e -> !SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID.equals(e.getGroupId())).collect(Collectors.toList()); List> finalSalaryAcctResultS = salaryAcctResultS; itemSetListDTOS.stream().forEach(item -> { - item.getItems() - .forEach(e -> { - if (CollectionUtils.isEmpty(finalSalaryAcctResultS)) { - e.setSalaryItemValue(""); - } else { - Object o = finalSalaryAcctResultS.stream() - .filter(f -> f.get("salaryItemId") != null && String.valueOf(f.get("salaryItemId")).equals(e.getSalaryItemId())).findFirst() - .orElse(new HashMap<>()) - .get("resultValue"); - e.setSalaryItemValue(o == null ? "" : (String) o); - } - }); + item.getItems().forEach(e -> { + if (CollectionUtils.isEmpty(finalSalaryAcctResultS)) { + e.setSalaryItemValue(""); + } else { + Object o = finalSalaryAcctResultS.stream().filter(f -> f.get("salaryItemId") != null && String.valueOf(f.get("salaryItemId")).equals(e.getSalaryItemId())).findFirst().orElse(new HashMap<>()).get("resultValue"); + e.setSalaryItemValue(o == null ? "" : (String) o); + } + }); }); @@ -1946,10 +1901,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService if (Objects.equals(1, salaryTemplate.getSalaryItemZeroStatus())) { for (SalaryTemplateSalaryItemSetListDTO itemSetListDTO : itemSetListDTOS) { List items = itemSetListDTO.getItems(); - List collect = items.stream() - .filter(item -> SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue()) == null - || BigDecimal.ZERO.compareTo(SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue())) != 0) - .collect(Collectors.toList()); + List collect = items.stream().filter(item -> SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue()) == null || BigDecimal.ZERO.compareTo(SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue())) != 0).collect(Collectors.toList()); itemSetListDTO.setItems(collect); } } diff --git a/src/com/engine/salary/sys/constant/SalarySysConstant.java b/src/com/engine/salary/sys/constant/SalarySysConstant.java index 6f35124c3..b8f1962bd 100644 --- a/src/com/engine/salary/sys/constant/SalarySysConstant.java +++ b/src/com/engine/salary/sys/constant/SalarySysConstant.java @@ -111,6 +111,11 @@ public class SalarySysConstant { */ public static final String SALARY_BILL_VIEWING_LIMIT_MONTH = "SALARY_BILL_VIEWING_LIMIT_MONTH"; + /** + * 工资单查询限制月份类型 + */ + public static final String SALARY_BILL_LIMIT_MONTH_TYPE = "SALARY_BILL_LIMIT_MONTH_TYPE"; + /** * 首次查看后多少分钟不能查看工资单 */ From ce8356f9b2336cf36097b2a22213249a6aee3461 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 22 Oct 2024 16:12:30 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E5=88=86=E9=83=A8id=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java | 1 + src/com/engine/salary/service/impl/SalarySendServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java index 1e8fd59cc..e0c306341 100644 --- a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java +++ b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java @@ -41,6 +41,7 @@ public class SalaryFormulaEmployeeDTO { @SalaryFormulaVar(defaultLabel = "分部", labelId = 82465, dataType = "subcompanyBrowser") private String subcompanyName; + @SalaryFormulaVar(defaultLabel = "分部ID", labelId = 82465, dataType = "subcompanyBrowser") private Long subcompanyId; diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 071d9359c..7320144c8 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -914,7 +914,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService } if (CollectionUtils.isNotEmpty(employeeInformation.getItems())) { //获取员工信息的字段名和中文描述的map关系 - SalaryFormulaEmployeeDTO salaryFormulaEmployeeDTO = SalaryFormulaEmployeeDTO.builder().employeeId(simpleEmployee.getEmployeeId()).birthday(simpleEmployee.getBirthday()).departmentId(simpleEmployee.getDepartmentId()).departmentName(simpleEmployee.getDepartmentName()).subcompanyName(simpleEmployee.getSubcompanyName()).email(StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail()).jobcall(simpleEmployee.getJobcall()).jobcallId(simpleEmployee.getJobcallId()).companystartdate(simpleEmployee.getCompanystartdate()).sex("0".equals(simpleEmployee.getSex()) ? "男" : "女").mobile(StringUtils.isEmpty(simpleEmployee.getMobile()) ? "" : simpleEmployee.getMobile()).jobtitleName(simpleEmployee.getJobtitleName()).jobtitleId(simpleEmployee.getJobtitleId()).status(simpleEmployee.getStatus() == null ? "" : simpleEmployee.getStatus()).statusName(simpleEmployee.getStatus() == null ? "" : UserStatusEnum.parseByValue(new Integer(Util.null2s(simpleEmployee.getStatus(), "1"))).getDefaultLabel()).telephone(StringUtils.isEmpty(simpleEmployee.getTelephone()) ? "" : simpleEmployee.getTelephone()).username(StringUtils.isEmpty(simpleEmployee.getUsername()) ? "" : simpleEmployee.getUsername()).workcode(StringUtils.isEmpty(simpleEmployee.getWorkcode()) ? "" : simpleEmployee.getWorkcode()).idNo(Util.null2String(simpleEmployee.getIdNo())).taxAgentName(taxAgentName).build(); + SalaryFormulaEmployeeDTO salaryFormulaEmployeeDTO = SalaryFormulaEmployeeDTO.builder().employeeId(simpleEmployee.getEmployeeId()).birthday(simpleEmployee.getBirthday()).departmentId(simpleEmployee.getDepartmentId()).departmentName(simpleEmployee.getDepartmentName()).subcompanyName(simpleEmployee.getSubcompanyName()).subcompanyId(simpleEmployee.getSubcompanyid()).email(StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail()).jobcall(simpleEmployee.getJobcall()).jobcallId(simpleEmployee.getJobcallId()).companystartdate(simpleEmployee.getCompanystartdate()).sex("0".equals(simpleEmployee.getSex()) ? "男" : "女").mobile(StringUtils.isEmpty(simpleEmployee.getMobile()) ? "" : simpleEmployee.getMobile()).jobtitleName(simpleEmployee.getJobtitleName()).jobtitleId(simpleEmployee.getJobtitleId()).status(simpleEmployee.getStatus() == null ? "" : simpleEmployee.getStatus()).statusName(simpleEmployee.getStatus() == null ? "" : UserStatusEnum.parseByValue(new Integer(Util.null2s(simpleEmployee.getStatus(), "1"))).getDefaultLabel()).telephone(StringUtils.isEmpty(simpleEmployee.getTelephone()) ? "" : simpleEmployee.getTelephone()).username(StringUtils.isEmpty(simpleEmployee.getUsername()) ? "" : simpleEmployee.getUsername()).workcode(StringUtils.isEmpty(simpleEmployee.getWorkcode()) ? "" : simpleEmployee.getWorkcode()).idNo(Util.null2String(simpleEmployee.getIdNo())).taxAgentName(taxAgentName).build(); List items = employeeInformation.getItems(); Set> entries = employeeField.entrySet(); for (SalaryTemplateSalaryItemListDTO e : items) { From b5e6059298596d4151df3bbf09aea51ed7280658 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 22 Oct 2024 16:38:27 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E7=BB=84=E7=BB=87=E5=AD=97=E6=AE=B5=E5=88=86=E5=BC=80=E6=A0=87?= =?UTF-8?q?=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryacct/bo/SalaryAcctResultBO.java | 2 ++ .../entity/salaryacct/po/SalaryAcctEmployeePO.java | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 8912df16e..1ad40c4f5 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -296,6 +296,8 @@ public class SalaryAcctResultBO { map.put("departmentId", e.getDepartmentId()); } else if ("subcompanyName".equals(salarySobEmpField.getFieldCode())) { map.put("subcompanyName", e.getSubcompanyName()); + }else if ("subcompanyId".equals(salarySobEmpField.getFieldCode())) { + map.put("subcompanyId", e.getSubcompanyId()); } else if ("jobcall".equals(salarySobEmpField.getFieldCode())) { map.put("jobcall", e.getJobcall()); } else if ("jobcallId".equals(salarySobEmpField.getFieldCode())) { diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java index 3645db6fc..bd5a19575 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java @@ -119,29 +119,38 @@ public class SalaryAcctEmployeePO { * 分部 */ @I18n + @SalaryFormulaVar(defaultLabel = "分部", labelId = 86321, dataType = "string") private String subcompanyName; + @SalaryFormulaVar(defaultLabel = "分部ID", labelId = 86321, dataType = "string") private Long subcompanyId; /** * 部门 */ @I18n + @SalaryFormulaVar(defaultLabel = "部门", labelId = 86321, dataType = "string") private String departmentName; + @SalaryFormulaVar(defaultLabel = "部门ID", labelId = 86321, dataType = "string") private Long departmentId; /** * 岗位 */ @I18n + @SalaryFormulaVar(defaultLabel = "岗位", labelId = 86321, dataType = "string") private String jobtitleName; + @SalaryFormulaVar(defaultLabel = "岗位ID", labelId = 86321, dataType = "string") private Long jobtitleId; /** * 职称 */ @I18n + @SalaryFormulaVar(defaultLabel = "职称", labelId = 86321, dataType = "string") private String jobcall; + @SalaryFormulaVar(defaultLabel = "职称ID", labelId = 86321, dataType = "string") private Long jobcallId; /** * 状态 */ + @SalaryFormulaVar(defaultLabel = "状态", labelId = 86321, dataType = "string") private String status; //锁定的项目 From e3c6b08e6f1950e9b1105ee585253d36ff975b36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 23 Oct 2024 17:41:28 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E5=A4=84=E7=90=86=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wrapper/SalaryStatisticsReportWrapper.java | 14 +++++--------- .../service/impl/SalaryEmployeeServiceImpl.java | 3 ++- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 22fb6261f..c516bb229 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -34,7 +34,6 @@ import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -437,14 +436,11 @@ public class SalaryStatisticsReportWrapper extends Service { // 获取列头 List weaTableColumns = (List) result.get("columns"); PageInfo> page = (PageInfo>) result.get("pageInfo"); - // 组装合计 - Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID()); + Map countResultMap = (Map) result.get("countResult"); List> list = page.getList(); - if (CollectionUtils.isNotEmpty(list) && MapUtils.isNotEmpty(countResultMap)) { - list.add(countResultMap); - } // 获取数据 - List> records = list.stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList()); + List> records = list.stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue()))).collect(Collectors.toList()); + records.add(countResultMap); List rows = new ArrayList<>(); rows.add(weaTableColumns); @@ -466,7 +462,7 @@ public class SalaryStatisticsReportWrapper extends Service { List numberItemIds = salaryItemPOList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).map(salaryItemPO -> salaryItemPO.getId().toString()).collect(Collectors.toList()); Map salaryStatisticsItemMap = SalaryEntityUtil.convert2Map(salaryStatisticsItemList, statisticsItemPO -> statisticsItemPO.getId().toString()); - for (Map map : records) { + for (Map map : records) { List row = Lists.newArrayListWithExpectedSize(records.size()); head.forEach(k -> { // 获取是数值还是文本 @@ -476,7 +472,7 @@ public class SalaryStatisticsReportWrapper extends Service { SalaryStatisticsItemPO salaryStatisticsItemPO = salaryStatisticsItemMap.get(salaryItemId); if (salaryStatisticsItemPO != null) { Optional textItemOptional = Arrays.stream(salaryStatisticsItemPO.getItemValue().split(",")).filter(itemId -> !numberItemIds.contains(itemId)).findFirst(); - row.add((!textItemOptional.isPresent() && NumberUtils.isCreatable(map.getOrDefault(k, StringUtils.EMPTY).replace(",", ""))) ? new BigDecimal(map.get(k).replace(",", "")) : map.getOrDefault(k, StringUtils.EMPTY)); + row.add((!textItemOptional.isPresent() && NumberUtils.isCreatable(Utils.null2String(map.get(k)))) ? new BigDecimal(Utils.null2String(map.get(k))) : map.getOrDefault(k, StringUtils.EMPTY)); } else { row.add(map.getOrDefault(k, StringUtils.EMPTY)); } diff --git a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index d47671229..de9d908ac 100644 --- a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java @@ -38,6 +38,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import weaver.conn.RecordSet; +import weaver.general.Util; import weaver.hrm.User; import java.util.*; @@ -452,7 +453,7 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee String field = setting.getField(); String value = rs.getString(field); setting.setValue(value); - extendData.put(field, value); + extendData.put(field, Util.formatMultiLang(value)); }); String id = rs.getString(primaryKey); From 28fa294c6fe23fcf9767ee368d8ccd9729e6a5f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 24 Oct 2024 10:19:35 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E5=BC=82=E6=AD=A5=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/lib/hrmelog.jar | Bin 137340 -> 138117 bytes .../impl/SalaryAcctExcelServiceImpl.java | 11 ++++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/resource/WEB-INF/lib/hrmelog.jar b/resource/WEB-INF/lib/hrmelog.jar index b8a8aec57a748af54222f6450a2b70a2d3ff48ba..7589cfeae2af120009328d9fce0d18905612e06a 100644 GIT binary patch delta 10515 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 delta 9959 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 Zwz`gka=jWLknZ)b?e$7tTx&s~{{u38KFt6C diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index 4acdc3e02..ea1eb3cff 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -68,6 +68,7 @@ import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.BeanUtils; import org.springframework.util.StopWatch; import weaver.file.ImageFileManager; import weaver.hrm.User; @@ -1401,11 +1402,18 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc deleteResults = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds); getSalaryAcctResultService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds); //删除报表 - getSalaryAcctReportService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds); +// getSalaryAcctReportService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds); } if (CollectionUtils.isNotEmpty(salaryAcctResults)) { // 处理导入薪资项的回算值 handleOriginResultValue(deleteResults, salaryAcctResults); + // 备份一份加密前的值 + List list4log = new ArrayList<>(); + salaryAcctResults.forEach(source -> { + SalaryAcctResultPO target = new SalaryAcctResultPO(); + BeanUtils.copyProperties(source, target); + list4log.add(target); + }); getSalaryAcctResultService(user).batchSave(salaryAcctResults); // 记录操作日志 @@ -1418,6 +1426,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc loggerContext.setOperateType(OperateTypeEnum.EXCEL_IMPORT.getValue()); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "导入薪资核算数据")); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "导入薪资核算数据 ") + targetName); + loggerContext.setOldValueList(list4log); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); // //报表