weaver-hrm-salary/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveBO.java

176 lines
8.8 KiB
Java

package com.engine.salary.entity.salaryarchive.bo;
import com.engine.salary.common.LocalDateRange;
import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO;
import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveItemDataDTO;
import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveTaxAgentDataDTO;
import com.engine.salary.entity.salaryarchive.po.SalaryArchiveItemPO;
import com.engine.salary.entity.salaryarchive.po.SalaryArchiveTaxAgentPO;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description: 薪资档案
* @Author: wangxiangzhong
* @Date: 2021-11-03 10:51
*/
public class SalaryArchiveBO {
@Override
public String toString() {
return "SalaryArchiveBO{}";
}
/**
* 添加日期范围
* @param weaSearchCondition
* @param employeeId
* @param tenantKey
*/
// public static void addDatePickerRangeOtherParams(WeaSearchCondition weaSearchCondition, String datePickerKey, Long employeeId, String tenantKey) {
// WeaSearchConditionItem datePickerItem = weaSearchCondition.getItems().get(datePickerKey);
// Map<String, Object> otherParams = Maps.newHashMap();
// otherParams.put("isRange", true);
// otherParams.put("type", "day");
// otherParams.put("startPlaceholder", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 90648, "开始日期"));
// otherParams.put("endPlaceholder", SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 90649, "结束日期"));
// datePickerItem.setOtherParams(otherParams);
// weaSearchCondition.getItems().put(datePickerKey, datePickerItem);
// }
/**
* 构建表格动态列
* @param weaTable
* @param salaryItems
* @param employeeId
* @param tenantKey
* @param size
*/
// public static void buildSalaryArchiveTable(WeaTable<LinkedHashMap> weaTable, List<SalaryItemPO> salaryItems, Long employeeId, String tenantKey, int size) {
// // 表格表头
// List<WeaTableColumn> columns = new ArrayList<>();
// columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 85429, "姓名"), "username", "100"));
// columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 86184, "个税扣缴义务人"), "taxAgentName", "100"));
// columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 86185, "部门"), "departmentName", "100"));
// columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 86186, "手机号"), "mobile", "100"));
// columns.add(new WeaTableColumn(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 86187, "员工状态"), "employeeStatus", "100"));
// for (SalaryItemPO salaryItem : salaryItems) {
// columns.add(new WeaTableColumn(salaryItem.getName(), salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX, "150"));
// }
// weaTable.setColumns(columns);
//
// List<WeaTableOperate> operates = weaTable.getOperates();
// operates.add(new WeaTableOperate(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 90821, "查看"), 0));
//
// weaTable.setOperatesPermission(getDefaultOperatesPermission(operates.size(), size));
// weaTable.setCheckBoxPermission(getDefaultCheckBoxPermission(size));
//
// weaTable.setTableType(WeaTableTypeEnum.CHECKBOX);
// }
//
// private static List<List<Permission>> getDefaultOperatesPermission(int operateSize, int recordSize) {
// List<List<Permission>> permissionList = Lists.newArrayList();
// for (int i=0; i<recordSize; i++) {
// List<Permission> permissions = Lists.newArrayList();
// for (int j=0; j<operateSize; j++) {
// permissions.add(new Permission(true, false));
// }
// permissionList.add(permissions);
// }
// return permissionList;
// }
// private static List<Permission> getDefaultCheckBoxPermission(int recordSize) {
// List<Permission> permissionList = Lists.newArrayList();
// for (int i=0; i<recordSize; i++) {
// permissionList.add(new Permission(true, false));
// }
// return permissionList;
// }
/**
* 构建薪资档案数据
* @param salaryArchiveTaxAgentList
* @param salaryArchiveItemDataList
* @param localDateRange
* @param allEmployeeIds
* @param isOnlyTaxAgent
* @return
*/
public static List<SalaryArchiveDataDTO> buildSalaryArchiveData(List<SalaryArchiveTaxAgentPO> salaryArchiveTaxAgentList,
List<SalaryArchiveItemPO> salaryArchiveItemDataList,
LocalDateRange localDateRange,
List<Long> allEmployeeIds,
boolean isOnlyTaxAgent) {
// 开始日期
Date start = localDateRange.getFromDate();
// 结束日期
Date end = localDateRange.getEndDate();
List<SalaryArchiveDataDTO> list = new ArrayList<>();
allEmployeeIds.forEach(e->{
// 同一个人的个税扣缴义务人调整历史数据
List<SalaryArchiveTaxAgentPO> salaryArchiveTaxAgents = salaryArchiveTaxAgentList.stream().filter(f->f.getEmployeeId().equals(e)).collect(Collectors.toList());
// 同一个人的薪资项目调整历史数据
List<SalaryArchiveItemPO> salaryArchiveItems = salaryArchiveItemDataList.stream().filter(d->d.getEmployeeId().equals(e)).collect(Collectors.toList());
List<Long> salaryArchiveItemIds = salaryArchiveItems.stream().map(SalaryArchiveItemPO::getSalaryItemId).distinct().collect(Collectors.toList());
SalaryArchiveDataDTO salaryArchiveData = new SalaryArchiveDataDTO();
salaryArchiveData.setEmployeeId(e);
List<SalaryArchiveTaxAgentDataDTO> taxAgents = new ArrayList<>();
// 按个税扣缴义务人生效日期时间段切割
Date endTemp = end;
for (SalaryArchiveTaxAgentPO salaryArchiveTaxAgent : salaryArchiveTaxAgents) {
Date fromDate = salaryArchiveTaxAgent.getEffectiveTime();
if (fromDate.after(endTemp) || !endTemp.after(start)) {
continue;
}
SalaryArchiveTaxAgentDataDTO taxAgent = new SalaryArchiveTaxAgentDataDTO();
taxAgent.setTaxAgentId(salaryArchiveTaxAgent.getTaxAgentId());
taxAgent.setEffectiveDateRange(LocalDateRange.builder().fromDate((fromDate.before(start)?start:fromDate)).endDate(endTemp).build());
// 薪资项目数据按个税扣缴义务人切割
if (!isOnlyTaxAgent) {
// 开始日期
Date startItem = taxAgent.getEffectiveDateRange().getFromDate();
// 结束日期
Date endItem = taxAgent.getEffectiveDateRange().getEndDate();
Date endTempItem = endItem;
List<SalaryArchiveItemDataDTO> salaryItemValues = new ArrayList<>();
for (Long salaryArchiveItemId : salaryArchiveItemIds) {
for (SalaryArchiveItemPO salaryArchiveItem : salaryArchiveItems) {
if (!salaryArchiveItemId.equals(salaryArchiveItem.getSalaryItemId())) {
continue;
}
Date fromDateItem = salaryArchiveItem.getEffectiveTime();
if (fromDateItem.after(endTempItem) || !endTempItem.after(startItem)) {
continue;
}
SalaryArchiveItemDataDTO salaryArchiveItemData = new SalaryArchiveItemDataDTO();
salaryArchiveItemData.setEffectiveDateRange(LocalDateRange.builder().fromDate((fromDateItem.before(startItem)?startItem:fromDateItem)).endDate(endTempItem).build());
salaryArchiveItemData.setSalaryItemId(salaryArchiveItem.getSalaryItemId());
salaryArchiveItemData.setValue(salaryArchiveItem.getItemValue());
salaryItemValues.add(salaryArchiveItemData);
endTempItem = fromDateItem;
}
endTempItem = endItem;
}
taxAgent.setSalaryItemValues(salaryItemValues);
}
taxAgents.add(taxAgent);
endTemp = fromDate;
}
salaryArchiveData.setTaxAgents(taxAgents);
list.add(salaryArchiveData);
});
return list;
}
}