diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index b906a6a37..8a24008cd 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -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())); // 个税扣缴义务人的字段类型 diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index d02e0b2be..abcc0fe7c 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -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); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index d6031785c..14ce5c10e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -1859,7 +1859,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List salaryAcctRecordList = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build()); // 账套范围 List 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 salaryAcctRecordList = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build()); // 账套范围 List 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 reportConfigs = JsonUtil.parseList(reportConfigStr, LtSalaryReportConfigDTO.class); + List salaryItemIds = reportConfigs.stream().map(LtSalaryReportConfigDTO::getItem).collect(Collectors.toList()); + List salaryItemList = getSalaryItemService(user).listByIds(salaryItemIds); + // 查询薪资核算结果(包含未归档) + Date salaryMonthDate = SalaryDateUtil.localDateToDate(yearMonth.atDay(1)); + List salaryAcctRecordList = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build()); + // 账套范围 + List 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 salaryAcctRecordIds = salaryAcctRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); + List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds); + List employeeIdList = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List employeeList = getSalaryEmployeeService(user).listByIds(employeeIdList); + // 查询薪资核算结果 + List salaryAcctEmpIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); + List acctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds); + List taxAgentPOS = getTaxAgentService(user).listAll(); + List> acctResultMap = SalaryAcctResultBO.buildTableData(salaryItemList, Collections.emptyList(), employeeList, salaryAcctEmployeeList, + acctResultList, taxAgentPOS, Collections.emptySet(), Collections.emptyMap(), Collections.emptyMap(), false); + Map> acctResultMapByAcctEmpId = SalaryEntityUtil.convert2Map(acctResultMap, m -> Utils.null2String(m.get("id"))); + + // 查询员工薪资档案 + List salaryArchiveList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().employeeIds(employeeIdList).build()); + Map archiveIdMap = SalaryEntityUtil.convert2Map(salaryArchiveList, archive -> archive.getTaxAgentId() + "_" + archive.getEmployeeId(), archive -> archive.getId()); + List 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 archiveItemIds = Arrays.asList(jdItemId, bndItemId, nzjItemId); + Date lastDayOfMonth = SalaryDateUtil.getLastDayOfMonth(salaryMonthDate); + List salaryArchiveItemCurrentList = getSalaryArchiveItemService(user).getEffectiveItemListBySalaryMonth(salaryArchiveIds, archiveItemIds, lastDayOfMonth); + Map> archiveItemGroupByArchiveId = SalaryEntityUtil.group2Map(salaryArchiveItemCurrentList, archive -> archive.getSalaryArchiveId()); + + // 查询快照表中人员信息 + Map 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 salaryArchiveItemList = archiveItemGroupByArchiveId.get(archiveId == null ? 0L : archiveId); + String jx = "0"; + String jdjx = "0"; + String bndjx = "0"; + String nzj = "0"; + if (CollectionUtils.isNotEmpty(salaryArchiveItemList)) { + Map 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 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> partition = Lists.partition(salaryAcctEmployeeList, 500); + for (List 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 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 reportConfigs = JsonUtil.parseList(reportConfigStr, LtSalaryReportConfigDTO.class); + List salaryItemIds = reportConfigs.stream().map(LtSalaryReportConfigDTO::getItem).collect(Collectors.toList()); + List salaryItemList = getSalaryItemService(user).listByIds(salaryItemIds); + // 查询薪资核算结果(包含未归档) + Date salaryMonthDate = SalaryDateUtil.localDateToDate(yearMonth.atDay(1)); + List salaryAcctRecordList = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build()); + // 月薪账套范围 + List 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 salaryAcctRecordIds = salaryAcctRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); + List salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds); + List employeeIdList = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List employeeList = getSalaryEmployeeService(user).listByIds(employeeIdList); + // 查询薪资核算结果 + List salaryAcctEmpIds = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); + List acctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIds, salaryItemIds); + List taxAgentPOS = getTaxAgentService(user).listAll(); + List> acctResultMap = SalaryAcctResultBO.buildTableData(salaryItemList, Collections.emptyList(), employeeList, salaryAcctEmployeeList, + acctResultList, taxAgentPOS, Collections.emptySet(), Collections.emptyMap(), Collections.emptyMap(), false); + Map> acctResultMapByKey = SalaryEntityUtil.convert2Map(acctResultMap, m -> Utils.null2String(m.get("taxAgentId")) + "_split" +Utils.null2String(m.get("employeeId"))); + + List keyList = new ArrayList<>(); + Set totalEmpIds = new HashSet<>(); + keyList.addAll(acctResultMapByKey.keySet()); + totalEmpIds.addAll(employeeIdList); + int monthValue = yearMonth.getMonthValue(); + List allRecordList = getSalaryAcctRecordService(user).listBySalaryMonth(LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build()); + // 处理季度绩效账套 + Map> jdAcctResultMapByKey = new HashMap<>(); + Long jdjxItemId = SalaryEntityUtil.string2LongDefault0(baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_jdjxgz_item_id")); + if (monthValue == 3 || monthValue == 6 || monthValue == 9) { + List jdSobIds = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_jdjx_sob_ids").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); + List jdRecordList = allRecordList.stream().filter(sob -> jdSobIds.contains(sob.getSalarySobId())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(jdRecordList)) { + SalaryItemPO jdSalaryItemPO = getSalaryItemService(user).getById(jdjxItemId); + List jdRecordIds = jdRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); + List jdAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(jdRecordIds); + List jdEmployeeIdList = jdAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List jdEmployeeList = getSalaryEmployeeService(user).listByIds(jdEmployeeIdList); + // 查询薪资核算结果 + List jdSalaryAcctEmpIds = jdAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); + List jdAcctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(jdSalaryAcctEmpIds, Collections.singletonList(jdjxItemId)); + List> 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> bndAcctResultMapByKey = new HashMap<>(); + Long bndItemId = SalaryEntityUtil.string2LongDefault0(baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_bndjxgz_item_id")); + if (monthValue == 6) { + List bndSobIds = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_bndjx_sob_ids").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); + List bndRecordList = allRecordList.stream().filter(sob -> bndSobIds.contains(sob.getSalarySobId())).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(bndRecordList)) { + + SalaryItemPO bndSalaryItemPO = getSalaryItemService(user).getById(bndItemId); + List bndRecordIds = bndRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); + List bndAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(bndRecordIds); + List bndEmployeeIdList = bndAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List bndEmployeeList = getSalaryEmployeeService(user).listByIds(bndEmployeeIdList); + // 查询薪资核算结果 + List bndSalaryAcctEmpIds = bndAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); + List bndAcctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(bndSalaryAcctEmpIds, Collections.singletonList(bndItemId)); + List> 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> nzjAcctResultMapByKey = new HashMap<>(); + List nzjSobIds = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "rymxgzsfb_nz_sob_ids").split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); + List 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 nzjRecordIds = nzjRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList()); + List nzjAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(nzjRecordIds); + List nzjEmployeeIdList = nzjAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()); + List nzjEmployeeList = getSalaryEmployeeService(user).listByIds(nzjEmployeeIdList); + // 查询薪资核算结果 + List nzjSalaryAcctEmpIds = nzjAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); + List nzjAcctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(nzjSalaryAcctEmpIds, Collections.singletonList(nzjItemId)); + List> 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 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 singleAcctResultMap = acctResultMapByKey.getOrDefault(key, new HashMap<>()); + Map singleJdAcctResultMap = jdAcctResultMapByKey.getOrDefault(key, new HashMap<>()); + String jdjx = NumberUtils.isCreatable(Utils.null2String(singleJdAcctResultMap.get(jdjxItemId.toString()))) ? Utils.null2String(singleJdAcctResultMap.get(jdjxItemId.toString())) : "0"; + Map singleBndAcctResultMap = bndAcctResultMapByKey.getOrDefault(key, new HashMap<>()); + String bndjx = NumberUtils.isCreatable(Utils.null2String(singleBndAcctResultMap.get(bndItemId.toString()))) ? Utils.null2String(singleBndAcctResultMap.get(bndItemId.toString())) : "0"; + Map 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> partition = Lists.partition(keyList, 500); + for (List 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"; + } } \ No newline at end of file diff --git a/src/com/engine/salary/util/SalaryEntityUtil.java b/src/com/engine/salary/util/SalaryEntityUtil.java index f14a1a2d8..b13aaa4fe 100644 --- a/src/com/engine/salary/util/SalaryEntityUtil.java +++ b/src/com/engine/salary/util/SalaryEntityUtil.java @@ -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 * diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index a0b854bc5..e7359dd79 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -1047,19 +1047,34 @@ public class SalaryAcctController { return new ResponseResult(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(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(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(user).run(getSalaryAcctResultWrapper(user)::ltGenRymxgzsf, salaryMonth); + } /**********************************联特 报表end*********************************/ } diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index d66bbf653..c20331d84 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -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); + } }