联特表5 - 生成人员明细工资计提表联特表6 - 生成人员明细工资实发表

This commit is contained in:
Harryxzy 2025-08-13 11:41:36 +08:00
parent fd0808bb0c
commit f491daeea0
6 changed files with 519 additions and 16 deletions

View File

@ -335,6 +335,7 @@ public class SalaryAcctResultBO {
// 个税扣缴义务人
String taxAgentName = taxAgentNameMap.getOrDefault(e.getTaxAgentId(), StringUtils.EMPTY);
map.put("taxAgentName", taxAgentName);
map.put("taxAgentId", e.getTaxAgentId());
// 是否属于"合并计税"的标记
map.put("consolidatedTaxation", StringUtils.isNotEmpty(taxAgentName) && consolidatedTaxSalaryAcctEmpIds.contains(e.getId()));
// 个税扣缴义务人的字段类型

View File

@ -278,4 +278,18 @@ public interface SalaryAcctResultService {
* @param salaryMonth
*/
String ltGenBmgzjjmxSf(String salaryMonth);
/**
* 联特表5 - 生成人员明细工资计提表
* @param salaryMonth
* @return
*/
String ltGenRymxgzjt(String salaryMonth);
/**
* 联特表6 - 生成人员明细工资实发表
* @param salaryMonth
* @return
*/
String ltGenRymxgzsf(String salaryMonth);
}

View File

@ -1859,7 +1859,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
List<SalaryAcctRecordPO> salaryAcctRecordList = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build());
// 账套范围
List<Long> sobIds = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "bmgzjjmxbjt_sob_ids").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList());
salaryAcctRecordList = salaryAcctRecordList.stream().filter(sobId -> sobIds.contains(sobId)).collect(Collectors.toList());
salaryAcctRecordList = salaryAcctRecordList.stream().filter(record -> sobIds.contains(record.getSalarySobId())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(salaryAcctRecordList)) {
return "success";
}
@ -2050,7 +2050,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
List<SalaryAcctRecordPO> salaryAcctRecordList = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build());
// 账套范围
List<Long> sobIds = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "bmgzjjmxbsf_sob_ids").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList());
salaryAcctRecordList = salaryAcctRecordList.stream().filter(sobId -> sobIds.contains(sobId)).collect(Collectors.toList());
salaryAcctRecordList = salaryAcctRecordList.stream().filter(record -> sobIds.contains(record.getSalarySobId())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(salaryAcctRecordList)) {
return "success";
}
@ -2179,4 +2179,450 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
}
return "success";
}
/**
* 联特表5 - 生成人员明细工资计提表
* @param salaryMonth
* @return
*/
@Override
public String ltGenRymxgzjt(String salaryMonth) {
if (!SalaryDateUtil.checkYearMonth(salaryMonth)) {
throw new SalaryRunTimeException("年月错误");
}
YearMonth yearMonth = SalaryDateUtil.String2YearMonth(salaryMonth);
BaseBean baseBean = new BaseBean();
// 查询生成的报表映射关系
String reportConfigStr = baseBean.getPropValue("ltSalaryReport", "rymxgzjtb_ys_config");
List<LtSalaryReportConfigDTO> reportConfigs = JsonUtil.parseList(reportConfigStr, LtSalaryReportConfigDTO.class);
List<Long> salaryItemIds = reportConfigs.stream().map(LtSalaryReportConfigDTO::getItem).collect(Collectors.toList());
List<SalaryItemPO> salaryItemList = getSalaryItemService(user).listByIds(salaryItemIds);
// 查询薪资核算结果包含未归档
Date salaryMonthDate = SalaryDateUtil.localDateToDate(yearMonth.atDay(1));
List<SalaryAcctRecordPO> salaryAcctRecordList = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build());
// 账套范围
List<Long> sobIds = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "rymxgzjtb_sob_ids").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList());
salaryAcctRecordList = salaryAcctRecordList.stream().filter(sob -> sobIds.contains(sob.getSalarySobId())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(salaryAcctRecordList)) {
return "success";
}
List<Long> salaryAcctRecordIds = salaryAcctRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds);
List<Long> employeeIdList = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList());
List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(employeeIdList);
// 查询薪资核算结果
List<Long> salaryAcctEmpIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList());
List<SalaryAcctResultPO> acctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds);
List<TaxAgentPO> taxAgentPOS = getTaxAgentService(user).listAll();
List<Map<String, Object>> acctResultMap = SalaryAcctResultBO.buildTableData(salaryItemList, Collections.emptyList(), employeeList, salaryAcctEmployeeList,
acctResultList, taxAgentPOS, Collections.emptySet(), Collections.emptyMap(), Collections.emptyMap(), false);
Map<String, Map<String, Object>> acctResultMapByAcctEmpId = SalaryEntityUtil.convert2Map(acctResultMap, m -> Utils.null2String(m.get("id")));
// 查询员工薪资档案
List<SalaryArchivePO> salaryArchiveList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().employeeIds(employeeIdList).build());
Map<String, Long> archiveIdMap = SalaryEntityUtil.convert2Map(salaryArchiveList, archive -> archive.getTaxAgentId() + "_" + archive.getEmployeeId(), archive -> archive.getId());
List<Long> salaryArchiveIds = salaryArchiveList.stream().map(SalaryArchivePO::getId).collect(Collectors.toList());
// 查询档案中对应的绩效值
Long jdItemId = SalaryEntityUtil.string2LongDefault0(baseBean.getPropValue("ltSalaryReport", "rymxgzjtb_jdjxgzbz_item_id"));
Long bndItemId = SalaryEntityUtil.string2LongDefault0(baseBean.getPropValue("ltSalaryReport", "rymxgzjtb_bndjxgzbz_item_id"));
Long nzjItemId = SalaryEntityUtil.string2LongDefault0(baseBean.getPropValue("ltSalaryReport", "rymxgzjtb_nzjbz_item_id"));
List<Long> archiveItemIds = Arrays.asList(jdItemId, bndItemId, nzjItemId);
Date lastDayOfMonth = SalaryDateUtil.getLastDayOfMonth(salaryMonthDate);
List<SalaryArchiveItemPO> salaryArchiveItemCurrentList = getSalaryArchiveItemService(user).getEffectiveItemListBySalaryMonth(salaryArchiveIds, archiveItemIds, lastDayOfMonth);
Map<Long, List<SalaryArchiveItemPO>> archiveItemGroupByArchiveId = SalaryEntityUtil.group2Map(salaryArchiveItemCurrentList, archive -> archive.getSalaryArchiveId());
// 查询快照表中人员信息
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).snapshot(employeeIdList, SalaryDateUtil.localDateToDate(yearMonth.atDay(1))), DataCollectionEmployee::getEmployeeId);
// 入库
// 删除建模数据
RecordSet rs = new RecordSet();
rs.execute("delete from uf_mxgzbjt where qj = '" + salaryMonth+ "'");
// 插入建模
String currDate = String.format("'%s'", TimeUtil.getCurrentDateString());
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String currTime = String.format("'%s'", sdf.format(new Date()));
// 获取建模模块id
String modeId = baseBean.getPropValue("ltSalaryReport", "rymxgzjtb_mode_id");
// 先插入一条数据
SalaryAcctEmployeePO salaryAcctEmp = salaryAcctEmployeeList.get(0);
StringBuilder firstSb = new StringBuilder();
String fieldStr = reportConfigs.stream().map(LtSalaryReportConfigDTO::getField).collect(Collectors.joining(","));
DataCollectionEmployee employee = employeeMap.getOrDefault(salaryAcctEmp.getEmployeeId(), DataCollectionEmployee.builder().build());
// 获取员工档案绩效工资
Long archiveId = archiveIdMap.get(salaryAcctEmp.getTaxAgentId()+ "_" + salaryAcctEmp.getEmployeeId());
List<SalaryArchiveItemPO> salaryArchiveItemList = archiveItemGroupByArchiveId.get(archiveId == null ? 0L : archiveId);
String jx = "0";
String jdjx = "0";
String bndjx = "0";
String nzj = "0";
if (CollectionUtils.isNotEmpty(salaryArchiveItemList)) {
Map<Long, String> archiveValueMap = SalaryEntityUtil.convert2Map(salaryArchiveItemList, SalaryArchiveItemPO::getSalaryItemId, SalaryArchiveItemPO::getItemValue);
BigDecimal jdBzValue = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(jdItemId));
BigDecimal bndBzValue = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(bndItemId));
int monthValue = yearMonth.getMonthValue();
// 绩效
if (monthValue >=1 && monthValue <= 6) {
// 1-6月季度绩效工资标准/3+半年度绩效工资标准/6 档案
jx = jdBzValue.divide(new BigDecimal("3"), 15, RoundingMode.HALF_UP)
.add(bndBzValue.divide(new BigDecimal("6"), 15, RoundingMode.HALF_UP))
.setScale(2, RoundingMode.HALF_UP).toPlainString();
} else if (monthValue >=7 && monthValue <= 9) {
// 7-9月季度绩效工资标准/3 档案
jx = jdBzValue.divide(new BigDecimal("3"), 2, RoundingMode.HALF_UP).toPlainString();
}
// 季度绩效
if (monthValue == 3 || monthValue == 6 || monthValue == 9) {
jdjx = jdBzValue.toString();
// 半年度绩效
if (monthValue == 6) {
bndjx = bndBzValue.toString();
}
}
// 年终奖
if (monthValue == 12) {
nzj = bndBzValue.toString();
}
}
// 获取薪资核算结果
Map<String, Object> singleAcctResultMap = acctResultMapByAcctEmpId.get(Utils.null2String(salaryAcctEmp.getId()));
firstSb.append("insert into uf_mxgzbjt(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,qj,cbzx,ydjx,jdjx,bndjx,nzj,"+fieldStr+") values (");
firstSb.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
.append(employee.getWorkcode()).append("',")
.append(employee.getEmployeeId()).append(",")
.append(employee.getSubcompanyid()).append(",")
.append(employee.getDepartmentId()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
.append(jx).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
for (LtSalaryReportConfigDTO dto : reportConfigs) {
BigDecimal val = new BigDecimal("0");
if (singleAcctResultMap != null) {
String valStr = Utils.null2String(singleAcctResultMap.getOrDefault(Utils.null2String(dto.getItem()), "0"));
if (NumberUtils.isCreatable(valStr)) {
val = new BigDecimal(valStr);
}
}
firstSb.append(",").append(val.toPlainString());
}
firstSb.append(")");
rs.execute(firstSb.toString());
salaryAcctEmployeeList.remove(0);
// 获取最大值 作为权限重构的起始id
rs.execute("select max(id) from uf_mxgzbjt");
int minId = 0;
if (rs.next()) {
minId = rs.getInt(1);
}
int maxId = minId + salaryAcctEmployeeList.size();
List<List<SalaryAcctEmployeePO>> partition = Lists.partition(salaryAcctEmployeeList, 500);
for (List<SalaryAcctEmployeePO> part : partition) {
StringBuilder sb = new StringBuilder();
sb.append("insert into uf_mxgzbjt(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,qj,cbzx,ydjx,jdjx,bndjx,nzj,"+fieldStr+") values ");
for (SalaryAcctEmployeePO salaryAcctEmployeePO : part) {
employee = employeeMap.getOrDefault(salaryAcctEmployeePO.getEmployeeId(), DataCollectionEmployee.builder().build());
singleAcctResultMap = acctResultMapByAcctEmpId.get(Utils.null2String(salaryAcctEmployeePO.getId()));
// 获取员工档案绩效工资
archiveId = archiveIdMap.get(salaryAcctEmployeePO.getTaxAgentId()+ "_" + salaryAcctEmployeePO.getEmployeeId());
salaryArchiveItemList = archiveItemGroupByArchiveId.get(archiveId == null ? 0L : archiveId);
jx = "0";
jdjx = "0";
bndjx = "0";
nzj = "0";
if (CollectionUtils.isNotEmpty(salaryArchiveItemList)) {
Map<Long, String> archiveValueMap = SalaryEntityUtil.convert2Map(salaryArchiveItemList, SalaryArchiveItemPO::getSalaryItemId, SalaryArchiveItemPO::getItemValue);
BigDecimal jdBzValue = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(jdItemId));
BigDecimal bndBzValue = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(bndItemId));
int monthValue = yearMonth.getMonthValue();
// 绩效
if (monthValue >=1 && monthValue <= 6) {
// 1-6月季度绩效工资标准/3+半年度绩效工资标准/6 档案
jx = jdBzValue.divide(new BigDecimal("3"), 15, RoundingMode.HALF_UP)
.add(bndBzValue.divide(new BigDecimal("6"), 15, RoundingMode.HALF_UP))
.setScale(2, RoundingMode.HALF_UP).toPlainString();
} else if (monthValue >=7 && monthValue <= 9) {
// 7-9月季度绩效工资标准/3 档案
jx = jdBzValue.divide(new BigDecimal("3"), 2, RoundingMode.HALF_UP).toPlainString();
}
// 季度绩效
if (monthValue == 3 || monthValue == 6 || monthValue == 9) {
jdjx = jdBzValue.toString();
// 半年度绩效
if (monthValue == 6) {
bndjx = bndBzValue.toString();
}
}
// 年终奖
if (monthValue == 12) {
nzj = bndBzValue.toString();
}
}
sb.append("(").append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
.append(employee.getWorkcode()).append("',")
.append(employee.getEmployeeId()).append(",")
.append(employee.getSubcompanyid()).append(",")
.append(employee.getDepartmentId()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
.append(jx).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
for (LtSalaryReportConfigDTO dto : reportConfigs) {
BigDecimal val = new BigDecimal("0");
if (singleAcctResultMap != null) {
String valStr = Utils.null2String(singleAcctResultMap.getOrDefault(Utils.null2String(dto.getItem()), "0"));
if (NumberUtils.isCreatable(valStr)) {
val = new BigDecimal(valStr);
}
}
sb.append(",").append(val.toPlainString());
}
sb.append("),");
}
rs.execute(sb.substring(0,sb.length()-1).toString());
}
// 权限重构
log.info("人员明细工资计提min{} max{} ",minId,maxId);
if (modeId != null && NumberUtils.isCreatable(modeId)) {
Integer modeIdValue = Integer.valueOf(modeId);
for (int i = minId; i <= maxId; i++) {
ModeRightInfo ModeRightInfo = new ModeRightInfo();
ModeRightInfo.setNewRight(true);
ModeRightInfo.editModeDataShare(1, modeIdValue, i);
}
}
return "success";
}
/**
* 联特表6 - 生成人员明细工资实发表
* @param salaryMonth
* @return
*/
@Override
public String ltGenRymxgzsf(String salaryMonth) {
if (!SalaryDateUtil.checkYearMonth(salaryMonth)) {
throw new SalaryRunTimeException("年月错误");
}
YearMonth yearMonth = SalaryDateUtil.String2YearMonth(salaryMonth);
BaseBean baseBean = new BaseBean();
// 查询生成的报表映射关系
String reportConfigStr = baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_ys_config");
List<LtSalaryReportConfigDTO> reportConfigs = JsonUtil.parseList(reportConfigStr, LtSalaryReportConfigDTO.class);
List<Long> salaryItemIds = reportConfigs.stream().map(LtSalaryReportConfigDTO::getItem).collect(Collectors.toList());
List<SalaryItemPO> salaryItemList = getSalaryItemService(user).listByIds(salaryItemIds);
// 查询薪资核算结果包含未归档
Date salaryMonthDate = SalaryDateUtil.localDateToDate(yearMonth.atDay(1));
List<SalaryAcctRecordPO> salaryAcctRecordList = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build());
// 月薪账套范围
List<Long> sobIds = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_sob_ids").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList());
salaryAcctRecordList = salaryAcctRecordList.stream().filter(sob -> sobIds.contains(sob.getSalarySobId())).collect(Collectors.toList());
if (CollectionUtils.isEmpty(salaryAcctRecordList)) {
return "success";
}
List<Long> salaryAcctRecordIds = salaryAcctRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds);
List<Long> employeeIdList = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList());
List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(employeeIdList);
// 查询薪资核算结果
List<Long> salaryAcctEmpIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList());
List<SalaryAcctResultPO> acctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds);
List<TaxAgentPO> taxAgentPOS = getTaxAgentService(user).listAll();
List<Map<String, Object>> acctResultMap = SalaryAcctResultBO.buildTableData(salaryItemList, Collections.emptyList(), employeeList, salaryAcctEmployeeList,
acctResultList, taxAgentPOS, Collections.emptySet(), Collections.emptyMap(), Collections.emptyMap(), false);
Map<String, Map<String, Object>> acctResultMapByKey = SalaryEntityUtil.convert2Map(acctResultMap, m -> Utils.null2String(m.get("taxAgentId")) + "_split" +Utils.null2String(m.get("employeeId")));
List<String> keyList = new ArrayList<>();
Set<Long> totalEmpIds = new HashSet<>();
keyList.addAll(acctResultMapByKey.keySet());
totalEmpIds.addAll(employeeIdList);
int monthValue = yearMonth.getMonthValue();
List<SalaryAcctRecordPO> allRecordList = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build());
// 处理季度绩效账套
Map<String, Map<String, Object>> jdAcctResultMapByKey = new HashMap<>();
Long jdjxItemId = SalaryEntityUtil.string2LongDefault0(baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_jdjxgz_item_id"));
if (monthValue == 3 || monthValue == 6 || monthValue == 9) {
List<Long> jdSobIds = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_jdjx_sob_ids").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList());
List<SalaryAcctRecordPO> jdRecordList = allRecordList.stream().filter(sob -> jdSobIds.contains(sob.getSalarySobId())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(jdRecordList)) {
SalaryItemPO jdSalaryItemPO = getSalaryItemService(user).getById(jdjxItemId);
List<Long> jdRecordIds = jdRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> jdAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(jdRecordIds);
List<Long> jdEmployeeIdList = jdAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList());
List<DataCollectionEmployee> jdEmployeeList = getSalaryEmployeeService(user).listByIds(jdEmployeeIdList);
// 查询薪资核算结果
List<Long> jdSalaryAcctEmpIds = jdAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList());
List<SalaryAcctResultPO> jdAcctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(jdSalaryAcctEmpIds, Collections.singletonList(jdjxItemId));
List<Map<String, Object>> jdAcctResultMap = SalaryAcctResultBO.buildTableData(Collections.singletonList(jdSalaryItemPO), Collections.emptyList(), jdEmployeeList, jdAcctEmployeeList,
jdAcctResultList, taxAgentPOS, Collections.emptySet(), Collections.emptyMap(), Collections.emptyMap(), false);
jdAcctResultMapByKey = SalaryEntityUtil.convert2Map(jdAcctResultMap, m -> Utils.null2String(m.get("taxAgentId")) + "_split" + Utils.null2String(m.get("employeeId")));
keyList.addAll(jdAcctResultMapByKey.keySet());
totalEmpIds.addAll(jdEmployeeIdList);
}
}
// 处理半年度绩效账套
Map<String, Map<String, Object>> bndAcctResultMapByKey = new HashMap<>();
Long bndItemId = SalaryEntityUtil.string2LongDefault0(baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_bndjxgz_item_id"));
if (monthValue == 6) {
List<Long> bndSobIds = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_bndjx_sob_ids").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList());
List<SalaryAcctRecordPO> bndRecordList = allRecordList.stream().filter(sob -> bndSobIds.contains(sob.getSalarySobId())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(bndRecordList)) {
SalaryItemPO bndSalaryItemPO = getSalaryItemService(user).getById(bndItemId);
List<Long> bndRecordIds = bndRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> bndAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(bndRecordIds);
List<Long> bndEmployeeIdList = bndAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList());
List<DataCollectionEmployee> bndEmployeeList = getSalaryEmployeeService(user).listByIds(bndEmployeeIdList);
// 查询薪资核算结果
List<Long> bndSalaryAcctEmpIds = bndAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList());
List<SalaryAcctResultPO> bndAcctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(bndSalaryAcctEmpIds, Collections.singletonList(bndItemId));
List<Map<String, Object>> bndAcctResultMap = SalaryAcctResultBO.buildTableData(Collections.singletonList(bndSalaryItemPO), Collections.emptyList(), bndEmployeeList, bndAcctEmployeeList,
bndAcctResultList, taxAgentPOS, Collections.emptySet(), Collections.emptyMap(), Collections.emptyMap(), false);
bndAcctResultMapByKey = SalaryEntityUtil.convert2Map(bndAcctResultMap, m -> Utils.null2String(m.get("taxAgentId")) + "_split" + Utils.null2String(m.get("employeeId")));
keyList.addAll(bndAcctResultMapByKey.keySet());
totalEmpIds.addAll(bndEmployeeIdList);
}
}
// 处理年终奖账套
Map<String, Map<String, Object>> nzjAcctResultMapByKey = new HashMap<>();
List<Long> nzjSobIds = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_nz_sob_ids").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList());
List<SalaryAcctRecordPO> nzjRecordList = allRecordList.stream().filter(sob -> nzjSobIds.contains(sob.getSalarySobId())).collect(Collectors.toList());
Long nzjItemId = SalaryEntityUtil.string2LongDefault0(baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_nzj_item_id"));
if (CollectionUtils.isNotEmpty(nzjRecordList)) {
SalaryItemPO nzjSalaryItemPO = getSalaryItemService(user).getById(nzjItemId);
List<Long> nzjRecordIds = nzjRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
List<SalaryAcctEmployeePO> nzjAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(nzjRecordIds);
List<Long> nzjEmployeeIdList = nzjAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList());
List<DataCollectionEmployee> nzjEmployeeList = getSalaryEmployeeService(user).listByIds(nzjEmployeeIdList);
// 查询薪资核算结果
List<Long> nzjSalaryAcctEmpIds = nzjAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList());
List<SalaryAcctResultPO> nzjAcctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(nzjSalaryAcctEmpIds, Collections.singletonList(nzjItemId));
List<Map<String, Object>> nzjAcctResultMap = SalaryAcctResultBO.buildTableData(Collections.singletonList(nzjSalaryItemPO), Collections.emptyList(), nzjEmployeeList, nzjAcctEmployeeList,
nzjAcctResultList, taxAgentPOS, Collections.emptySet(), Collections.emptyMap(), Collections.emptyMap(), false);
nzjAcctResultMapByKey = SalaryEntityUtil.convert2Map(nzjAcctResultMap, m -> Utils.null2String(m.get("taxAgentId")) + "_split" + Utils.null2String(m.get("employeeId")));
keyList.addAll(nzjAcctResultMapByKey.keySet());
totalEmpIds.addAll(nzjEmployeeIdList);
}
// 去重
keyList = keyList.stream().distinct().collect(Collectors.toList());
// 查询快照表中人员信息
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(getSalaryEmployeeService(user).snapshot(totalEmpIds.stream().collect(Collectors.toList()), SalaryDateUtil.localDateToDate(yearMonth.atDay(1))), DataCollectionEmployee::getEmployeeId);
// 入库
// 删除建模数据
RecordSet rs = new RecordSet();
rs.execute("delete from uf_rymxgzsf where qj = '" + salaryMonth+ "'");
// 插入建模
String currDate = String.format("'%s'", TimeUtil.getCurrentDateString());
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
String currTime = String.format("'%s'", sdf.format(new Date()));
// 获取建模模块id
String modeId = baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_mode_id");
// 先插入一条数据
String key = keyList.get(0);
StringBuilder firstSb = new StringBuilder();
String fieldStr = reportConfigs.stream().map(LtSalaryReportConfigDTO::getField).collect(Collectors.joining(","));
String[] split = key.split("_split");
Long empId = split != null && split.length > 1 ? SalaryEntityUtil.string2LongDefault0(split[1]) : 0L;
DataCollectionEmployee employee = employeeMap.getOrDefault(empId, DataCollectionEmployee.builder().build());
// 获取薪资核算结果
Map<String, Object> singleAcctResultMap = acctResultMapByKey.getOrDefault(key, new HashMap<>());
Map<String, Object> singleJdAcctResultMap = jdAcctResultMapByKey.getOrDefault(key, new HashMap<>());
String jdjx = NumberUtils.isCreatable(Utils.null2String(singleJdAcctResultMap.get(jdjxItemId.toString()))) ? Utils.null2String(singleJdAcctResultMap.get(jdjxItemId.toString())) : "0";
Map<String, Object> singleBndAcctResultMap = bndAcctResultMapByKey.getOrDefault(key, new HashMap<>());
String bndjx = NumberUtils.isCreatable(Utils.null2String(singleBndAcctResultMap.get(bndItemId.toString()))) ? Utils.null2String(singleBndAcctResultMap.get(bndItemId.toString())) : "0";
Map<String, Object> singleNzjAcctResultMap = nzjAcctResultMapByKey.getOrDefault(key, new HashMap<>());
String nzj = NumberUtils.isCreatable(Utils.null2String(singleNzjAcctResultMap.get(nzjItemId.toString()))) ? Utils.null2String(singleNzjAcctResultMap.get(nzjItemId.toString())) : "0";
firstSb.append("insert into uf_rymxgzsf(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,qj,cbzx,ydjx,jdjx,bndjx,nzj,"+fieldStr+") values (");
firstSb.append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
.append(employee.getWorkcode()).append("',")
.append(employee.getEmployeeId()).append(",")
.append(employee.getSubcompanyid()).append(",")
.append(employee.getDepartmentId()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
.append(0).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
for (LtSalaryReportConfigDTO dto : reportConfigs) {
BigDecimal val = new BigDecimal("0");
if (singleAcctResultMap != null) {
String valStr = Utils.null2String(singleAcctResultMap.getOrDefault(Utils.null2String(dto.getItem()), "0"));
if (NumberUtils.isCreatable(valStr)) {
val = new BigDecimal(valStr);
}
}
firstSb.append(",").append(val.toPlainString());
}
firstSb.append(")");
rs.execute(firstSb.toString());
keyList.remove(0);
// 获取最大值 作为权限重构的起始id
rs.execute("select max(id) from uf_rymxgzsf");
int minId = 0;
if (rs.next()) {
minId = rs.getInt(1);
}
int maxId = minId + keyList.size();
List<List<String>> partition = Lists.partition(keyList, 500);
for (List<String> part : partition) {
StringBuilder sb = new StringBuilder();
sb.append("insert into uf_rymxgzsf(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime,gh,xm,szfb,szbm,qj,cbzx,ydjx,jdjx,bndjx,nzj,"+fieldStr+") values ");
for (String keyStr : part) {
split = keyStr.split("_split");
empId = split != null && split.length > 1 ? SalaryEntityUtil.string2LongDefault0(split[1]) : 0L;
employee = employeeMap.getOrDefault(empId, DataCollectionEmployee.builder().build());
// 获取薪资核算结果
singleAcctResultMap = acctResultMapByKey.getOrDefault(keyStr, new HashMap<>());
singleJdAcctResultMap = jdAcctResultMapByKey.getOrDefault(keyStr, new HashMap<>());
jdjx = NumberUtils.isCreatable(Utils.null2String(singleJdAcctResultMap.get(jdjxItemId.toString()))) ? Utils.null2String(singleJdAcctResultMap.get(jdjxItemId.toString())) : "0";
singleBndAcctResultMap = bndAcctResultMapByKey.getOrDefault(keyStr, new HashMap<>());
bndjx = NumberUtils.isCreatable(Utils.null2String(singleBndAcctResultMap.get(bndItemId.toString()))) ? Utils.null2String(singleBndAcctResultMap.get(bndItemId.toString())) : "0";
singleNzjAcctResultMap = nzjAcctResultMapByKey.getOrDefault(keyStr, new HashMap<>());
nzj = NumberUtils.isCreatable(Utils.null2String(singleNzjAcctResultMap.get(nzjItemId.toString()))) ? Utils.null2String(singleNzjAcctResultMap.get(nzjItemId.toString())) : "0";
sb.append("(").append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'")
.append(employee.getWorkcode()).append("',")
.append(employee.getEmployeeId()).append(",")
.append(employee.getSubcompanyid()).append(",")
.append(employee.getDepartmentId()).append(",'")
.append(salaryMonth).append("','")
.append(Utils.null2String(employee.getLtCbzx())).append("',")
.append(0).append(",").append(jdjx).append(",").append(bndjx).append(",").append(nzj);
for (LtSalaryReportConfigDTO dto : reportConfigs) {
BigDecimal val = new BigDecimal("0");
if (singleAcctResultMap != null) {
String valStr = Utils.null2String(singleAcctResultMap.getOrDefault(Utils.null2String(dto.getItem()), "0"));
if (NumberUtils.isCreatable(valStr)) {
val = new BigDecimal(valStr);
}
}
sb.append(",").append(val.toPlainString());
}
sb.append("),");
}
rs.execute(sb.substring(0,sb.length()-1).toString());
}
// 权限重构
log.info("人员明细工资发放min{} max{} ",minId,maxId);
if (modeId != null && NumberUtils.isCreatable(modeId)) {
Integer modeIdValue = Integer.valueOf(modeId);
for (int i = minId; i <= maxId; i++) {
ModeRightInfo ModeRightInfo = new ModeRightInfo();
ModeRightInfo.setNewRight(true);
ModeRightInfo.editModeDataShare(1, modeIdValue, i);
}
}
return "success";
}
}

