Merge branch 'release/2.16.1.2410.01' into release/个税版本

# Conflicts:
#	src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.java
#	src/com/engine/salary/mapper/salaryacct/SalaryAcctRecordMapper.xml
#	src/com/engine/salary/service/SalaryAcctRecordService.java
#	src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java
This commit is contained in:
钱涛 2024-10-28 13:40:56 +08:00
commit aebe8c59f8
28 changed files with 306 additions and 201 deletions

Binary file not shown.

View File

@ -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));
}
// /**

View File

@ -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;

View File

@ -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;
/**
* 查看几月内的工资单

View File

@ -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())) {

View File

@ -70,4 +70,11 @@ public class SalaryAcctEmployeeQueryParam extends BaseQueryParam {
private String workcode;
private Set<Date> salaryMonths;
private Collection<Long> salaryAcctRecordIds;
private Collection<Long> salarySobIds;
private Collection<Long> employeeIds;
}

View File

@ -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;
//锁定的项目

View File

@ -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;

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;
/**
* @Description: 工资单开关项
* @Author: wangxiangzhong
* @Date: 2021/12/9 15:56
*/
public enum SalarySendStatusEnum implements BaseEnum<Integer> {
UNSEND(0, "未发放", 93286),

View File

@ -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);

View File

@ -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;

View File

@ -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<String> {
DEFAULT("DEFAULT", "系统默认水印", 220057),

View File

@ -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);

View File

@ -637,6 +637,24 @@
</if>
)
</if>
<if test="param.salaryAcctRecordIds != null and param.salaryAcctRecordIds.size()>0">
AND t.salary_acct_record_id IN
<foreach collection="param.salaryAcctRecordIds" open="(" item="salaryAcctRecordId" separator="," close=")">
#{salaryAcctRecordId}
</foreach>
</if>
<if test="param.employeeIds != null and param.employeeIds.size()>0">
AND t.employee_id IN
<foreach collection="param.employeeIds" open="(" item="employeeId" separator="," close=")">
#{employeeId}
</foreach>
</if>
<if test="param.salarySobIds != null and param.salarySobIds.size()>0">
AND t.salary_sob_id IN
<foreach collection="param.salarySobIds" open="(" item="salarySobId" separator="," close=")">
#{salarySobId}
</foreach>
</if>
</sql>
<sql id="SalaryAcctEmployeeParamSql" databaseId="oracle">
<if test="param.salaryAcctRecordId != null">
@ -711,6 +729,24 @@
</if>
)
</if>
<if test="param.salaryAcctRecordIds != null and param.salaryAcctRecordIds.size()>0">
AND t.salary_acct_record_id IN
<foreach collection="param.salaryAcctRecordIds" open="(" item="salaryAcctRecordId" separator="," close=")">
#{salaryAcctRecordId}
</foreach>
</if>
<if test="param.employeeIds != null and param.employeeIds.size()>0">
AND t.employee_id IN
<foreach collection="param.employeeIds" open="(" item="employeeId" separator="," close=")">
#{employeeId}
</foreach>
</if>
<if test="param.salarySobIds != null and param.salarySobIds.size()>0">
AND t.salary_sob_id IN
<foreach collection="param.salarySobIds" open="(" item="salarySobId" separator="," close=")">
#{salarySobId}
</foreach>
</if>
</sql>
<sql id="SalaryAcctEmployeeParamSql" databaseId="sqlserver">
<if test="param.salaryAcctRecordId != null">
@ -786,6 +822,24 @@
</if>
)
</if>
<if test="param.salaryAcctRecordIds != null and param.salaryAcctRecordIds.size()>0">
AND t.salary_acct_record_id IN
<foreach collection="param.salaryAcctRecordIds" open="(" item="salaryAcctRecordId" separator="," close=")">
#{salaryAcctRecordId}
</foreach>
</if>
<if test="param.employeeIds != null and param.employeeIds.size()>0">
AND t.employee_id IN
<foreach collection="param.employeeIds" open="(" item="employeeId" separator="," close=")">
#{employeeId}
</foreach>
</if>
<if test="param.salarySobIds != null and param.salarySobIds.size()>0">
AND t.salary_sob_id IN
<foreach collection="param.salarySobIds" open="(" item="salarySobId" separator="," close=")">
#{salarySobId}
</foreach>
</if>
</sql>
<select id="listPage4Reduce" resultMap="SalaryAccEmployeeMap">

View File

