diff --git a/resource/WEB-INF/lib/hrmelog.jar b/resource/WEB-INF/lib/hrmelog.jar index b8a8aec57..7589cfeae 100644 Binary files a/resource/WEB-INF/lib/hrmelog.jar and b/resource/WEB-INF/lib/hrmelog.jar differ diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index 5ff1c824a..26bc01a7f 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -205,7 +205,9 @@ public class SalaryBillBO { } } - 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)) + .replace("${salaryYear}", new SimpleDateFormat("yyyy年").format(salaryMonth)); } // /** 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/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/param/SalaryAcctEmployeeQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java index 3a60d3b75..8f0ce99fa 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctEmployeeQueryParam.java @@ -70,4 +70,11 @@ public class SalaryAcctEmployeeQueryParam extends BaseQueryParam { private String workcode; private Set salaryMonths; + + + private Collection salaryAcctRecordIds; + private Collection salarySobIds; + private Collection employeeIds; + + } diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java index 03417aa4e..1799960f4 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java @@ -130,29 +130,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; //锁定的项目 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/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..01592b9a0 100644 --- a/src/com/engine/salary/enums/salarybill/SalaryTemplateVarEnum.java +++ b/src/com/engine/salary/enums/salarybill/SalaryTemplateVarEnum.java @@ -1,14 +1,10 @@ package com.engine.salary.enums.salarybill; -/** - * @Description: 工资单插入变量 - * @Author: wangxiangzhong - * @Date: 2021/12/9 13:13 - */ public enum SalaryTemplateVarEnum { - CORPORATENAME("CORPORATENAME", "公司名称", 92936), - SALARYYEARMONTH("SALARYYEARMONTH", "薪资所属月", 87614); + SALARYYEARMONTH("SALARYYEARMONTH", "薪资所属月", 87614), + SALARY_YEAR("SALARY_YEAR", "薪资所属年", 92936), + CORPORATENAME("CORPORATENAME", "公司名称", 92936); private String value; 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/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index debbd9658..b18d8d0c2 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -637,6 +637,24 @@ ) + + AND t.salary_acct_record_id IN + + #{salaryAcctRecordId} + + + + AND t.employee_id IN + + #{employeeId} + + + + AND t.salary_sob_id IN + + #{salarySobId} + + @@ -711,6 +729,24 @@ ) + + AND t.salary_acct_record_id IN + + #{salaryAcctRecordId} + + + + AND t.employee_id IN + + #{employeeId} + + + + AND t.salary_sob_id IN + + #{salarySobId} + + @@ -786,6 +822,24 @@ ) + + AND t.salary_acct_record_id IN + + #{salaryAcctRecordId} + + + + AND t.employee_id IN + + #{employeeId} + + + + AND t.salary_sob_id IN + + #{salarySobId} + + select record.id as salaryAcctRecordId, diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index 8886cfa6f..5ee5edea8 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -1192,9 +1192,9 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary // List accountDetailPOList = data.getList().stream().filter(po -> pageEmployeeIds.contains(po.getEmployeeId())).collect(Collectors.toList()); List> records = new ArrayList<>(); List accountDetailPOList = data.getList(); - Map> employeeListMap = accountDetailPOList.stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); - Map> lastEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); - Map> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId)); + Map> employeeListMap = accountDetailPOList.stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId, LinkedHashMap::new, Collectors.toList())); + Map> lastEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId, LinkedHashMap::new, Collectors.toList())); + Map> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId, LinkedHashMap::new, Collectors.toList())); List empIds = accountDetailPOList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); Map employeeByIdMap = getSalaryEmployeeService(user).getEmployeeByIdsAll(empIds).stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, o -> o)); 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/SalaryAcctRecordService.java b/src/com/engine/salary/service/SalaryAcctRecordService.java index 51eb656e1..8e203bf30 100644 --- a/src/com/engine/salary/service/SalaryAcctRecordService.java +++ b/src/com/engine/salary/service/SalaryAcctRecordService.java @@ -11,6 +11,7 @@ import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.util.page.PageInfo; import java.util.Collection; +import java.util.Date; import java.util.List; import java.util.Set; @@ -216,6 +217,8 @@ public interface SalaryAcctRecordService { List listSome(SalaryAcctRecordPO po); + void updateDate(Long id, Date updateTime); + /** * 根据薪资核算记录id查询关联的个税扣缴义务人 * diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 3a66662f5..f0608efe2 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -618,7 +618,10 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct @Override public List listBySalaryStatisticsReportParam(SalaryStatisticsReportDataQueryParam param) { - SalaryAcctEmployeePO lambdaQueryChainWrapper = SalaryAcctEmployeePO.builder().build(); + //排序配置 + OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); + SalaryAcctEmployeeQueryParam lambdaQueryChainWrapper = new SalaryAcctEmployeeQueryParam(); + lambdaQueryChainWrapper.setOrderRule(orderRule); // 个税扣缴义务人 // Collection taxAgentList = getTaxAgentService(user).listAllTaxAgents((long) user.getUID()); @@ -687,12 +690,11 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct if (CollectionUtils.isNotEmpty(salaryAcctRecordIds)) { //分片查询 List> partition = Lists.partition(salaryAcctRecordIds, 500); - List empList = new ArrayList<>(); - partition.forEach(part -> { - lambdaQueryChainWrapper.setSalaryAcctRecordIds(salaryAcctRecordIds); - empList.addAll(getSalaryAcctEmployeeMapper().listSome(lambdaQueryChainWrapper)); - }); - list = empList; + for (List part : partition) { + lambdaQueryChainWrapper.setSalaryAcctRecordIds(part); + List pos = getSalaryAcctEmployeeMapper().list(lambdaQueryChainWrapper); + list.addAll(pos); + } } if (CollectionUtils.isEmpty(list)) { 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); // //报表 diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index deb771892..38a199032 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -975,4 +975,9 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe } return getSalaryAcctRecordMapper().listAcctTaxAgent(salaryAcctRecordIds); } + + @Override + public void updateDate(Long id, Date updateTime) { + getSalaryAcctRecordMapper().updateDate(id,updateTime); + } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 7e6dbb7af..ac295b593 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -934,6 +934,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // Thread.sleep(10); getSalaryAcctProgressService(user).finish(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), true); + //更新薪资核算记录最后操作日期 + getSalaryAcctRecordService(user).updateDate(salaryAcctRecordPO.getId(),new Date()); + stopWatch.stop(); log.info(stopWatch.prettyPrint()); @@ -1325,7 +1328,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(); 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/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index ea4bb6464..b959455b8 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.*; @@ -451,7 +452,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); diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 33e914a26..f5467b768 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); } /** @@ -844,8 +864,6 @@ public class SalarySendServiceImpl extends Service implements SalarySendService * @return */ private String getBillTitle(String theme, Date salaryMonth, Long currentEmployeeId) { - String yearI18n = SalaryI18nUtil.getI18nLabel(100325, "年"); - String monthI18n = SalaryI18nUtil.getI18nLabel(100326, "月"); String companyName = ""; if (currentEmployeeId != null) { ResourceComInfo resourceComInfo = null; @@ -858,9 +876,9 @@ 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)) + .replace("${salaryYear}", new SimpleDateFormat("yyyy年").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()).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) { @@ -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"; + /** * 首次查看后多少分钟不能查看工资单 */