领悦报表逻辑修改调整222

This commit is contained in:
harryxzy 2026-02-12 12:33:48 +08:00
parent 7622a5f60f
commit 40212f5cca
4 changed files with 256 additions and 107 deletions

View File

@ -18,6 +18,8 @@ import lombok.NoArgsConstructor;
public class UfGjjInfo {
private Long id;
private String dyxzzq;
// 分部
private Long fb;

View File

@ -18,6 +18,9 @@ import lombok.NoArgsConstructor;
public class UfSbInfo {
private Long id;
// 对应薪资周期
private String dyxzzq;
// 分部
private Integer fb;

View File

@ -35,6 +35,7 @@
<result column="ylbxgrjn1" property="ylbxgrjn1" />
<result column="znxmlb" property="znxmlb" />
<result column="znxmmc" property="znxmmc" />
<result column="dyxzzq" property="dyxzzq" />
</resultMap>
<!-- 表字段 -->
@ -71,6 +72,7 @@
, t.ylbxgrjn1
, t.znxmlb
, t.znxmmc
, t.dyxzzq
</sql>
<!-- 查询全部 -->
@ -108,6 +110,7 @@
<result column="yg" property="yg" />
<result column="znxmlb" property="znxmlb" />
<result column="znxmmc" property="znxmmc" />
<result column="dyxzzq" property="dyxzzq" />
</resultMap>
<!-- 表字段 -->
@ -127,6 +130,7 @@
, t.yg
, t.znxmlb
, t.znxmmc
, t.dyxzzq
</sql>
<!-- 查询全部 -->

View File

@ -492,6 +492,8 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
}
// 主键id
map.put("id", e.getId());
// 薪资所属月
map.put("salaryMonth", SalaryDateUtil.getFormatYearMonth(e.getSalaryMonth()));
//人员id
map.put("employeeId", e.getEmployeeId());
map.put("userName", fieldValueMap.get("username"));
@ -532,6 +534,7 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
itemSum.put("employeeId", CollectionUtils.isEmpty(value) ? "" : value.get(0).get("employeeId"));
itemSum.put("subcompanyId", CollectionUtils.isEmpty(value) ? "" : value.get(0).get("subcompanyId") == null ? "0" : value.get(0).get("subcompanyId"));
itemSum.put("departmentId", CollectionUtils.isEmpty(value) ? "" : value.get(0).get("departmentId") == null ? "0" : value.get(0).get("departmentId"));
itemSum.put("salaryMonth", CollectionUtils.isEmpty(value) ? "" : value.get(0).get("salaryMonth") == null ? " " : value.get(0).get("salaryMonth"));
if (ffgsztItemId != null) {
Map<String, Object> map = value.get(0);
String rylb = map.get(ffgsztItemId.toString()) == null ? "" : map.get(ffgsztItemId.toString()).toString();
@ -2124,8 +2127,23 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
}
// 获取当月导入社保数据
// List<UfSbInfo> ufSbInfos = getLyUfSbgjjMapper().listSbInfoByFyssq(salaryMonth);
List<UfSbInfo> ufSbInfos = getLyUfSbgjjMapper().listSbInfoByDyxzzq(salaryMonth);
List<UfSbInfo> ufSbInfos = getLyUfSbgjjMapper().listSbInfoByFyssq(salaryMonth);
// 根据人员id汇总
Map<Long, List<UfSbInfo>> ufGroupByYg = SalaryEntityUtil.group2Map(ufSbInfos, UfSbInfo::getYg);
ufSbInfos = ufSbInfos.stream().filter(uf -> {
List<UfSbInfo> list = ufGroupByYg.get(uf.getYg());
if (CollectionUtils.isNotEmpty(list) && list.size() > 1) {
return !(uf.getSbgrjnhj() == null || uf.getSbgrjnhj().compareTo(Double.valueOf("0")) == 0);
}
return true;
}).collect(Collectors.toList());
List<Date> dateList = ufSbInfos.stream().map(UfSbInfo::getDyxzzq)
.distinct()
.map(date -> SalaryDateUtil.dateStrToLocalYearMonth(date))
.filter(date -> date != null).distinct()
.sorted(Comparator.comparing(Date::getTime))
.collect(Collectors.toList());
// List<UfSbInfo> ufSbInfos = getLyUfSbgjjMapper().listSbInfoByDyxzzq(salaryMonth);
ufSbInfos = ufSbInfos.stream().map(info -> {
if (info.getGmgsqc() == null) {
info.setGmgsqc("");
@ -2186,28 +2204,35 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
// 查询核算账套
List<SalarySobPO> salarySobList = getSalarySobService(user).listAll();
List<Long> salarySobIds = salarySobList.stream().map(SalarySobPO::getId).collect(Collectors.toList());
LocalDateRange dateRange = LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build();
// 查询所有薪资所属月下核算数据
List<Long> salaryAcctRecordIds = new ArrayList<>();
Map<String, List<Map<String, Object>>> resultGroupByKey = new HashMap<>();
if (CollectionUtils.isNotEmpty(dateList)) {
LocalDateRange dateRange = LocalDateRange.builder().fromDate(dateList.get(0)).endDate(dateList.get(dateList.size()-1)).build();
// 获取核算记录
List<SalaryAcctRecordPO> salaryAcctRecordList = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, dateRange);
salaryAcctRecordList = salaryAcctRecordList.stream().filter(salaryAcctRecordPO -> salaryAcctRecordPO.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()).collect(Collectors.toList());
List<Long> salaryAcctRecordIds = salaryAcctRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
LinkedHashMap<String, Map<String, Object>> acctSbSumByGsMap = new LinkedHashMap<>();
salaryAcctRecordIds = salaryAcctRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
}
if (CollectionUtils.isNotEmpty(salaryAcctRecordIds)) {
List<SalaryAcctEmployeePO> salaryAcctEmpList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds);
// 查新薪资核算结果
List<SalaryAcctResultPO> acctResultPOList = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndSalaryItemIds(salaryAcctRecordIds, salaryItemIdList);
List<Map<String, Object>> resultMapList = buildData4LyReport(salaryItemList, salaryAcctEmpList, new ArrayList<>(), acctResultPOList, false);
// 根据社保购买公司进行分组
Map<String, List<Map<String, Object>>> resultGroupByGmgs = SalaryEntityUtil.group2Map(resultMapList, map -> (map.get(gmgsItemId.toString()) == null ? " " : map.get(gmgsItemId.toString()).toString()));
List<SalaryItemPO> numberItems = salaryItemList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList());
acctSbSumByGsMap = getSumResultByGroup(resultGroupByGmgs, Collections.emptyList(), numberItems, null ,Collections.emptyList());
// 根据年月 社保购买公司 人员id进行分组
resultGroupByKey = SalaryEntityUtil.group2Map(resultMapList,
map -> (map.get("salaryMonth") == null ? " " : map.get("salaryMonth") + "_split" +(map.get(gmgsItemId.toString()) == null ? " " : map.get(gmgsItemId.toString()).toString())) + "_split" +(map.get("employeeId") == null ? " " : map.get("employeeId").toString()));
// List<SalaryItemPO> numberItems = salaryItemList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList());
// LinkedHashMap<String, Map<String, Object>> acctSbSumByGsAndDateMap = getSumResultByGroup(resultGroupByGmgsAndDate, Collections.emptyList(), numberItems, null ,Collections.emptyList());
}
// 取建模核算中购买公司合集
// 取建模核算中购买公司合集(中文)
Set<String> totalGs = new HashSet<>();
Set<String> acctGs = acctSbSumByGsMap.keySet();
// Set<String> acctGs = acctSbSumByGsAndDateMap.keySet().stream().map(key -> key.split("_split")[1]).collect(Collectors.toSet());
totalGs.addAll(ufSbSumByGsMap.keySet());
totalGs.addAll(acctGs);
// totalGs.addAll(acctGs);
String currDate = String.format("'%s'", TimeUtil.getCurrentDateString());
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
@ -2221,6 +2246,7 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
// 插入前先删除
String deleteSql ="delete from uf_dbhzb where yf = '"+ salaryMonth + "'";
rs.execute(deleteSql);
Map<String, List<Map<String, Object>>> finalResultGroupByKey = resultGroupByKey;
for (List<String> part : partition) {
// 插入对比数据
// StringBuilder sbSql = new StringBuilder("insert into uf_dbhzb(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime," +
@ -2262,14 +2288,36 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
"yf,gmgs,sbdrrs,xcffrs,drje,gzkkje,ce) values ");
for (String gmgs : part) {
String gmgsId = frztNameMap.get(gmgs);
Map<String, Object> acctSumMap = acctSbSumByGsMap.getOrDefault(gmgs, new HashMap<>());
// Map<String, Object> acctSumMap = acctSbSumByGsMap.getOrDefault(gmgs, new HashMap<>());
Map<String, BigDecimal> ufSumMap = ufSbSumByGsMap.getOrDefault(gmgs, new HashMap<>());
// 社保合计
String sbAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get(grjnheItemId.toString()))).toPlainString();
BigDecimal sbAcct = new BigDecimal("0");
// 获取该社保购买公司下建模数据
List<UfSbInfo> ufSbInfosList = ufSbInfoGroupMap.get(gmgsId);
// 核算人数
int[] countEmp = {0};
if (CollectionUtils.isNotEmpty(ufSbInfosList)) {
sbAcct = ufSbInfosList.stream().map(uf -> {
String key = uf.getDyxzzq() + "_split" + gmgs + "_split" + uf.getYg();
List<Map<String, Object>> maps = finalResultGroupByKey.get(key);
BigDecimal sum = new BigDecimal("0");
if (CollectionUtils.isNotEmpty(maps)) {
countEmp[0] = countEmp[0] + 1;
List<String> itemValue = maps.stream().filter(v -> v.get(grjnheItemId.toString()) != null).map(v -> (String) v.get(grjnheItemId.toString())).collect(Collectors.toList());
sum = itemValue
.stream()
.filter(NumberUtils::isCreatable)
.map(BigDecimal::new)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
return sum;
}).reduce(BigDecimal.ZERO, BigDecimal::add);
}
// String sbAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get(grjnheItemId.toString()))).toPlainString();
String sbUf = SalaryEntityUtil.empty2Zero(Utils.null2String(ufSumMap.get("sbgrjnhj"))).toPlainString();
String ce = new BigDecimal(sbUf).subtract(new BigDecimal(sbAcct)).toPlainString();
String ce = new BigDecimal(sbUf).subtract(sbAcct).toPlainString();
// 人数
String empNumsAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get("empNums"))).toPlainString();
String empNumsAcct =String.valueOf(countEmp[0]);
String empNumsUf = SalaryEntityUtil.empty2Zero(Utils.null2String(ufSumMap.get("empNums"))).toPlainString();
sbSql.append("(").append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'");
sbSql.append(salaryMonth).append("','")
@ -2318,7 +2366,23 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
}
// 获取当月导入公积金数据
List<UfGjjInfo> ufGjjInfos = getLyUfSbgjjMapper().listGjjInfoByDyxzzq(salaryMonth);
// List<UfGjjInfo> ufGjjInfos = getLyUfSbgjjMapper().listGjjInfoByDyxzzq(salaryMonth);
List<UfGjjInfo> ufGjjInfos = getLyUfSbgjjMapper().listGjjInfoByFyssq(salaryMonth);
// 根据人员id汇总
Map<Long, List<UfGjjInfo>> ufGroupByYg = SalaryEntityUtil.group2Map(ufGjjInfos, UfGjjInfo::getYg);
ufGjjInfos = ufGjjInfos.stream().filter(uf -> {
List<UfGjjInfo> list = ufGroupByYg.get(uf.getYg());
if (CollectionUtils.isNotEmpty(list) && list.size() > 1) {
return !(uf.getGjjgrjn() == null || uf.getGjjgrjn().compareTo(Double.valueOf("0")) == 0);
}
return true;
}).collect(Collectors.toList());
List<Date> dateList = ufGjjInfos.stream().map(UfGjjInfo::getDyxzzq)
.distinct()
.map(date -> SalaryDateUtil.dateStrToLocalYearMonth(date))
.filter(date -> date != null).distinct()
.sorted(Comparator.comparing(Date::getTime))
.collect(Collectors.toList());
// 根据公积金购买公司汇总
ufGjjInfos = ufGjjInfos.stream().map(value -> {
if (value.getFycdgsqc() == null) {
@ -2352,28 +2416,31 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
// 查询核算账套
List<SalarySobPO> salarySobList = getSalarySobService(user).listAll();
List<Long> salarySobIds = salarySobList.stream().map(SalarySobPO::getId).collect(Collectors.toList());
LocalDateRange dateRange = LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build();
List<Long> salaryAcctRecordIds = new ArrayList<>();
Map<String, List<Map<String, Object>>> resultGroupByKey = new HashMap<>();
if (CollectionUtils.isNotEmpty(dateList)) {
LocalDateRange dateRange = LocalDateRange.builder().fromDate(dateList.get(0)).endDate(dateList.get(dateList.size()-1)).build();
// 获取核算记录
List<SalaryAcctRecordPO> salaryAcctRecordList = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, dateRange);
salaryAcctRecordList = salaryAcctRecordList.stream().filter(salaryAcctRecordPO -> salaryAcctRecordPO.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()).collect(Collectors.toList());
List<Long> salaryAcctRecordIds = salaryAcctRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
LinkedHashMap<String, Map<String, Object>> acctSbSumByGsMap = new LinkedHashMap<>();
salaryAcctRecordIds = salaryAcctRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
}
if (CollectionUtils.isNotEmpty(salaryAcctRecordIds)) {
List<SalaryAcctEmployeePO> salaryAcctEmpList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds);
// 查新薪资核算结果
List<SalaryAcctResultPO> acctResultPOList = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndSalaryItemIds(salaryAcctRecordIds, salaryItemIdList);
List<Map<String, Object>> resultMapList = buildData4LyReport(salaryItemList, salaryAcctEmpList, new ArrayList<>(), acctResultPOList, false);
// 根据公积金购买公司进行分组
Map<String, List<Map<String, Object>>> resultGroupByGmgs = SalaryEntityUtil.group2Map(resultMapList, map -> (map.get(gmgsItemId.toString()) == null ? " " : map.get(gmgsItemId.toString()).toString()));
List<SalaryItemPO> numberItems = salaryItemList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList());
acctSbSumByGsMap = getSumResultByGroup(resultGroupByGmgs, Collections.emptyList(), numberItems, null ,Collections.emptyList());
// 根据年月 公积金购买公司 人员id进行分组
resultGroupByKey = SalaryEntityUtil.group2Map(resultMapList,
map -> (map.get("salaryMonth") == null ? " " : map.get("salaryMonth") + "_split" +(map.get(gmgsItemId.toString()) == null ? " " : map.get(gmgsItemId.toString()).toString())) + "_split" +(map.get("employeeId") == null ? " " : map.get("employeeId").toString()));
}
// 取建模核算中购买公司合集
Set<String> totalGs = new HashSet<>();
Set<String> acctGs = acctSbSumByGsMap.keySet();
// Set<String> acctGs = acctSbSumByGsMap.keySet();
totalGs.addAll(ufGjjSumByGsMap.keySet());
totalGs.addAll(acctGs);
// totalGs.addAll(acctGs);
String currDate = String.format("'%s'", TimeUtil.getCurrentDateString());
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
@ -2387,20 +2454,44 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
// 插入前先删除
String deleteSql ="delete from uf_dbhzbgjj where yf = '"+ salaryMonth + "'";
rs.execute(deleteSql);
Map<String, List<Map<String, Object>>> finalResultGroupByKey = resultGroupByKey;
for (List<String> part : partition) {
// 插入对比数据
StringBuilder sbSql = new StringBuilder("insert into uf_dbhzbgjj(formmodeid,modedatacreater,modedatacreatertype,modedatacreatedate,modedatacreatetime," +
"yf,gmgs,gjjdrrs,xcffrs,gjjdrsj,gjjxcff,ce) values ");
for (String gmgs : part) {
String gmgsId = frztNameMap.get(gmgs);
Map<String, Object> acctSumMap = acctSbSumByGsMap.getOrDefault(gmgs, new HashMap<>());
// Map<String, Object> acctSumMap = acctSbSumByGsMap.getOrDefault(gmgs, new HashMap<>());
Map<String, BigDecimal> ufSumMap = ufGjjSumByGsMap.getOrDefault(gmgs, new HashMap<>());
// 公积金
String gjjAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get(gjjItemId.toString()))).toPlainString();
BigDecimal gjjAcct = new BigDecimal("0");
// 获取该公积金购买公司下建模数据
List<UfGjjInfo> ufGjjInfosList = ufGjjInfoGroupMap.get(gmgsId);
// 核算人数
int[] countEmp = {0};
if (CollectionUtils.isNotEmpty(ufGjjInfosList)) {
gjjAcct = ufGjjInfosList.stream().map(uf -> {
String key = uf.getDyxzzq() + "_split" + gmgs + "_split" + uf.getYg();
List<Map<String, Object>> maps = finalResultGroupByKey.get(key);
BigDecimal sum = new BigDecimal("0");
if (CollectionUtils.isNotEmpty(maps)) {
countEmp[0] = countEmp[0] + 1;
List<String> itemValue = maps.stream().filter(v -> v.get(gjjItemId.toString()) != null).map(v -> (String) v.get(gjjItemId.toString())).collect(Collectors.toList());
sum = itemValue
.stream()
.filter(NumberUtils::isCreatable)
.map(BigDecimal::new)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
return sum;
}).reduce(BigDecimal.ZERO, BigDecimal::add);
}
// String gjjAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get(gjjItemId.toString()))).toPlainString();
String gjjUf = SalaryEntityUtil.empty2Zero(Utils.null2String(ufSumMap.get("gjj"))).toPlainString();
String ce = new BigDecimal(gjjUf).subtract(new BigDecimal(gjjAcct)).toPlainString();
String ce = new BigDecimal(gjjUf).subtract(gjjAcct).toPlainString();
// 人数
String empNumsAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get("empNums"))).toPlainString();
// String empNumsAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get("empNums"))).toPlainString();
String empNumsAcct =String.valueOf(countEmp[0]);
String empNumsUf = SalaryEntityUtil.empty2Zero(Utils.null2String(ufSumMap.get("empNums"))).toPlainString();
sbSql.append("(").append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'");
sbSql.append(salaryMonth).append("','")
@ -2449,15 +2540,33 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
}
// 获取当月导入社保数据
List<UfSbInfo> ufSbInfos = getLyUfSbgjjMapper().listSbInfoByDyxzzq(salaryMonth);
// List<UfSbInfo> ufSbInfos = getLyUfSbgjjMapper().listSbInfoByDyxzzq(salaryMonth);
List<UfSbInfo> ufSbInfos = getLyUfSbgjjMapper().listSbInfoByFyssq(salaryMonth);
// 根据人员id汇总
Map<Long, List<UfSbInfo>> ufGroupByYg = SalaryEntityUtil.group2Map(ufSbInfos, UfSbInfo::getYg);
ufSbInfos = ufSbInfos.stream().filter(uf -> {
List<UfSbInfo> list = ufGroupByYg.get(uf.getYg());
if (CollectionUtils.isNotEmpty(list) && list.size() > 1) {
return !(uf.getSbgrjnhj() == null || uf.getSbgrjnhj().compareTo(Double.valueOf("0")) == 0);
}
return true;
}).collect(Collectors.toList());
List<Date> dateList = ufSbInfos.stream().map(UfSbInfo::getDyxzzq)
.distinct()
.map(date -> SalaryDateUtil.dateStrToLocalYearMonth(date))
.filter(date -> date != null).distinct()
.sorted(Comparator.comparing(Date::getTime))
.collect(Collectors.toList());
ufSbInfos = ufSbInfos.stream().map(value -> {
if (value.getGmgsqc() == null) {
value.setGmgsqc("");
}
return value;
}).collect(Collectors.toList());
// 根据社保购买公司汇总
// 根据社保购买公司员工汇总
Map<String, List<UfSbInfo>> ufSbInfoGroupMap = SalaryEntityUtil.group2Map(ufSbInfos, ufSbInfo -> Utils.null2String(ufSbInfo.getGmgsqc()) + "_split" + Utils.null2String(ufSbInfo.getYg()));
Map<String, List<UfSbInfo>> ufSbInfoNameGroupMap = SalaryEntityUtil.group2Map(ufSbInfos, ufSbInfo -> Utils.null2String(frztMap.get(Utils.null2String(ufSbInfo.getGmgsqc()))) + "_split" + Utils.null2String(ufSbInfo.getYg()));
// 以购买公司维度求和
Map<String, Map<String, BigDecimal>> ufSbSumByGsMap = new HashMap<>();
for (Map.Entry<String, List<UfSbInfo>> entry : ufSbInfoGroupMap.entrySet()) {
@ -2511,69 +2620,61 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
// 查询核算账套
List<SalarySobPO> salarySobList = getSalarySobService(user).listAll();
List<Long> salarySobIds = salarySobList.stream().map(SalarySobPO::getId).collect(Collectors.toList());
LocalDateRange dateRange = LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build();
// 查询所有薪资所属月下核算数据
List<Long> salaryAcctRecordIds = new ArrayList<>();
Map<String, List<Map<String, Object>>> resultGroupByKey = new HashMap<>();
if (CollectionUtils.isNotEmpty(dateList)) {
LocalDateRange dateRange = LocalDateRange.builder().fromDate(dateList.get(0)).endDate(dateList.get(dateList.size()-1)).build();
// 获取核算记录
List<SalaryAcctRecordPO> salaryAcctRecordList = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, dateRange);
salaryAcctRecordList = salaryAcctRecordList.stream().filter(salaryAcctRecordPO -> salaryAcctRecordPO.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()).collect(Collectors.toList());
List<Long> salaryAcctRecordIds = salaryAcctRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
LinkedHashMap<String, Map<String, Object>> acctSbSumByGsMap = new LinkedHashMap<>();
salaryAcctRecordIds = salaryAcctRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
}
if (CollectionUtils.isNotEmpty(salaryAcctRecordIds)) {
List<SalaryAcctEmployeePO> salaryAcctEmpList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds);
// 查新薪资核算结果
List<SalaryAcctResultPO> acctResultPOList = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndSalaryItemIds(salaryAcctRecordIds, salaryItemIdList);
List<Map<String, Object>> resultMapList = buildData4LyReport(salaryItemList, salaryAcctEmpList, new ArrayList<>(), acctResultPOList, false);
// 根据社保购买公司进行分组
Map<String, List<Map<String, Object>>> resultGroupByGmgsEmp = SalaryEntityUtil.group2Map(resultMapList,
map -> (map.get(gmgsItemId.toString()) == null ? " " : map.get(gmgsItemId.toString()).toString() + "_split" + Utils.null2String(map.get("employeeId")) ));
List<SalaryItemPO> numberItems = salaryItemList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList());
acctSbSumByGsMap = getSumResultByGroup(resultGroupByGmgsEmp, Collections.emptyList(), numberItems, null ,Collections.emptyList());
// 根据年月 社保购买公司 人员id进行分组
resultGroupByKey = SalaryEntityUtil.group2Map(resultMapList,
map -> (map.get("salaryMonth") == null ? " " : map.get("salaryMonth") + "_split" +(map.get(gmgsItemId.toString()) == null ? " " : map.get(gmgsItemId.toString()).toString())) + "_split" +(map.get("employeeId") == null ? " " : map.get("employeeId").toString()));
// List<SalaryItemPO> numberItems = salaryItemList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList());
// LinkedHashMap<String, Map<String, Object>> acctSbSumByGsAndDateMap = getSumResultByGroup(resultGroupByGmgsAndDate, Collections.emptyList(), numberItems, null ,Collections.emptyList());
}
// 取建模核算中购买公司_split人员id 合集
Set<String> totalKey = new HashSet<>();
Set<String> acctGs = acctSbSumByGsMap.keySet();
// Set<String> acctGs = acctSbSumByGsMap.keySet();
totalKey.addAll(ufSbSumByGsMap.keySet());
totalKey.addAll(acctGs);
// totalKey.addAll(acctGs);
// 对比建模核算数据过滤出有差异的key
List<Map<String, Object>> diffList = new ArrayList<>();
Map<String, List<Map<String, Object>>> finalResultGroupByKey = resultGroupByKey;
for (String key : totalKey) {
boolean hasDiff = false;
Map<String, Object> acctSumMap = acctSbSumByGsMap.getOrDefault(key, new HashMap<>());
Map<String, BigDecimal> ufSumMap = ufSbSumByGsMap.getOrDefault(key, new HashMap<>());
// // 养老
// BigDecimal ylAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get(ylItemId.toString())));
// BigDecimal ylUf = SalaryEntityUtil.empty2Zero(Utils.null2String(ufSumMap.get("yl")));
// if (ylAcct.compareTo(ylUf) != 0) {
// hasDiff = true;
// }
// // 医疗
// BigDecimal yliaoAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get(yliaoItemId.toString())));
// BigDecimal yliaoUf = SalaryEntityUtil.empty2Zero(Utils.null2String(ufSumMap.get("yliao")));
// if (yliaoAcct.compareTo(yliaoUf) != 0) {
// hasDiff = true;
// }
// // 生育
// BigDecimal syAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get(syItemId.toString())));
// BigDecimal syUf = SalaryEntityUtil.empty2Zero(Utils.null2String(ufSumMap.get("sy")));
// if (syAcct.compareTo(syUf) != 0) {
// hasDiff = true;
// }
// // 工伤
// BigDecimal gsAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get(gsItemId.toString())));
// BigDecimal gsUf = SalaryEntityUtil.empty2Zero(Utils.null2String(ufSumMap.get("gs")));
// if (gsAcct.compareTo(gsUf) != 0) {
// hasDiff = true;
// }
// // 失业
// BigDecimal syeAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get(syeItemId.toString())));
// BigDecimal syeUf = SalaryEntityUtil.empty2Zero(Utils.null2String(ufSumMap.get("sye")));
// if (syeAcct.compareTo(syeUf) != 0) {
// hasDiff = true;
// }
// 社保合计
BigDecimal sbAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get(grjnheItemId.toString())));
BigDecimal sbAcct = new BigDecimal("0");
// 获取该社保购买公司下建模数据
List<UfSbInfo> ufSbInfosList = ufSbInfoNameGroupMap.get(key);
if (CollectionUtils.isNotEmpty(ufSbInfosList)) {
sbAcct = ufSbInfosList.stream().map(uf -> {
List<Map<String, Object>> maps = finalResultGroupByKey.get(uf.getDyxzzq() + "_split" + key);
BigDecimal sum = new BigDecimal("0");
if (CollectionUtils.isNotEmpty(maps)) {
List<String> itemValue = maps.stream().filter(v -> v.get(grjnheItemId.toString()) != null).map(v -> (String) v.get(grjnheItemId.toString())).collect(Collectors.toList());
sum = itemValue
.stream()
.filter(NumberUtils::isCreatable)
.map(BigDecimal::new)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
return sum;
}).reduce(BigDecimal.ZERO, BigDecimal::add);
}
BigDecimal sbUf = SalaryEntityUtil.empty2Zero(Utils.null2String(ufSumMap.get("sbgrjnhj")));
if (sbAcct.compareTo(sbUf) != 0) {
hasDiff = true;
@ -2584,16 +2685,6 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
Long empId = splitKey.length > 1 && NumberUtils.isCreatable(splitKey[1]) ? Long.valueOf(splitKey[1]) : 0;
if (hasDiff) {
Map<String, Object> singleDiffMap = new HashMap<>();
// singleDiffMap.put("ylAcct", ylAcct);
// singleDiffMap.put("ylUf", ylUf);
// singleDiffMap.put("yliaoAcct", yliaoAcct);
// singleDiffMap.put("yliaoUf", yliaoUf);
// singleDiffMap.put("syAcct", syAcct);
// singleDiffMap.put("syUf", syUf);
// singleDiffMap.put("gsAcct", gsAcct);
// singleDiffMap.put("gsUf", gsUf);
// singleDiffMap.put("syeAcct", syeAcct);
// singleDiffMap.put("syeUf", syeUf);
singleDiffMap.put("sbAcct", sbAcct);
singleDiffMap.put("sbUf", sbUf);
singleDiffMap.put("xm", empId);
@ -2678,7 +2769,23 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
}
// 获取当月导入社保数据
List<UfGjjInfo> ufGjjInfos = getLyUfSbgjjMapper().listGjjInfoByDyxzzq(salaryMonth);
// List<UfGjjInfo> ufGjjInfos = getLyUfSbgjjMapper().listGjjInfoByDyxzzq(salaryMonth);
List<UfGjjInfo> ufGjjInfos = getLyUfSbgjjMapper().listGjjInfoByFyssq(salaryMonth);
// 根据人员id汇总
Map<Long, List<UfGjjInfo>> ufGroupByYg = SalaryEntityUtil.group2Map(ufGjjInfos, UfGjjInfo::getYg);
ufGjjInfos = ufGjjInfos.stream().filter(uf -> {
List<UfGjjInfo> list = ufGroupByYg.get(uf.getYg());
if (CollectionUtils.isNotEmpty(list) && list.size() > 1) {
return !(uf.getGjjgrjn() == null || uf.getGjjgrjn().compareTo(Double.valueOf("0")) == 0);
}
return true;
}).collect(Collectors.toList());
List<Date> dateList = ufGjjInfos.stream().map(UfGjjInfo::getDyxzzq)
.distinct()
.map(date -> SalaryDateUtil.dateStrToLocalYearMonth(date))
.filter(date -> date != null).distinct()
.sorted(Comparator.comparing(Date::getTime))
.collect(Collectors.toList());
ufGjjInfos = ufGjjInfos.stream().map(value -> {
if (value.getFycdgsqc() == null) {
value.setFycdgsqc("");
@ -2687,6 +2794,8 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
}).collect(Collectors.toList());
// 根据社保购买公司汇总
Map<String, List<UfGjjInfo>> ufGjjInfoGroupMap = SalaryEntityUtil.group2Map(ufGjjInfos, ufGjjInfo -> Utils.null2String(ufGjjInfo.getFycdgsqc()) + "_split" + Utils.null2String(ufGjjInfo.getYg()));
Map<String, List<UfGjjInfo>> ufGjjInfoNameGroupMap = SalaryEntityUtil.group2Map(ufGjjInfos, ufGjjInfo -> Utils.null2String(frztMap.get(Utils.null2String(ufGjjInfo.getFycdgsqc()))) + "_split" + Utils.null2String(ufGjjInfo.getYg()));
// 以购买公司维度求和
Map<String, Map<String, BigDecimal>> ufGjjSumByGsMap = new HashMap<>();
for (Map.Entry<String, List<UfGjjInfo>> entry : ufGjjInfoGroupMap.entrySet()) {
@ -2714,11 +2823,18 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
// 查询核算账套
List<SalarySobPO> salarySobList = getSalarySobService(user).listAll();
List<Long> salarySobIds = salarySobList.stream().map(SalarySobPO::getId).collect(Collectors.toList());
LocalDateRange dateRange = LocalDateRange.builder().fromDate(salaryMonthDate).endDate(salaryMonthDate).build();
// 查询所有薪资所属月下核算数据
List<Long> salaryAcctRecordIds = new ArrayList<>();
Map<String, List<Map<String, Object>>> resultGroupByKey = new HashMap<>();
if (CollectionUtils.isNotEmpty(dateList)) {
LocalDateRange dateRange = LocalDateRange.builder().fromDate(dateList.get(0)).endDate(dateList.get(dateList.size()-1)).build();
// 获取核算记录
List<SalaryAcctRecordPO> salaryAcctRecordList = getSalaryAcctRecordService(user).listBySalarySobIdsAndSalaryMonth(salarySobIds, dateRange);
salaryAcctRecordList = salaryAcctRecordList.stream().filter(salaryAcctRecordPO -> salaryAcctRecordPO.getStatus() > SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue()).collect(Collectors.toList());
List<Long> salaryAcctRecordIds = salaryAcctRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
salaryAcctRecordIds = salaryAcctRecordList.stream().map(SalaryAcctRecordPO::getId).collect(Collectors.toList());
}
LinkedHashMap<String, Map<String, Object>> acctSbSumByGsMap = new LinkedHashMap<>();
if (CollectionUtils.isNotEmpty(salaryAcctRecordIds)) {
List<SalaryAcctEmployeePO> salaryAcctEmpList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds);
@ -2726,26 +2842,50 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport
List<SalaryAcctResultPO> acctResultPOList = getSalaryAcctResultService(user).listBySalaryAcctRecordIdsAndSalaryItemIds(salaryAcctRecordIds, salaryItemIdList);
List<Map<String, Object>> resultMapList = buildData4LyReport(salaryItemList, salaryAcctEmpList, new ArrayList<>(), acctResultPOList, false);
// 根据社保购买公司进行分组
Map<String, List<Map<String, Object>>> resultGroupByGmgsEmp = SalaryEntityUtil.group2Map(resultMapList,
map -> (map.get(gmgsItemId.toString()) == null ? " " : map.get(gmgsItemId.toString()).toString() + "_split" + Utils.null2String(map.get("employeeId")) ));
List<SalaryItemPO> numberItems = salaryItemList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList());
acctSbSumByGsMap = getSumResultByGroup(resultGroupByGmgsEmp, Collections.emptyList(), numberItems, null ,Collections.emptyList());
// Map<String, List<Map<String, Object>>> resultGroupByGmgsEmp = SalaryEntityUtil.group2Map(resultMapList,
// map -> (map.get(gmgsItemId.toString()) == null ? " " : map.get(gmgsItemId.toString()).toString() + "_split" + Utils.null2String(map.get("employeeId")) ));
// List<SalaryItemPO> numberItems = salaryItemList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList());
// acctSbSumByGsMap = getSumResultByGroup(resultGroupByGmgsEmp, Collections.emptyList(), numberItems, null ,Collections.emptyList());
// 根据年月 公积金购买公司 人员id进行分组
resultGroupByKey = SalaryEntityUtil.group2Map(resultMapList,
map -> (map.get("salaryMonth") == null ? " " : map.get("salaryMonth") + "_split" +(map.get(gmgsItemId.toString()) == null ? " " : map.get(gmgsItemId.toString()).toString())) + "_split" +(map.get("employeeId") == null ? " " : map.get("employeeId").toString()));
}
// 取建模核算中购买公司_split人员id 合集
Set<String> totalKey = new HashSet<>();
Set<String> acctGs = acctSbSumByGsMap.keySet();
// Set<String> acctGs = acctSbSumByGsMap.keySet();
totalKey.addAll(ufGjjSumByGsMap.keySet());
totalKey.addAll(acctGs);
// totalKey.addAll(acctGs);
// 对比建模核算数据过滤出有差异的key
List<Map<String, Object>> diffList = new ArrayList<>();
Map<String, List<Map<String, Object>>> finalResultGroupByKey = resultGroupByKey;
for (String key : totalKey) {
boolean hasDiff = false;
Map<String, Object> acctSumMap = acctSbSumByGsMap.getOrDefault(key, new HashMap<>());
// Map<String, Object> acctSumMap = acctSbSumByGsMap.getOrDefault(key, new HashMap<>());
Map<String, BigDecimal> ufSumMap = ufGjjSumByGsMap.getOrDefault(key, new HashMap<>());
// 公积金
BigDecimal gjjAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get(gjjItemId.toString())));
BigDecimal gjjAcct = new BigDecimal("0");
// 获取该社保购买公司下建模数据
List<UfGjjInfo> ufGjjInfosList = ufGjjInfoNameGroupMap.get(key);
if (CollectionUtils.isNotEmpty(ufGjjInfosList)) {
gjjAcct = ufGjjInfosList.stream().map(uf -> {
List<Map<String, Object>> maps = finalResultGroupByKey.get(uf.getDyxzzq() + "_split" + key);
BigDecimal sum = new BigDecimal("0");
if (CollectionUtils.isNotEmpty(maps)) {
List<String> itemValue = maps.stream().filter(v -> v.get(gjjItemId.toString()) != null).map(v -> (String) v.get(gjjItemId.toString())).collect(Collectors.toList());
sum = itemValue
.stream()
.filter(NumberUtils::isCreatable)
.map(BigDecimal::new)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
return sum;
}).reduce(BigDecimal.ZERO, BigDecimal::add);
}
// BigDecimal gjjAcct = SalaryEntityUtil.empty2Zero(Utils.null2String(acctSumMap.get(gjjItemId.toString())));
BigDecimal gjjUf = SalaryEntityUtil.empty2Zero(Utils.null2String(ufSumMap.get("gjj")));
if (gjjAcct.compareTo(gjjUf) != 0) {
hasDiff = true;