diff --git a/src/com/engine/salary/action/LyClearAddUpSituationAction.java b/src/com/engine/salary/action/LyClearAddUpSituationAction.java new file mode 100644 index 000000000..e1750bcea --- /dev/null +++ b/src/com/engine/salary/action/LyClearAddUpSituationAction.java @@ -0,0 +1,114 @@ +package com.engine.salary.action; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.datacollection.AddUpSituation; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.mapper.datacollection.AddUpSituationMapper; +import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.impl.TaxAgentServiceImpl; +import com.engine.salary.util.db.MapperProxyFactory; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; +import weaver.conn.RecordSet; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.workflow.action.Action; +import weaver.soa.workflow.request.Property; +import weaver.soa.workflow.request.RequestInfo; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @ClassName LyClearAddUpSituationAction + * @author Harryxzy + * @date 2025/9/18 10:36 + * @description 领悦 - 删除往期累计数据 + */ + +@Slf4j +public class LyClearAddUpSituationAction implements Action { + + /** + * 个税扣缴义务人 + */ + private String taxAgentNameField; + + /** + * 员工 + */ + private String ygField; + + + // 是否执行action的字段, 0代表不执行,其余代表执行 + private String enableField; + + public String getEnableField() { + return enableField; + } + + public void setEnableField(String enableField) { + this.enableField = enableField; + } + + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + + private AddUpSituationMapper getAddUpSituationMapper() { + return MapperProxyFactory.getProxy(AddUpSituationMapper.class); + } + + @Override + public String execute(RequestInfo requestInfo) { + try { + Property[] properties = requestInfo.getMainTableInfo().getProperty(); + Map fieldMap = Arrays.stream(properties).collect(Collectors.toMap(Property::getName, + property -> Util.null2String(property.getValue()))); + + String enable = fieldMap.get(enableField); + if (StringUtils.isNotBlank(enable) && enable.equals("0")) { + // 不执行action + return SUCCESS; + } + String taxAgentName = fieldMap.get(taxAgentNameField); + String ygId = fieldMap.get(ygField); + if (StringUtils.isEmpty(taxAgentName) || !NumberUtils.isCreatable(ygId)) { + log.error("删除往期累计情况数据失败,义务人,员工不能为空", taxAgentName, ygId); + requestInfo.getRequestManager().setMessage("删除往期累计情况数据失败,义务人,员工不能为空"); + return FAILURE_AND_CONTINUE; + } + User user = new User(); + user.setUid(1); + + // 获取个税扣缴义务人id + List taxAgentPOS = getTaxAgentService(user).listByName(taxAgentName); + if (CollectionUtils.isEmpty(taxAgentPOS)) { + log.error("删除往期累计情况数据失败,义务人不存在", taxAgentName); + requestInfo.getRequestManager().setMessage("删除往期累计情况数据失败,义务人不存在"); + return FAILURE_AND_CONTINUE; + } + // 查询往期累计情况数据 + AddUpSituation param = AddUpSituation.builder().taxAgentId(taxAgentPOS.get(0).getId()).employeeIds(Collections.singletonList(Long.valueOf(ygId))).build(); + List addUpSituationList = getAddUpSituationMapper().listSome(param); + if (CollectionUtils.isNotEmpty(addUpSituationList)) { + // 根据税款所属期排序 + List sortedAddUpSituation = addUpSituationList.stream().sorted((o1, o2) -> o2.getTaxYearMonth().compareTo(o1.getTaxYearMonth())).collect(Collectors.toList()); + Long id = sortedAddUpSituation.get(0).getId(); + RecordSet rs = new RecordSet(); + String sql = "update hrsa_add_up_situation set delete_type=4 where id=" + id; + rs.execute(sql); + } + } catch (Exception e) { + log.error("删除往期累计数据异常", e); + requestInfo.getRequestManager().setMessage(e.getMessage()); + return FAILURE_AND_CONTINUE; + } + return SUCCESS; + } +} diff --git a/src/com/engine/salary/entity/ly/param/LySalaryReportQueryParam.java b/src/com/engine/salary/entity/ly/param/LySalaryReportQueryParam.java index 25a5d6242..aa06646d4 100644 --- a/src/com/engine/salary/entity/ly/param/LySalaryReportQueryParam.java +++ b/src/com/engine/salary/entity/ly/param/LySalaryReportQueryParam.java @@ -57,4 +57,17 @@ public class LySalaryReportQueryParam extends BaseQueryParam { private String startDate; private String endDate; + + // 片区 + private List pqList; + + // 项目 + private List xmList; + + // 职级 + private String zj; + + // 职务角色 + private List zwjsList; + } diff --git a/src/com/engine/salary/service/LySalaryReportService.java b/src/com/engine/salary/service/LySalaryReportService.java index 418269bc2..089f26d4d 100644 --- a/src/com/engine/salary/service/LySalaryReportService.java +++ b/src/com/engine/salary/service/LySalaryReportService.java @@ -155,13 +155,13 @@ public interface LySalaryReportService { Map getHszb(String ffgsqc); - Map listLyXcdazjtjReport(); + Map listLyXcdazjtjReport(LySalaryReportQueryParam param); - XSSFWorkbook exportXcdazjtjReport(); + XSSFWorkbook exportXcdazjtjReport(LySalaryReportQueryParam param); - Map listLyXcdazwjstjReport(); + Map listLyXcdazwjstjReport(LySalaryReportQueryParam param); - XSSFWorkbook exportXcdazwjstjReport(); + XSSFWorkbook exportXcdazwjstjReport(LySalaryReportQueryParam param); Map listLyTxdazjtjReport(LySalaryReportQueryParam param); diff --git a/src/com/engine/salary/service/TaxAgentService.java b/src/com/engine/salary/service/TaxAgentService.java index f6df75965..fdb437668 100644 --- a/src/com/engine/salary/service/TaxAgentService.java +++ b/src/com/engine/salary/service/TaxAgentService.java @@ -273,4 +273,6 @@ public interface TaxAgentService { List getConfig(); List parseConfig(List configs); + + List listByName(String name); } diff --git a/src/com/engine/salary/service/impl/LySalaryReportServiceImpl.java b/src/com/engine/salary/service/impl/LySalaryReportServiceImpl.java index 6821d1616..f18f2af00 100644 --- a/src/com/engine/salary/service/impl/LySalaryReportServiceImpl.java +++ b/src/com/engine/salary/service/impl/LySalaryReportServiceImpl.java @@ -31,6 +31,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.UserStatusEnum; +import com.engine.salary.enums.auth.AuthFilterTypeEnum; import com.engine.salary.enums.ly.LyPushStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; @@ -39,6 +40,8 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.ly.LySalaryReportMapper; import com.engine.salary.mapper.ly.UfSbgjjMapper; import com.engine.salary.service.*; +import com.engine.salary.service.auth.AuthService; +import com.engine.salary.service.auth.AuthServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -123,6 +126,10 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); } + public AuthService getAuthService(User user) { + return ServiceUtil.getService(AuthServiceImpl.class, user); + } + /** * 查询所有记录 * @@ -2756,9 +2763,11 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport } @Override - public Map listLyXcdazjtjReport() { + public Map listLyXcdazjtjReport(LySalaryReportQueryParam param) { // 查询所有发薪的薪资档案 List salaryArchivePOList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().runStatusList(Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue())).build()); + //能查看哪些档案 + salaryArchivePOList = getAuthService(user).auth(salaryArchivePOList, AuthFilterTypeEnum.DATA_OPT , SalaryArchivePO.class); BaseBean baseBean = new BaseBean(); String gwzjField = baseBean.getPropValue("lySalaryReport", "gwzj_field_id"); String pqField = baseBean.getPropValue("lySalaryReport", "pq_field_id"); @@ -2804,6 +2813,18 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport salaryArchivePO.setLypq(Utils.null2String(empPqMap.get(salaryArchivePO.getEmployeeId()))); salaryArchivePO.setLyxm(Utils.null2String(employeeMap.get(salaryArchivePO.getEmployeeId()) == null ? "" : employeeMap.get(salaryArchivePO.getEmployeeId()).getSubcompanyid())); }); + if (CollectionUtils.isNotEmpty(param.getPqList())) { + salaryArchivePOList = salaryArchivePOList.stream().filter(po -> param.getPqList().contains(po.getLypq())).collect(Collectors.toList()); + } + if (CollectionUtils.isNotEmpty(param.getXmList())) { + salaryArchivePOList = salaryArchivePOList.stream().filter(po -> param.getXmList().contains(po.getLyxm())).collect(Collectors.toList()); + } + if (StringUtils.isNotBlank(param.getZj())) { + Integer zjVal = SalaryEntityUtil.string2Integer(param.getZj()) == null ? -100 : SalaryEntityUtil.string2Integer(param.getZj()); + salaryArchivePOList = salaryArchivePOList.stream().filter(po -> zjVal.equals(po.getLyzj())).collect(Collectors.toList()); + } + // 过滤职级为0的 + salaryArchivePOList = salaryArchivePOList.stream().filter(salaryArchivePO -> salaryArchivePO.getLyzj() != null && salaryArchivePO.getLyzj() != 0).collect(Collectors.toList()); // 获取薪资档案字段id值 Long ndyssyzeItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_ndyssrze_field_id")); Long ydbzgzItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_ydbzgz_field_id")); @@ -2854,7 +2875,7 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport BigDecimal sjdjxVal = new BigDecimal("0"); if (!zj.equals(new Long("0")) && !zj.equals(new Long("1")) && !zj.equals(new Long("2"))) { // 年度预算收入总额*(1-固定比例)*20% - BigDecimal gdblVal = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(gdffblItemId)); + BigDecimal gdblVal = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(gdffblItemId)).divide(new BigDecimal("100")); yjdjxVal = (new BigDecimal("1").subtract(gdblVal)).multiply(new BigDecimal("0.2")).multiply(ndsrzezbVal); BigDecimal yjdjxValSum = zjSumValueMap.computeIfAbsent("yjdjx", k -> new BigDecimal("0")); zjSumValueMap.put("yjdjx", yjdjxValSum.add(yjdjxVal)); @@ -2906,8 +2927,12 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport // 计算年度收入总额占比 reportDTOS.stream().forEach(dto -> { if (NumberUtils.isCreatable(dto.getNdsrze())) { - BigDecimal ndsrze = SalaryEntityUtil.string2BigDecimalDefault0(dto.getNdsrze()); - dto.setNdsrzezb(ndsrze.divide(allNdsrzeSumVal[0], 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString()); + if (allNdsrzeSumVal[0].compareTo(new BigDecimal("0")) == 0) { + dto.setNdsrzezb("0"+"%"); + } else { + BigDecimal ndsrze = SalaryEntityUtil.string2BigDecimalDefault0(dto.getNdsrze()); + dto.setNdsrzezb(ndsrze.divide(allNdsrzeSumVal[0], 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString()+"%"); + } } }); @@ -2961,16 +2986,16 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport columns.add(new WeaTableColumn("150px", "项目", "lyxm")); columns.add(new WeaTableColumn("150px", "职级", "zj")); columns.add(new WeaTableColumn("150px", "在职人数", "zzrs")); - columns.add(new WeaTableColumn("150px", "年度收入总额", "ndsrze")); + columns.add(new WeaTableColumn("150px", "年度收入总额(万元)", "ndsrze")); columns.add(new WeaTableColumn("150px", "年度收入总额占比", "ndsrzezb")); columns.add(new WeaTableColumn("150px", "月度标准工资总额", "ydbzgzze")); columns.add(new WeaTableColumn("150px", "月度绩效总额", "ydjxze")); - columns.add(new WeaTableColumn("150px", "1季度绩效总额", "yjdjxze")); - columns.add(new WeaTableColumn("150px", "2季度绩效总额", "ejdjxze")); - columns.add(new WeaTableColumn("150px", "3季度绩效总额", "sjdjxze")); - columns.add(new WeaTableColumn("150px", "4季度绩效总额", "sijdjxze")); + columns.add(new WeaTableColumn("150px", "1季度绩效总额(万元)", "yjdjxze")); + columns.add(new WeaTableColumn("150px", "2季度绩效总额(万元)", "ejdjxze")); + columns.add(new WeaTableColumn("150px", "3季度绩效总额(万元)", "sjdjxze")); + columns.add(new WeaTableColumn("150px", "4季度绩效总额(万元)", "sijdjxze")); columns.add(new WeaTableColumn("150px", "年终奖总额", "nzjze")); - columns.add(new WeaTableColumn("150px", "季度绩效总额", "jdjxze")); + columns.add(new WeaTableColumn("150px", "季度绩效总额(万元)", "jdjxze")); Map map = new HashMap<>(); // if (param.isExport()) { @@ -2996,8 +3021,8 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport } @Override - public XSSFWorkbook exportXcdazjtjReport() { - Map resultMap = listLyXcdazjtjReport(); + public XSSFWorkbook exportXcdazjtjReport(LySalaryReportQueryParam param) { + Map resultMap = listLyXcdazjtjReport(param); List dataList = (List) resultMap.get("data"); List columns = (List) resultMap.get("columns"); // Map sum = (Map) resultMap.get("sum"); @@ -3021,9 +3046,11 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport } @Override - public Map listLyXcdazwjstjReport() { + public Map listLyXcdazwjstjReport(LySalaryReportQueryParam param) { // 查询所有发薪的薪资档案 List salaryArchivePOList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().runStatusList(Arrays.asList(SalaryArchiveStatusEnum.FIXED.getValue(), SalaryArchiveStatusEnum.SUSPEND.getValue())).build()); + //能查看哪些档案 + salaryArchivePOList = getAuthService(user).auth(salaryArchivePOList, AuthFilterTypeEnum.DATA_OPT , SalaryArchivePO.class); BaseBean baseBean = new BaseBean(); String gwzjField = baseBean.getPropValue("lySalaryReport", "gwzj_field_id"); String pqField = baseBean.getPropValue("lySalaryReport", "pq_field_id"); @@ -3087,6 +3114,19 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport salaryArchivePO.setLypq(Utils.null2String(empPqMap.get(salaryArchivePO.getEmployeeId()))); salaryArchivePO.setLyxm(Utils.null2String(employeeMap.get(salaryArchivePO.getEmployeeId()) == null ? "" : employeeMap.get(salaryArchivePO.getEmployeeId()).getSubcompanyid())); }); + + if (CollectionUtils.isNotEmpty(param.getPqList())) { + salaryArchivePOList = salaryArchivePOList.stream().filter(po -> param.getPqList().contains(po.getLypq())).collect(Collectors.toList()); + } + if (CollectionUtils.isNotEmpty(param.getXmList())) { + salaryArchivePOList = salaryArchivePOList.stream().filter(po -> param.getXmList().contains(po.getLyxm())).collect(Collectors.toList()); + } + if (CollectionUtils.isNotEmpty(param.getZwjsList())) { + salaryArchivePOList = salaryArchivePOList.stream().filter(po -> param.getZwjsList().contains(po.getLyzwjs())).collect(Collectors.toList()); + } + // 过滤职级为0的 + salaryArchivePOList = salaryArchivePOList.stream().filter(salaryArchivePO -> salaryArchivePO.getLyzj() != null && salaryArchivePO.getLyzj() != 0).collect(Collectors.toList()); + // 获取薪资档案字段id值 Long ndyssyzeItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_ndyssrze_field_id")); Long ydbzgzItemId = SalaryEntityUtil.string2Long(baseBean.getPropValue("lySalaryReport", "xzdazjtj_ydbzgz_field_id")); @@ -3137,7 +3177,7 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport BigDecimal sjdjxVal = new BigDecimal("0"); if (!archive.getLyzj().equals(new Integer("0")) && !archive.getLyzj().equals(new Integer("1")) && !archive.getLyzj().equals(new Integer("2"))) { // 年度预算收入总额*(1-固定比例)*20% - BigDecimal gdblVal = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(gdffblItemId)); + BigDecimal gdblVal = SalaryEntityUtil.string2BigDecimalDefault0(archiveValueMap.get(gdffblItemId)).divide(new BigDecimal("100"));; yjdjxVal = (new BigDecimal("1").subtract(gdblVal)).multiply(new BigDecimal("0.2")).multiply(ndsrzezbVal); BigDecimal yjdjxValSum = zjSumValueMap.computeIfAbsent("yjdjx", k -> new BigDecimal("0")); zjSumValueMap.put("yjdjx", yjdjxValSum.add(yjdjxVal)); @@ -3190,8 +3230,12 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport // 计算年度收入总额占比 reportDTOS.stream().forEach(dto -> { if (NumberUtils.isCreatable(dto.getNdsrze())) { - BigDecimal ndsrze = SalaryEntityUtil.string2BigDecimalDefault0(dto.getNdsrze()); - dto.setNdsrzezb(ndsrze.divide(allNdsrzeSumVal[0], 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString()); + if (allNdsrzeSumVal[0].compareTo(new BigDecimal("0")) == 0) { + dto.setNdsrzezb("0%"); + } else { + BigDecimal ndsrze = SalaryEntityUtil.string2BigDecimalDefault0(dto.getNdsrze()); + dto.setNdsrzezb(ndsrze.divide(allNdsrzeSumVal[0], 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString()+"%"); + } } }); @@ -3236,16 +3280,16 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport columns.add(new WeaTableColumn("150px", "项目", "lyxm")); columns.add(new WeaTableColumn("150px", "职务角色", "zwjs")); columns.add(new WeaTableColumn("150px", "在职人数(发薪员工)", "zzrs")); - columns.add(new WeaTableColumn("150px", "年度收入总额", "ndsrze")); + columns.add(new WeaTableColumn("150px", "年度收入总额(万元)", "ndsrze")); columns.add(new WeaTableColumn("150px", "年度收入总额占比", "ndsrzezb")); columns.add(new WeaTableColumn("150px", "月度标准工资总额", "ydbzgzze")); columns.add(new WeaTableColumn("150px", "月度绩效总额", "ydjxze")); - columns.add(new WeaTableColumn("150px", "1季度绩效总额", "yjdjxze")); - columns.add(new WeaTableColumn("150px", "2季度绩效总额", "ejdjxze")); - columns.add(new WeaTableColumn("150px", "3季度绩效总额", "sjdjxze")); - columns.add(new WeaTableColumn("150px", "4季度绩效总额", "sijdjxze")); + columns.add(new WeaTableColumn("150px", "1季度绩效总额(万元)", "yjdjxze")); + columns.add(new WeaTableColumn("150px", "2季度绩效总额(万元)", "ejdjxze")); + columns.add(new WeaTableColumn("150px", "3季度绩效总额(万元)", "sjdjxze")); + columns.add(new WeaTableColumn("150px", "4季度绩效总额(万元)", "sijdjxze")); columns.add(new WeaTableColumn("150px", "年终奖总额", "nzjze")); - columns.add(new WeaTableColumn("150px", "季度绩效总额", "jdjxze")); + columns.add(new WeaTableColumn("150px", "季度绩效总额(万元)", "jdjxze")); Map map = new HashMap<>(); // if (param.isExport()) { @@ -3271,8 +3315,8 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport } @Override - public XSSFWorkbook exportXcdazwjstjReport() { - Map resultMap = listLyXcdazwjstjReport(); + public XSSFWorkbook exportXcdazwjstjReport(LySalaryReportQueryParam param) { + Map resultMap = listLyXcdazwjstjReport(param); List dataList = (List) resultMap.get("data"); List columns = (List) resultMap.get("columns"); // Map sum = (Map) resultMap.get("sum"); @@ -3311,8 +3355,9 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport } catch (UnsupportedEncodingException e) { } List excluedeTxyy = Arrays.stream(excludeTxyy.split(",")).collect(Collectors.toList()); - String sql = "select yg,ndyqsrze,txrq,dxyy from uf_txda where txrq >=? and txrq<=? "; - rs.executeQuery(sql, Arrays.asList(startDate, endDate)); + String excluedeTxyyStr = "'" + StringUtils.join(excluedeTxyy, "','") + "'"; + String sql = "select yg,ndyqsrze,txrq,dxyy from uf_txda where txrq >=? and txrq<=? and dxyy not in ("+excluedeTxyyStr+") "; + rs.executeQuery(sql, Arrays.asList(param.getStartDate(), param.getEndDate())); List lyTxdaList = new ArrayList<>(); while (rs.next()) { Date txrqDate = SalaryDateUtil.dateStrToLocalDate(rs.getString("txrq")); @@ -3326,6 +3371,36 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport } } + List ygIds = lyTxdaList.stream().map(LyTxdaPO::getYg).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(ygIds)) { + // 查询所有发薪的薪资档案 + List salaryArchivePOList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().employeeIds(ygIds).build()); + //能查看哪些档案 + salaryArchivePOList = getAuthService(user).auth(salaryArchivePOList, AuthFilterTypeEnum.DATA_OPT , SalaryArchivePO.class); + List empIds = salaryArchivePOList.stream().map(SalaryArchivePO::getEmployeeId).collect(Collectors.toList()); + lyTxdaList = lyTxdaList.stream().filter(txdaPO -> empIds.contains(txdaPO.getYg())).collect(Collectors.toList()); + } + + List employeeIdList = lyTxdaList.stream().map(LyTxdaPO::getYg).distinct().collect(Collectors.toList()); + Map rzNdyqsrzeMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(employeeIdList)) { + List lyTxdaRzList = new ArrayList<>(); + List> employeeIdPartition = Lists.partition(employeeIdList, 800); + for(List part : employeeIdPartition) { + // 查询这些人入职时候的数据 + sql = "select yg,ndyqsrze,txrq,dxyy from uf_txda where yg in ("+StringUtils.join(part, ",")+") and dxyy in ("+excluedeTxyyStr+") "; + rs.execute(sql); + while (rs.next()) { + lyTxdaRzList.add(LyTxdaPO.builder() + .yg(NumberUtils.isCreatable(rs.getString("yg")) ? Long.valueOf(rs.getString("yg")) : -1L) + .ndyqsrze(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("ndyqsrze"))) + .dxyy(rs.getString("dxyy")) + .build()); + } + } + rzNdyqsrzeMap = SalaryEntityUtil.convert2Map(lyTxdaRzList, LyTxdaPO::getYg, LyTxdaPO::getNdyqsrze); + } + String gwzjField = baseBean.getPropValue("lySalaryReport", "gwzj_field_id"); String pqField = baseBean.getPropValue("lySalaryReport", "pq_field_id"); // 查询职等职级信息 @@ -3370,6 +3445,19 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport txdaPO.setLyxm(Utils.null2String(employeeMap.get(txdaPO.getYg()) == null ? "" : employeeMap.get(txdaPO.getYg()).getSubcompanyid())); }); + if (CollectionUtils.isNotEmpty(param.getPqList())) { + lyTxdaList = lyTxdaList.stream().filter(po -> param.getPqList().contains(po.getLypq())).collect(Collectors.toList()); + } + if (CollectionUtils.isNotEmpty(param.getXmList())) { + lyTxdaList = lyTxdaList.stream().filter(po -> param.getXmList().contains(po.getLyxm())).collect(Collectors.toList()); + } + if (StringUtils.isNotBlank(param.getZj())) { + Integer zjVal = SalaryEntityUtil.string2Integer(param.getZj()) == null ? -100 : SalaryEntityUtil.string2Integer(param.getZj()); + lyTxdaList = lyTxdaList.stream().filter(po -> zjVal.equals(po.getLyzj())).collect(Collectors.toList()); + } + // 过滤职级为0的 + lyTxdaList = lyTxdaList.stream().filter(salaryArchivePO -> salaryArchivePO.getLyzj() != null && salaryArchivePO.getLyzj() != 0).collect(Collectors.toList()); + // 调薪档案根据职级分组 List reportDTOS = new ArrayList(); Map> archiveGroupByZj = SalaryEntityUtil.group2Map(lyTxdaList, po -> po.getLyzj() + "_split" + po.getLypq() + "_split" + po.getLyxm()); @@ -3387,7 +3475,20 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport // 计算每个人的调薪总额 List sortedTxDTO = ygEntry.getValue().stream().sorted((o1, o2) -> o2.getTxrq().compareTo(o1.getTxrq())).collect(Collectors.toList()); BigDecimal ndyqsrze = sortedTxDTO.get(0).getNdyqsrze() == null ? new BigDecimal("0") : sortedTxDTO.get(0).getNdyqsrze(); - BigDecimal ndyqsrzeLast = sortedTxDTO.get(sortedTxDTO.size()-1).getNdyqsrze() == null ? new BigDecimal("0") : sortedTxDTO.get(sortedTxDTO.size()-1).getNdyqsrze(); + BigDecimal ndyqsrzeLast = new BigDecimal("0"); + if (ygEntry.getValue().size() == 1) { + // 获取入职时数据 + BigDecimal rzValue = rzNdyqsrzeMap.get(ygEntry.getKey()); + if (rzValue == null) { + baseBean.writeLog(ygEntry.getKey() + "未找到入职调薪数据"); + } else { + ndyqsrzeLast = rzValue; + } + } else { + // 获取周期内上一次的数据 + ndyqsrzeLast = sortedTxDTO.get(sortedTxDTO.size()-1).getNdyqsrze() == null ? new BigDecimal("0") : sortedTxDTO.get(sortedTxDTO.size()-1).getNdyqsrze(); + } + BigDecimal txValue = ndyqsrze.subtract(ndyqsrzeLast); zjTxze = zjTxze.add(txValue); allNdtxzeSumVal[0] = allNdtxzeSumVal[0].add(txValue); @@ -3412,12 +3513,20 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport BigDecimal txZrc = BigDecimal.valueOf(zrc); reportDTOS.stream().forEach(dto -> { if (dto.getTxrc() != null) { - BigDecimal txrc = BigDecimal.valueOf(dto.getTxrc()); - dto.setZzqntxzrsbl(txrc.divide(txZrc, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString()); + if (txZrc.compareTo(new BigDecimal("0")) == 0) { + dto.setZzqntxzrsbl("0%"); + } else { + BigDecimal txrc = BigDecimal.valueOf(dto.getTxrc()); + dto.setZzqntxzrsbl(txrc.divide(txZrc, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString()+"%"); + } } if (NumberUtils.isCreatable(dto.getNdtxze())) { - BigDecimal ndtxze = new BigDecimal(dto.getNdtxze()); - dto.setZzqntxzebl(ndtxze.divide(allNdtxzeSumVal[0], 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString()); + if (allNdtxzeSumVal[0].compareTo(new BigDecimal("0")) == 0) { + dto.setZzqntxzebl("0%"); + } else { + BigDecimal ndtxze = new BigDecimal(dto.getNdtxze()); + dto.setZzqntxzebl(ndtxze.divide(allNdtxzeSumVal[0], 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString()+"%"); + } } }); @@ -3478,7 +3587,7 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport columns.add(new WeaTableColumn("150px", "职级", "zj")); columns.add(new WeaTableColumn("150px", "调薪人次", "txrc")); columns.add(new WeaTableColumn("150px", "占周期内调薪总人数比例", "zzqntxzrsbl")); - columns.add(new WeaTableColumn("150px", "年度调薪总额", "ndtxze")); + columns.add(new WeaTableColumn("150px", "年度调薪总额(万元)", "ndtxze")); columns.add(new WeaTableColumn("150px", "占周期内调薪总额比例", "zzqntxzebl")); Map map = new HashMap<>(); @@ -3546,8 +3655,9 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport } catch (UnsupportedEncodingException e) { } List excluedeTxyy = Arrays.stream(excludeTxyy.split(",")).collect(Collectors.toList()); - String sql = "select yg,ndyqsrze,txrq,dxyy from uf_txda where txrq >=? and txrq<=? "; - rs.executeQuery(sql, Arrays.asList(startDate, endDate)); + String excluedeTxyyStr = "'" + StringUtils.join(excluedeTxyy, "','") + "'"; + String sql = "select yg,ndyqsrze,txrq,dxyy from uf_txda where txrq >=? and txrq<=? and dxyy not in ("+excluedeTxyyStr+") "; + rs.executeQuery(sql, Arrays.asList(param.getStartDate(), param.getEndDate())); List lyTxdaList = new ArrayList<>(); while (rs.next()) { Date txrqDate = SalaryDateUtil.dateStrToLocalDate(rs.getString("txrq")); @@ -3560,6 +3670,35 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport .build()); } } + List ygIds = lyTxdaList.stream().map(LyTxdaPO::getYg).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(ygIds)) { + // 查询所有发薪的薪资档案 + List salaryArchivePOList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().employeeIds(ygIds).build()); + //能查看哪些档案 + salaryArchivePOList = getAuthService(user).auth(salaryArchivePOList, AuthFilterTypeEnum.DATA_OPT , SalaryArchivePO.class); + List empIds = salaryArchivePOList.stream().map(SalaryArchivePO::getEmployeeId).collect(Collectors.toList()); + lyTxdaList = lyTxdaList.stream().filter(txdaPO -> empIds.contains(txdaPO.getYg())).collect(Collectors.toList()); + } + + List employeeIdList = lyTxdaList.stream().map(LyTxdaPO::getYg).distinct().collect(Collectors.toList()); + Map rzNdyqsrzeMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(employeeIdList)) { + List lyTxdaRzList = new ArrayList<>(); + List> employeeIdPartition = Lists.partition(employeeIdList, 800); + for(List part : employeeIdPartition) { + // 查询这些人入职时候的数据 + sql = "select yg,ndyqsrze,txrq,dxyy from uf_txda where yg in ("+StringUtils.join(part, ",")+") and dxyy in ("+excluedeTxyyStr+") "; + rs.execute(sql); + while (rs.next()) { + lyTxdaRzList.add(LyTxdaPO.builder() + .yg(NumberUtils.isCreatable(rs.getString("yg")) ? Long.valueOf(rs.getString("yg")) : -1L) + .ndyqsrze(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("ndyqsrze"))) + .dxyy(rs.getString("dxyy")) + .build()); + } + } + rzNdyqsrzeMap = SalaryEntityUtil.convert2Map(lyTxdaRzList, LyTxdaPO::getYg, LyTxdaPO::getNdyqsrze); + } String gwzjField = baseBean.getPropValue("lySalaryReport", "gwzj_field_id"); String pqField = baseBean.getPropValue("lySalaryReport", "pq_field_id"); @@ -3617,13 +3756,25 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport // 所有档案赋值职级 lyTxdaList.stream().forEach(txdaPO -> { - // int zj = empZjMap.get(txdaPO.getYg()) == null ? -1 : empZjMap.get(txdaPO.getYg()); - // txdaPO.setLyzj(zj); + int zj = empZjMap.get(txdaPO.getYg()) == null ? -1 : empZjMap.get(txdaPO.getYg()); + txdaPO.setLyzj(zj); txdaPO.setLypq(Utils.null2String(empPqMap.get(txdaPO.getYg()))); txdaPO.setLyxm(Utils.null2String(employeeMap.get(txdaPO.getYg()) == null ? "" : employeeMap.get(txdaPO.getYg()).getSubcompanyid())); String zwjs = empZwjsMap.get(txdaPO.getYg()) == null ? "" : empZwjsMap.get(txdaPO.getYg()); txdaPO.setLyzwjs(zwjs); }); + if (CollectionUtils.isNotEmpty(param.getPqList())) { + lyTxdaList = lyTxdaList.stream().filter(po -> param.getPqList().contains(po.getLypq())).collect(Collectors.toList()); + } + if (CollectionUtils.isNotEmpty(param.getXmList())) { + lyTxdaList = lyTxdaList.stream().filter(po -> param.getXmList().contains(po.getLyxm())).collect(Collectors.toList()); + } + if (CollectionUtils.isNotEmpty(param.getZwjsList())) { + lyTxdaList = lyTxdaList.stream().filter(po -> param.getZwjsList().contains(po.getLyzwjs())).collect(Collectors.toList()); + } + // 过滤职级为0的 + lyTxdaList = lyTxdaList.stream().filter(salaryArchivePO -> salaryArchivePO.getLyzj() != null && salaryArchivePO.getLyzj() != 0).collect(Collectors.toList()); + // 调薪档案根据职级分组 List reportDTOS = new ArrayList(); @@ -3642,7 +3793,20 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport // 计算每个人的调薪总额 List sortedTxDTO = ygEntry.getValue().stream().sorted((o1, o2) -> o2.getTxrq().compareTo(o1.getTxrq())).collect(Collectors.toList()); BigDecimal ndyqsrze = sortedTxDTO.get(0).getNdyqsrze() == null ? new BigDecimal("0") : sortedTxDTO.get(0).getNdyqsrze(); - BigDecimal ndyqsrzeLast = sortedTxDTO.get(sortedTxDTO.size()-1).getNdyqsrze() == null ? new BigDecimal("0") : sortedTxDTO.get(sortedTxDTO.size()-1).getNdyqsrze(); + BigDecimal ndyqsrzeLast = new BigDecimal("0"); + if (ygEntry.getValue().size() == 1) { + // 获取入职时数据 + BigDecimal rzValue = rzNdyqsrzeMap.get(ygEntry.getKey()); + if (rzValue == null) { + baseBean.writeLog(ygEntry.getKey() + "为找到入职调薪数据"); + } else { + ndyqsrzeLast = rzValue; + } + } else { + // 获取周期内上一次的数据 + ndyqsrzeLast = sortedTxDTO.get(sortedTxDTO.size()-1).getNdyqsrze() == null ? new BigDecimal("0") : sortedTxDTO.get(sortedTxDTO.size()-1).getNdyqsrze(); + } + BigDecimal txValue = ndyqsrze.subtract(ndyqsrzeLast); zwjsTxze = zwjsTxze.add(txValue); allNdtxzeSumVal[0] = allNdtxzeSumVal[0].add(txValue); @@ -3668,12 +3832,20 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport BigDecimal txZrc = BigDecimal.valueOf(zrc); reportDTOS.stream().forEach(dto -> { if (dto.getTxrc() != null) { - BigDecimal txrc = BigDecimal.valueOf(dto.getTxrc()); - dto.setZzqntxzrsbl(txrc.divide(txZrc, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString()); + if (allNdtxzeSumVal[0].compareTo(new BigDecimal("0")) == 0) { + dto.setZzqntxzrsbl("0%"); + } else { + BigDecimal txrc = BigDecimal.valueOf(dto.getTxrc()); + dto.setZzqntxzrsbl(txrc.divide(txZrc, 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString()+"%"); + } } if (NumberUtils.isCreatable(dto.getNdtxze())) { - BigDecimal ndtxze = new BigDecimal(dto.getNdtxze()); - dto.setZzqntxzebl(ndtxze.divide(allNdtxzeSumVal[0], 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString()); + if (allNdtxzeSumVal[0].compareTo(new BigDecimal("0")) == 0) { + dto.setZzqntxzebl("0%"); + } else { + BigDecimal ndtxze = new BigDecimal(dto.getNdtxze()); + dto.setZzqntxzebl(ndtxze.divide(allNdtxzeSumVal[0], 4, RoundingMode.HALF_UP).multiply(new BigDecimal("100")).setScale(2, RoundingMode.HALF_UP).toPlainString()+"%"); + } } }); @@ -3727,7 +3899,7 @@ public class LySalaryReportServiceImpl extends Service implements LySalaryReport columns.add(new WeaTableColumn("150px", "职务角色", "zwjs")); columns.add(new WeaTableColumn("150px", "调薪人次", "txrc")); columns.add(new WeaTableColumn("150px", "占周期内调薪总人数比例", "zzqntxzrsbl")); - columns.add(new WeaTableColumn("150px", "年度调薪总额", "ndtxze")); + columns.add(new WeaTableColumn("150px", "年度调薪总额(万元)", "ndtxze")); columns.add(new WeaTableColumn("150px", "占周期内调薪总额比例", "zzqntxzebl")); Map map = new HashMap<>(); diff --git a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java index 0051bd7b8..840c48884 100644 --- a/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxAgentServiceImpl.java @@ -864,5 +864,11 @@ public class TaxAgentServiceImpl extends Service implements TaxAgentService { return results; } - + @Override + public List listByName(String name) { + if (StringUtils.isBlank(name)) { + return Collections.emptyList(); + } + return getTaxAgentMapper().listByName(name); + } } diff --git a/src/com/engine/salary/wrapper/LySalaryWrapper.java b/src/com/engine/salary/wrapper/LySalaryWrapper.java index 5b0e94eff..3c0922bd6 100644 --- a/src/com/engine/salary/wrapper/LySalaryWrapper.java +++ b/src/com/engine/salary/wrapper/LySalaryWrapper.java @@ -349,19 +349,19 @@ public class LySalaryWrapper extends Service { } public Map listLyXcdazjtjReport(LySalaryReportQueryParam param) { - return getLySalaryReportService(user).listLyXcdazjtjReport(); + return getLySalaryReportService(user).listLyXcdazjtjReport(param); } public XSSFWorkbook exportXcdazjtjReport(LySalaryReportQueryParam param) { - return getLySalaryReportService(user).exportXcdazjtjReport(); + return getLySalaryReportService(user).exportXcdazjtjReport(param); } public Map listLyXcdazwjstjReport(LySalaryReportQueryParam param) { - return getLySalaryReportService(user).listLyXcdazwjstjReport(); + return getLySalaryReportService(user).listLyXcdazwjstjReport(param); } public XSSFWorkbook exportXcdazwjstjReport(LySalaryReportQueryParam param) { - return getLySalaryReportService(user).exportXcdazwjstjReport(); + return getLySalaryReportService(user).exportXcdazwjstjReport(param); } public Map listLyTxdazjtjReport(LySalaryReportQueryParam param) {