diff --git a/src/com/engine/salary/entity/salaryacct/dto/LtRymxgzDTO.java b/src/com/engine/salary/entity/salaryacct/dto/LtRymxgzDTO.java index 4f37a92df..7961c6a4f 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/LtRymxgzDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/LtRymxgzDTO.java @@ -26,6 +26,15 @@ public class LtRymxgzDTO { // 姓名 private Long xm; + // 工号 + private String gh; + + // 部门 + private Long bm; + + // 岗位 + private Long gw; + // 工资 private BigDecimal gz; @@ -38,5 +47,11 @@ public class LtRymxgzDTO { // 年终奖 private BigDecimal nzj; + // 其他奖励小计 + private BigDecimal qtjlxj; + + // 半年度绩效 + private BigDecimal bndjx; + } diff --git a/src/com/engine/salary/entity/salaryacct/dto/LtZjrggzftDTO.java b/src/com/engine/salary/entity/salaryacct/dto/LtZjrggzftDTO.java new file mode 100644 index 000000000..b37077a6f --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/dto/LtZjrggzftDTO.java @@ -0,0 +1,36 @@ +package com.engine.salary.entity.salaryacct.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; + +/** + * @author Harryxzy + * @ClassName LtZjrggzftDTO + * @date 2025/09/10 16:33 + * @description 联特直接人工工资分摊表数据 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class LtZjrggzftDTO { + + // 年月 + private String ny; + + // 工号 + private String gh; + + // 成本中心编码 + private String cbzxbm; + + // 成本中心 + private String cbzx; + + // 占比 + private BigDecimal zb; +} diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index 87d28350e..d4b8d9ac3 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -365,4 +365,25 @@ public interface SalaryAcctResultService { * @return */ String ltGenBmxmgzftb(String salaryMonth); + + /** + * 联特 表7 - 直接人工工时分摊表-计提 + * @param salaryMonth + * @return + */ + String ltGenZjrggsftbjt(String salaryMonth); + + /** + * 联特 表7 - 直接人工工时分摊表-实发 + * @param salaryMonth + * @return + */ + String ltGenZjrggsftbsf(String salaryMonth); + + /** + * 联特 表9 - 岗位平均工资查询表 + * @param salaryMonth + * @return + */ + String ltGenGwpjgzcxb(String salaryMonth); } diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index 889d945cf..e4f04dc4d 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -254,7 +254,11 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction String imageId = Util.null2String(importParam.getImageId()); Validate.notBlank(imageId, "imageId为空"); // 获取所有个税扣缴义务人 - Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); + // 获取所有个税扣缴义务人 + TaxAgentQueryParam param = TaxAgentQueryParam.builder().build(); + param.setFilterType(AuthFilterTypeEnum.ADMIN_DATA); + Collection taxAgentList = getTaxAgentService(user).listAuth(param); + // Collection taxAgentList = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId); //个税扣缴义务人 String taxAgentId = Util.null2String(importParam.getTaxAgentId()); // 获取租户下所有的人员 @@ -356,17 +360,17 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction errorData.add(errorMessageMap); errorSum += 1; } else { - Optional optionalTemp = taxAgentList.stream().filter(m -> m.getTaxAgentName().equals(taxAgentName)).findFirst(); + Optional optionalTemp = taxAgentList.stream().filter(m -> m.getName().equals(taxAgentName)).findFirst(); if (optionalTemp.isPresent()) { - if (StringUtils.isNotEmpty(taxAgentId) && !optionalTemp.get().getTaxAgentId().equals(Long.valueOf(taxAgentId))) { + if (StringUtils.isNotEmpty(taxAgentId) && !optionalTemp.get().getId().equals(Long.valueOf(taxAgentId))) { //个税扣缴义务人与导入时选择的不一致 Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", rowIndex + "个税扣缴义务人与导入时选择的不一致"); errorData.add(errorMessageMap); errorSum += 1; } else { - addUpDeduction.setTaxAgentId(optionalTemp.get().getTaxAgentId()); - taxAgentEmployees = optionalTemp.get().getEmployeeList(); + addUpDeduction.setTaxAgentId(optionalTemp.get().getId()); + // taxAgentEmployees = optionalTemp.get().getEmployeeList(); } } else { //个税扣缴义务人不存在 diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index a375ea06f..b56eccb8e 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -83,6 +83,7 @@ import weaver.general.TimeUtil; import weaver.hrm.User; import weaver.wechat.util.Utils; +import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; @@ -4374,4 +4375,459 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } return ""; } + + @Override + public String ltGenZjrggsftbjt(String salaryMonth) { + if (!SalaryDateUtil.checkYearMonth(salaryMonth)) { + throw new SalaryRunTimeException("年月错误"); + } + Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(salaryMonth); + BaseBean baseBean = new BaseBean(); + RecordSet rs = new RecordSet(); + // 获取直接人工工资分摊表的人 + ArrayList ltZjrggzftList = new ArrayList<>(); + // String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id"); + // RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId); + // extRs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'"); + // while (extRs.next()) { + // LtZjrggzftDTO dto = new LtZjrggzftDTO(); + // dto.setNy(extRs.getString("month")); + // dto.setGh(extRs.getString("user_code")); + // dto.setCbzxbm(extRs.getString("sap_cost_center_name")); + // dto.setCbzx(extRs.getString("sap_cost_center_name_desc")); + // dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(extRs.getString("proportion"))); + // ltZjrggzftList.add(dto); + // } + rs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from uf_testygcqgsftb where month='"+salaryMonth+"'"); + while (rs.next()) { + LtZjrggzftDTO dto = new LtZjrggzftDTO(); + dto.setNy(rs.getString("month")); + dto.setGh(rs.getString("user_code")); + dto.setCbzxbm(rs.getString("sap_cost_center_name")); + dto.setCbzx(rs.getString("sap_cost_center_name_desc")); + dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("proportion"))); + ltZjrggzftList.add(dto); + } + + Map> LtZjrggzfGroupByGh = SalaryEntityUtil.group2Map(ltZjrggzftList, LtZjrggzftDTO::getGh); + + // 获取自招部分需要统计赋值哪些字段 + List selectFieldList = new ArrayList<>(); + selectFieldList.add("yldw"); + selectFieldList.add("yldwbj"); + selectFieldList.add("gsdw"); + selectFieldList.add("gsdwbj"); + selectFieldList.add("sydw"); + selectFieldList.add("sydwbj"); + selectFieldList.add("yldw1"); + selectFieldList.add("yldwbj1"); + selectFieldList.add("gjjdw"); + selectFieldList.add("gjjdwbj"); + selectFieldList.add("fwf"); + selectFieldList.add("sb"); + selectFieldList.add("yfgz"); + selectFieldList.add("ydyxyg"); + selectFieldList.add("qjl"); + selectFieldList.add("lsjl"); + selectFieldList.add("nzj"); + // 获取对应期间人员明细工资计提表 + rs.execute("select xm,rylx,gh,zjgs,"+ StringUtils.join(selectFieldList,",")+" from uf_mxgzbjt where qj ='" + SalaryDateUtil.getFormatYearMonth(salaryMonthDate) +"'"); + Map>> listGroupByCbzx = new HashMap<>(); + while (rs.next()) { + List ltZjrggzftDTOList = LtZjrggzfGroupByGh.get(Utils.null2String(rs.getString("gh"))); + if (CollectionUtils.isNotEmpty(ltZjrggzftDTOList)) { + for (LtZjrggzftDTO ftDTO : ltZjrggzftDTOList) { + BigDecimal zb = ftDTO.getZb(); + String cbzx = ftDTO.getCbzxbm(); + List> cbzxList = listGroupByCbzx.computeIfAbsent(cbzx, k -> new ArrayList<>()); + Map singleEmpValueMap = new HashMap<>(); + singleEmpValueMap.put("rylb", Utils.null2String(rs.getString("rylx"))); + singleEmpValueMap.put("cbzx", ftDTO.getCbzx()); + singleEmpValueMap.put("zjgs", Utils.null2String(rs.getString("zjgs"))); + BigDecimal yldw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj"))); + singleEmpValueMap.put("ylbxdw", yldw.multiply(zb).toPlainString()); + BigDecimal gsdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdwbj"))); + singleEmpValueMap.put("gsbxdw", gsdw.multiply(zb).toPlainString()); + BigDecimal sydw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydwbj"))); + singleEmpValueMap.put("sybxdw", sydw.multiply(zb).toPlainString()); + BigDecimal yldw1 = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw1")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj1"))); + singleEmpValueMap.put("ylbxdw1", yldw1.multiply(zb).toPlainString()); + BigDecimal gjjdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdwbj"))); + singleEmpValueMap.put("zfgjjdw", gjjdw.multiply(zb).toPlainString()); + singleEmpValueMap.put("fwf", SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("fwf")).multiply(zb).toPlainString()); + singleEmpValueMap.put("sb", SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sb")).multiply(zb).toPlainString()); + // 奖金=月度优秀员工+其他奖励+临时激励 + BigDecimal jj = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("ydyxyg")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("qjl"))).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("lsjl"))); + singleEmpValueMap.put("jj", jj.multiply(zb).toPlainString()); + BigDecimal nzj = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("nzj")); + singleEmpValueMap.put("nzj", nzj.multiply(zb).toPlainString()); + // 应发工资 + BigDecimal gz = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yfgz")).subtract(jj).subtract(nzj); + singleEmpValueMap.put("gz", gz.multiply(zb).toPlainString()); + cbzxList.add(singleEmpValueMap); + } + } + } + + // 获取外包字段信息 + Map zjInfoMap = new HashMap<>(); + List zjfields = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "zjrggzftbjt_zj_filds").split(",")).filter(key -> StringUtils.isNotBlank(key)).collect(Collectors.toList()); + for (String field : zjfields) { + String fieldInfo = baseBean.getPropValue("ltSalaryReport", "zjrggzftbjt_" + field + "_info"); + try { + fieldInfo = new String(fieldInfo.getBytes("ISO-8859-1"), "utf-8"); + } catch (UnsupportedEncodingException e) { + fieldInfo = ""; + } + zjInfoMap.put(field, fieldInfo); + } + + 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", "zjrggzftbjt_mode_id"); + // 入库前先删除 + rs.execute("delete from uf_zjrggzftjt where xzszy ='" + salaryMonth +"'"); + + String insertStartSql = new String("insert into uf_zjrggzftjt (formmodeid,modedatacreater," + + "modedatacreatertype,modedatacreatedate,modedatacreatetime,xzszy,cbzx,cbzxsm,gz,jj,nzj,gjjdw,yldw,yldw1,sydw,gsdw," + + StringUtils.join(zjfields, ",") + ")VALUES("); + // 自招字段 + List zzFields = Arrays.asList("gz","jj","nzj","gjjdw","yldw","yldw1","sydw","gsdw"); + + for (Map.Entry>> entry : listGroupByCbzx.entrySet()) { + // 已根据成本中心分组并乘以了对应的占比,成本中心中需要分中介公司、人员类别和自招 + List> list = entry.getValue(); + if (CollectionUtils.isEmpty(list)) { + continue; + } + Map>> groupByzjAndRylb = new HashMap<>(); + list.stream().forEach(map -> { + String zjgs = Utils.null2String(map.get("zjgs")); + if (StringUtils.isBlank(zjgs)) { + // 自招 + List> zzList = groupByzjAndRylb.computeIfAbsent("zz", k -> new ArrayList<>()); + zzList.add(map); + } else { + String rylb = Utils.null2String(map.get("rylb")); + List> zjList = groupByzjAndRylb.computeIfAbsent(zjgs+rylb, k -> new ArrayList<>()); + zjList.add(map); + } + }); + // 获取自招合计数据 + List> zzList = groupByzjAndRylb.get("zz"); + Map zzSumMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(zzList)) { + for (String zzField : zzFields) { + String sumVal = zzList.stream().map(map -> Utils.null2String(map.get(zzField))).filter(NumberUtils::isCreatable).map(BigDecimal::new) + .reduce(new BigDecimal("0"), BigDecimal::add).setScale(2, RoundingMode.HALF_UP).toPlainString(); + zzSumMap.put(zzField, sumVal); + } + } + // 入库 + StringBuilder insertSqlSb = new StringBuilder(insertStartSql) + .append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'") + .append(salaryMonth).append("','").append(entry.getKey()).append("','").append(Utils.null2String(list.get(0).get("cbzx"))).append("',"); + for (String zzField : zzFields) { + insertSqlSb.append(SalaryEntityUtil.string2BigDecimalDefault0(zzSumMap.get(zzField)).toString()).append(","); + } + for (String zjfield : zjfields) { + String zjInfo = Utils.null2String(zjInfoMap.get(zjfield)); + List> zjList = groupByzjAndRylb.get(zjInfo); + BigDecimal zjSumVal = new BigDecimal("0"); + if (CollectionUtils.isNotEmpty(zjList)) { + BigDecimal fwf = zjList.stream().map(map -> Utils.null2String(map.get("fwf"))).filter(NumberUtils::isCreatable).map(BigDecimal::new) + .reduce(new BigDecimal("0"), BigDecimal::add); + BigDecimal sb = zjList.stream().map(map -> Utils.null2String(map.get("sb"))).filter(NumberUtils::isCreatable).map(BigDecimal::new) + .reduce(new BigDecimal("0"), BigDecimal::add); + zjSumVal = fwf.add(sb).setScale(2, RoundingMode.HALF_UP); + } + insertSqlSb.append(zjSumVal.toPlainString()).append(","); + } + insertSqlSb.append(")"); + insertSqlSb.deleteCharAt(insertSqlSb.lastIndexOf(",")); + rs.execute(insertSqlSb.toString()); + // 权限重构 + // 获取最大值 作为权限重构的起始id + rs.execute("select max(id) from uf_zjrggzftjt"); + int maxId = 0; + if (rs.next()) { + maxId = rs.getInt(1); + } + if (modeId != null && NumberUtils.isCreatable(modeId)) { + ModeRightInfo ModeRightInfo = new ModeRightInfo(); + ModeRightInfo.setNewRight(true); + ModeRightInfo.editModeDataShare(1, Integer.valueOf(modeId), maxId); + } + } + return null; + } + + + @Override + public String ltGenZjrggsftbsf(String salaryMonth) { + if (!SalaryDateUtil.checkYearMonth(salaryMonth)) { + throw new SalaryRunTimeException("年月错误"); + } + Date salaryMonthDate = SalaryDateUtil.dateStrToLocalYearMonth(salaryMonth); + BaseBean baseBean = new BaseBean(); + RecordSet rs = new RecordSet(); + // 获取直接人工工资分摊表的人 + ArrayList ltZjrggzftList = new ArrayList<>(); + // String dataSourceId = baseBean.getPropValue("ltSalaryReport", "zjrycqgsft_data_source_id"); + // RecordSetDataSource extRs = new RecordSetDataSource(dataSourceId); + // extRs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from dws_oa.work_hour_apportion_report where month='"+salaryMonth+"'"); + // while (extRs.next()) { + // LtZjrggzftDTO dto = new LtZjrggzftDTO(); + // dto.setNy(extRs.getString("month")); + // dto.setGh(extRs.getString("user_code")); + // dto.setCbzxbm(extRs.getString("sap_cost_center_name")); + // dto.setCbzx(extRs.getString("sap_cost_center_name_desc")); + // dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(extRs.getString("proportion"))); + // ltZjrggzftList.add(dto); + // } + rs.execute(" select month, user_code,sap_cost_center_name,sap_cost_center_name_desc,attendance_duration,sum_attendance_duration,proportion from uf_testygcqgsftb where month='"+salaryMonth+"'"); + while (rs.next()) { + LtZjrggzftDTO dto = new LtZjrggzftDTO(); + dto.setNy(rs.getString("month")); + dto.setGh(rs.getString("user_code")); + dto.setCbzxbm(rs.getString("sap_cost_center_name")); + dto.setCbzx(rs.getString("sap_cost_center_name_desc")); + dto.setZb(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("proportion"))); + ltZjrggzftList.add(dto); + } + + Map> LtZjrggzfGroupByGh = SalaryEntityUtil.group2Map(ltZjrggzftList, LtZjrggzftDTO::getGh); + + // 获取自招部分需要统计赋值哪些字段 + List selectFieldList = new ArrayList<>(); + selectFieldList.add("yldw"); + selectFieldList.add("yldwbj"); + selectFieldList.add("gsdw"); + selectFieldList.add("gsdwbj"); + selectFieldList.add("sydw"); + selectFieldList.add("sydwbj"); + selectFieldList.add("yldw1"); + selectFieldList.add("yldwbj1"); + selectFieldList.add("gjjdw"); + selectFieldList.add("gjjdwbj"); + selectFieldList.add("fwf"); + selectFieldList.add("sb"); + selectFieldList.add("yfgz"); + selectFieldList.add("ydyxyg"); + selectFieldList.add("qjl"); + selectFieldList.add("lsjl"); + selectFieldList.add("nzj"); + // 获取对应期间人员明细工资实发表 + rs.execute("select xm,rylx,gh,zjgs,"+ StringUtils.join(selectFieldList,",")+" from uf_rymxgzsf where qj ='" + SalaryDateUtil.getFormatYearMonth(salaryMonthDate) +"'"); + Map>> listGroupByCbzx = new HashMap<>(); + while (rs.next()) { + List ltZjrggzftDTOList = LtZjrggzfGroupByGh.get(Utils.null2String(rs.getString("gh"))); + if (CollectionUtils.isNotEmpty(ltZjrggzftDTOList)) { + for (LtZjrggzftDTO ftDTO : ltZjrggzftDTOList) { + BigDecimal zb = ftDTO.getZb(); + String cbzx = ftDTO.getCbzxbm(); + List> cbzxList = listGroupByCbzx.computeIfAbsent(cbzx, k -> new ArrayList<>()); + Map singleEmpValueMap = new HashMap<>(); + singleEmpValueMap.put("rylb", Utils.null2String(rs.getString("rylx"))); + singleEmpValueMap.put("cbzx", ftDTO.getCbzx()); + singleEmpValueMap.put("zjgs", Utils.null2String(rs.getString("zjgs"))); + BigDecimal yldw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj"))); + singleEmpValueMap.put("ylbxdw", yldw.multiply(zb).toPlainString()); + BigDecimal gsdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gsdwbj"))); + singleEmpValueMap.put("gsbxdw", gsdw.multiply(zb).toPlainString()); + BigDecimal sydw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sydwbj"))); + singleEmpValueMap.put("sybxdw", sydw.multiply(zb).toPlainString()); + BigDecimal yldw1 = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldw1")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yldwbj1"))); + singleEmpValueMap.put("ylbxdw1", yldw1.multiply(zb).toPlainString()); + BigDecimal gjjdw = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdw")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("gjjdwbj"))); + singleEmpValueMap.put("zfgjjdw", gjjdw.multiply(zb).toPlainString()); + singleEmpValueMap.put("fwf", SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("fwf")).multiply(zb).toPlainString()); + singleEmpValueMap.put("sb", SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("sb")).multiply(zb).toPlainString()); + // 奖金=月度优秀员工+其他奖励+临时激励 + BigDecimal jj = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("ydyxyg")).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("qjl"))).add(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("lsjl"))); + singleEmpValueMap.put("jj", jj.multiply(zb).toPlainString()); + BigDecimal nzj = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("nzj")); + singleEmpValueMap.put("nzj", nzj.multiply(zb).toPlainString()); + // 应发工资 + BigDecimal gz = SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yfgz")).subtract(jj).subtract(nzj); + singleEmpValueMap.put("gz", gz.multiply(zb).toPlainString()); + cbzxList.add(singleEmpValueMap); + } + } + } + + // 获取外包字段信息 + Map zjInfoMap = new HashMap<>(); + List zjfields = Arrays.stream(baseBean.getPropValue("ltSalaryReport", "zjrggzftbjt_zj_filds").split(",")).filter(key -> StringUtils.isNotBlank(key)).collect(Collectors.toList()); + for (String field : zjfields) { + String fieldInfo = baseBean.getPropValue("ltSalaryReport", "zjrggzftbjt_" + field + "_info"); + try { + fieldInfo = new String(fieldInfo.getBytes("ISO-8859-1"), "utf-8"); + } catch (UnsupportedEncodingException e) { + fieldInfo = ""; + } + zjInfoMap.put(field, fieldInfo); + } + + 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", "zjrggzftbsf_mode_id"); + // 入库前先删除 + rs.execute("delete from uf_zjrggzftbsf where xzszy ='" + salaryMonth +"'"); + + String insertStartSql = new String("insert into uf_zjrggzftbsf (formmodeid,modedatacreater," + + "modedatacreatertype,modedatacreatedate,modedatacreatetime,xzszy,cbzx,cbzxsm,gz,jj,nzj,gjjdw,yldw,yldw1,sydw,gsdw," + + StringUtils.join(zjfields, ",") + ")VALUES("); + // 自招字段 + List zzFields = Arrays.asList("gz","jj","nzj","gjjdw","yldw","yldw1","sydw","gsdw"); + + for (Map.Entry>> entry : listGroupByCbzx.entrySet()) { + // 已根据成本中心分组并乘以了对应的占比,成本中心中需要分中介公司、人员类别和自招 + List> list = entry.getValue(); + if (CollectionUtils.isEmpty(list)) { + continue; + } + Map>> groupByzjAndRylb = new HashMap<>(); + list.stream().forEach(map -> { + String zjgs = Utils.null2String(map.get("zjgs")); + if (StringUtils.isBlank(zjgs)) { + // 自招 + List> zzList = groupByzjAndRylb.computeIfAbsent("zz", k -> new ArrayList<>()); + zzList.add(map); + } else { + String rylb = Utils.null2String(map.get("rylb")); + List> zjList = groupByzjAndRylb.computeIfAbsent(zjgs+rylb, k -> new ArrayList<>()); + zjList.add(map); + } + }); + // 获取自招合计数据 + List> zzList = groupByzjAndRylb.get("zz"); + Map zzSumMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(zzList)) { + for (String zzField : zzFields) { + String sumVal = zzList.stream().map(map -> Utils.null2String(map.get(zzField))).filter(NumberUtils::isCreatable).map(BigDecimal::new) + .reduce(new BigDecimal("0"), BigDecimal::add).setScale(2, RoundingMode.HALF_UP).toPlainString(); + zzSumMap.put(zzField, sumVal); + } + } + // 入库 + StringBuilder insertSqlSb = new StringBuilder(insertStartSql) + .append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'") + .append(salaryMonth).append("','").append(entry.getKey()).append("','").append(Utils.null2String(list.get(0).get("cbzx"))).append("',"); + for (String zzField : zzFields) { + insertSqlSb.append(SalaryEntityUtil.string2BigDecimalDefault0(zzSumMap.get(zzField)).toString()).append(","); + } + for (String zjfield : zjfields) { + String zjInfo = Utils.null2String(zjInfoMap.get(zjfield)); + List> zjList = groupByzjAndRylb.get(zjInfo); + BigDecimal zjSumVal = new BigDecimal("0"); + if (CollectionUtils.isNotEmpty(zjList)) { + BigDecimal fwf = zjList.stream().map(map -> Utils.null2String(map.get("fwf"))).filter(NumberUtils::isCreatable).map(BigDecimal::new) + .reduce(new BigDecimal("0"), BigDecimal::add); + BigDecimal sb = zjList.stream().map(map -> Utils.null2String(map.get("sb"))).filter(NumberUtils::isCreatable).map(BigDecimal::new) + .reduce(new BigDecimal("0"), BigDecimal::add); + zjSumVal = fwf.add(sb).setScale(2, RoundingMode.HALF_UP); + } + insertSqlSb.append(zjSumVal.toPlainString()).append(","); + } + insertSqlSb.append(")"); + insertSqlSb.deleteCharAt(insertSqlSb.lastIndexOf(",")); + rs.execute(insertSqlSb.toString()); + // 权限重构 + // 获取最大值 作为权限重构的起始id + rs.execute("select max(id) from uf_zjrggzftbsf"); + int maxId = 0; + if (rs.next()) { + maxId = rs.getInt(1); + } + if (modeId != null && NumberUtils.isCreatable(modeId)) { + ModeRightInfo ModeRightInfo = new ModeRightInfo(); + ModeRightInfo.setNewRight(true); + ModeRightInfo.editModeDataShare(1, Integer.valueOf(modeId), maxId); + } + } + return null; + } + + @Override + public String ltGenGwpjgzcxb(String year) { + if (!NumberUtils.isCreatable(year)) { + throw new SalaryRunTimeException("年份错误"); + } + + BaseBean baseBean = new BaseBean(); + RecordSet rs = new RecordSet(); + // 获取全年人员明细工资实发表 + rs.execute("select gh,szbm,szgw,yfgz,ydjx,jdjx,nzj,qjlxj from uf_rymxgzsf where qj >= '" + year + "-01' and qj <= '"+year+"'-12"); + List ltRymxgzDTOList = new ArrayList<>(); + while (rs.next()) { + ltRymxgzDTOList.add(LtRymxgzDTO.builder() + .gh(Utils.null2String(rs.getString("gh"))) + .bm(SalaryEntityUtil.string2LongDefault0(rs.getString("szbm"))) + .gw(SalaryEntityUtil.string2LongDefault0(rs.getString("szgw"))) + .gz(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("yfgz"))) + .jx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("ydjx"))) + .jdjx(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("jdjx"))) + .qtjlxj(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("qjlxj"))) + .nzj(SalaryEntityUtil.string2BigDecimalDefault0(rs.getString("nzj"))) + .build()); + } + + 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", "zjrggzftbsf_mode_id"); + // 入库前先删除 + rs.execute("delete from uf_gwpjgzcxb where nf ='" + year +"'"); + + String insertStartSql = new String("insert into uf_gwpjgzcxb (formmodeid,modedatacreater," + + "modedatacreatertype,modedatacreatedate,modedatacreatetime,nf,bm,gw,yjgz)VALUES("); + + // 根据岗位部门汇总 + Map> dtoGroupByGwBm = SalaryEntityUtil.group2Map(ltRymxgzDTOList, dto -> dto.getGw() + "_split" + dto.getBm()); + for (Map.Entry> gwbmEntry : dtoGroupByGwBm.entrySet()) { + // 再根据工号汇总,求出每个人的平均月薪 + List gwbmDtoList = gwbmEntry.getValue(); + Map> dtoGroupByGh = SalaryEntityUtil.group2Map(gwbmDtoList, dto -> dto.getGh()); + BigDecimal sumEmpAveMonthSalary = new BigDecimal("0"); + int empNums = 0; + for (Map.Entry> ghEntry: dtoGroupByGh.entrySet()) { + List ghDtoList = ghEntry.getValue(); + BigDecimal empYearSumVal = new BigDecimal("0"); + for (LtRymxgzDTO dto : ghDtoList) { + empYearSumVal = empYearSumVal.add(dto.getGz()).add(dto.getJx()).add(dto.getJdjx()).add(dto.getBndjx()).add(dto.getQtjlxj()); + } + // 计算平均月薪 + BigDecimal empAveMonthSalary = empYearSumVal.divide(new BigDecimal(String.valueOf(ghDtoList.size())), 2, RoundingMode.HALF_UP); + empNums++; + } + BigDecimal aveValue = sumEmpAveMonthSalary.divide(new BigDecimal(String.valueOf(empNums)), 2, RoundingMode.HALF_UP); + String[] split = gwbmEntry.getKey().split("_split"); + Long gw = split != null && split.length > 0 ? SalaryEntityUtil.string2LongDefault0(split[0]) : 0L; + Long bm = split != null && split.length > 1 ? SalaryEntityUtil.string2LongDefault0(split[1]) : 0L; + // 入库 + StringBuilder insertSqlSb = new StringBuilder(insertStartSql) + .append(modeId).append(",1,0,").append(currDate).append(",").append(currTime).append(",'") + .append(year).append("',").append(bm).append(",").append(gw).append(",").append(aveValue.toPlainString()).append(")"); + rs.execute(insertSqlSb.toString()); + // 权限重构 + // 获取最大值 作为权限重构的起始id + rs.execute("select max(id) from uf_gwpjgzcxb"); + int maxId = 0; + if (rs.next()) { + maxId = rs.getInt(1); + } + if (modeId != null && NumberUtils.isCreatable(modeId)) { + ModeRightInfo ModeRightInfo = new ModeRightInfo(); + ModeRightInfo.setNewRight(true); + ModeRightInfo.editModeDataShare(1, Integer.valueOf(modeId), maxId); + } + } + return null; + } } \ No newline at end of file diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index ddc17e1ec..d07568507 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -1235,5 +1235,47 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::ltGenBmxmgzftb, salaryMonth); } + /** + * 联特 表7 - 直接人工工时分摊表-计提 + * @param request + * @param response + * @return + */ + @GET + @Path("/ltSalaryReport/genZjrggsftbjt") + @Produces(MediaType.APPLICATION_JSON) + public String ltGenZjrggsftbjt(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam(value = "salaryMonth") String salaryMonth) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::ltGenZjrggsftbjt, salaryMonth); + } + + /** + * 联特 表7 - 直接人工工时分摊表-实发 + * @param request + * @param response + * @return + */ + @GET + @Path("/ltSalaryReport/genZjrggsftbsf") + @Produces(MediaType.APPLICATION_JSON) + public String ltGenZjrggsftbsf(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam(value = "salaryMonth") String salaryMonth) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::ltGenZjrggsftbsf, salaryMonth); + } + + /** + * 联特 表9 - 岗位平均工资查询表 + * @param request + * @param response + * @return + */ + @GET + @Path("/ltSalaryReport/genGwpjgzcxb") + @Produces(MediaType.APPLICATION_JSON) + public String ltGenGwpjgzcxb(@Context HttpServletRequest request, @Context HttpServletResponse response,@QueryParam(value = "salaryMonth") String salaryMonth) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::ltGenGwpjgzcxb, salaryMonth); + } + /**********************************联特 报表end*********************************/ } diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index ab5b97aee..ed2b3f0ee 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -504,4 +504,31 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult public String ltGenBmxmgzftb(String salaryMonth) { return getSalaryAcctResultService(user).ltGenBmxmgzftb(salaryMonth); } + + /** + * 联特 表7 - 直接人工工时分摊表-计提 + * @param salaryMonth + * @return + */ + public String ltGenZjrggsftbjt(String salaryMonth) { + return getSalaryAcctResultService(user).ltGenZjrggsftbjt(salaryMonth); + } + + /** + * 联特 表7 - 直接人工工时分摊表-实发 + * @param salaryMonth + * @return + */ + public String ltGenZjrggsftbsf(String salaryMonth) { + return getSalaryAcctResultService(user).ltGenZjrggsftbsf(salaryMonth); + } + + /** + * 联特 表9 - 岗位平均工资查询表 + * @param salaryMonth + * @return + */ + public String ltGenGwpjgzcxb(String salaryMonth) { + return getSalaryAcctResultService(user).ltGenGwpjgzcxb(salaryMonth); + } }