From 5a6df5a257bc94926ee2bf79b5bcaeb5321f01a5 Mon Sep 17 00:00:00 2001 From: sy Date: Tue, 6 Sep 2022 17:13:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A0=B8=E7=AE=97=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E5=B9=B2=E9=A2=84=E5=8A=9F=E8=83=BD=EF=BC=8C=E7=A6=8F?= =?UTF-8?q?=E5=88=A9=E6=A0=B8=E7=AE=97=E9=A1=B9=E5=88=97=E8=A1=A8=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E3=80=81=E7=A6=8F=E5=88=A9=E6=A0=B8=E7=AE=97=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E6=A8=A1=E6=9D=BF=E4=B8=8B=E8=BD=BD=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E3=80=81=E7=A6=8F=E5=88=A9=E6=A0=B8=E7=AE=97=E5=B9=B2=E9=A2=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=AF=BC=E5=85=A5=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIAccountBiz.java | 7 + .../InsuranceAcctDetailImportFieldDTO.java | 23 ++ ...nsuranceAcctDetailImportTemplateParam.java | 4 +- .../InsuranceAccountDetailMapper.java | 6 + .../InsuranceAccountDetailMapper.xml | 27 ++ .../salary/service/SIAccountService.java | 6 + .../service/impl/SIAccountServiceImpl.java | 291 ++++++++---------- .../salary/web/SIAccountController.java | 26 +- .../salary/wrapper/SalaryFormulaWrapper.java | 30 +- 9 files changed, 240 insertions(+), 180 deletions(-) create mode 100644 src/com/engine/salary/entity/siaccount/dto/InsuranceAcctDetailImportFieldDTO.java diff --git a/src/com/engine/salary/biz/SIAccountBiz.java b/src/com/engine/salary/biz/SIAccountBiz.java index 87d5d2349..49b97c916 100644 --- a/src/com/engine/salary/biz/SIAccountBiz.java +++ b/src/com/engine/salary/biz/SIAccountBiz.java @@ -1687,4 +1687,11 @@ public class SIAccountBiz extends Service { getInsuranceAccountBatchMapper().updateById(param); } + /** + * 批量更新福利台账 + */ + public void batchUpdateByEmployeeIdAndBillMonth(List insuranceAccountDetailPOS) { + getInsuranceAccountDetailMapper().batchUpdateByEmployeeIdAndBillMonth(insuranceAccountDetailPOS); + } + } diff --git a/src/com/engine/salary/entity/siaccount/dto/InsuranceAcctDetailImportFieldDTO.java b/src/com/engine/salary/entity/siaccount/dto/InsuranceAcctDetailImportFieldDTO.java new file mode 100644 index 000000000..b7e99b168 --- /dev/null +++ b/src/com/engine/salary/entity/siaccount/dto/InsuranceAcctDetailImportFieldDTO.java @@ -0,0 +1,23 @@ +package com.engine.salary.entity.siaccount.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author sy + * @Description 福利核算导入时生成导入模板的薪资(福利)项目 + * @Date 2022/9/2 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class InsuranceAcctDetailImportFieldDTO { + //字段id +// private String fieldId; + + //薪资项目名称 + private String salaryItemName; +} diff --git a/src/com/engine/salary/entity/siaccount/param/InsuranceAcctDetailImportTemplateParam.java b/src/com/engine/salary/entity/siaccount/param/InsuranceAcctDetailImportTemplateParam.java index 9aed8694a..84f5437ca 100644 --- a/src/com/engine/salary/entity/siaccount/param/InsuranceAcctDetailImportTemplateParam.java +++ b/src/com/engine/salary/entity/siaccount/param/InsuranceAcctDetailImportTemplateParam.java @@ -20,6 +20,6 @@ public class InsuranceAcctDetailImportTemplateParam { /** * 薪资项目id(薪资项目包含了福利项) */ - @DataCheck(require = true,message = "薪资项目id不能为空") - private Collection salaryItemIds; + @DataCheck(require = true,message = "福利核算项目name不能为空") + private Collection welfareNames; } diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java index 1871ca855..015e9ae2d 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java @@ -1,5 +1,6 @@ package com.engine.salary.mapper.siaccount; +import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; import com.engine.salary.entity.siaccount.param.InsuranceAccountDetailParam; import com.engine.salary.entity.siaccount.param.SupplementAccountBaseParam; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; @@ -104,4 +105,9 @@ public interface InsuranceAccountDetailMapper { List changeList(@Param("userName") String userName); + /** + * 根据员工id和账单月份批量更新数据 + */ + void batchUpdateByEmployeeIdAndBillMonth(@Param("pos") Collection pos); + } diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml index 788bf39cc..59cc9a21b 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml @@ -761,4 +761,31 @@ )a + + + UPDATE hrsa_bill_detail + + + social_per_json = #{item.socialPerJson}, + social_per_sum = #{item.socialPerSum}, + fund_per_json = #{item.fundPerJson}, + fund_per_sum = #{item.fundPerSum}, + other_per_json = #{item.otherPerJson}, + other_per_sum = #{item.otherPerSum}, + per_sum = #{item.perSum}, + social_com_json = #{item.socialComJson}, + social_com_sum = #{item.socialComSum}, + fund_com_json = #{item.fundComJson}, + fund_com_sum = #{item.fundComSum}, + other_com_json = #{item.otherComJson}, + other_com_sum = #{item.otherComSum}, + update_time = #{item.updateTime}, + + + WHERE employee_id = #{item.employeeId} + AND bill_month = #{item.billMonth} + AND delete_type = 0 + + + \ No newline at end of file diff --git a/src/com/engine/salary/service/SIAccountService.java b/src/com/engine/salary/service/SIAccountService.java index de1091702..32e970c85 100644 --- a/src/com/engine/salary/service/SIAccountService.java +++ b/src/com/engine/salary/service/SIAccountService.java @@ -208,8 +208,14 @@ public interface SIAccountService { void socialSecurityBenefitsRecalculate(InsuranceAccountBatchPO param); + /** + * 导出“福利核算导入模板” + */ XSSFWorkbook exportImportTemplate(InsuranceAcctDetailImportTemplateParam param); + /** + * 将福利核算模板导入的数据更新到数据库 + */ Map importInsuranceAcctDetail(InsuranceAcctImportParam insuranceAcctImportParam); } diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 39069882b..59a63bc16 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -46,6 +46,7 @@ import com.engine.salary.mapper.siaccount.InsuranceAccountBatchMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountDetailMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountInspectMapper; import com.engine.salary.mapper.sicategory.ICategoryMapper; +import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.service.*; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; @@ -128,6 +129,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { return (SalaryItemService) ServiceUtil.getService(SalaryItemServiceImpl.class, user); } + private TaxAgentMapper getTaxAgentMapper() { + return MapperProxyFactory.getProxy(TaxAgentMapper.class); + } + SICategoryBiz siCategoryBiz = new SICategoryBiz(); @Override @@ -998,8 +1003,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { ValidUtil.doValidator(param); // 必须选择导入模板所需的薪资项目(福利项) - if (CollectionUtils.isEmpty(param.getSalaryItemIds())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99019, "参数错误,请选择导入模板所需的福利项目")); + if (CollectionUtils.isEmpty(param.getWelfareNames())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99019, "参数错误,请选择导入模板所需的福利项目核算项")); } // 模板表头(默认必带"个税扣缴义务人"、"姓名") @@ -1008,13 +1013,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { SalaryI18nUtil.getI18nLabel(86186, "手机号"), SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "账单月份"); - List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "taxAgentName", "billMonth"); - // 查询薪资项目(福利项) - List salaryItemPOS = getSalaryItemService(user).listByIds(param.getSalaryItemIds()); - for (SalaryItemPO salaryItemPO : salaryItemPOS) { - headerList.add(salaryItemPO.getName()); - dataIndexList.add("" + salaryItemPO.getId()); - } +// List dataIndexList = Lists.newArrayList("username", "departmentName", "mobile", "taxAgentName", "billMonth"); + // 查询福利核算项目 + List welfareNames = (List) param.getWelfareNames(); + headerList.addAll(welfareNames); // excel导出的数据 List> rows = new ArrayList<>(); @@ -1024,35 +1026,30 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { return ExcelUtil.genWorkbookV2(rows, sheetName); } + /** + * 将福利核算模板导入的数据更新到数据库 + */ @Override public Map importInsuranceAcctDetail(InsuranceAcctImportParam importParam) { - long currentEmployeeId = user.getUID(); - Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); +// long currentEmployeeId = user.getUID(); +// Boolean openDevolution = getTaxAgentService(user).isOpenDevolution(); Map apidatas = new HashMap(); EmployBiz employBiz = new EmployBiz(); - AddUpDeductionBiz addUpDeductionBiz = new AddUpDeductionBiz(); //todo,改为对应Biz //检验参数 //excel文件id String imageId = Util.null2String(importParam.getImageId()); -// Validate.notBlank(imageId, "imageId为空"); + if (StringUtils.isBlank(imageId)) { throw new SalaryRunTimeException("文件不存在"); } - // 获取所有个税扣缴义务人 - List taxAgents = getTaxAgentService(user).listAll(); - Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getName, TaxAgentPO::getId); -// //个税扣缴义务人 -// String taxAgentId = Util.null2String(importParam.getTaxAgentId()); +// // 获取所有个税扣缴义务人 +// List taxAgents = getTaxAgentService(user).listAll(); +// Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getName, TaxAgentPO::getId); + // 获取租户下所有的人员 List salaryEmployees = employBiz.listEmployee(); -// //已经核算过的不可操作 -// // 获取已经核算的数据 -// List salaryAcctEmployees = getAccountedEmployeeData(declareMonthStr); -// // 查询已有数据 -// Date declareMonth = SalaryDateUtil.localDateToDate(LocalDate.parse(declareMonthStr + "-01", SalaryDateUtil.DATE_FORMATTER)); -// List list = getAddUpDeductionMapper().listSome(AddUpDeduction.builder().declareMonth(declareMonth).build()); // 失败的数量 int failCount = 0; @@ -1064,14 +1061,12 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); - // 错误提示信息 List excelComments = Lists.newArrayList(); // 存在错误的那行数据 List> errorDatas = Lists.newArrayList(); // 表头 List headers = ExcelSupport.getSheetHeader(sheet, 0); - // 处理数值 List> data = ExcelParseHelper.parse2Map(sheet, 1); if (CollectionUtils.isEmpty(headers)) { @@ -1080,18 +1075,43 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { if (CollectionUtils.isEmpty(data)) { throw new RuntimeException("无数据"); } + //存储待更新的InsuranceAccountDetailPO数据 + List updateInsuranceAccountDetailList = new ArrayList<>(); + //遍历excel表具体数据 for (int i = 0; i < data.size(); i++) { String row = "第" + (i + 2) + "行"; - int usernameIndex = 0; boolean isError = false; Map map = data.get(i); Long employeeId = 0L; - Long taxAgentId = 0L; +// Long taxAgentId = 0L; - List updateInsuranceAccountDetailList = new ArrayList<>(); + List list = new ArrayList<>(); + String billMonth = (String) map.getOrDefault("账单月份", ""); + + String taxAgentName = (String) map.getOrDefault("个税扣缴义务人", ""); + Long paymentOrganization = 0L; + List taxAgentPoList = getTaxAgentMapper().listByName(taxAgentName); + + if (taxAgentPoList.size() == 1) { + paymentOrganization = taxAgentPoList.get(0).getId(); + } else { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人"))); + excelComments.add(errorMessageMap); + } + + if (!checkBillMonth(billMonth)) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "账单月份输入有误,请参照“2022-09”这种格式进行检查")); + excelComments.add(errorMessageMap); + } + + //遍历表头 for (int j = 0; j < headers.size(); j++) { String header = headers.get(j); String dataKey = header; @@ -1099,25 +1119,17 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { continue; } String dataValue = (String) map.getOrDefault(dataKey.toString(), ""); - String deparmentName = (String) map.getOrDefault("部门", ""); - String mobile = (String) map.getOrDefault("手机号", ""); - String billMonth = (String) map.getOrDefault("账单月份", ""); - - Long paymentOrganization = (Long) map.getOrDefault("个税扣缴义务人", ""); - if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(85429, "姓名"), dataKey.toString())) { - usernameIndex = j; if (StringUtils.isEmpty(dataValue)) { isError = true; Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空")); excelComments.add(errorMessageMap); - //salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"), i, i, j, j); - } else { + } else { List employeeSameIds = salaryEmployees.stream().filter(e -> (StringUtils.isBlank(dataValue) || Objects.equals(e.getUsername(), dataValue)) && (StringUtils.isBlank(deparmentName) || Objects.equals(e.getDepartmentName(), deparmentName)) && (StringUtils.isBlank(mobile) || Objects.equals(e.getMobile(), mobile))) @@ -1128,7 +1140,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Map errorMessageMap = Maps.newHashMap(); errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名")); excelComments.add(errorMessageMap); -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名"), i, i, j, j); + } else if (employeeSameIds.size() > 1) { //存在离职和在职状态取在职状态 employeeSameIds = employeeSameIds.stream() @@ -1149,70 +1161,46 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { }else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "部门"), dataKey.toString())) { } else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), dataKey.toString())) { - if (StringUtils.isEmpty(dataValue)) { - isError = true; - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102839, "个税扣缴义务人不能为空"))); - excelComments.add(errorMessageMap); -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102839, "个税扣缴义务人不能为空"), i, i, j, j); - } else { - taxAgentId = taxAgentNameMap.getOrDefault(dataValue, 0L); - if (taxAgentId == null || taxAgentId <= 0) { - isError = true; - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人"))); - excelComments.add(errorMessageMap); -// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人"), i, i, j, j); - } - } - } else if (!checkBillMonth(billMonth)) { - isError = true; - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "账单月份输入有误,请参照“2022-09”这种格式进行检查")); - excelComments.add(errorMessageMap); - } - - if (!isError){ - List employeeIds = new ArrayList<>(); - employeeIds.add(employeeId); - //如果福利核算信息查询不到唯一匹配数据,不支持导入 - //根据员工id和账单月份查询 - List list = queryList(billMonth, paymentOrganization, employeeIds); - if (list.isEmpty()) { - isError = true; - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "本次福利核算不包含该人员")); - excelComments.add(errorMessageMap); - } else if (list.size() > 1) { - isError = true; - Map errorMessageMap = Maps.newHashMap(); - errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员本次核算出现多组数据,请删除数据库中多余核算项")); - excelComments.add(errorMessageMap); - } else { - //拼装待更新数据 - updateInsuranceAccountDetailList.add(handleInsuranceAccountDetail(list.get(0), map)); - } } } - //将待更新列表加密 - InsuranceAccountDetailPOEncrypt.encryptInsuranceAccountDetailPOList(updateInsuranceAccountDetailList); - //todo,更新数据 + + if (!isError){ + List employeeIds = new ArrayList<>(); + employeeIds.add(employeeId); + //如果福利核算信息查询不到唯一匹配数据,不支持导入 + //根据员工id、个税扣缴义务人id、账单月份查询 + list = queryList(billMonth, paymentOrganization, employeeIds); + if (list.isEmpty()) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "本次福利核算不包含该人员")); + excelComments.add(errorMessageMap); + } else if (list.size() > 1) { + isError = true; + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", row + SalaryI18nUtil.getI18nLabel(100579, "该人员本次核算出现多组数据,请删除数据库中多余核算项")); + excelComments.add(errorMessageMap); + } else { + //拼装待更新数据 + updateInsuranceAccountDetailList.add(handleInsuranceAccountDetail(list.get(0), map)); + } + + } if (isError) { failCount++; errorDatas.add(map); - continue; } else { - successCount++; } - } - - + //将待更新列表加密 + InsuranceAccountDetailPOEncrypt.encryptInsuranceAccountDetailPOList(updateInsuranceAccountDetailList); + //更新 + getSiAccountBiz(user).batchUpdateByEmployeeIdAndBillMonth(updateInsuranceAccountDetailList); apidatas.put("successCount", successCount); apidatas.put("errorCount", failCount); apidatas.put("errorData", excelComments); @@ -1226,18 +1214,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 将更新的数据设置到老的insuranceAccountDetailPO对象中 - * @param insuranceAccountDetailPO - * @param map */ - private InsuranceAccountDetailPO handleInsuranceAccountDetail(InsuranceAccountDetailPO insuranceAccountDetailPO, Map map) { + private InsuranceAccountDetailPO handleInsuranceAccountDetail(InsuranceAccountDetailPO insuranceAccountDetailPO, Map baseMap) { //组装json数据,格式Map -// StringBuilder socialPerJson = new StringBuilder(); -// StringBuilder fundPerJson = new StringBuilder(); -// StringBuilder otherPerJson = new StringBuilder(); -// StringBuilder socialComJson = new StringBuilder(); -// StringBuilder fundComJson = new StringBuilder(); -// StringBuilder otherComJson = new StringBuilder(); Map socialPerMap = new HashMap<>(); Map fundPerMap = new HashMap<>(); Map otherPerMap = new HashMap<>(); @@ -1245,42 +1225,28 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Map fundComMap = new HashMap<>(); Map otherComMap = new HashMap<>(); - for(Map.Entry entry : map.entrySet()) { + //筛选出福利核算项 + Map toDealMap = + baseMap.entrySet().stream() + .filter(map -> !"姓名".equals(map.getKey()) + && !"部门".equals(map.getKey()) + && !"手机号".equals(map.getKey()) + && !"个税扣缴义务人".equals(map.getKey()) + && !"账单月份".equals(map.getKey())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + for(Map.Entry entry : toDealMap.entrySet()) { //判断元素是否属于福利类 String keyName = entry.getKey(); //获取元素名后缀,方便之后判断“个人”或“单位” - String payScope = keyName.substring(keyName.length() - 1, keyName.length() + 1); + String payScope = keyName.substring(keyName.length() - 2); //获取福利类型 Integer welfareType; - List categoryPOList = siCategoryBiz.listByName(entry.getKey().substring(0, keyName.length() - 1)); + List categoryPOList = siCategoryBiz.listByName(entry.getKey().substring(0, keyName.length() - 2)); if (categoryPOList.size() == 1) { ICategoryPO iCategoryPO = categoryPOList.get(0); welfareType = iCategoryPO.getWelfareType(); -// if ("个人".equals(payScope)) { -// switch (welfareType) { -// case 1: -// socialPerJson.append(iCategoryPO.getId().toString()).append(":").append(entry.getValue().toString()).append(","); -// break; -// case 2: -// fundPerJson.append(iCategoryPO.getId().toString()).append(":").append(entry.getValue().toString()).append(","); -// break; -// case 3: -// otherPerJson.append(iCategoryPO.getId().toString()).append(":").append(entry.getValue().toString()).append(","); -// break; -// } -// } else if ("单位".equals(payScope)) { -// switch (welfareType) { -// case 1: -// socialComJson.append(iCategoryPO.getId().toString()).append(":").append(entry.getValue().toString()).append(","); -// break; -// case 2: -// fundComJson.append(iCategoryPO.getId().toString()).append(":").append(entry.getValue().toString()).append(","); -// break; -// case 3: -// otherComJson.append(iCategoryPO.getId().toString()).append(":").append(entry.getValue().toString()).append(","); -// break; -// } -// } + if ("个人".equals(payScope)) { switch (welfareType) { case 1: @@ -1292,6 +1258,8 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { case 3: otherPerMap.put(iCategoryPO.getId().toString(), entry.getValue().toString()); break; + default: + throw new SalaryRunTimeException("福利类型不存在"); } } else if ("单位".equals(payScope)) { switch (welfareType) { @@ -1304,91 +1272,96 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { case 3: otherComMap.put(iCategoryPO.getId().toString(), entry.getValue().toString()); break; + default: + throw new SalaryRunTimeException("福利类型不存在"); } } } } - //解密insuranceAccountDetailPO - InsuranceAccountDetailPOEncrypt.decryptItem(insuranceAccountDetailPO); +// //解密insuranceAccountDetailPO +// InsuranceAccountDetailPOEncrypt.decryptItem(insuranceAccountDetailPO); //组装新的insuranceAccountDetailPO对象数据 if (!socialPerMap.isEmpty()) { //对比新旧json中数据,并输出最终json - checkjsonMap(socialPerMap, insuranceAccountDetailPO.getSocialPerJson()); + checkJsonMap(socialPerMap, insuranceAccountDetailPO.getSocialPerJson()); insuranceAccountDetailPO.setSocialPerJson(JSON.toJSONString(socialPerMap)); } if (!socialComMap.isEmpty()) { - checkjsonMap(socialComMap, insuranceAccountDetailPO.getSocialComJson()); + checkJsonMap(socialComMap, insuranceAccountDetailPO.getSocialComJson()); insuranceAccountDetailPO.setSocialComJson(JSON.toJSONString(socialComMap)); } if (!fundPerMap.isEmpty()) { - checkjsonMap(fundPerMap, insuranceAccountDetailPO.getFundPerJson()); + checkJsonMap(fundPerMap, insuranceAccountDetailPO.getFundPerJson()); insuranceAccountDetailPO.setFundPerJson(JSON.toJSONString(fundPerMap)); } if (!fundComMap.isEmpty()) { - checkjsonMap(fundComMap, insuranceAccountDetailPO.getFundComJson()); + checkJsonMap(fundComMap, insuranceAccountDetailPO.getFundComJson()); insuranceAccountDetailPO.setFundComJson(JSON.toJSONString(fundComMap)); } if (!otherPerMap.isEmpty()) { - checkjsonMap(otherPerMap, insuranceAccountDetailPO.getOtherPerJson()); + checkJsonMap(otherPerMap, insuranceAccountDetailPO.getOtherPerJson()); insuranceAccountDetailPO.setOtherPerJson(JSON.toJSONString(otherPerMap)); } if (!otherComMap.isEmpty()) { - checkjsonMap(otherComMap, insuranceAccountDetailPO.getOtherComJson()); + checkJsonMap(otherComMap, insuranceAccountDetailPO.getOtherComJson()); insuranceAccountDetailPO.setOtherComJson(JSON.toJSONString(otherComMap)); } - if (!StringUtils.isEmpty(map.getOrDefault("个人合计", "").toString())) { - insuranceAccountDetailPO.setPerSum(map.get("个人合计").toString()); + if (!StringUtils.isEmpty(baseMap.getOrDefault("个人合计", "").toString())) { + insuranceAccountDetailPO.setPerSum(baseMap.get("个人合计").toString()); } - if (!StringUtils.isEmpty(map.getOrDefault("社保个人合计", "").toString())) { - insuranceAccountDetailPO.setSocialPerSum(map.get("社保个人合计").toString()); + if (!StringUtils.isEmpty(baseMap.getOrDefault("社保个人合计", "").toString())) { + insuranceAccountDetailPO.setSocialPerSum(baseMap.get("社保个人合计").toString()); } - if (!StringUtils.isEmpty(map.getOrDefault("公积金个人合计", "").toString())) { - insuranceAccountDetailPO.setFundPerSum(map.get("公积金个人合计").toString()); + if (!StringUtils.isEmpty(baseMap.getOrDefault("公积金个人合计", "").toString())) { + insuranceAccountDetailPO.setFundPerSum(baseMap.get("公积金个人合计").toString()); } - if (!StringUtils.isEmpty(map.getOrDefault("其他福利个人合计", "").toString())) { - insuranceAccountDetailPO.setOtherPerSum(map.get("其他福利个人合计").toString()); + if (!StringUtils.isEmpty(baseMap.getOrDefault("其他福利个人合计", "").toString())) { + insuranceAccountDetailPO.setOtherPerSum(baseMap.get("其他福利个人合计").toString()); } - if (!StringUtils.isEmpty(map.getOrDefault("单位合计", "").toString())) { - insuranceAccountDetailPO.setComSum(map.get("单位合计").toString()); + if (!StringUtils.isEmpty(baseMap.getOrDefault("单位合计", "").toString())) { + insuranceAccountDetailPO.setComSum(baseMap.get("单位合计").toString()); } - if (!StringUtils.isEmpty(map.getOrDefault("社保单位合计", "").toString())) { - insuranceAccountDetailPO.setSocialComSum(map.get("社保单位合计").toString()); + if (!StringUtils.isEmpty(baseMap.getOrDefault("社保单位合计", "").toString())) { + insuranceAccountDetailPO.setSocialComSum(baseMap.get("社保单位合计").toString()); } - if (!StringUtils.isEmpty(map.getOrDefault("公积金单位合计", "").toString())) { - insuranceAccountDetailPO.setFundComSum(map.get("公积金单位合计").toString()); + if (!StringUtils.isEmpty(baseMap.getOrDefault("公积金单位合计", "").toString())) { + insuranceAccountDetailPO.setFundComSum(baseMap.get("公积金单位合计").toString()); } - if (!StringUtils.isEmpty(map.getOrDefault("其他福利单位合计", "").toString())) { - insuranceAccountDetailPO.setOtherComSum(map.get("其他福利单位合计").toString()); + if (!StringUtils.isEmpty(baseMap.getOrDefault("其他福利单位合计", "").toString())) { + insuranceAccountDetailPO.setOtherComSum(baseMap.get("其他福利单位合计").toString()); } + if (!StringUtils.isEmpty(baseMap.getOrDefault("账单月份", "").toString())) { + insuranceAccountDetailPO.setBillMonth(baseMap.get("账单月份").toString()); + } + + insuranceAccountDetailPO.setUpdateTime(new Date()); + return insuranceAccountDetailPO; } /** * 对比新旧两份数据,并更新数据 - * @param newMap - * @param oldJson - * @return */ - private Map checkjsonMap(Map newMap, String oldJson) { - Map oldMap = JSON.parseObject(oldJson, new HashMap().getClass()); + private Map checkJsonMap(Map newMap, String oldJson) { + Map oldMap = JSON.parseObject(oldJson, HashMap.class); for (Map.Entry oldEntry : oldMap.entrySet()) { - + //保留无变动数据,更新已变动数据 if (!newMap.containsKey(oldEntry.getKey())) { newMap.put(oldEntry.getKey(), oldEntry.getValue()); } @@ -1399,10 +1372,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { /** * 校验福利核算的账单月份输入格式是否正确 */ - public boolean checkBillMonth(String billMonth) { - String connector = ""; + //校验内容:billMonth的长度是否为7、年月连接符是否为“-” + String connector; if(billMonth.length() == 7){ connector = billMonth.substring(4,5); return "-".equals(connector); diff --git a/src/com/engine/salary/web/SIAccountController.java b/src/com/engine/salary/web/SIAccountController.java index e73c71446..0f1e2c7a3 100644 --- a/src/com/engine/salary/web/SIAccountController.java +++ b/src/com/engine/salary/web/SIAccountController.java @@ -9,6 +9,7 @@ import com.engine.salary.entity.salaryformula.param.SalaryFormulaFieldQueryParam import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.siaccount.dto.InsuranceAccountTabDTO; import com.engine.salary.entity.siaccount.dto.InsuranceAccountViewListDTO; +import com.engine.salary.entity.siaccount.dto.InsuranceAcctDetailImportFieldDTO; import com.engine.salary.entity.siaccount.param.*; import com.engine.salary.entity.siaccount.po.InsuranceAccountBatchPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; @@ -394,26 +395,18 @@ public class SIAccountController { } /** - * 社保福利项列表 - * @param request - * @param response - * @return + * 社保福利(核算)项列表 */ @GET @Path("/getWelfareList") @Produces(MediaType.APPLICATION_JSON) public String getWelfareList(@Context HttpServletRequest request, @Context HttpServletResponse response) { User user = HrmUserVarify.getUser(request, response); - SalaryFormulaFieldQueryParam param = new SalaryFormulaFieldQueryParam(); - param.setSourceId("welfare"); - return new ResponseResult>(user).run(getSalaryFormulaWrapper(user)::fieldList, param); + return new ResponseResult>(user).run(getSalaryFormulaWrapper(user)::welfareList); } /** * 导出“福利核算导入”模板 - * @param request - * @param response - * @return */ @GET @Path("/welfare/importtemplate/export") @@ -422,9 +415,9 @@ public class SIAccountController { try { InsuranceAcctDetailImportTemplateParam param = new InsuranceAcctDetailImportTemplateParam(); - String salaryItemIds = request.getParameter("salaryItemIds"); - if (StringUtils.isNotBlank(salaryItemIds)) { - param.setSalaryItemIds(Arrays.stream(salaryItemIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); + String welfareNames = request.getParameter("welfareNames"); + if (StringUtils.isNotBlank(welfareNames)) { + param.setWelfareNames(Arrays.stream(welfareNames.split(",")).map(String::valueOf).collect(Collectors.toList())); } User user = HrmUserVarify.getUser(request, response); @@ -449,12 +442,15 @@ public class SIAccountController { } + /** + * 将通过“福利核算导入”模板导入的数据更新到hrsa_bill_detail表中 + */ @POST @Path("/welfare/importInsuranceAcctDetail") @Produces(MediaType.APPLICATION_JSON) - public String importInsuranceAcctDetail(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody InsuranceAcctImportParam importParam) { + public String importInsuranceAcctDetail(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody InsuranceAcctImportParam insuranceAcctImportParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>(user).run(getService(user)::importInsuranceAcctDetail, importParam); + return new ResponseResult>(user).run(getService(user)::importInsuranceAcctDetail, insuranceAcctImportParam); } } diff --git a/src/com/engine/salary/wrapper/SalaryFormulaWrapper.java b/src/com/engine/salary/wrapper/SalaryFormulaWrapper.java index c50dd6df9..ddd692fad 100644 --- a/src/com/engine/salary/wrapper/SalaryFormulaWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryFormulaWrapper.java @@ -2,6 +2,7 @@ package com.engine.salary.wrapper; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.salary.biz.SalaryItemBiz; import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryformula.bo.SalaryFormulaBO; import com.engine.salary.entity.salaryformula.dto.ExpressFormulaDTO; @@ -9,6 +10,8 @@ import com.engine.salary.entity.salaryformula.param.SalaryFormulaFieldQueryParam import com.engine.salary.entity.salaryformula.param.SalaryFormulaSaveParam; import com.engine.salary.entity.salaryformula.po.FormulaPO; import com.engine.salary.entity.salaryformula.po.FormulaVar; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.siaccount.dto.InsuranceAcctDetailImportFieldDTO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.RemoteExcelService; import com.engine.salary.service.SalaryFormulaService; @@ -18,10 +21,7 @@ import org.apache.commons.collections4.CollectionUtils; import weaver.hrm.User; import weaver.servicefiles.DataSourceXML; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 薪资项目 @@ -41,6 +41,7 @@ public class SalaryFormulaWrapper extends Service { return (SalaryFormulaService) ServiceUtil.getService(SalaryFormulaServiceImpl.class, user); } + private SalaryItemBiz salaryItemBiz = new SalaryItemBiz(); /** * 公式字段列表 @@ -80,4 +81,25 @@ public class SalaryFormulaWrapper extends Service { ArrayList pointArrayList = dataSourceXML.getPointArrayList(); return pointArrayList; } + + /** + * 获取薪资项目中福利类项目 + */ + public List welfareList() { + + List welfareList = new ArrayList<>(); + SalaryFormulaFieldQueryParam param = new SalaryFormulaFieldQueryParam(); + param.setSourceId("welfare"); + //获取福利类薪资项目 + List list = getRemoteExcelService(user).fieldList(param.getSourceId(), param.getExtendParam()); + //提取出福利类项目名称 + for(FormulaVar formulaVar : list) { + InsuranceAcctDetailImportFieldDTO insuranceAcctDetailImportFieldDTO = new InsuranceAcctDetailImportFieldDTO(); +// insuranceAcctDetailImportFieldDTO.setFieldId(formulaVar.getFieldId()); + insuranceAcctDetailImportFieldDTO.setSalaryItemName(formulaVar.getName()); + welfareList.add(insuranceAcctDetailImportFieldDTO); + + } + return welfareList; + } }