@ -6,6 +6,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctTaxAgentPO;
import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Set;
@ -80,6 +81,8 @@ public interface SalaryAcctRecordMapper {
List<SalaryAcctRecordPO> getBackCalcRecordByIds(@Param("collection") Set<Long> salaryAcctIds);
void updateDate(@Param("id")Long id, @Param("updateTime")Date updateTime);
/**
* 获取核算记录和扣缴义务人对应关系

View File

@ -15,8 +15,7 @@
<result column="delete_type" property="deleteType"/>
<result column="tenant_key" property="tenantKey"/>
<result column="back_calc_status" property="backCalcStatus"/>
<result column="lock_salary_item_ids" property="lockSalaryItemIds"
typeHandler="com.engine.salary.handle.SalaryListTypeHandler"/>
<result column="lock_salary_item_ids" property="lockSalaryItemIds" typeHandler="com.engine.salary.handle.SalaryListTypeHandler"/>
</resultMap>
<!-- 表字段 -->
@ -149,7 +148,7 @@
<include refid="baseColumns"/>
FROM hrsa_salary_acct_record t
where delete_type = 0
AND back_calc_status = 1
AND back_calc_status = 1
<if test="collection != null and collection.size()>0">
AND id IN
<foreach collection="collection" open="(" item="id" separator="," close=")">
@ -423,6 +422,13 @@
WHERE id = #{id} AND delete_type = 0
</update>
<update id="updateDate">
UPDATE hrsa_salary_acct_record
SET update_time=#{updateTime}
WHERE delete_type = 0
AND id = #{id}
</update>
<select id="listAcctTaxAgent" resultType="com.engine.salary.entity.salaryacct.po.SalaryAcctTaxAgentPO">
select record.id as salaryAcctRecordId,

View File

@ -1192,9 +1192,9 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
// List<SalaryAcctEmployeePO> accountDetailPOList = data.getList().stream().filter(po -> pageEmployeeIds.contains(po.getEmployeeId())).collect(Collectors.toList());
List<Map<String, Object>> records = new ArrayList<>();
List<SalaryAcctEmployeePO> accountDetailPOList = data.getList();
Map<Long, List<SalaryAcctEmployeePO>> employeeListMap = accountDetailPOList.stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId));
Map<Long, List<SalaryAcctEmployeePO>> lastEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId));
Map<Long, List<SalaryAcctEmployeePO>> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId));
Map<Long, List<SalaryAcctEmployeePO>> employeeListMap = accountDetailPOList.stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId, LinkedHashMap::new, Collectors.toList()));
Map<Long, List<SalaryAcctEmployeePO>> lastEmployeeListMap = data.getLastList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId, LinkedHashMap::new, Collectors.toList()));
Map<Long, List<SalaryAcctEmployeePO>> sameEmployeeListMap = data.getSameList().stream().collect(Collectors.groupingBy(SalaryAcctEmployeePO::getEmployeeId, LinkedHashMap::new, Collectors.toList()));
List<Long> empIds = accountDetailPOList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList());
Map<Long, DataCollectionEmployee> employeeByIdMap = getSalaryEmployeeService(user).getEmployeeByIdsAll(empIds).stream().collect(Collectors.toMap(DataCollectionEmployee::getEmployeeId, o -> o));

View File

@ -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<WeaTableColumnGroup> weaTableColumns = (List<WeaTableColumnGroup>) result.get("columns");
PageInfo<Map<String, Object>> page = (PageInfo<Map<String, Object>>) result.get("pageInfo");
// 组装合计
Map<String, Object> countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID());
Map<String, Object> countResultMap = (Map<String, Object>) result.get("countResult");
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<>();
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());
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());
head.forEach(k -> {
// 获取是数值还是文本
@ -476,7 +472,7 @@ public class SalaryStatisticsReportWrapper extends Service {
SalaryStatisticsItemPO salaryStatisticsItemPO = salaryStatisticsItemMap.get(salaryItemId);
if (salaryStatisticsItemPO != null) {
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 {
row.add(map.getOrDefault(k, StringUtils.EMPTY));
}

View File

@ -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<SalaryAcctRecordPO> listSome(SalaryAcctRecordPO po);
void updateDate(Long id, Date updateTime);
/**
* 根据薪资核算记录id查询关联的个税扣缴义务人
*

View File

@ -618,7 +618,10 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
@Override
public List<SalaryAcctEmployeePO> listBySalaryStatisticsReportParam(SalaryStatisticsReportDataQueryParam param) {
SalaryAcctEmployeePO lambdaQueryChainWrapper = SalaryAcctEmployeePO.builder().build();
//排序配置
OrderRuleVO orderRule = getSalarySysConfService(user).orderRule();
SalaryAcctEmployeeQueryParam lambdaQueryChainWrapper = new SalaryAcctEmployeeQueryParam();
lambdaQueryChainWrapper.setOrderRule(orderRule);
// 个税扣缴义务人
// Collection<TaxAgentPO> taxAgentList = getTaxAgentService(user).listAllTaxAgents((long) user.getUID());
@ -687,12 +690,11 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct
if (CollectionUtils.isNotEmpty(salaryAcctRecordIds)) {
//分片查询
List<List<Long>> partition = Lists.partition(salaryAcctRecordIds, 500);
List<SalaryAcctEmployeePO> empList = new ArrayList<>();
partition.forEach(part -> {
lambdaQueryChainWrapper.setSalaryAcctRecordIds(salaryAcctRecordIds);
empList.addAll(getSalaryAcctEmployeeMapper().listSome(lambdaQueryChainWrapper));
});
list = empList;
for (List<Long> part : partition) {
lambdaQueryChainWrapper.setSalaryAcctRecordIds(part);
List<SalaryAcctEmployeePO> pos = getSalaryAcctEmployeeMapper().list(lambdaQueryChainWrapper);
list.addAll(pos);
}
}
if (CollectionUtils.isEmpty(list)) {

View File

@ -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<SalaryAcctResultPO> 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);
// //报表

View File

@ -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);
}
}

View File

@ -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<List<Long>> partition = Lists.partition((List<Long>) salaryAcctEmployeeIds, 200);
List<List<Long>> partition = Lists.partition(salaryAcctEmployeeIds, 200);
List<SalaryAcctResultPO> result = new ArrayList<>();
partition.forEach(empIds -> {
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.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

View File

@ -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);

View File

@ -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<SalaryMySalaryBillListDTO> mySalaryBillListPage(SalaryBillQueryParam queryParam) {
//工资单时效
queryParam.setStartSalaryMonth(getLimitMonth());
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.setTotal(list.size());
pageInfo.setPageNum(queryParam.getCurrent());
@ -816,11 +839,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
Set<Long> 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<SalaryAcctRecordPO> otherSalaryAcctRecordPOS =
getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAccRecordId);
List<SalaryAcctRecordPO> otherSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAccRecordId);
if (CollectionUtils.isEmpty(otherSalaryAcctRecordPOS)) {
return new PageInfo<>();
}
@ -831,8 +852,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
}
}
List<SalarySendDetailListDTO> 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<String, Object> 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<SalaryTemplateSalaryItemListDTO> items = employeeInformation.getItems();
Set<Map.Entry<String, String>> 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<SalaryAcctResultPO> optional = salaryAccountingResults.stream()
.filter(r -> r.getEmployeeId().equals(e.getEmployeeId()) && r.getSalaryItemId().equals(Long.valueOf(i.getSalaryItemId()))).findFirst();
Optional<SalaryAcctResultPO> 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<Map<String, Object>> buildDetailList(List<SalarySendInfoListDTO> list,
List<SalaryAcctEmployeePO> salaryAcctEmployees, List<SalaryAcctResultPO> salaryAcctResultValues) {
public List<Map<String, Object>> buildDetailList(List<SalarySendInfoListDTO> list, List<SalaryAcctEmployeePO> salaryAcctEmployees, List<SalaryAcctResultPO> salaryAcctResultValues) {
List<Map<String, Object>> 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<SalaryTemplateSalaryItemSetListDTO> salaryTemplateShowSetData = JsonUtil.parseList(salaryTemplate.getSalaryItemSetting(),
SalaryTemplateSalaryItemSetListDTO.class);
List<SalaryTemplateSalaryItemSetListDTO> 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<SalaryTemplateSalaryItemSetListDTO> 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<SalaryTemplateSalaryItemSetListDTO> 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<String, SalaryTemplateSalaryItemListDTO> salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, dto -> dto.getSalaryItemId() + SalaryConstant.DYNAMIC_SUFFIX);
List<SalaryTemplateSalaryItemListDTO> 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<SalaryAcctEmployeePO> salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user)
.listByResultQueryParam(queryParam);
List<SalaryAcctEmployeePO> 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<String, Object> map = new HashMap<>();
Map<Long, List<SalaryAcctResultPO>> 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<SalarySendInfoPO> listUnConfirmedSendInfo(List<Long> 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<SalaryTemplateSalaryItemSetListDTO> itemSetListDTOS = listDTOS.stream().filter(e -> !SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID.equals(e.getGroupId())).collect(Collectors.toList());
List<Map<String, Object>> 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<SalaryTemplateSalaryItemListDTO> items = itemSetListDTO.getItems();
List<SalaryTemplateSalaryItemListDTO> collect = items.stream()
.filter(item -> SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue()) == null
|| BigDecimal.ZERO.compareTo(SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue())) != 0)
.collect(Collectors.toList());
List<SalaryTemplateSalaryItemListDTO> collect = items.stream().filter(item -> SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue()) == null || BigDecimal.ZERO.compareTo(SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue())) != 0).collect(Collectors.toList());
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_LIMIT_MONTH_TYPE = "SALARY_BILL_LIMIT_MONTH_TYPE";
/**
* 首次查看后多少分钟不能查看工资单
*/