diff --git a/src/com/engine/salary/biz/SIArchivesBiz.java b/src/com/engine/salary/biz/SIArchivesBiz.java index 43edbaf0e..d20ce0ab0 100644 --- a/src/com/engine/salary/biz/SIArchivesBiz.java +++ b/src/com/engine/salary/biz/SIArchivesBiz.java @@ -62,6 +62,8 @@ import weaver.hrm.User; import java.math.BigDecimal; import java.util.*; import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -86,6 +88,10 @@ public class SIArchivesBiz { return MapperProxyFactory.getProxy(InsuranceBaseInfoMapper.class); } + private InsuranceSchemeDetailMapper getInsuranceSchemeDetailMapper() { + return MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class); + } + /** * @param welfareType * @param employeeId @@ -627,7 +633,7 @@ public class SIArchivesBiz { InsuranceArchivesOtherSchemePO updateOtherInfo = InsuranceArchivesOtherSchemePO.builder() .id(oldOtherInfo.getId()) - .otherSchemeId(param.getOtherName()) + .otherSchemeId(param.getOtherSchemeId()) .otherStartTime(param.getOtherStartTime()) .underTake(param.getUnderTake()) .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) @@ -641,6 +647,10 @@ public class SIArchivesBiz { .paymentOrganization(param.getPaymentOrganization()) .otherPaymentBaseString(paramReq.getPaymentForm()) .build(); + //校验福利基数是否符合上下限要求, + if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentBaseString())) { + throw new SalaryRunTimeException("其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + } InsuranceArchivesOtherSchemePOEncrypt.encryptItem(updateOtherInfo); otherSchemeMapper.updateById(updateOtherInfo); sqlSession.commit(); @@ -673,7 +683,7 @@ public class SIArchivesBiz { InsuranceArchivesFundSchemePO oldFundInfo = oldFundInfoList.get(0); InsuranceArchivesFundSchemePO updateFundInfo = InsuranceArchivesFundSchemePO.builder() .id(oldFundInfo.getId()) - .fundSchemeId(param.getFundName()) + .fundSchemeId(param.getFundSchemeId()) .fundAccount(param.getFundAccount()) .fundEndTime(param.getFundEndTime()) .fundStartTime(param.getFundStartTime()) @@ -689,6 +699,10 @@ public class SIArchivesBiz { .welfareType(paramReq.getWelfareType().getValue()) .employeeId(param.getEmployeeId()) .build(); + //校验福利基数是否符合上下限要求, + if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentBaseString())) { + throw new SalaryRunTimeException("公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + } InsuranceArchivesFundSchemePOEncrypt.encryptItem(updateFundInfo); fundSchemeMapper.updateById(updateFundInfo); @@ -734,7 +748,7 @@ public class SIArchivesBiz { .welfareType(paramReq.getWelfareType().getValue()) .deleteType(DeleteTypeEnum.NOT_DELETED.getValue()) .socialPaymentBaseString(paramReq.getPaymentForm()) - .socialSchemeId(param.getSocialName()) + .socialSchemeId(param.getSocialSchemeId()) .socialEndTime(param.getSocialEndTime()) .socialStartTime(param.getSocialStartTime()) .creator(employeeId) @@ -746,6 +760,10 @@ public class SIArchivesBiz { .socialAccount(param.getSchemeAccount()) .paymentOrganization(param.getPaymentOrganization()) .build(); + //校验福利基数是否符合上下限要求 + if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentBaseString())) { + throw new SalaryRunTimeException("社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"); + } InsuranceArchivesSocialSchemePOEncrypt.encryptItem(updateSocialInfo); socialSchemeMapper.updateById(updateSocialInfo); @@ -759,6 +777,54 @@ public class SIArchivesBiz { } } + /** + * 校验福利基数是否符合上下限要求 + * @param primaryId + * @param paymentBaseString + * @return + */ + public Boolean checkWelBaseLimit(Long primaryId, String paymentBaseString) { + + if (primaryId ==null || paymentBaseString == null) { + return true; + } + //设置缴纳对象 + Integer paymentScope = 2; + Map paymentBaseJson = JSON.parseObject(paymentBaseString, new HashMap().getClass()); + if (paymentBaseJson == null) { + return true; + } + + for (Map.Entry entry : paymentBaseJson.entrySet()) { + + //判断福利值是否为空/数字 + if (entry.getValue() == null || entry.getValue().length() == 0) { + continue; + } else if (!isNumeric(entry.getValue())) { + return false; + } + + //根据福利方案id、险种id、缴纳对象查询明细 + InsuranceSchemeDetailPO insuranceSchemeDetailPO = getInsuranceSchemeDetailMapper().getByPPI(primaryId, paymentScope, Long.valueOf(entry.getKey())); + if (insuranceSchemeDetailPO == null) { + return false; + } + + InsuranceSchemeDetailPOEncrypt.decryptItem(insuranceSchemeDetailPO); + String lowerLimit = "0.000".equals(insuranceSchemeDetailPO.getLowerLimit()) ? null : insuranceSchemeDetailPO.getLowerLimit(); + String upperLimit = "0.000".equals(insuranceSchemeDetailPO.getUpperLimit()) ? null : insuranceSchemeDetailPO.getUpperLimit(); + if (lowerLimit != null && lowerLimit.length() > 0 && Double.parseDouble(entry.getValue()) < Double.parseDouble(lowerLimit)) { + //数值低于对应福利明细下限 + return false; + } + if (upperLimit != null && upperLimit.length() > 0 && Double.parseDouble(entry.getValue()) > Double.parseDouble(upperLimit)) { + //数值高于对应福利明细上限 + return false; + } + } + return true; + } + /** * 档案列表 *

@@ -840,8 +906,8 @@ public class SIArchivesBiz { SocialSchemeMapper socialSchemeMapper = sqlSession.getMapper(SocialSchemeMapper.class); List page = new ArrayList<>(); PageInfo pageInfo = new PageInfo<>(InsuranceArchivesEmployeePO.class); - //生成福利档案历史基础信息(在福利档案基础信息表为空时) - createOldInsuranceBaseInfo(operateId); +// //生成福利档案历史基础信息(在福利档案基础信息表为空时) +// createOldInsuranceBaseInfo(operateId); //获取福利档案列表数据 if (needAuth) { Collection taxAgentEmployeeIds = param.getTaxAgentEmployeeIds(); @@ -1343,7 +1409,7 @@ public class SIArchivesBiz { /** * 判断是否需要生成历史福利档案基本信息 */ - private void createOldInsuranceBaseInfo(Long creator) { + public void createOldInsuranceBaseInfo(Long creator) { List nowBaseInfoList = getInsuranceBaseInfoMapper().getInsuranceBaseInfoList(); if (nowBaseInfoList.size() == 0) { List addBaseInfoList = new ArrayList<>(); @@ -1369,4 +1435,18 @@ public class SIArchivesBiz { } + + /** + * 判断字符串是否为整数或者小数或者负数 + */ + public static boolean isNumeric(String str){ + + Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$"); + Matcher isNum = pattern.matcher(str); + if (!isNum.matches()) { + return false; + } + return true; + + } } diff --git a/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesFundSaveParam.java b/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesFundSaveParam.java index 493aa38c0..49481c8b4 100644 --- a/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesFundSaveParam.java +++ b/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesFundSaveParam.java @@ -38,8 +38,8 @@ public class InsuranceArchivesFundSaveParam { //公积金方案id private Long fundSchemeId; - //公积金方案id - private Long fundName; + //公积金方案名称 + private String fundName; //公积金账号 private String fundAccount; diff --git a/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesOtherSaveParam.java b/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesOtherSaveParam.java index 3ea6306b3..c3ed3481c 100644 --- a/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesOtherSaveParam.java +++ b/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesOtherSaveParam.java @@ -39,8 +39,8 @@ public class InsuranceArchivesOtherSaveParam { //其他福利方案id private Long otherSchemeId; - //其他福利方案id") - private Long otherName; + //其他福利方案名称 + private String otherName; //其他福利缴纳组织 private Long paymentOrganization; diff --git a/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesSocialSaveParam.java b/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesSocialSaveParam.java index 7b88e610d..6c3cbebc9 100644 --- a/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesSocialSaveParam.java +++ b/src/com/engine/salary/entity/siarchives/param/InsuranceArchivesSocialSaveParam.java @@ -39,9 +39,8 @@ public class InsuranceArchivesSocialSaveParam { //社保方案id private Long socialSchemeId; - //社保方案id - //todo 前端需要调整 - private Long socialName; + //社保方案名称 + private String socialName; //社保账号 private String schemeAccount; diff --git a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java index c09a4aca5..aa914bf45 100644 --- a/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIArchivesServiceImpl.java @@ -134,6 +134,8 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService public Map listPage(InsuranceArchivesListParam param) { long currentEmployeeId = user.getUID(); + // 1.历史数据处理 + siArchivesBiz.createOldInsuranceBaseInfo(currentEmployeeId); // 2.待减员自动处理 handleStayDelData(currentEmployeeId); // 3.增量数据处理 diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 980aee0a3..3875365e0 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -64,6 +64,7 @@ import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.xpath.operations.Bool; import weaver.file.ImageFileManager; import weaver.hrm.User; @@ -935,7 +936,34 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { insuranceArchivesAccountPO.setFund(insuranceArchivesFundSchemePO); insuranceArchivesAccountPO.setOther(insuranceArchivesOtherSchemePO); insuranceArchivesAccountPO.setBaseInfo(insuranceArchivesBaseInfoPO); - insuranceArchivesAccountPOS.add(insuranceArchivesAccountPO); + //校验福利基数是否符合上下限要求, + Boolean socialCheckBase = siArchivesBiz.checkWelBaseLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentBaseString()); + + Boolean fundCheckBase = siArchivesBiz.checkWelBaseLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentBaseString()); + + Boolean otherCheckBase = siArchivesBiz.checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentBaseString()); + + if (socialCheckBase && fundCheckBase && otherCheckBase) { + insuranceArchivesAccountPOS.add(insuranceArchivesAccountPO); + } else { + String checkMessage = "该条数据中"; + if (!socialCheckBase) { + checkMessage = checkMessage + "社保福利基数、"; + } + if (!fundCheckBase) { + checkMessage = checkMessage + "公积金福利基数、"; + } + if (!otherCheckBase) { + checkMessage = checkMessage + "其他福利基数、"; + } + checkMessage = checkMessage.substring(0, checkMessage.length() - 1); + + Map errorMessageMap = Maps.newHashMap(); + errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100312, checkMessage + "数值超出相关福利方案的基数上下限要求,不可导入!")); + excelComments.add(errorMessageMap); + isError = true; + } + } return isError; }