Merge branch 'release/2.16.1.2410.01' into feature/次账号

# Conflicts:
#	src/com/engine/salary/service/impl/SalarySendServiceImpl.java
This commit is contained in:
钱涛 2024-10-24 10:34:56 +08:00
commit 94bb1ede32
21 changed files with 209 additions and 168 deletions

Binary file not shown.

View File

@ -1,5 +1,6 @@
package com.engine.salary.entity.salaryBill.dto; package com.engine.salary.entity.salaryBill.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -16,47 +17,18 @@ import java.util.Date;
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
////"我的工资单")
//@TableOperates(value = {
// @Operates(index = 0, text = "查看", labelId = 90821)
//}, tableType = WeaTableTypeEnum.NONE)
public class SalaryMySalaryBillListDTO { public class SalaryMySalaryBillListDTO {
// 主键id")
// @WeaFormat(
// label = "id",
// tableColumn = @TableColumn(hide = "true")
// )
// @JsonSerialize(using = ToStringSerializer.class)
private Long id; private Long id;
// 薪资所属月") @JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
// @WeaFormat(
// label = "薪资所属月",
// labelId = 87614,
// tableColumn = @TableColumn(width = "20%")
// )
// @JsonFormat(pattern = "yyyy-MM")
private Date salaryYearMonth; private Date salaryYearMonth;
// 核算次数")
private String acctTimes; private String acctTimes;
// 个税扣缴义务人")
// @WeaFormat(
// label = "个税扣缴义务人",
// labelId = 86184,
// tableColumn = @TableColumn(width = "40%")
// )
private String taxAgent; private String taxAgent;
// 发放时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
// @WeaFormat(
// label = "发放时间",
// labelId = 93634,
// tableColumn = @TableColumn(width = "40%")
// )
// @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date sendTime; private Date sendTime;

View File

@ -1,5 +1,6 @@
package com.engine.salary.entity.salaryBill.dto; package com.engine.salary.entity.salaryBill.dto;
import com.engine.salary.enums.salarybill.MonthTypeEnum;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
@ -19,6 +20,10 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor @AllArgsConstructor
public class salaryBillViewingLimitSetting { public class salaryBillViewingLimitSetting {
/**
* 月份限制类型
*/
private MonthTypeEnum monthType;
/** /**
* 查看几月内的工资单 * 查看几月内的工资单

View File

@ -297,6 +297,8 @@ public class SalaryAcctResultBO {
map.put("departmentId", e.getDepartmentId()); map.put("departmentId", e.getDepartmentId());
} else if ("subcompanyName".equals(salarySobEmpField.getFieldCode())) { } else if ("subcompanyName".equals(salarySobEmpField.getFieldCode())) {
map.put("subcompanyName", e.getSubcompanyName()); map.put("subcompanyName", e.getSubcompanyName());
}else if ("subcompanyId".equals(salarySobEmpField.getFieldCode())) {
map.put("subcompanyId", e.getSubcompanyId());
} else if ("jobcall".equals(salarySobEmpField.getFieldCode())) { } else if ("jobcall".equals(salarySobEmpField.getFieldCode())) {
map.put("jobcall", e.getJobcall()); map.put("jobcall", e.getJobcall());
} else if ("jobcallId".equals(salarySobEmpField.getFieldCode())) { } else if ("jobcallId".equals(salarySobEmpField.getFieldCode())) {

View File

@ -119,29 +119,38 @@ public class SalaryAcctEmployeePO {
* 分部 * 分部
*/ */
@I18n @I18n
@SalaryFormulaVar(defaultLabel = "分部", labelId = 86321, dataType = "string")
private String subcompanyName; private String subcompanyName;
@SalaryFormulaVar(defaultLabel = "分部ID", labelId = 86321, dataType = "string")
private Long subcompanyId; private Long subcompanyId;
/** /**
* 部门 * 部门
*/ */
@I18n @I18n
@SalaryFormulaVar(defaultLabel = "部门", labelId = 86321, dataType = "string")
private String departmentName; private String departmentName;
@SalaryFormulaVar(defaultLabel = "部门ID", labelId = 86321, dataType = "string")
private Long departmentId; private Long departmentId;
/** /**
* 岗位 * 岗位
*/ */
@I18n @I18n
@SalaryFormulaVar(defaultLabel = "岗位", labelId = 86321, dataType = "string")
private String jobtitleName; private String jobtitleName;
@SalaryFormulaVar(defaultLabel = "岗位ID", labelId = 86321, dataType = "string")
private Long jobtitleId; private Long jobtitleId;
/** /**
* 职称 * 职称
*/ */
@I18n @I18n
@SalaryFormulaVar(defaultLabel = "职称", labelId = 86321, dataType = "string")
private String jobcall; private String jobcall;
@SalaryFormulaVar(defaultLabel = "职称ID", labelId = 86321, dataType = "string")
private Long jobcallId; private Long jobcallId;
/** /**
* 状态 * 状态
*/ */
@SalaryFormulaVar(defaultLabel = "状态", labelId = 86321, dataType = "string")
private String status; private String status;
//锁定的项目 //锁定的项目

View File

@ -41,6 +41,7 @@ public class SalaryFormulaEmployeeDTO {
@SalaryFormulaVar(defaultLabel = "分部", labelId = 82465, dataType = "subcompanyBrowser") @SalaryFormulaVar(defaultLabel = "分部", labelId = 82465, dataType = "subcompanyBrowser")
private String subcompanyName; private String subcompanyName;
@SalaryFormulaVar(defaultLabel = "分部ID", labelId = 82465, dataType = "subcompanyBrowser")
private Long subcompanyId; private Long subcompanyId;

View File

@ -0,0 +1,82 @@
package com.engine.salary.enums.salarybill;
import com.engine.salary.enums.BaseEnum;
import java.util.Arrays;
import java.util.Objects;
/**
* 工资单限制月份类型
* <p>Copyright: Copyright (c) 2024</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
public enum MonthTypeEnum implements BaseEnum<Integer> {
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;
}
}

View File

@ -4,11 +4,6 @@ import com.engine.salary.enums.BaseEnum;
import java.util.Arrays; import java.util.Arrays;
/**
* @Description: 工资单开关项
* @Author: wangxiangzhong
* @Date: 2021/12/9 15:56
*/
public enum SalarySendStatusEnum implements BaseEnum<Integer> { public enum SalarySendStatusEnum implements BaseEnum<Integer> {
UNSEND(0, "未发放", 93286), UNSEND(0, "未发放", 93286),

View File

@ -1,10 +1,5 @@
package com.engine.salary.enums.salarybill; package com.engine.salary.enums.salarybill;
/**
* @Description: 文本内容位置
* @Author: wangxiangzhong
* @Date: 2021/12/9 13:22
*/
public enum SalaryTemplateTextContentPositionEnum { public enum SalaryTemplateTextContentPositionEnum {
BEFORE(1, "薪资项目前", 92937), BEFORE(1, "薪资项目前", 92937),
AFTER(2, "薪资项目后", 92938); AFTER(2, "薪资项目后", 92938);

View File

@ -1,10 +1,5 @@
package com.engine.salary.enums.salarybill; package com.engine.salary.enums.salarybill;
/**
* @Description: 工资单插入变量
* @Author: wangxiangzhong
* @Date: 2021/12/9 13:13
*/
public enum SalaryTemplateVarEnum { public enum SalaryTemplateVarEnum {
CORPORATENAME("CORPORATENAME", "公司名称", 92936), CORPORATENAME("CORPORATENAME", "公司名称", 92936),

View File

@ -2,11 +2,6 @@ package com.engine.salary.enums.salarybill;
import com.engine.salary.enums.BaseEnum; import com.engine.salary.enums.BaseEnum;
/**
* @Description: 水印类型
* @Author: wangxiangzhong
* @Date: 2021/12/9 13:13
*/
public enum SalaryTemplateWatermarkTypeEnum implements BaseEnum<String> { public enum SalaryTemplateWatermarkTypeEnum implements BaseEnum<String> {
DEFAULT("DEFAULT", "系统默认水印", 220057), DEFAULT("DEFAULT", "系统默认水印", 220057),

View File

@ -2,11 +2,6 @@ package com.engine.salary.enums.salarybill;
import java.util.Arrays; import java.util.Arrays;
/**
* @Description: 工资单开关项
* @Author: wangxiangzhong
* @Date: 2021/12/9 15:56
*/
public enum SalaryTemplateWhetherEnum { public enum SalaryTemplateWhetherEnum {
TRUE(1, "", 84967), TRUE(1, "", 84967),
FALSE(0, "", 84968); FALSE(0, "", 84968);

View File

@ -131,11 +131,10 @@ public class RemoteAttend4SalaryServiceImpl extends Service implements RemoteAtt
@Override @Override
public List<Map<String, String>> getDatas(Attend4Salary attend4Salary) { public List<Map<String, String>> getDatas(Attend4Salary attend4Salary) {
ValidUtil.doValidator(attend4Salary);
log.info("salaryAttend开始获取的考勤数据参数{}", attend4Salary);
List<Map<String, String>> list = new ArrayList<>(); List<Map<String, String>> list = new ArrayList<>();
try { try {
ValidUtil.doValidator(attend4Salary);
Map<String, Object> paramsMap = new HashMap<String, Object>(); Map<String, Object> paramsMap = new HashMap<String, Object>();
paramsMap.put("pageIndex", 1); paramsMap.put("pageIndex", 1);
paramsMap.put("pageSize", 500); paramsMap.put("pageSize", 500);
@ -152,6 +151,8 @@ public class RemoteAttend4SalaryServiceImpl extends Service implements RemoteAtt
Map<String, Object> temp = new HashMap<String, Object>(); Map<String, Object> temp = new HashMap<String, Object>();
temp.put("data", JSONObject.toJSONString(paramsMap)); temp.put("data", JSONObject.toJSONString(paramsMap));
temp.put("reportType", "month"); temp.put("reportType", "month");
log.info("salaryAttend开始获取的考勤数据参数{}", temp);
list = (List<Map<String, String>>) commandExecutor.execute(new GetKQReportCmd(temp, user)).get("datas"); list = (List<Map<String, String>>) commandExecutor.execute(new GetKQReportCmd(temp, user)).get("datas");
if (isLog) { if (isLog) {
log.info("salaryAttend获取的考勤数据{}", JSONUtils.toJSONString(list)); log.info("salaryAttend获取的考勤数据{}", JSONUtils.toJSONString(list));

View File

@ -34,7 +34,6 @@ import com.engine.salary.util.page.SalaryPageUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils; import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@ -437,14 +436,11 @@ public class SalaryStatisticsReportWrapper extends Service {
// 获取列头 // 获取列头
List<WeaTableColumnGroup> weaTableColumns = (List<WeaTableColumnGroup>) result.get("columns"); List<WeaTableColumnGroup> weaTableColumns = (List<WeaTableColumnGroup>) result.get("columns");
PageInfo<Map<String, Object>> page = (PageInfo<Map<String, Object>>) result.get("pageInfo"); PageInfo<Map<String, Object>> page = (PageInfo<Map<String, Object>>) result.get("pageInfo");
// 组装合计 Map<String, Object> countResultMap = (Map<String, Object>) result.get("countResult");
Map<String, Object> countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID());
List<Map<String, Object>> list = page.getList(); List<Map<String, Object>> list = page.getList();
if (CollectionUtils.isNotEmpty(list) && MapUtils.isNotEmpty(countResultMap)) {
list.add(countResultMap);
}
// 获取数据 // 获取数据
List<Map<String, String>> records = list.stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList()); List<Map<String, Object>> 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<>(); List rows = new ArrayList<>();
rows.add(weaTableColumns); rows.add(weaTableColumns);
@ -466,7 +462,7 @@ public class SalaryStatisticsReportWrapper extends Service {
List<String> numberItemIds = salaryItemPOList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).map(salaryItemPO -> salaryItemPO.getId().toString()).collect(Collectors.toList()); List<String> numberItemIds = salaryItemPOList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).map(salaryItemPO -> salaryItemPO.getId().toString()).collect(Collectors.toList());
Map<String, SalaryStatisticsItemPO> salaryStatisticsItemMap = SalaryEntityUtil.convert2Map(salaryStatisticsItemList, statisticsItemPO -> statisticsItemPO.getId().toString()); Map<String, SalaryStatisticsItemPO> salaryStatisticsItemMap = SalaryEntityUtil.convert2Map(salaryStatisticsItemList, statisticsItemPO -> statisticsItemPO.getId().toString());
for (Map<String, String> map : records) { for (Map<String, Object> map : records) {
List<Object> row = Lists.newArrayListWithExpectedSize(records.size()); List<Object> row = Lists.newArrayListWithExpectedSize(records.size());
head.forEach(k -> { head.forEach(k -> {
// 获取是数值还是文本 // 获取是数值还是文本
@ -476,7 +472,7 @@ public class SalaryStatisticsReportWrapper extends Service {
SalaryStatisticsItemPO salaryStatisticsItemPO = salaryStatisticsItemMap.get(salaryItemId); SalaryStatisticsItemPO salaryStatisticsItemPO = salaryStatisticsItemMap.get(salaryItemId);
if (salaryStatisticsItemPO != null) { if (salaryStatisticsItemPO != null) {
Optional<String> textItemOptional = Arrays.stream(salaryStatisticsItemPO.getItemValue().split(",")).filter(itemId -> !numberItemIds.contains(itemId)).findFirst(); Optional<String> 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 { } else {
row.add(map.getOrDefault(k, StringUtils.EMPTY)); row.add(map.getOrDefault(k, StringUtils.EMPTY));
} }

View File

@ -382,7 +382,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa
List<Long> employeeIds = SalaryEntityUtil.properties(salaryEmployees, DataCollectionEmployee::getEmployeeId, Collectors.toList()); List<Long> employeeIds = SalaryEntityUtil.properties(salaryEmployees, DataCollectionEmployee::getEmployeeId, Collectors.toList());
List<SalaryArchiveDataDTO> salaryArchiveDataDTOS = getSalaryArchiveService(user).getSalaryArchiveTaxAgentData(salarySobCycleDTO.getSalaryCycle(), employeeIds, taxAgentId); List<SalaryArchiveDataDTO> salaryArchiveDataDTOS = getSalaryArchiveService(user).getSalaryArchiveTaxAgentData(salarySobCycleDTO.getSalaryCycle(), employeeIds, taxAgentId);
// 转换成薪资核算人员po // 转换成薪资核算人员po
Date salaryDate = SalaryDateUtil.dateStrToLocalTime(salaryYearMonth + "-01"); Date salaryDate = SalaryDateUtil.dateStrToLocalDate(salaryYearMonth + "-01");
List<SalaryAcctEmployeePO> salaryAcctEmployeePOS = SalaryAcctEmployeeBO.convert2Employee(salaryEmployees, SalaryAcctRecordPO.builder().salarySobId(salarySobId).salaryMonth(salaryDate).build(), salaryArchiveDataDTOS, (long) user.getUID()); List<SalaryAcctEmployeePO> salaryAcctEmployeePOS = SalaryAcctEmployeeBO.convert2Employee(salaryEmployees, SalaryAcctRecordPO.builder().salarySobId(salarySobId).salaryMonth(salaryDate).build(), salaryArchiveDataDTOS, (long) user.getUID());
//过滤掉不属于当前账套扣缴义务人的人员 //过滤掉不属于当前账套扣缴义务人的人员

View File

@ -68,6 +68,7 @@ import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.IOUtils; import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.BeanUtils;
import org.springframework.util.StopWatch; import org.springframework.util.StopWatch;
import weaver.file.ImageFileManager; import weaver.file.ImageFileManager;
import weaver.hrm.User; import weaver.hrm.User;
@ -1401,11 +1402,18 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
deleteResults = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds); deleteResults = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds);
getSalaryAcctResultService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds); getSalaryAcctResultService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds);
//删除报表 //删除报表
getSalaryAcctReportService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds); // getSalaryAcctReportService(user).deleteByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, excelSalaryItemIds);
} }
if (CollectionUtils.isNotEmpty(salaryAcctResults)) { if (CollectionUtils.isNotEmpty(salaryAcctResults)) {
// 处理导入薪资项的回算值 // 处理导入薪资项的回算值
handleOriginResultValue(deleteResults, salaryAcctResults); handleOriginResultValue(deleteResults, salaryAcctResults);
// 备份一份加密前的值
List<SalaryAcctResultPO> list4log = new ArrayList<>();
salaryAcctResults.forEach(source -> {
SalaryAcctResultPO target = new SalaryAcctResultPO();
BeanUtils.copyProperties(source, target);
list4log.add(target);
});
getSalaryAcctResultService(user).batchSave(salaryAcctResults); getSalaryAcctResultService(user).batchSave(salaryAcctResults);
// 记录操作日志 // 记录操作日志
@ -1418,6 +1426,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
loggerContext.setOperateType(OperateTypeEnum.EXCEL_IMPORT.getValue()); loggerContext.setOperateType(OperateTypeEnum.EXCEL_IMPORT.getValue());
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "导入薪资核算数据")); loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "导入薪资核算数据"));
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "导入薪资核算数据 ") + targetName); loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "导入薪资核算数据 ") + targetName);
loggerContext.setOldValueList(list4log);
SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext);
// //报表 // //报表

View File

@ -1016,10 +1016,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
if (param.getLockStatus() == LockStatusEnum.LOCK) { if (param.getLockStatus() == LockStatusEnum.LOCK) {
lockItemIds.add(salaryItemId); lockItemIds.add(salaryItemId);
} else { } else {
lockItemIds.remove(salaryItemId); lockItemIds.removeIf(salaryItemId::equals);
} }
salaryAcctEmployeePO.setLockItems(lockItemIds); salaryAcctEmployeePO.setLockItems(Lists.newArrayList(new HashSet(lockItemIds)));
getSalaryAcctEmployeeService(user).lock(salaryAcctEmployeePO); getSalaryAcctEmployeeService(user).lock(salaryAcctEmployeePO);
} }
@ -1046,7 +1046,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
} else { } else {
lockItemIds.removeAll(salaryItemIds); lockItemIds.removeAll(salaryItemIds);
} }
salaryAcctEmployeePO.setLockItems(lockItemIds); salaryAcctEmployeePO.setLockItems(Lists.newArrayList(new HashSet(lockItemIds)));
getSalaryAcctEmployeeService(user).lock(salaryAcctEmployeePO); getSalaryAcctEmployeeService(user).lock(salaryAcctEmployeePO);
}); });
@ -1078,7 +1078,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
if (CollectionUtils.isEmpty(salaryAcctEmployeeIds)) { if (CollectionUtils.isEmpty(salaryAcctEmployeeIds)) {
return Collections.emptyList(); return Collections.emptyList();
} }
List<List<Long>> partition = Lists.partition((List<Long>) salaryAcctEmployeeIds, 200); List<List<Long>> partition = Lists.partition(salaryAcctEmployeeIds, 200);
List<SalaryAcctResultPO> result = new ArrayList<>(); List<SalaryAcctResultPO> result = new ArrayList<>();
partition.forEach(empIds -> { partition.forEach(empIds -> {
SalaryAcctResultPO build = SalaryAcctResultPO.builder().salaryAcctEmpIds(empIds).salaryItemIds(salaryItemIds).build(); SalaryAcctResultPO build = SalaryAcctResultPO.builder().salaryAcctEmpIds(empIds).salaryItemIds(salaryItemIds).build();

View File

@ -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.dto.SalaryBillWatermarkDTO;
import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam; import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam;
import com.engine.salary.entity.salaryBill.po.SalaryBillWatermarkPO; 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.enums.salarybill.SalaryTemplateWatermarkTypeEnum;
import com.engine.salary.service.SalaryBillBaseSetService; import com.engine.salary.service.SalaryBillBaseSetService;
import com.engine.salary.service.SalaryBillWatermarkService; import com.engine.salary.service.SalaryBillWatermarkService;
@ -31,6 +32,7 @@ import weaver.hrm.User;
import java.util.*; import java.util.*;
import static com.engine.salary.enums.salarybill.MonthTypeEnum.SALARY_DATE;
import static com.engine.salary.sys.constant.SalarySysConstant.*; import static com.engine.salary.sys.constant.SalarySysConstant.*;
/** /**
@ -113,6 +115,7 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB
salaryBillViewingLimitSetting salaryBillViewingLimitDTO = saveParam.getSalaryBillViewingLimitSetting(); salaryBillViewingLimitSetting salaryBillViewingLimitDTO = saveParam.getSalaryBillViewingLimitSetting();
if (salaryBillViewingLimitDTO != null) { if (salaryBillViewingLimitDTO != null) {
getSalarySysConfService(user).saveSettingByType(Util.null2String(salaryBillViewingLimitDTO.getLimitMonth()), SALARY_BILL_VIEWING_LIMIT_MONTH, "工资单时效性设置", "billSend"); 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"); getSalarySysConfService(user).saveSettingByType(salaryBillViewingLimitDTO.getBurningAfterReadingMin() == null ? " " : salaryBillViewingLimitDTO.getBurningAfterReadingMin().toString(), SALARY_BILL_BURNING_AFTER_READING_MIN, "工资单查看后销毁设置", "billSend");
} }
return StringUtils.EMPTY; return StringUtils.EMPTY;
@ -175,7 +178,14 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB
if (limitMonthSetting != null && NumberUtils.isNumber(limitMonthSetting.getConfValue())) { if (limitMonthSetting != null && NumberUtils.isNumber(limitMonthSetting.getConfValue())) {
limitMonth = Integer.parseInt(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 @Override

View File

@ -39,6 +39,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils; import org.apache.commons.lang3.math.NumberUtils;
import weaver.conn.RecordSet; import weaver.conn.RecordSet;
import weaver.general.Util;
import weaver.hrm.User; import weaver.hrm.User;
import java.util.*; import java.util.*;
@ -498,7 +499,7 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee
String field = setting.getField(); String field = setting.getField();
String value = rs.getString(field); String value = rs.getString(field);
setting.setValue(value); setting.setValue(value);
extendData.put(field, value); extendData.put(field, Util.formatMultiLang(value));
}); });
String id = rs.getString(primaryKey); String id = rs.getString(primaryKey);

View File

@ -45,10 +45,7 @@ import com.engine.salary.enums.OperateTypeEnum;
import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.UserStatusEnum;
import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum;
import com.engine.salary.enums.salarybill.BillConfimStatusEnum; import com.engine.salary.enums.salarybill.*;
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.salaryitem.SalaryDataTypeEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum; import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.exception.SalaryRunTimeException;
@ -493,10 +490,18 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
} }
//工资单查看时效性 //工资单查看时效性
Date limitMonth = getLimitMonth(); salaryBillViewingLimitSetting salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting();
if (limitMonth != null && limitMonth.after(salarySendInfo.getSalaryMonth())) { Date limitMonth = getLimitMonth(salaryBillViewingLimitSetting);
salaryBillViewingLimitSetting salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); if (limitMonth != null) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "仅能查看" + salaryBillViewingLimitSetting.getLimitMonth() + "月内的工资单")); 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() + "月内的工资单"));
}
}
} }
// 获取记录首次查看时间 // 获取记录首次查看时间
@ -692,12 +697,16 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
} }
//工资单时效性
private Date getLimitMonth() { private Date getLimitMonth(salaryBillViewingLimitSetting salaryBillViewingLimitSetting) {
//工资单时效性
salaryBillViewingLimitSetting salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting();
if (salaryBillViewingLimitSetting.getLimitMonth() != 0) { 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 SalaryDateUtil.localDateToDate(localDate);
} }
return null; return null;
@ -797,11 +806,25 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
@Override @Override
public PageInfo<SalaryMySalaryBillListDTO> mySalaryBillListPage(SalaryBillQueryParam queryParam) { public PageInfo<SalaryMySalaryBillListDTO> mySalaryBillListPage(SalaryBillQueryParam queryParam) {
//工资单时效
queryParam.setStartSalaryMonth(getLimitMonth());
List<SalaryMySalaryBillListDTO> list = salarySendInfoMapper.mySalaryBillList(queryParam); List<SalaryMySalaryBillListDTO> 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<SalaryMySalaryBillListDTO> pageInfo = new PageInfo<>(list, SalaryMySalaryBillListDTO.class); PageInfo<SalaryMySalaryBillListDTO> pageInfo = new PageInfo<>(list, SalaryMySalaryBillListDTO.class);
pageInfo.setTotal(list.size()); pageInfo.setTotal(list.size());
pageInfo.setPageNum(queryParam.getCurrent()); pageInfo.setPageNum(queryParam.getCurrent());
@ -817,11 +840,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
Set<Long> otherSalaryAcctRecordIds = null; Set<Long> otherSalaryAcctRecordIds = null;
if (queryParam.getMergeCountTax() != null && queryParam.getMergeCountTax()) { if (queryParam.getMergeCountTax() != null && queryParam.getMergeCountTax()) {
//查询关联的核酸id这里认为一次发放只对应一条核算记录 //查询关联的核酸id这里认为一次发放只对应一条核算记录
Long salaryAccRecordId = Long salaryAccRecordId = salarySendInfoMapper.listSalaryAccRecordIds(queryParam).stream().findFirst().orElse(null);
salarySendInfoMapper.listSalaryAccRecordIds(queryParam).stream().findFirst().orElse(null);
// 查询合并计税的其他薪资核算记录 // 查询合并计税的其他薪资核算记录
List<SalaryAcctRecordPO> otherSalaryAcctRecordPOS = List<SalaryAcctRecordPO> otherSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAccRecordId);
getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAccRecordId);
if (CollectionUtils.isEmpty(otherSalaryAcctRecordPOS)) { if (CollectionUtils.isEmpty(otherSalaryAcctRecordPOS)) {
return new PageInfo<>(); return new PageInfo<>();
} }
@ -832,8 +853,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
} }
} }
List<SalarySendDetailListDTO> list = getSalarySendInfoMapper().detailList(queryParam, otherSalaryAcctRecordIds); List<SalarySendDetailListDTO> list = getSalarySendInfoMapper().detailList(queryParam, otherSalaryAcctRecordIds);
return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, SalarySendDetailListDTO.class);
list, SalarySendDetailListDTO.class);
} }
/** /**
@ -859,9 +879,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
} }
companyName = subCompanyComInfo.getSubCompanyname(resourceComInfo.getSubCompanyID(currentEmployeeId + "")); companyName = subCompanyComInfo.getSubCompanyname(resourceComInfo.getSubCompanyID(currentEmployeeId + ""));
} }
return theme return theme.replace("${companyName}", companyName).replace("${salaryMonth}", new SimpleDateFormat("yyyy年MM月").format(salaryMonth));
.replace("${companyName}", companyName)
.replace("${salaryMonth}", new SimpleDateFormat("yyyy年MM月").format(salaryMonth));
} }
/** /**
@ -873,30 +891,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
*/ */
private SalaryTemplatePO buildSalaryTemplateContent(String salaryTemplateContent) { private SalaryTemplatePO buildSalaryTemplateContent(String salaryTemplateContent) {
Map<String, Object> map = JsonUtil.parseMap(salaryTemplateContent, Object.class); Map<String, Object> map = JsonUtil.parseMap(salaryTemplateContent, Object.class);
SalaryTemplatePO build = SalaryTemplatePO.builder() 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();
.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"); Object feedbackStatus = map.get("feedbackStatus");
if (feedbackStatus == null || StringUtils.isBlank(feedbackStatus.toString())) { if (feedbackStatus == null || StringUtils.isBlank(feedbackStatus.toString())) {
build.setFeedbackStatus(build.getAckFeedbackStatus()); build.setFeedbackStatus(build.getAckFeedbackStatus());
@ -924,6 +919,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
.birthday(simpleEmployee.getBirthday()) .birthday(simpleEmployee.getBirthday())
.departmentId(simpleEmployee.getDepartmentId()) .departmentId(simpleEmployee.getDepartmentId())
.departmentName(simpleEmployee.getDepartmentName()) .departmentName(simpleEmployee.getDepartmentName())
.subcompanyId(simpleEmployee.getSubcompanyid())
.subcompanyName(simpleEmployee.getSubcompanyName()) .subcompanyName(simpleEmployee.getSubcompanyName())
.email(StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail()) .email(StringUtils.isEmpty(simpleEmployee.getEmail()) ? "" : simpleEmployee.getEmail())
.jobcall(simpleEmployee.getJobcall()) .jobcall(simpleEmployee.getJobcall())
@ -1010,8 +1006,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
map.put("jobNum", Objects.equals(employeeType, 1) ? extEmp.getWorkcode() : e.getJobNum()); map.put("jobNum", Objects.equals(employeeType, 1) ? extEmp.getWorkcode() : e.getJobNum());
map.put("email", Objects.equals(employeeType, 1) ? extEmp.getEmail() : e.getEmail()); map.put("email", Objects.equals(employeeType, 1) ? extEmp.getEmail() : e.getEmail());
salaryItems.forEach(i -> { salaryItems.forEach(i -> {
Optional<SalaryAcctResultPO> optional = salaryAccountingResults.stream() Optional<SalaryAcctResultPO> optional = salaryAccountingResults.stream().filter(r -> r.getEmployeeId().equals(e.getEmployeeId()) && r.getSalaryItemId().equals(Long.valueOf(i.getSalaryItemId()))).findFirst();
.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() : ""); map.put(i.getSalaryItemId() + SalaryItemConstant.DYNAMIC_SUFFIX, optional.isPresent() ? optional.get().getResultValue() : "");
}); });
@ -1028,8 +1023,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
* @return * @return
*/ */
@Override @Override
public List<Map<String, Object>> buildDetailList(List<SalarySendInfoListDTO> list, public List<Map<String, Object>> buildDetailList(List<SalarySendInfoListDTO> list, List<SalaryAcctEmployeePO> salaryAcctEmployees, List<SalaryAcctResultPO> salaryAcctResultValues) {
List<SalaryAcctEmployeePO> salaryAcctEmployees, List<SalaryAcctResultPO> salaryAcctResultValues) {
List<Map<String, Object>> listMaps = new ArrayList<>(); List<Map<String, Object>> listMaps = new ArrayList<>();
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
return listMaps; return listMaps;
@ -1126,19 +1120,15 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
} }
// 正常模板 // 正常模板
if (!isReplenish && StringUtils.isNotEmpty(salaryTemplate.getSalaryItemSetting())) { if (!isReplenish && StringUtils.isNotEmpty(salaryTemplate.getSalaryItemSetting())) {
List<SalaryTemplateSalaryItemSetListDTO> salaryTemplateShowSetData = JsonUtil.parseList(salaryTemplate.getSalaryItemSetting(), List<SalaryTemplateSalaryItemSetListDTO> salaryTemplateShowSetData = JsonUtil.parseList(salaryTemplate.getSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class);
SalaryTemplateSalaryItemSetListDTO.class);
salaryTemplateShowSetData.stream().filter(f -> !f.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID)).forEach(e -> { salaryTemplateShowSetData.stream().filter(f -> !f.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID)).forEach(e -> {
salaryItems.addAll(e.getItems()); salaryItems.addAll(e.getItems());
}); });
} }
// 补发模板 // 补发模板
if (isReplenish && StringUtils.isNotEmpty(salaryTemplate.getReplenishSalaryItemSetting())) { if (isReplenish && StringUtils.isNotEmpty(salaryTemplate.getReplenishSalaryItemSetting())) {
List<SalaryTemplateSalaryItemSetListDTO> salaryTemplateShowSetData = JsonUtil.parseList(salaryTemplate.getReplenishSalaryItemSetting(), List<SalaryTemplateSalaryItemSetListDTO> salaryTemplateShowSetData = JsonUtil.parseList(salaryTemplate.getReplenishSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class);
SalaryTemplateSalaryItemSetListDTO.class); salaryTemplateShowSetData.stream().filter(f -> !f.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID)).forEach(e -> salaryItems.addAll(e.getItems()));
salaryTemplateShowSetData.stream().filter(f -> !f.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID)).forEach(e ->
salaryItems.addAll(e.getItems())
);
} }
return salaryItems; return salaryItems;
} }
@ -1154,8 +1144,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
if (param.getSalarySendRangeIds() != null) { if (param.getSalarySendRangeIds() != null) {
//如果传了范围id则使用范围id发放 //如果传了范围id则使用范围id发放
ids = getSalarySendRangeService(user) ids = getSalarySendRangeService(user).getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.GRANT);
.getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.GRANT);
if (ids.isEmpty()) {// 由于查出来是空的会导致全部发放在此进行拦截 if (ids.isEmpty()) {// 由于查出来是空的会导致全部发放在此进行拦截
throw new SalaryRunTimeException("工资发放范围内没有匹配员工"); throw new SalaryRunTimeException("工资发放范围内没有匹配员工");
} }
@ -1406,8 +1395,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
// 获取可撤回的工资单 // 获取可撤回的工资单
if (param.getSalarySendRangeIds() != null) { if (param.getSalarySendRangeIds() != null) {
//如果传了范围id则使用范围id撤回 //如果传了范围id则使用范围id撤回
ids = getSalarySendRangeService(user) ids = getSalarySendRangeService(user).getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.WITHDRAW);
.getSendInfoIdsBySendId(salarySendId, param.getSalarySendRangeIds(), SalarySendGrantTypeEnum.WITHDRAW);
if (ids.isEmpty()) {// 由于查出来是空的会导致全部发放在此进行拦截 if (ids.isEmpty()) {// 由于查出来是空的会导致全部发放在此进行拦截
throw new SalaryRunTimeException("工资撤回范围内没有匹配的员工"); throw new SalaryRunTimeException("工资撤回范围内没有匹配的员工");
} }
@ -1580,7 +1568,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
header.add(SalaryI18nUtil.getI18nLabel(86317, "工号")); header.add(SalaryI18nUtil.getI18nLabel(86317, "工号"));
Map<String, SalaryTemplateSalaryItemListDTO> salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, dto -> dto.getSalaryItemId() + SalaryConstant.DYNAMIC_SUFFIX); Map<String, SalaryTemplateSalaryItemListDTO> salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, dto -> dto.getSalaryItemId() + SalaryConstant.DYNAMIC_SUFFIX);
List<SalaryTemplateSalaryItemListDTO> sortedSalaryItems = new ArrayList<>(); List<SalaryTemplateSalaryItemListDTO> sortedSalaryItems = new ArrayList<>();
for(String column : queryParam.getColumns()) { for (String column : queryParam.getColumns()) {
if (column.contains(SalaryConstant.DYNAMIC_SUFFIX)) { if (column.contains(SalaryConstant.DYNAMIC_SUFFIX)) {
SalaryTemplateSalaryItemListDTO salaryTemplateSalaryItemListDTO = salaryItemMap.get(column); SalaryTemplateSalaryItemListDTO salaryTemplateSalaryItemListDTO = salaryItemMap.get(column);
if (salaryTemplateSalaryItemListDTO != null) { if (salaryTemplateSalaryItemListDTO != null) {
@ -1681,8 +1669,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
SalaryAcctResultQueryParam queryParam = SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salarySendPO.getSalaryAccountingId()).build(); SalaryAcctResultQueryParam queryParam = SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salarySendPO.getSalaryAccountingId()).build();
// 查询薪资核算人员 // 查询薪资核算人员
List<SalaryAcctEmployeePO> salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user) List<SalaryAcctEmployeePO> salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listByResultQueryParam(queryParam);
.listByResultQueryParam(queryParam);
if (org.apache.commons.collections4.CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { if (org.apache.commons.collections4.CollectionUtils.isEmpty(salaryAcctEmployeePOS)) {
return Collections.emptyMap(); return Collections.emptyMap();
@ -1714,13 +1701,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
Map<Long, List<SalaryAcctResultPO>> acctResultMap = SalaryEntityUtil.group2Map(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryItemId); Map<Long, List<SalaryAcctResultPO>> acctResultMap = SalaryEntityUtil.group2Map(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryItemId);
salaryItemPOS.stream().filter(item -> SalaryDataTypeEnum.NUMBER.getValue().equals(item.getDataType())).forEach(item -> { salaryItemPOS.stream().filter(item -> SalaryDataTypeEnum.NUMBER.getValue().equals(item.getDataType())).forEach(item -> {
BigDecimal sum = Optional.ofNullable(acctResultMap.get(item.getId())) 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);
.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)); map.put(item.getId() + SalaryItemConstant.DYNAMIC_SUFFIX, SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap(), salaryItemIdKeySalarySobItemPOMap));
}); });
return map; return map;
@ -1814,8 +1795,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
@Override @Override
public List<SalarySendInfoPO> listUnConfirmedSendInfo(List<Long> salarySobIds) { public List<SalarySendInfoPO> listUnConfirmedSendInfo(List<Long> salarySobIds) {
if (CollectionUtils.isEmpty(salarySobIds)) if (CollectionUtils.isEmpty(salarySobIds)) return Collections.emptyList();
return Collections.emptyList();
return getSalarySendInfoMapper().listUnConfirmedSendInfo(salarySobIds); return getSalarySendInfoMapper().listUnConfirmedSendInfo(salarySobIds);
} }
@ -1916,18 +1896,14 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
List<SalaryTemplateSalaryItemSetListDTO> itemSetListDTOS = listDTOS.stream().filter(e -> !SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID.equals(e.getGroupId())).collect(Collectors.toList()); List<SalaryTemplateSalaryItemSetListDTO> itemSetListDTOS = listDTOS.stream().filter(e -> !SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID.equals(e.getGroupId())).collect(Collectors.toList());
List<Map<String, Object>> finalSalaryAcctResultS = salaryAcctResultS; List<Map<String, Object>> finalSalaryAcctResultS = salaryAcctResultS;
itemSetListDTOS.stream().forEach(item -> { itemSetListDTOS.stream().forEach(item -> {
item.getItems() item.getItems().forEach(e -> {
.forEach(e -> { if (CollectionUtils.isEmpty(finalSalaryAcctResultS)) {
if (CollectionUtils.isEmpty(finalSalaryAcctResultS)) { e.setSalaryItemValue("");
e.setSalaryItemValue(""); } else {
} 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");
Object o = finalSalaryAcctResultS.stream() e.setSalaryItemValue(o == null ? "" : (String) o);
.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);
}
});
}); });
@ -1948,10 +1924,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
if (Objects.equals(1, salaryTemplate.getSalaryItemZeroStatus())) { if (Objects.equals(1, salaryTemplate.getSalaryItemZeroStatus())) {
for (SalaryTemplateSalaryItemSetListDTO itemSetListDTO : itemSetListDTOS) { for (SalaryTemplateSalaryItemSetListDTO itemSetListDTO : itemSetListDTOS) {
List<SalaryTemplateSalaryItemListDTO> items = itemSetListDTO.getItems(); List<SalaryTemplateSalaryItemListDTO> items = itemSetListDTO.getItems();
List<SalaryTemplateSalaryItemListDTO> collect = items.stream() List<SalaryTemplateSalaryItemListDTO> collect = items.stream().filter(item -> SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue()) == null || BigDecimal.ZERO.compareTo(SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue())) != 0).collect(Collectors.toList());
.filter(item -> SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue()) == null
|| BigDecimal.ZERO.compareTo(SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue())) != 0)
.collect(Collectors.toList());
itemSetListDTO.setItems(collect); itemSetListDTO.setItems(collect);
} }
} }

View File

@ -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_VIEWING_LIMIT_MONTH = "SALARY_BILL_VIEWING_LIMIT_MONTH";
/**
* 工资单查询限制月份类型
*/
public static final String SALARY_BILL_LIMIT_MONTH_TYPE = "SALARY_BILL_LIMIT_MONTH_TYPE";
/** /**
* 首次查看后多少分钟不能查看工资单 * 首次查看后多少分钟不能查看工资单
*/ */