View File

@ -315,6 +315,19 @@ public class SalaryEntityUtil {
return null;
}
/**
* String转Long
*
* @param obj
* @return
*/
public static Long string2LongDefault0(String obj) {
if (NumberUtils.isCreatable(obj)) {
return Long.valueOf(obj);
}
return 0L;
}
/**
* String转Integer
*

View File

@ -1047,19 +1047,34 @@ public class SalaryAcctController {
return new ResponseResult<String, String>(user).run(getSalaryAcctResultWrapper(user)::ltGenBmgzjjmxSf, salaryMonth);
}
// /**
// * 联特表5 - 生成人员明细工资计提表
// * @param request
// * @param response
// * @param salaryMonth
// * @return
// */
// @GET
// @Path("/ltSalaryReport/genRymxgzjt")
// @Produces(MediaType.APPLICATION_JSON)
// public String ltGenRymxgzjt(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "salaryMonth") String salaryMonth) {
// User user = HrmUserVarify.getUser(request, response);
// return new ResponseResult<String, String>(user).run(getSalaryAcctResultWrapper(user)::ltGenRymxgzjt, salaryMonth);
// }
/**
* 联特表5 - 生成人员明细工资计提表
* @param request
* @param response
* @param salaryMonth
* @return
*/
@GET
@Path("/ltSalaryReport/genRymxgzjt")
@Produces(MediaType.APPLICATION_JSON)
public String ltGenRymxgzjt(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "salaryMonth") String salaryMonth) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, String>(user).run(getSalaryAcctResultWrapper(user)::ltGenRymxgzjt, salaryMonth);
}
/**
* 联特表6 - 生成人员明细工资实发表
* @param request
* @param response
* @param salaryMonth
* @return
*/
@GET
@Path("/ltSalaryReport/genRymxgzsf")
@Produces(MediaType.APPLICATION_JSON)
public String ltGenRymxgzsf(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "salaryMonth") String salaryMonth) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, String>(user).run(getSalaryAcctResultWrapper(user)::ltGenRymxgzsf, salaryMonth);
}
/**********************************联特 报表end*********************************/
}

View File

@ -404,4 +404,18 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult
public String ltGenBmgzjjmxSf(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenBmgzjjmxSf(salaryMonth);
}
/**
* 联特表5 - 生成人员明细工资计提表
*/
public String ltGenRymxgzjt(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenRymxgzjt(salaryMonth);
}
/**
* 联特表5 - 生成人员明细工资计提表
*/
public String ltGenRymxgzsf(String salaryMonth) {
return getSalaryAcctResultService(user).ltGenRymxgzsf(salaryMonth);
}
}