路维档案调整

This commit is contained in:
Harryxzy 2025-10-09 17:54:10 +08:00
parent 9486682b52
commit fd9ab50194
4 changed files with 69 additions and 4 deletions

View File

@ -5,6 +5,7 @@ import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Map; import java.util.Map;
/** /**
@ -31,6 +32,10 @@ public class SalaryArchiveItemFormDTO {
//薪资项目调整明细") //薪资项目调整明细")
private Map<String,Object> salaryArchiveItemDetail; private Map<String,Object> salaryArchiveItemDetail;
List<Map<String, Object>> currentEffectiveList;
//是否可以编辑 //是否可以编辑
private boolean canOperator; private boolean canOperator;
private String sumVal;
} }

View File

@ -436,6 +436,7 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi
List<Long> effectiveSalaryItemDels = Lists.newArrayList(); List<Long> effectiveSalaryItemDels = Lists.newArrayList();
List<SalaryArchiveItemPO> salaryArchiveItemNews = Lists.newArrayList(); List<SalaryArchiveItemPO> salaryArchiveItemNews = Lists.newArrayList();
final int[] sumValCount = {0};
salaryArchiveItems.forEach(e -> { salaryArchiveItems.forEach(e -> {
// 已生效 // 已生效
List<SalaryArchiveItemPO> effectiveList = effectiveSalaryItems.stream().filter(i -> i.getSalaryItemId().equals(e.getSalaryItemId())).collect(Collectors.toList()); List<SalaryArchiveItemPO> effectiveList = effectiveSalaryItems.stream().filter(i -> i.getSalaryItemId().equals(e.getSalaryItemId())).collect(Collectors.toList());
@ -447,6 +448,7 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi
Optional<SalaryArchiveItemPO> optionalIneffective = ineffectiveSalaryItems.stream().filter(i -> i.getSalaryItemId().equals(e.getSalaryItemId())).findFirst(); Optional<SalaryArchiveItemPO> optionalIneffective = ineffectiveSalaryItems.stream().filter(i -> i.getSalaryItemId().equals(e.getSalaryItemId())).findFirst();
SalaryArchiveItemPO ineffectiveSalaryItem = optionalIneffective.orElse(null); SalaryArchiveItemPO ineffectiveSalaryItem = optionalIneffective.orElse(null);
boolean isSame = false;
// 1.检验是否可以调整 // 1.检验是否可以调整
if (effectiveSalaryItem != null) { if (effectiveSalaryItem != null) {
// 当前已经生效的时间 // 当前已经生效的时间
@ -457,7 +459,8 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi
// 1.2 如果等于当前已生效 fixme 日期比较可能有bug // 1.2 如果等于当前已生效 fixme 日期比较可能有bug
} else if (saveEffectiveTime.equals(effectiveTime)) { } else if (saveEffectiveTime.equals(effectiveTime)) {
if (effectiveBeforeSalaryItem != null && effectiveBeforeSalaryItem.getItemValue().equals(e.getAdjustValue())) { if (effectiveBeforeSalaryItem != null && effectiveBeforeSalaryItem.getItemValue().equals(e.getAdjustValue())) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同")); // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"));
isSame = true;
} }
if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同")); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"));
@ -465,18 +468,23 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi
// 1.3 如果>已经生效且<=今天 // 1.3 如果>已经生效且<=今天
} else if (saveEffectiveTime.after(effectiveTime) && !saveEffectiveTime.after(today)) { } else if (saveEffectiveTime.after(effectiveTime) && !saveEffectiveTime.after(today)) {
if (effectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { if (effectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同")); // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"));
isSame = true;
} }
if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同")); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"));
} }
// 1.4 如果>今天 // 1.4 如果>今天
} else if (saveEffectiveTime.after(today) && effectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { } else if (saveEffectiveTime.after(today) && effectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同")); // throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"));
isSame = true;
} }
} else if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) { } else if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(e.getAdjustValue())) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同")); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"));
} }
if (isSame) {
sumValCount[0] = sumValCount[0] +1;
}
// 2.数据处理 // 2.数据处理
if (effectiveSalaryItem != null && saveEffectiveTime.equals(effectiveSalaryItem.getEffectiveTime())) { if (effectiveSalaryItem != null && saveEffectiveTime.equals(effectiveSalaryItem.getEffectiveTime())) {
effectiveSalaryItemDels.add(effectiveSalaryItem.getId()); effectiveSalaryItemDels.add(effectiveSalaryItem.getId());
@ -484,9 +492,15 @@ public class SalaryArchiveItemServiceImpl extends Service implements SalaryArchi
if (ineffectiveSalaryItem != null && saveEffectiveTime.after(today)) { if (ineffectiveSalaryItem != null && saveEffectiveTime.after(today)) {
effectiveSalaryItemDels.add(ineffectiveSalaryItem.getId()); effectiveSalaryItemDels.add(ineffectiveSalaryItem.getId());
} }
salaryArchiveItemNews.add(buildInsert(salaryArchive, e.getSalaryItemId(), e.getAdjustValue(), saveParam, nowTime)); if (!isSame) {
salaryArchiveItemNews.add(buildInsert(salaryArchive, e.getSalaryItemId(), e.getAdjustValue(), saveParam, nowTime));
}
}); });
if (sumValCount[0] == salaryArchiveItems.size()) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100433, "调整前后不可全部相同"));
}
// 落库处理 // 落库处理
if (CollectionUtils.isNotEmpty(effectiveSalaryItemDels)) { if (CollectionUtils.isNotEmpty(effectiveSalaryItemDels)) {
salaryArchiveItemMapper.deleteBatchIds(effectiveSalaryItemDels); salaryArchiveItemMapper.deleteBatchIds(effectiveSalaryItemDels);

View File

@ -11,6 +11,7 @@ import com.engine.salary.entity.salaryarchive.dto.SalaryItemAdjustRecordListDTO;
import com.engine.salary.entity.salaryarchive.dto.SingleSalaryItemAdjustRecordListDTO; import com.engine.salary.entity.salaryarchive.dto.SingleSalaryItemAdjustRecordListDTO;
import com.engine.salary.entity.salaryarchive.param.*; import com.engine.salary.entity.salaryarchive.param.*;
import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO; import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO;
import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.OperateTypeEnum;
import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.UserStatusEnum;
@ -33,6 +34,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import weaver.hrm.User; import weaver.hrm.User;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -134,10 +136,41 @@ public class SalaryArchiveItemWrapper extends Service implements SalaryArchiveIt
// 调整明细数据 // 调整明细数据
List<Map<String, Object>> tableData = Lists.newArrayList(); List<Map<String, Object>> tableData = Lists.newArrayList();
SalaryArchivePO salaryArchive = getSalaryArchiveService(user).getById(salaryArchiveId);
if (salaryArchive == null) {
// throw new SalaryRunTimeException("薪资档案不存在");
}
BigDecimal[] sumVal = {new BigDecimal("0")};
List<Map<String, Object>> currentEffectiveList = new ArrayList<>();
// 获取所有可被引用的薪资项目
if (salaryArchive!= null) {
List<SalaryItemPO> salaryItemList = getSalaryArchiveItemService(user).getCanAdjustSalaryItems()
.stream().filter(item -> getSalaryItemService(user).filterInRange(Collections.singleton(salaryArchive.getTaxAgentId()), item))
.collect(Collectors.toList());
Collection<Long> salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList());
List<SalaryArchiveItemPO> salaryArchiveItemList = getSalaryArchiveService(user).getCurrentEffectiveItemList(Collections.singletonList(salaryArchiveId), salaryItemIds);
salaryItemList.forEach(s -> {
Optional<SalaryArchiveItemPO> optionalItem = salaryArchiveItemList.stream().filter(f -> f.getSalaryItemId().equals(s.getId())).findFirst();
Map<String, Object> salaryItemMap = new LinkedHashMap<>();
salaryItemMap.put("id", s.getId());
salaryItemMap.put("name", s.getName());
String value = optionalItem.isPresent() ? optionalItem.get().getItemValue() : "";
salaryItemMap.put("value", value);
if (NumberUtils.isCreatable( value)) {
sumVal[0] = sumVal[0].add(new BigDecimal(value));
}
currentEffectiveList.add(salaryItemMap);
});
// 计算总额
}
return SalaryArchiveItemFormDTO.builder() return SalaryArchiveItemFormDTO.builder()
.salaryArchiveId(salaryArchiveId) .salaryArchiveId(salaryArchiveId)
.salaryArchiveItemForm(buildSalaryArchiveItemForm(null, null, null)) .salaryArchiveItemForm(buildSalaryArchiveItemForm(null, null, null))
.salaryArchiveItemDetail(buildSalaryArchiveItemAdjustDetailTable(tableData)) .salaryArchiveItemDetail(buildSalaryArchiveItemAdjustDetailTable(tableData))
.currentEffectiveList(currentEffectiveList)
.sumVal(sumVal[0].toPlainString())
.build(); .build();
} }

View File

@ -34,9 +34,12 @@ 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.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import weaver.hrm.User; import weaver.hrm.User;
import weaver.wechat.util.Utils;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -384,16 +387,26 @@ public class SalaryArchiveWrapper extends Service {
.collect(Collectors.toList()); .collect(Collectors.toList());
Collection<Long> salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList()); Collection<Long> salaryItemIds = salaryItemList.stream().map(SalaryItemPO::getId).collect(Collectors.toList());
List<SalaryArchiveItemPO> salaryArchiveItemList = getSalaryArchiveService(user).getCurrentEffectiveItemList(Collections.singletonList(salaryArchiveId), salaryItemIds); List<SalaryArchiveItemPO> salaryArchiveItemList = getSalaryArchiveService(user).getCurrentEffectiveItemList(Collections.singletonList(salaryArchiveId), salaryItemIds);
List<String> valueList = new ArrayList<>();
salaryItemList.forEach(s -> { salaryItemList.forEach(s -> {
Optional<SalaryArchiveItemPO> optionalItem = salaryArchiveItemList.stream().filter(f -> f.getSalaryItemId().equals(s.getId())).findFirst(); Optional<SalaryArchiveItemPO> optionalItem = salaryArchiveItemList.stream().filter(f -> f.getSalaryItemId().equals(s.getId())).findFirst();
Map<String, Object> salaryItemMap = new LinkedHashMap<>(); Map<String, Object> salaryItemMap = new LinkedHashMap<>();
salaryItemMap.put("id", s.getId()); salaryItemMap.put("id", s.getId());
salaryItemMap.put("name", s.getName()); salaryItemMap.put("name", s.getName());
salaryItemMap.put("value", optionalItem.isPresent() ? optionalItem.get().getItemValue() : ""); salaryItemMap.put("value", optionalItem.isPresent() ? optionalItem.get().getItemValue() : "");
valueList.add(Utils.null2String(optionalItem.isPresent() ? optionalItem.get().getItemValue() : ""));
salaryItemMap.put("dataType", s.getDataType()); salaryItemMap.put("dataType", s.getDataType());
salaryItemMap.put("pattern", s.getPattern()); salaryItemMap.put("pattern", s.getPattern());
salaryItems.add(salaryItemMap); salaryItems.add(salaryItemMap);
}); });
// 合计值
BigDecimal sumVal = valueList.stream().filter(NumberUtils::isCreatable).map(BigDecimal::new)
.reduce(new BigDecimal("0"), BigDecimal::add);
Map<String, Object> sumValSalaryItemMap = new LinkedHashMap<>();
sumValSalaryItemMap.put("id", "111111111");
sumValSalaryItemMap.put("name", "工资总额");
sumValSalaryItemMap.put("value", sumVal.toPlainString());
salaryItems.add(sumValSalaryItemMap);
return SalaryArchiveFormDTO.builder() return SalaryArchiveFormDTO.builder()
.id(salaryArchiveId) .id(salaryArchiveId)