diff --git a/resource/commons-jexl3-3.2.1.jar b/resource/commons-jexl3-3.2.1.jar new file mode 100644 index 000000000..4a3b9269d Binary files /dev/null and b/resource/commons-jexl3-3.2.1.jar differ diff --git a/src/com/api/salary/web/SalaryFormulaController.java b/src/com/api/salary/web/SalaryFormulaController.java new file mode 100644 index 000000000..d2e501bf9 --- /dev/null +++ b/src/com/api/salary/web/SalaryFormulaController.java @@ -0,0 +1,7 @@ +package com.api.salary.web; + +import javax.ws.rs.Path; + +@Path("/bs/hrmsalary/formula") +public class SalaryFormulaController extends com.engine.salary.web.SalaryFormulaController { +} diff --git a/src/com/engine/salary/biz/SIAccountBiz.java b/src/com/engine/salary/biz/SIAccountBiz.java index affeb8e7f..fe1dd4ff3 100644 --- a/src/com/engine/salary/biz/SIAccountBiz.java +++ b/src/com/engine/salary/biz/SIAccountBiz.java @@ -5,10 +5,7 @@ import com.alibaba.fastjson.TypeReference; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.dto.SalaryAcctProgressDTO; -import com.engine.salary.entity.siaccount.param.AccountParam; -import com.engine.salary.entity.siaccount.param.DSTenantKeyThreadVar; -import com.engine.salary.entity.siaccount.param.InsuranceAccountBatchParam; -import com.engine.salary.entity.siaccount.param.InsuranceAccountDetailParam; +import com.engine.salary.entity.siaccount.param.*; import com.engine.salary.entity.siaccount.po.InsuranceAccountBatchPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailTempPO; @@ -17,20 +14,17 @@ import com.engine.salary.entity.siarchives.po.InsuranceArchivesAccountPO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesFundSchemePO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesOtherSchemePO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesSocialSchemePO; +import com.engine.salary.entity.sicategory.po.ICategoryPO; import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; -import com.engine.salary.enums.siaccount.BillStatusEnum; -import com.engine.salary.enums.siaccount.InspectStatusEnum; -import com.engine.salary.enums.siaccount.PaymentStatusEnum; -import com.engine.salary.enums.siaccount.ResourceFromEnum; -import com.engine.salary.enums.sicategory.DeleteTypeEnum; -import com.engine.salary.enums.sicategory.IsPaymentEnum; -import com.engine.salary.enums.sicategory.NonPaymentEnum; -import com.engine.salary.enums.sicategory.PaymentScopeEnum; +import com.engine.salary.enums.siaccount.*; +import com.engine.salary.enums.sicategory.*; +import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.datacollection.EmployMapper; 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.siaccount.SIAccountDetailTempMapper; +import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; import com.engine.salary.util.SalaryAssert; import com.engine.salary.util.SalaryDateUtil; @@ -69,6 +63,7 @@ import java.util.stream.Collectors; **/ public class SIAccountBiz { + private SIArchivesBiz siArchivesBiz = new SIArchivesBiz(); public PageInfo listPage(InsuranceAccountBatchParam queryParam, Long employeeId) { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); @@ -704,8 +699,561 @@ public class SIAccountBiz { } + public void saveCommonAccount(SaveCommonAccountParam param, Long employeeId) { + List collect; + SalaryAssert.notEmpty(param.getIncludes(), SalaryI18nUtil.getI18nLabel( 100466, "参数为空")); + SalaryAssert.notNull(param.getBillMonth(), SalaryI18nUtil.getI18nLabel( 100467, "账单月为空")); + if (CollectionUtils.isNotEmpty(param.getExcludes())) { + collect = param.getIncludes().stream().filter(item -> !param.getExcludes().contains(item)).collect(Collectors.toList()); + } else { + collect = param.getIncludes(); + } + SalaryAssert.notEmpty(collect, SalaryI18nUtil.getI18nLabel( 99920, "无核算人员")); + AccountParam accountParam = new AccountParam(); + accountParam.setBillMonth(param.getBillMonth()); + accountParam.setIds(collect); + accounting(accountParam, employeeId, SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + } + + public void delete(AccountParam param, Long employeeId) { + InsuranceAccountBatchPO insuranceAccountBatchPO = MapperProxyFactory.getProxy(InsuranceAccountBatchMapper.class).getByBillMonth(param.getBillMonth()); + SalaryAssert.notNull(insuranceAccountBatchPO, SalaryI18nUtil.getI18nLabel( 84026, "参数错误")); + MapperProxyFactory.getProxy(InsuranceAccountBatchMapper.class).deleteById(insuranceAccountBatchPO.getId()); + MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class).batchDeleteNotFile(param.getBillMonth()); +// LoggerContext insuranceSchemeContext = new LoggerContext(); +// insuranceSchemeContext.setTargetId(String.valueOf(insuranceAccountBatchPO.getId())); +// insuranceSchemeContext.setTargetName(insuranceAccountBatchPO.getBillMonth()); +// insuranceSchemeContext.setOperateType(OperateTypeEnum.DELETE.getValue()); +// insuranceSchemeContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(tenantkey, employeeId, 100464, "删除台账")); +// insuranceSchemeContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(tenantkey, employeeId, 100464, "删除台账")); +// insuranceSchemeContext.setNewValues(insuranceAccountBatchPO); +// siAccountLoggerTemplate.write(insuranceSchemeContext); + } + + public void saveSupplementaryAccount(SaveSupplementaryAccountParam param, Long employeeId) { + if (StringUtils.isBlank(param.getBillMonth()) || CollectionUtils.isEmpty(param.getBillMonthList()) || CollectionUtils.isEmpty(param.getProjects()) + || CollectionUtils.isEmpty(param.getIncludes())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 84026, "参数错误")); + } + //需要补缴的月份 + if (param.getBillMonthList().contains(param.getBillMonth())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel( 100481, "当前月走正常缴纳")); + } + //需要补缴的员工id + List employeeIds = param.getIncludes(); + if (CollectionUtils.isNotEmpty(param.getExcludes())) { + employeeIds = employeeIds.stream().filter(item -> !param.getExcludes().contains(item)).collect(Collectors.toList()); + } + SalaryAssert.notEmpty(employeeIds, SalaryI18nUtil.getI18nLabel( 99920, "无核算人员")); + List baseList = new ArrayList<>(); + employeeIds.stream().forEach(id -> { + param.getBillMonthList().stream().forEach(month -> { + SupplementAccountBaseParam supplementAccountBaseParam = SupplementAccountBaseParam.builder() + .supplementaryMonth(month) + .employeeId(id) + .projects(param.getProjects()) + .billMonth(param.getBillMonth()) + .build(); + baseList.add(supplementAccountBaseParam); + }); + }); + //核算开始 + accountSupplement(baseList, employeeIds, param.getBillMonth(),employeeId); + updateBatchAccount(param.getBillMonth(), employeeId,SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + } + + /** + * @param baseList 员工id-账单月份-补缴月份(单挑)-补缴项 集合 + * @param employeeIds 需要补缴的员工id + * @return + */ + public String accountSupplement(List baseList, List employeeIds, String billMonth,Long employeeId) { + //(k,v) k-员工id v-员工对应的福利档案数据 + Map longInsuranceArchivesAccountPOMap = siArchivesBiz.buildBatchAccount(employeeIds,SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + //核算结果集 + List pos = new ArrayList<>(); + baseList.forEach(baseParam -> { + InsuranceAccountDetailPO insuranceAccountDetailPO = accountSingleEmployeeBill(baseParam, longInsuranceArchivesAccountPOMap.get(baseParam.getEmployeeId()),employeeId); + pos.add(insuranceAccountDetailPO); + }); + batchSaveSupplementAccount(pos, billMonth,SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + return SalaryI18nUtil.getI18nLabel(100492, "核算完成,数据保存成功"); + } + public InsuranceAccountDetailPO accountSingleEmployeeBill(SupplementAccountBaseParam baseParam, InsuranceArchivesAccountPO accountPO,Long employeeId) { + InsuranceAccountDetailPO insuranceAccountDetailPO = new InsuranceAccountDetailPO(); + List projects = baseParam.getProjects(); + insuranceAccountDetailPO.setBillMonth(baseParam.getBillMonth()); + insuranceAccountDetailPO.setBillStatus(BillStatusEnum.NOT_ARCHIVED.getValue()); + insuranceAccountDetailPO.setCreator(employeeId); + insuranceAccountDetailPO.setCreateTime(new Date()); + insuranceAccountDetailPO.setUpdateTime(new Date()); + insuranceAccountDetailPO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); + insuranceAccountDetailPO.setId(IdGenerator.generate()); + insuranceAccountDetailPO.setEmployeeId(baseParam.getEmployeeId()); + insuranceAccountDetailPO.setPaymentStatus(PaymentStatusEnum.REPAIR.getValue()); + insuranceAccountDetailPO.setSupplementaryMonth(baseParam.getSupplementaryMonth()); + insuranceAccountDetailPO.setSupplementaryProjects( + String.join(",", + baseParam.getProjects() == null ? new ArrayList<>() : baseParam.getProjects().stream().map(String::valueOf).collect(Collectors.toList()))); + insuranceAccountDetailPO.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + insuranceAccountDetailPO.setResourceFrom(ResourceFromEnum.SYSTEM.getValue()); + if (projects.contains(ProjectTypeEnum.ALL.getValue())) { + accountSocial(insuranceAccountDetailPO, accountPO); + accountFund(insuranceAccountDetailPO, accountPO); + accountOther(insuranceAccountDetailPO, accountPO); + return account(insuranceAccountDetailPO); + } + if (projects.contains(ProjectTypeEnum.SOCIAL.getValue())) { + accountSocial(insuranceAccountDetailPO, accountPO); + } + if (!projects.contains(ProjectTypeEnum.SOCIAL.getValue())) { + List ids = new ArrayList<>(); + List list = MapperProxyFactory.getProxy(ICategoryMapper.class).listByDataType(DataTypeEnum.SYSTEM.getValue()); + + if (projects.contains(ProjectTypeEnum.ENDOWMENT_INSURANCE.getValue())) { + ICategoryPO insuranceCategoryPO = list.stream().filter(item -> SalaryI18nUtil.getI18nLabel(93113, "养老保险").equals(item.getInsuranceName())).findFirst() + .get(); + ids.add(insuranceCategoryPO.getId()); + } + if (projects.contains(ProjectTypeEnum.MEDICAL_INSURANCE.getValue())) { + ICategoryPO insuranceCategoryPO = list.stream().filter(item -> SalaryI18nUtil.getI18nLabel(93114, "医疗保险").equals(item.getInsuranceName())).findFirst() + .get(); + ids.add(insuranceCategoryPO.getId()); + } + accountEndowmentInsurance(insuranceAccountDetailPO, accountPO, ids); + } + if (projects.contains(ProjectTypeEnum.FUND.getValue())) { + accountFund(insuranceAccountDetailPO, accountPO); + } + if (projects.contains(ProjectTypeEnum.OTHER.getValue())) { + accountOther(insuranceAccountDetailPO, accountPO); + } + + return account(insuranceAccountDetailPO); + } + public InsuranceAccountDetailPO accountOther(InsuranceAccountDetailPO insuranceAccountDetailPO, InsuranceArchivesAccountPO accountPO) { + if (accountPO.getOther() != null) { + InsuranceArchivesOtherSchemePO otherPO = accountPO.getOther(); + insuranceAccountDetailPO.setOtherPayOrg(otherPO.getPaymentOrganization()); + insuranceAccountDetailPO.setOtherSchemeId(otherPO.getOtherSchemeId()); + insuranceAccountDetailPO.setOtherPaymentBaseString(otherPO.getOtherPaymentBaseString()); + if ((Objects.equals(NonPaymentEnum.YES.getValue(), otherPO.getNonPayment()) || otherPO.getNonPayment() == null) && otherPO.getOtherSchemeId() != null) { + List detailPOS = MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class).queryListBySchemeId(otherPO.getOtherSchemeId()); + //方案中包含的需要缴纳其他的个人福利 + Map otherPerson = detailPOS.stream() + .filter(item -> Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && item.getPaymentScope() == PaymentScopeEnum.SCOPE_PERSON.getValue()) + .collect( + Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); + //档案中包含的基数信息 + HashMap archivesPerson = JSON.parseObject(otherPO.getOtherPaymentBaseString(), new HashMap().getClass()); + //需要核算其他的福利id 个人 + List needArchivesPerson = new ArrayList<>(); + archivesPerson.forEach((id, value) -> { + if (otherPerson.containsKey(Long.valueOf(id))) { + needArchivesPerson.add(Long.valueOf(id)); + } + }); + List otherPer = new ArrayList<>(); + Map otherPerJsonMap = new HashMap<>(); + needArchivesPerson.stream().forEach(e -> { + InsuranceSchemeDetailPO po = otherPerson.get(e); + BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); + BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesPerson.get(String.valueOf(e))) ? "0" : archivesPerson.get(String.valueOf(e))); + BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); + Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); + BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); + ; + otherPerJsonMap.put(String.valueOf(e), result.toPlainString()); + otherPer.add(result); + }); + insuranceAccountDetailPO.setOtherPerJson(JSON.toJSONString(otherPerJsonMap)); + BigDecimal otherPerSum = new BigDecimal("0"); + for (BigDecimal bigDecimal : otherPer) { + otherPerSum = otherPerSum.add(bigDecimal); + } + insuranceAccountDetailPO.setOtherPerSum(otherPerSum.toPlainString()); + + //方案中包含的需要缴纳公积金的单位福利 + Map otherCom = detailPOS.stream() + .filter( + item -> Objects.equals(IsPaymentEnum.YES.getValue(), item.getIsPayment()) && item.getPaymentScope() == PaymentScopeEnum.SCOPE_COMPANY.getValue()) + .collect( + Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); + //档案中包含的基数信息 + HashMap archivesCom = JSON.parseObject(otherPO.getOtherPaymentBaseString(), new HashMap().getClass()); + //需要核算其他的福利id 单位 + List needArchivesCom = new ArrayList<>(); + archivesCom.forEach((id, value) -> { + if (otherCom.containsKey(Long.valueOf(id))) { + needArchivesCom.add(Long.valueOf(id)); + } + }); + List otherComList = new ArrayList<>(); + Map otherComJsonMap = new HashMap<>(); + needArchivesCom.stream().forEach(e -> { + InsuranceSchemeDetailPO po = otherCom.get(e); + BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); + BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesCom.get(String.valueOf(e))) ? "0" : archivesCom.get(String.valueOf(e))); + BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); + Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); + BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); + ; + otherComJsonMap.put(String.valueOf(e), result.toPlainString()); + otherComList.add(result); + }); + insuranceAccountDetailPO.setOtherComJson(JSON.toJSONString(otherComJsonMap)); + BigDecimal otherComSum = new BigDecimal("0"); + for (BigDecimal bigDecimal : otherComList) { + otherComSum = otherComSum.add(bigDecimal); + } + insuranceAccountDetailPO.setOtherComSum(otherComSum.toPlainString()); + } + } + return insuranceAccountDetailPO; + } + + public InsuranceAccountDetailPO accountFund(InsuranceAccountDetailPO insuranceAccountDetailPO, InsuranceArchivesAccountPO accountPO) { + if (accountPO.getFund() != null) { + InsuranceArchivesFundSchemePO fundPO = accountPO.getFund(); + insuranceAccountDetailPO.setFundPayOrg(fundPO.getPaymentOrganization()); + insuranceAccountDetailPO.setFundAccount(fundPO.getFundAccount()); + insuranceAccountDetailPO.setSupplementFundAccount(fundPO.getSupplementFundAccount()); + insuranceAccountDetailPO.setFundSchemeId(fundPO.getFundSchemeId()); + insuranceAccountDetailPO.setFundPaymentBaseString(fundPO.getFundPaymentBaseString()); + if ((NonPaymentEnum.YES.getValue() == fundPO.getNonPayment() || fundPO.getNonPayment() == null) && fundPO.getFundSchemeId() != null) { + List detailPOS = MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class).queryListBySchemeId(fundPO.getFundSchemeId()); + //方案中包含的需要缴纳社保的个人福利 + Map fundperson = detailPOS.stream() + .filter(item -> IsPaymentEnum.YES.getValue() == item.getIsPayment() && item.getPaymentScope() == PaymentScopeEnum.SCOPE_PERSON.getValue()) + .collect( + Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); + //档案中包含的基数信息 + HashMap archivesPerson = JSON.parseObject(fundPO.getFundPaymentBaseString(), new HashMap().getClass()); + //需要核算公积金的福利id 个人 + List needArchivesPerson = new ArrayList<>(); + archivesPerson.forEach((id, value) -> { + if (fundperson.containsKey(Long.valueOf(id))) { + needArchivesPerson.add(Long.valueOf(id)); + } + }); + List fundPer = new ArrayList<>(); + Map fundPerJsonMap = new HashMap<>(); + needArchivesPerson.stream().forEach(e -> { + InsuranceSchemeDetailPO po = fundperson.get(e); + BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); + BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesPerson.get(String.valueOf(e))) ? "0" : archivesPerson.get(String.valueOf(e))); + BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); + Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); + BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); + ; + fundPerJsonMap.put(String.valueOf(e), result.toPlainString()); + fundPer.add(result); + }); + insuranceAccountDetailPO.setFundPerJson(JSON.toJSONString(fundPerJsonMap)); + BigDecimal funPerSum = new BigDecimal("0"); + for (BigDecimal bigDecimal : fundPer) { + funPerSum = funPerSum.add(bigDecimal); + } + insuranceAccountDetailPO.setFundPerSum(funPerSum.toPlainString()); + + //方案中包含的需要缴纳公积金的单位福利 + Map fundCom = detailPOS.stream() + .filter(item -> IsPaymentEnum.YES.getValue() == item.getIsPayment() && item.getPaymentScope() == PaymentScopeEnum.SCOPE_COMPANY.getValue()) + .collect( + Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); + //档案中包含的基数信息 + HashMap archivesCom = JSON.parseObject(fundPO.getFundPaymentBaseString(), new HashMap().getClass()); + //需要核算公积金的福利id 单位 + List needArchivesCom = new ArrayList<>(); + archivesCom.forEach((id, value) -> { + if (fundCom.containsKey(Long.valueOf(id))) { + needArchivesCom.add(Long.valueOf(id)); + } + }); + List fundComList = new ArrayList<>(); + Map fundComJsonMap = new HashMap<>(); + needArchivesCom.stream().forEach(e -> { + InsuranceSchemeDetailPO po = fundCom.get(e); + BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); + BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesCom.get(String.valueOf(e))) ? "0" : archivesCom.get(String.valueOf(e))); + BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); + Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); + BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); + ; + fundComJsonMap.put(String.valueOf(e), result.toPlainString()); + fundComList.add(result); + }); + insuranceAccountDetailPO.setFundComJson(JSON.toJSONString(fundComJsonMap)); + BigDecimal fundComSum = new BigDecimal("0"); + for (BigDecimal bigDecimal : fundComList) { + fundComSum = fundComSum.add(bigDecimal); + } + insuranceAccountDetailPO.setFundComSum(fundComSum.toPlainString()); + + } + } + return insuranceAccountDetailPO; + } + + public InsuranceAccountDetailPO accountSocial(InsuranceAccountDetailPO insuranceAccountDetailPO, InsuranceArchivesAccountPO accountPO) { + if (accountPO.getSocial() != null) { + InsuranceArchivesSocialSchemePO socialPO = accountPO.getSocial(); + insuranceAccountDetailPO.setSocialPayOrg(socialPO.getPaymentOrganization()); + insuranceAccountDetailPO.setSocialAccount(socialPO.getSocialAccount()); + insuranceAccountDetailPO.setSocialSchemeId(socialPO.getSocialSchemeId()); + insuranceAccountDetailPO.setSocialPaymentBaseString(socialPO.getSocialPaymentBaseString()); + if ((NonPaymentEnum.YES.getValue() == socialPO.getNonPayment() || socialPO.getNonPayment() == null) && socialPO.getSocialSchemeId() != null) { + List detailPOS = MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class).queryListBySchemeId(socialPO.getSocialSchemeId()); + //方案中包含的需要缴纳社保的个人福利 + Map schemeperson = detailPOS.stream() + .filter(item -> IsPaymentEnum.YES.getValue() == item.getIsPayment() && item.getPaymentScope() == PaymentScopeEnum.SCOPE_PERSON.getValue()) + .collect( + Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); + //档案中包含的基数信息 + HashMap archivesPerson = JSON.parseObject(socialPO.getSocialPaymentBaseString(), new HashMap().getClass()); + //需要核算社保的福利id 个人 + List needArchivesPerson = new ArrayList<>(); + archivesPerson.forEach((id, value) -> { + if (schemeperson.containsKey(Long.valueOf(id))) { + needArchivesPerson.add(Long.valueOf(id)); + } + }); + List socialPer = new ArrayList<>(); + Map socialPerJsonMap = new HashMap<>(); + needArchivesPerson.stream().forEach(e -> { + InsuranceSchemeDetailPO po = schemeperson.get(e); + BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); + BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesPerson.get(String.valueOf(e))) ? "0" : archivesPerson.get(String.valueOf(e))); + BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); + Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); + BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); + + socialPerJsonMap.put(String.valueOf(e), result.toPlainString()); + socialPer.add(result); + }); + insuranceAccountDetailPO.setSocialPerJson(JSON.toJSONString(socialPerJsonMap)); + BigDecimal socialPerSum = new BigDecimal("0"); + for (BigDecimal bigDecimal : socialPer) { + socialPerSum = socialPerSum.add(bigDecimal); + } + insuranceAccountDetailPO.setSocialPerSum(socialPerSum.toPlainString()); + + //方案中包含的需要缴纳社保的单位福利 + Map schemeCom = detailPOS.stream() + .filter(item -> IsPaymentEnum.YES.getValue() == item.getIsPayment() && item.getPaymentScope() == PaymentScopeEnum.SCOPE_COMPANY.getValue()) + .collect( + Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); + //档案中包含的基数信息 + HashMap archivesCom = JSON.parseObject(socialPO.getSocialPaymentBaseString(), new HashMap().getClass()); + //需要核算社保的福利id 单位 + List needArchivesCom = new ArrayList<>(); + archivesCom.forEach((id, value) -> { + if (schemeCom.containsKey(Long.valueOf(id))) { + needArchivesCom.add(Long.valueOf(id)); + } + }); + List socialCom = new ArrayList<>(); + Map sociaComJsonMap = new HashMap<>(); + needArchivesCom.stream().forEach(e -> { + InsuranceSchemeDetailPO po = schemeCom.get(e); + BigDecimal paymentProportion = new BigDecimal(StringUtils.isBlank(po.getPaymentProportion()) ? "0" : po.getPaymentProportion()).divide(new BigDecimal("100")); + BigDecimal paymentNum = new BigDecimal(StringUtils.isBlank(archivesCom.get(String.valueOf(e))) ? "0" : archivesCom.get(String.valueOf(e))); + BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); + Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); + BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); + sociaComJsonMap.put(String.valueOf(e), result.toPlainString()); + socialCom.add(result); + + }); + insuranceAccountDetailPO.setSocialComJson(JSON.toJSONString(sociaComJsonMap)); + BigDecimal socialComSum = new BigDecimal("0"); + for (BigDecimal decimal : socialCom) { + socialComSum = socialComSum.add(decimal); + } + insuranceAccountDetailPO.setSocialComSum(socialComSum.toPlainString()); + } + + } + return insuranceAccountDetailPO; + } + + public InsuranceAccountDetailPO accountEndowmentInsurance(InsuranceAccountDetailPO insuranceAccountDetailPO, InsuranceArchivesAccountPO accountPO, List categoryIds) { + if (accountPO.getSocial() != null) { + InsuranceArchivesSocialSchemePO socialPO = accountPO.getSocial(); + insuranceAccountDetailPO.setSocialPayOrg(socialPO.getPaymentOrganization()); + insuranceAccountDetailPO.setSocialAccount(socialPO.getSocialAccount()); + insuranceAccountDetailPO.setSocialSchemeId(socialPO.getSocialSchemeId()); + insuranceAccountDetailPO.setSocialPaymentBaseString(socialPO.getSocialPaymentBaseString()); + if ((NonPaymentEnum.YES.getValue() == socialPO.getNonPayment() || socialPO.getNonPayment() == null) && socialPO.getSocialSchemeId() != null) { + List detailPOS = MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class).queryListBySchemeId(socialPO.getSocialSchemeId()); + //方案中包含的需要缴纳社保的个人福利 + Map schemeperson = detailPOS.stream() + .filter(item -> IsPaymentEnum.YES.getValue() == item.getIsPayment() && item.getPaymentScope() == PaymentScopeEnum.SCOPE_PERSON.getValue()) + .collect( + Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); + //档案中包含的基数信息 + HashMap archivesPerson = JSON.parseObject(socialPO.getSocialPaymentBaseString(), new HashMap().getClass()); + //需要核算社保的福利id 个人 + List needArchivesPerson = new ArrayList<>(); + categoryIds.forEach(item -> { + if (archivesPerson.containsKey(String.valueOf(item)) && schemeperson.containsKey(item)) { + needArchivesPerson.add(item); + } + }); + List socialPer = new ArrayList<>(); + Map socialPerJsonMap = new HashMap<>(); + needArchivesPerson.stream().forEach(e -> { + InsuranceSchemeDetailPO po = schemeperson.get(e); + BigDecimal paymentProportion = new BigDecimal(po.getPaymentProportion()).divide(new BigDecimal("100")); + BigDecimal paymentNum = new BigDecimal(archivesPerson.get(String.valueOf(e))); + BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); + Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); + BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); + ; + socialPerJsonMap.put(String.valueOf(e), result.toPlainString()); + socialPer.add(result); + }); + insuranceAccountDetailPO.setSocialPerJson(JSON.toJSONString(socialPerJsonMap)); + BigDecimal socialPerSum = new BigDecimal("0"); + for (BigDecimal bigDecimal : socialPer) { + socialPerSum = socialPerSum.add(bigDecimal); + } + insuranceAccountDetailPO.setSocialPerSum(socialPerSum.toPlainString()); + + //方案中包含的需要缴纳社保的单位福利 + Map schemeCom = detailPOS.stream() + .filter(item -> IsPaymentEnum.YES.getValue() == item.getIsPayment() && item.getPaymentScope() == PaymentScopeEnum.SCOPE_COMPANY.getValue()) + .collect( + Collectors.toMap(InsuranceSchemeDetailPO::getInsuranceId, Function.identity())); + //档案中包含的基数信息 + HashMap archivesCom = JSON.parseObject(socialPO.getSocialPaymentBaseString(), new HashMap().getClass()); + //需要核算社保的福利id 单位 + List needArchivesCom = new ArrayList<>(); + archivesCom.forEach((id, value) -> { + if (schemeCom.containsKey(Long.valueOf(id))) { + needArchivesCom.add(Long.valueOf(id)); + } + }); + List socialCom = new ArrayList<>(); + Map sociaComJsonMap = new HashMap<>(); + needArchivesCom.stream().forEach(e -> { + InsuranceSchemeDetailPO po = schemeCom.get(e); + BigDecimal paymentProportion = new BigDecimal(po.getPaymentProportion()).divide(new BigDecimal("100")); + BigDecimal paymentNum = new BigDecimal(archivesCom.get(String.valueOf(e))); + BigDecimal fixedCost = StringUtils.isBlank(po.getFixedCost()) ? new BigDecimal("0") : new BigDecimal(po.getFixedCost()); + Integer newScale = po.getValidNum() == null ? 0 : po.getValidNum(); + BigDecimal result = SalaryEntityUtil.carryRule(newScale, po.getRententionRule(), paymentNum.multiply(paymentProportion).add(fixedCost)); + ; + sociaComJsonMap.put(String.valueOf(e), result.toPlainString()); + socialCom.add(result); + + }); + insuranceAccountDetailPO.setSocialComJson(JSON.toJSONString(sociaComJsonMap)); + BigDecimal socialComSum = new BigDecimal("0"); + for (BigDecimal decimal : socialCom) { + socialComSum = socialComSum.add(decimal); + } + insuranceAccountDetailPO.setSocialComSum(socialComSum.toPlainString()); + } + } + return insuranceAccountDetailPO; + } + + @Transactional + public void batchSaveSupplementAccount(List pos, String billMonth, String tenantKey) { + if (CollectionUtils.isEmpty(pos)) { + return; + } + batchSaveAccountInspectDetail(pos, billMonth, tenantKey); + MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class).batchDelSupplementAccountDetails(pos); + MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class).batchSaveAccountDetails(pos); + //删除日志 +// pos.stream().forEach(item -> { +// LoggerContext insuranceSchemeContext = new LoggerContext(); +// insuranceSchemeContext.setTargetId(String.valueOf(item.getId())); +// insuranceSchemeContext.setTargetName(String.valueOf(item.getEmployeeId())); +// insuranceSchemeContext.setOperateType(OperateTypeEnum.DELETE.getValue()); +// insuranceSchemeContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(100448, "删除核算记录")); +// insuranceSchemeContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(100448, "删除核算记录")); +// insuranceSchemeContext.setNewValues(item); +// siAccountLoggerTemplate.write(insuranceSchemeContext); +// }); + //插入日志 +// pos.stream().forEach(item -> { +// LoggerContext insuranceSchemeContext = new LoggerContext(); +// insuranceSchemeContext.setTargetId(String.valueOf(item.getId())); +// insuranceSchemeContext.setTargetName(String.valueOf(item.getEmployeeId())); +// insuranceSchemeContext.setOperateType(OperateTypeEnum.ADD.getValue()); +// insuranceSchemeContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(100494, "新建核算记录")); +// insuranceSchemeContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(100494, "新建核算记录")); +// insuranceSchemeContext.setNewValues(item); +// siAccountLoggerTemplate.write(insuranceSchemeContext); +// }); + } + + public void deleteCommonAccount(SaveCommonAccountParam param, Long employeeId) { + SalaryAssert.notBlank(param.getBillMonth(), SalaryI18nUtil.getI18nLabel( 84026, "参数错误")); + SalaryAssert.notEmpty(param.getIncludes(), SalaryI18nUtil.getI18nLabel( 84026, "参数错误")); + MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class).batchDelAccountDetails(param.getIncludes(), param.getBillMonth()); + //记录日志 +// LoggerContext insuranceSchemeContext = new LoggerContext(); +// insuranceSchemeContext.setTargetId(String.join(",", param.getIncludes().stream().map(item -> String.valueOf(item)).collect(Collectors.toList()))); +// insuranceSchemeContext.setTargetName(param.getBillMonth()); +// insuranceSchemeContext.setOperateType(OperateTypeEnum.ADD.getValue()); +// insuranceSchemeContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100462, "新增台账")); +// insuranceSchemeContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100462, "新增台账")); +// insuranceSchemeContext.setNewValues(param); +// siAccountLoggerTemplate.write(insuranceSchemeContext); + updateBatchAccount(param.getBillMonth(), employeeId, SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + } + + public void deleteSupplementaryAccount(List param, Long employeeId) { + SalaryAssert.notEmpty(param, SalaryI18nUtil.getI18nLabel(84026, "参数错误")); + boolean valid = param.stream().anyMatch(item -> item.getEmployeeId() == null + || StringUtils.isBlank(item.getSupplementaryMonth()) + || StringUtils.isBlank(item.getBillMonth())); + if (valid) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); + } + MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class).batchDelSupplementDetailsByIds(param); +// param.stream().forEach(item -> { +// LoggerContext insuranceSchemeContext = new LoggerContext(); +// insuranceSchemeContext.setTargetId(String.valueOf(IdGenerator.generate())); +// insuranceSchemeContext.setTargetName(item.getBillMonth()); +// insuranceSchemeContext.setOperateType(OperateTypeEnum.DELETE.getValue()); +// insuranceSchemeContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100490, "删除补缴核算记录")); +// insuranceSchemeContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100490, "删除补缴核算记录")); +// insuranceSchemeContext.setNewValues(item); +// siAccountLoggerTemplate.write(insuranceSchemeContext); +// }); + updateBatchAccount(param.get(0).getBillMonth(), employeeId, SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + } + + public void file(String billMonth, Long employeeId) { + //归档前检查是否有核算异常 + List insuranceAccountInspectPOS = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class).getByInspectStatusAndBillMonth(InspectStatusEnum.IGNORE.getValue(),billMonth); + + SalaryAssert.isEmpty(insuranceAccountInspectPOS, SalaryI18nUtil.getI18nLabel( 100500, "当前核算月存在核算异常数据")); + //开始归档数据 + InsuranceAccountBatchPO insuranceAccountBatchPO = MapperProxyFactory.getProxy(InsuranceAccountBatchMapper.class).getByBillStatus(billMonth,BillStatusEnum.NOT_ARCHIVED.getValue()); + + SalaryAssert.notNull(insuranceAccountBatchPO, SalaryI18nUtil.getI18nLabel( 100503, "月份账单不存在")); + SalaryAssert.isFalse(insuranceAccountBatchPO.getBillStatus() == BillStatusEnum.ARCHIVED.getValue(), SalaryI18nUtil.getI18nLabel( 100504, "月份账单已归档")); + insuranceAccountBatchPO.setBillStatus(BillStatusEnum.ARCHIVED.getValue()); + MapperProxyFactory.getProxy(InsuranceAccountBatchMapper.class).updateById(insuranceAccountBatchPO); + //日志记录 +// LoggerContext insuranceSchemeContext = new LoggerContext(); +// insuranceSchemeContext.setTargetId(String.valueOf(insuranceAccountBatchPO.getId())); +// insuranceSchemeContext.setTargetName(insuranceAccountBatchPO.getBillMonth()); +// insuranceSchemeContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); +// insuranceSchemeContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100506, "台账归档")); +// insuranceSchemeContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 100506, "台账归档")); +// insuranceSchemeContext.setNewValues(insuranceAccountBatchPO); +// siAccountLoggerTemplate.write(insuranceSchemeContext); + + } } diff --git a/src/com/engine/salary/biz/SalaryItemBiz.java b/src/com/engine/salary/biz/SalaryItemBiz.java index 120799af2..fdf8ce1db 100644 --- a/src/com/engine/salary/biz/SalaryItemBiz.java +++ b/src/com/engine/salary/biz/SalaryItemBiz.java @@ -4,8 +4,8 @@ import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.enums.SalaryOnOffEnum; import com.engine.salary.mapper.salaryitem.SalaryItemMapper; -import com.github.pagehelper.PageHelper; -import com.github.pagehelper.PageInfo; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.PageUtil; import org.apache.ibatis.session.SqlSession; import weaver.conn.mybatis.MyBatisFactory; @@ -92,10 +92,9 @@ public class SalaryItemBiz { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { SalaryItemMapper mapper = sqlSession.getMapper(SalaryItemMapper.class); -// PageUtil.start(searchParam.getPageNum(), searchParam.getPageSize()); - return PageHelper.startPage(searchParam.getCurrent(), searchParam.getPageSize()).doSelectPageInfo(mapper::listAll); -// List salaryItemPOS = mapper.listAll(); - + PageUtil.start(searchParam.getCurrent(), searchParam.getPageSize()); + List salaryItemPOList = mapper.listByParam(searchParam); + return new PageInfo(salaryItemPOList); } finally { sqlSession.close(); } diff --git a/src/com/engine/salary/biz/SalarySobBiz.java b/src/com/engine/salary/biz/SalarySobBiz.java index 62db68031..a2a94c9ff 100644 --- a/src/com/engine/salary/biz/SalarySobBiz.java +++ b/src/com/engine/salary/biz/SalarySobBiz.java @@ -2,7 +2,6 @@ package com.engine.salary.biz; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.mapper.salarysob.SalarySobMapper; -import com.engine.salary.util.db.MapperProxyFactory; import org.apache.ibatis.session.SqlSession; import weaver.conn.mybatis.MyBatisFactory; @@ -11,8 +10,13 @@ import java.util.List; public class SalarySobBiz { public SalarySobPO getById(Long id) { - SalarySobMapper mapper = MapperProxyFactory.getProxy(SalarySobMapper.class); - return mapper.getById(id); + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + SalarySobMapper mapper = sqlSession.getMapper(SalarySobMapper.class); + return mapper.getById(id); + } finally { + sqlSession.close(); + } } diff --git a/src/com/engine/salary/constant/SalaryFormulaFieldConstant.java b/src/com/engine/salary/constant/SalaryFormulaFieldConstant.java index 0a75e8d53..8dd24c3ad 100644 --- a/src/com/engine/salary/constant/SalaryFormulaFieldConstant.java +++ b/src/com/engine/salary/constant/SalaryFormulaFieldConstant.java @@ -1,12 +1,13 @@ package com.engine.salary.constant; /** - * @description: 薪酬管理公式编辑器的常量 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 12/24/21 5:51 PM - * @version:v1.0 - */ + * 薪酬管理公式编辑器的常量 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryFormulaFieldConstant { // 公式变量的所属模块 diff --git a/src/com/engine/salary/entity/formula/ExpressFormula.java b/src/com/engine/salary/entity/formula/ExpressFormula.java deleted file mode 100644 index 3619ac54d..000000000 --- a/src/com/engine/salary/entity/formula/ExpressFormula.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.engine.salary.entity.formula; - -import com.engine.salary.entity.datacollection.DataCollectionEmployee; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; -import com.weaver.excel.formula.api.entity.ExpressFormulaSourceLink; -import com.weaver.excel.formula.api.entity.FormulaVar; -import lombok.Data; - -import java.util.Date; -import java.util.List; - -@Data -public class ExpressFormula { - @JsonSerialize( - using = ToStringSerializer.class - ) - private Long id; - //名称 - private String name; - private String module; - private String parameter; - private Long userId; - private Integer status; - private String msgFormula; - private String msgParameter; - private Date addTime; - private Date lastUpdate; - private Integer isDelete; - private Long formId; - private int type; - private String tenantKey; - private DataCollectionEmployee creator; - private List sourceLinks; - //引用类型 - private String referenceType; - //返回类型 - private String returnType; - //公式内容 - private String formula; - private boolean showInLibrary; - private String codeFormula; - private String msgCodeFormula; - private List parameters; - private List msgParameters; -} diff --git a/src/com/engine/salary/entity/salaryacct/bo/ExpressFormulaBO.java b/src/com/engine/salary/entity/salaryacct/bo/ExpressFormulaBO.java index 279edfcdc..9f74b1b12 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/ExpressFormulaBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/ExpressFormulaBO.java @@ -1,16 +1,13 @@ package com.engine.salary.entity.salaryacct.bo; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.engine.salary.constant.SalaryFormulaFieldConstant; import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.enums.SalaryFormulaReferenceEnum; import com.engine.salary.util.SalaryEntityUtil; import com.google.common.collect.Maps; -import com.weaver.excel.formula.api.entity.ExpressFormula; -import com.weaver.excel.formula.api.entity.FormulaVar; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -18,17 +15,17 @@ import java.math.BigDecimal; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; /** - * @description: 薪资核算公式 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 6/2/22 10:33 PM - * @version:v1.0 - */ + * 薪资核算公式 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class ExpressFormulaBO { /** @@ -53,17 +50,7 @@ public class ExpressFormulaBO { } Map> resultMap = Maps.newHashMapWithExpectedSize(expressFormulas.size()); for (ExpressFormula expressFormula : expressFormulas) { - if (StringUtils.isEmpty(expressFormula.getParameter())) { - continue; - } - JSONObject paramJson = JSON.parseObject(expressFormula.getParameter()); - if (paramJson != null) { - JSONArray paramArray = paramJson.getJSONArray("formulavars"); - if (paramArray != null) { - List formulaVars = paramArray.toJavaList(FormulaVar.class); - resultMap.put(expressFormula.getId(), formulaVars); - } - } + resultMap.put(expressFormula.getId(), expressFormula.getParameters()); } return resultMap; } @@ -106,25 +93,15 @@ public class ExpressFormulaBO { */ public static List buildFormulaVar4Accounting(ExpressFormula expressFormula, Map formulaVarValueMap) { List formulaVars = Collections.emptyList(); - // 公式异常 - if (Objects.isNull(expressFormula) || StringUtils.isEmpty(expressFormula.getParameter())) { - return Collections.emptyList(); - } - JSONObject paramJson = JSON.parseObject(expressFormula.getParameter()); - if (paramJson != null) { - JSONArray paramArray = paramJson.getJSONArray("formulavars"); - if (paramArray != null) { - formulaVars = paramArray.toJavaList(FormulaVar.class); - for (FormulaVar formulaVar : formulaVars) { - // 公式变量的值 - String formulaVarValue = formulaVarValueMap.getOrDefault(formulaVar.getFieldId(), StringUtils.EMPTY); - // 如果公式的返回值类型为number,公式中的变量的值如果为空,公式运行的时候会报错,所以需要替换成0 - if (StringUtils.isEmpty(formulaVarValue) && "number".equals(expressFormula.getReturnType())) { - formulaVarValue = BigDecimal.ZERO.toPlainString(); - } - formulaVar.setContent(formulaVarValue); - } + formulaVars = expressFormula.getParameters(); + for (FormulaVar formulaVar : formulaVars) { + // 公式变量的值 + String formulaVarValue = formulaVarValueMap.getOrDefault(formulaVar.getFieldId(), StringUtils.EMPTY); + // 如果公式的返回值类型为number,公式中的变量的值如果为空,公式运行的时候会报错,所以需要替换成0 + if (StringUtils.isEmpty(formulaVarValue) && "number".equals(expressFormula.getReturnType())) { + formulaVarValue = BigDecimal.ZERO.toPlainString(); } + formulaVar.setContent(formulaVarValue); } return formulaVars; } diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java index 5e9d0c14d..e9c0c2e76 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java @@ -1,13 +1,13 @@ package com.engine.salary.entity.salaryacct.bo; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; +import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobAdjustRulePO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; -import com.weaver.excel.formula.api.entity.ExpressFormula; import lombok.AllArgsConstructor; import lombok.Data; import lombok.experimental.Accessors; diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculatePriorityBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculatePriorityBO.java index bd800a521..e1440ebc4 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculatePriorityBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculatePriorityBO.java @@ -1,6 +1,8 @@ package com.engine.salary.entity.salaryacct.bo; import com.engine.salary.constant.SalaryFormulaFieldConstant; +import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.enums.SalaryFormulaReferenceEnum; @@ -9,8 +11,6 @@ import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.weaver.excel.formula.api.entity.ExpressFormula; -import com.weaver.excel.formula.api.entity.FormulaVar; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -24,12 +24,13 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; /** - * @description: 薪资核算-薪资项目运算优先级 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 2/7/22 2:49 PM - * @version:v1.0 - */ + * 薪资核算-薪资项目运算优先级 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryAcctCalculatePriorityBO { /** diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctCalculateParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctCalculateParam.java index 5a34fe533..52c3b7f13 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctCalculateParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctCalculateParam.java @@ -22,10 +22,7 @@ import java.util.Collection; @AllArgsConstructor public class SalaryAcctCalculateParam { - /** - * 不是employeeId而是salaryAcctEmpId - */ - //核算人员的id") + //核算人员的id,不是employeeId而是salaryAcctEmpId private Collection ids; @DataCheck(require = true,message = "参数错误,薪资核算记录ID不能为空") diff --git a/src/com/engine/salary/entity/salaryacct/po/ExcelAcctResultPO.java b/src/com/engine/salary/entity/salaryacct/po/ExcelAcctResultPO.java index fc966ab40..a7fc850c5 100644 --- a/src/com/engine/salary/entity/salaryacct/po/ExcelAcctResultPO.java +++ b/src/com/engine/salary/entity/salaryacct/po/ExcelAcctResultPO.java @@ -5,15 +5,17 @@ import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import java.time.LocalDateTime; +import java.util.Collection; +import java.util.Date; /** - * @description: 线下excel核算的结果 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 12/14/21 2:33 PM - * @version:v1.0 - */ + * 线下excel核算的结果 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor @@ -79,10 +81,13 @@ public class ExcelAcctResultPO { /** * 创建时间 */ - private LocalDateTime createTime; + private Date createTime; /** * 更新时间 */ - private LocalDateTime updateTime; + private Date updateTime; + + //条件 + private Collection salaryAcctEmpIds; } diff --git a/src/com/engine/salary/entity/salaryformula/ExpressFormula.java b/src/com/engine/salary/entity/salaryformula/ExpressFormula.java new file mode 100644 index 000000000..60faadd1b --- /dev/null +++ b/src/com/engine/salary/entity/salaryformula/ExpressFormula.java @@ -0,0 +1,70 @@ +package com.engine.salary.entity.salaryformula; + +import com.engine.salary.entity.salaryformula.po.FormulaVar; +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class ExpressFormula { + /** + * id + */ + private Long id; + /** + * 名称 + */ + private String name; + /** + * 备注 + */ + private String description; + /** + * 模块 + */ + private String module; + /** + * 用途 + */ + private String useFor; + /** + * 引用类型 + */ + private String referenceType; + /** + * 返回类型,number,string + */ + private String returnType; + /** + * 校验类型,number,string + */ + private String validateType; + /** + * 扩展参数 + */ + private String extendParam; + /** + * 公式内容 + */ + private String formula; + /** + * 创建人 + */ + private Long creator; + /** + * 是否删除0否1是 + */ + private Integer deleteType; + /** + * 创建时间 + */ + private Date createTime; + /** + * 修改时间 + */ + private Date updateTime; + + + private List parameters; +} diff --git a/src/com/engine/salary/entity/salaryformula/bo/SalaryFormulaBO.java b/src/com/engine/salary/entity/salaryformula/bo/SalaryFormulaBO.java index 578272914..320404eca 100644 --- a/src/com/engine/salary/entity/salaryformula/bo/SalaryFormulaBO.java +++ b/src/com/engine/salary/entity/salaryformula/bo/SalaryFormulaBO.java @@ -1,7 +1,7 @@ package com.engine.salary.entity.salaryformula.bo; +import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryformula.dto.ExpressFormulaDTO; -import com.weaver.excel.formula.api.entity.ExpressFormula; import org.apache.commons.collections4.CollectionUtils; import java.util.Collections; @@ -9,12 +9,13 @@ import java.util.List; import java.util.stream.Collectors; /** - * @description: 薪酬管理公式 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 12/7/21 5:49 PM - * @version:v1.0 - */ + * 薪酬管理公式 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryFormulaBO { public static List convert2DTO(List expressFormulas) { diff --git a/src/com/engine/salary/entity/salaryformula/dto/ExpressFormulaDTO.java b/src/com/engine/salary/entity/salaryformula/dto/ExpressFormulaDTO.java index 4568c5e66..a28c8b2da 100644 --- a/src/com/engine/salary/entity/salaryformula/dto/ExpressFormulaDTO.java +++ b/src/com/engine/salary/entity/salaryformula/dto/ExpressFormulaDTO.java @@ -19,12 +19,12 @@ import lombok.NoArgsConstructor; @AllArgsConstructor public class ExpressFormulaDTO { - //公式idTaxAgent + //公式id private Long id; - //公式名称TaxAgent + //公式名称 private String name; - //公式表达式TaxAgent + //公式表达式 private String formula; } diff --git a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java index 4e1b1f401..7f454fd77 100644 --- a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java +++ b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java @@ -22,43 +22,43 @@ public class SalaryFormulaEmployeeDTO { private Long employeeId; - @SalaryFormulaVar(defaultLabel ="个税扣缴义务人", labelId = 86184, dataType = "string") + @SalaryFormulaVar(defaultLabel = "个税扣缴义务人", labelId = 86184, dataType = "string") private String taxAgentName; - @SalaryFormulaVar(defaultLabel ="姓名", labelId = 85429, dataType = "string") + @SalaryFormulaVar(defaultLabel = "姓名", labelId = 85429, dataType = "string") private String username; - @SalaryFormulaVar(defaultLabel ="邮件", labelId = 92919, dataType = "string") + @SalaryFormulaVar(defaultLabel = "邮件", labelId = 92919, dataType = "string") private String email; - @SalaryFormulaVar(defaultLabel ="手机", labelId = 98621, dataType = "string") + @SalaryFormulaVar(defaultLabel = "手机", labelId = 98621, dataType = "string") private String mobile; - @SalaryFormulaVar(defaultLabel ="电话", labelId = 98620, dataType = "string") + @SalaryFormulaVar(defaultLabel = "电话", labelId = 98620, dataType = "string") private String telephone; -// //证件号码", labelId = 86318, dataType = "string") +// @SalaryFormulaVar(defaultLabel = "证件号码", labelId = 86318, dataType = "string") // private String idNo; - @SalaryFormulaVar(defaultLabel ="性别", labelId = 98622, dataType = "string") + @SalaryFormulaVar(defaultLabel = "性别", labelId = 98622, dataType = "string") private String sex; - @SalaryFormulaVar(defaultLabel ="状态", labelId = 91075, dataType = "string") + @SalaryFormulaVar(defaultLabel = "状态", labelId = 91075, dataType = "string") private String status; - @SalaryFormulaVar(defaultLabel ="部门", labelId = 86185, dataType = "string") + @SalaryFormulaVar(defaultLabel = "部门", labelId = 86185, dataType = "string") private String departmentName; - @SalaryFormulaVar(defaultLabel ="岗位", labelId = 90633, dataType = "string") + @SalaryFormulaVar(defaultLabel = "岗位", labelId = 90633, dataType = "string") private String positionName; - @SalaryFormulaVar(defaultLabel ="职级", labelId = 98623, dataType = "string") + @SalaryFormulaVar(defaultLabel = "职级", labelId = 98623, dataType = "string") private String gradeName; - @SalaryFormulaVar(defaultLabel ="入职日期", labelId = 86319, dataType = "string") + @SalaryFormulaVar(defaultLabel = "入职日期", labelId = 86319, dataType = "string") private String hireDate; - @SalaryFormulaVar(defaultLabel ="出生日期", labelId = 98624, dataType = "string") + @SalaryFormulaVar(defaultLabel = "出生日期", labelId = 98624, dataType = "string") private String birthday; // //首次参加工作日期", labelId = 98625, dataType = "string") diff --git a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaTaxRateDTO.java b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaTaxRateDTO.java index 4655e1984..0033a562c 100644 --- a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaTaxRateDTO.java +++ b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaTaxRateDTO.java @@ -8,12 +8,13 @@ import lombok.NoArgsConstructor; import java.math.BigDecimal; /** - * @description: 薪资公式计算器-个税税率表 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 11/30/21 5:03 PM - * @version:v1.0 - */ + * 薪资公式计算器-个税税率表 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/entity/salaryformula/param/SalaryFormulaFieldQueryParam.java b/src/com/engine/salary/entity/salaryformula/param/SalaryFormulaFieldQueryParam.java new file mode 100644 index 000000000..bf9639405 --- /dev/null +++ b/src/com/engine/salary/entity/salaryformula/param/SalaryFormulaFieldQueryParam.java @@ -0,0 +1,29 @@ +package com.engine.salary.entity.salaryformula.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +/** + * 公式字段查询参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryFormulaFieldQueryParam { + + @DataCheck(require = true,message = "变量来源不可为空") + String sourceId; + + Map extendParam; +} diff --git a/src/com/engine/salary/entity/salaryformula/param/SalaryFormulaSaveParam.java b/src/com/engine/salary/entity/salaryformula/param/SalaryFormulaSaveParam.java new file mode 100644 index 000000000..8f5f8aaa0 --- /dev/null +++ b/src/com/engine/salary/entity/salaryformula/param/SalaryFormulaSaveParam.java @@ -0,0 +1,62 @@ +package com.engine.salary.entity.salaryformula.param; + +import com.engine.salary.entity.salaryformula.po.FormulaVar; +import com.engine.salary.util.valid.DataCheck; +import com.engine.salary.util.valid.RuntimeTypeEnum; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryFormulaSaveParam { + /** + * id + */ + @DataCheck(require = true,message = "主键为空",runtime = RuntimeTypeEnum.UPDATE) + private Long id; + /** + * 名称 + */ + private String name; + /** + * 备注 + */ + private String description; + /** + * 模块 + */ + private String module; + /** + * 用途 + */ + private String useFor; + /** + * 引用类型 + */ + private String referenceType; + /** + * 返回类型 + */ + private String returnType; + /** + * 校验类型 + */ + private String validateType; + /** + * 扩展参数 + */ + private String extendParam; + /** + * 公式内容 + */ + private String formula; + + + private List parameters; +} diff --git a/src/com/engine/salary/entity/salaryformula/po/FormulaPO.java b/src/com/engine/salary/entity/salaryformula/po/FormulaPO.java new file mode 100644 index 000000000..8694b18e7 --- /dev/null +++ b/src/com/engine/salary/entity/salaryformula/po/FormulaPO.java @@ -0,0 +1,75 @@ +package com.engine.salary.entity.salaryformula.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.Date; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FormulaPO { + /** + * id + */ + private Long id; + /** + * 名称 + */ + private String name; + /** + * 备注 + */ + private String description; + /** + * 模块 + */ + private String module; + /** + * 用途 + */ + private String useFor; + /** + * 引用类型 + */ + private String referenceType; + /** + * 返回类型 + */ + private String returnType; + /** + * 校验类型 + */ + private String validateType; + /** + * 扩展参数 + */ + private String extendParam; + /** + * 公式内容 + */ + private String formula; + /** + * 创建人 + */ + private Long creator; + /** + * 是否删除0否1是 + */ + private Integer deleteType; + /** + * 创建时间 + */ + private Date createTime; + /** + * 修改时间 + */ + private Date updateTime; + + //主键id集合 + private Collection ids; +} \ No newline at end of file diff --git a/src/com/engine/salary/entity/salaryformula/po/FormulaVar.java b/src/com/engine/salary/entity/salaryformula/po/FormulaVar.java new file mode 100644 index 000000000..40e175edc --- /dev/null +++ b/src/com/engine/salary/entity/salaryformula/po/FormulaVar.java @@ -0,0 +1,67 @@ +package com.engine.salary.entity.salaryformula.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class FormulaVar { + /** + * id + */ + private Long id; + /** + * 名称 + */ + private String name; + /** + * 公式id + */ + private Long formulaId; + /** + * 字段id + */ + private String fieldId; + /** + * 字段名称 + */ + private String fieldName; + /** + * 字段类型,number,string + */ + private String fieldType; + /** + * 来源 + */ + private String source; + /** + * 排序 + */ + private Integer orderIndex; + /** + * 创建人 + */ + private Long creator; + /** + * 是否删除,0否1是 + */ + private Integer deleteType; + /** + * 创建时间 + */ + private Date createTime; + /** + * 修改时间 + */ + private Date updateTime; + + + //值 + private String content; +} \ No newline at end of file diff --git a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java index 854c0bb6f..a053be167 100644 --- a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java +++ b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.salaryitem.bo; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.dto.SalaryItemFormDTO; import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO; import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; @@ -11,21 +12,22 @@ import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; -import com.weaver.excel.formula.api.entity.ExpressFormula; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import weaver.conn.util.IdGenerator; import java.util.*; import java.util.stream.Collectors; /** - * @description: 薪资项目 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 10/28/21 4:55 PM - * @version:v1.0 - */ + * 薪资项目 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public class SalaryItemBO { @@ -165,7 +167,7 @@ public class SalaryItemBO { // long id = IdGenerator.generate(); SalaryItemPO salaryItemPO = SalaryItemPO.builder() // .id(id) -// .code(String.valueOf(id)) + .code(IdGenerator.getUUID()) .name(saveParam.getName()) .systemType(SalarySystemTypeEnum.CUSTOM.getValue()) .sysSalaryItemId(NumberUtils.LONG_ZERO) @@ -175,7 +177,7 @@ public class SalaryItemBO { .pattern(Optional.ofNullable(saveParam.getPattern()).orElse(2)) .valueType(saveParam.getValueType()) .dataType(saveParam.getDataType()) - .formulaId(saveParam.getValueType() == SalaryValueTypeEnum.FORMULA.getValue() ? Optional.ofNullable(saveParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO) : NumberUtils.LONG_ZERO) + .formulaId(Objects.equals(saveParam.getValueType(), SalaryValueTypeEnum.FORMULA.getValue()) ? Optional.ofNullable(saveParam.getFormulaId()).orElse(NumberUtils.LONG_ZERO) : NumberUtils.LONG_ZERO) .description(saveParam.getDescription()) .canEdit(NumberUtils.INTEGER_ONE) .creator(employeeId) diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java index 26d87d47d..ae0c5b8ff 100644 --- a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemListDTO.java @@ -4,6 +4,7 @@ import com.cloudstore.eccom.pc.table.WeaTableType; import com.engine.salary.annotation.SalaryTable; import com.engine.salary.annotation.SalaryTableColumn; import com.engine.salary.annotation.SalaryTableOperate; +import com.engine.salary.annotation.TableTitle; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; @@ -32,32 +33,39 @@ public class SalaryItemListDTO { private Long id; @SalaryTableColumn(text = "名称", width = "10%", column = "name") + @TableTitle(title = "名称",dataIndex = "name",key = "name") private String name; //薪资档案引用 @SalaryTableColumn(text = "薪资档案引用", width = "10%", column = "useInEmployeeSalary") + @TableTitle(title = "薪资档案引用",dataIndex = "useInEmployeeSalary",key = "useInEmployeeSalary") private Integer useInEmployeeSalary; //默认使用 @SalaryTableColumn(text = "默认使用", width = "10%", column = "useDefault") + @TableTitle(title = "默认使用",dataIndex = "useDefault",key = "useDefault") private Integer useDefault; //进位规则 @SalaryTableColumn(text = "进位规则", width = "10%", column = "roundingMode",transmethod = "com.engine.salary.transmethod.TransMethod.roundingMode") + @TableTitle(title = "进位规则",dataIndex = "roundingMode",key = "roundingMode") private String roundingMode; //保留小数位 @SalaryTableColumn(text = "保留小数位", width = "10%", column = "pattern") + @TableTitle(title = "保留小数位",dataIndex = "pattern",key = "pattern") private Integer pattern; //取值方式 @SalaryTableColumn(text = "取值方式", width = "10%", column = "valueType",transmethod = "com.engine.salary.transmethod.TransMethod.datasource") + @TableTitle(title = "取值方式",dataIndex = "valueType",key = "valueType") private String valueType; /** * @see SalaryDataTypeEnum */ @SalaryTableColumn(text = "字段类型", width = "10%", column = "dataType",transmethod = "com.engine.salary.transmethod.TransMethod.dataType") + @TableTitle(title = "字段类型",dataIndex = "dataType",key = "dataType") private String dataType; //公式id @@ -67,16 +75,21 @@ public class SalaryItemListDTO { private String formulaContent; @SalaryTableColumn(text = "个税申报表对应字段", width = "10%", column = "taxDeclarationColumn") + @TableTitle(title = "个税申报表对应字段",dataIndex = "taxDeclarationColumn",key = "taxDeclarationColumn") private String taxDeclarationColumn; //备注 @SalaryTableColumn(text = "备注", width = "10%", column = "description") + @TableTitle(title = "备注",dataIndex = "description",key = "description") private String description; //是否可以编辑 private boolean canEdit; + //是否可以删除 + private boolean canDelete; + @SalaryTableColumn(text = "操作", width = "20%", column = "operate") private String operate; } diff --git a/src/com/engine/salary/entity/salarysob/bo/SalarySobCheckRuleBO.java b/src/com/engine/salary/entity/salarysob/bo/SalarySobCheckRuleBO.java index b1e52960f..ab809f578 100644 --- a/src/com/engine/salary/entity/salarysob/bo/SalarySobCheckRuleBO.java +++ b/src/com/engine/salary/entity/salarysob/bo/SalarySobCheckRuleBO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.salarysob.bo; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salarysob.dto.SalarySobCheckRuleFormDTO; import com.engine.salary.entity.salarysob.dto.SalarySobCheckRuleListDTO; import com.engine.salary.entity.salarysob.param.SalarySobCheckRuleSaveParam; @@ -8,7 +9,6 @@ import com.engine.salary.entity.salarysob.po.SalarySobCheckRulePO; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; -import com.weaver.excel.formula.api.entity.ExpressFormula; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; diff --git a/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java b/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java index 74e7a4412..9c61b303a 100644 --- a/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java +++ b/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java @@ -1,7 +1,7 @@ package com.engine.salary.entity.salarysob.bo; import com.engine.salary.annotation.SalaryFormulaVar; -import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -17,7 +17,6 @@ import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.weaver.excel.formula.api.entity.ExpressFormula; import lombok.AllArgsConstructor; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.math.NumberUtils; @@ -134,7 +133,7 @@ public class SalarySobItemAggregateBO { if (CollectionUtils.isEmpty(salarySobEmpFields)) { return Collections.emptyList(); } - Field[] declaredFields = DataCollectionEmployee.class.getDeclaredFields(); + Field[] declaredFields = SalaryFormulaEmployeeDTO.class.getDeclaredFields(); Map empFieldMap = Maps.newHashMapWithExpectedSize(declaredFields.length); for (Field declaredField : declaredFields) { if (!declaredField.isAnnotationPresent(SalaryFormulaVar.class)) { diff --git a/src/com/engine/salary/entity/siaccount/po/InsuranceAccountDetailPO.java b/src/com/engine/salary/entity/siaccount/po/InsuranceAccountDetailPO.java index 4ec79144d..4f8f53ac3 100644 --- a/src/com/engine/salary/entity/siaccount/po/InsuranceAccountDetailPO.java +++ b/src/com/engine/salary/entity/siaccount/po/InsuranceAccountDetailPO.java @@ -24,7 +24,6 @@ import java.util.Date; @AllArgsConstructor @SalaryTable(pageId = "021c4a65-c401-4bcc-a720-6233996e17f1", tableType = WeaTableType.CHECKBOX,operates = { }) -@Accessors(chain = true) public class InsuranceAccountDetailPO { /** diff --git a/src/com/engine/salary/entity/siaccount/po/InsuranceAccountDetailTempPO.java b/src/com/engine/salary/entity/siaccount/po/InsuranceAccountDetailTempPO.java index e2c012311..37d376c61 100644 --- a/src/com/engine/salary/entity/siaccount/po/InsuranceAccountDetailTempPO.java +++ b/src/com/engine/salary/entity/siaccount/po/InsuranceAccountDetailTempPO.java @@ -1,6 +1,9 @@ package com.engine.salary.entity.siaccount.po; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import lombok.experimental.Accessors; import java.util.Date; @@ -13,7 +16,9 @@ import java.util.Date; * @Version V1.0 **/ @Data -@Accessors(chain = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor public class InsuranceAccountDetailTempPO { /** diff --git a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesAccountPO.java b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesAccountPO.java index f16de0271..23f3313cf 100644 --- a/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesAccountPO.java +++ b/src/com/engine/salary/entity/siarchives/po/InsuranceArchivesAccountPO.java @@ -6,11 +6,11 @@ import lombok.Data; import lombok.NoArgsConstructor; /** - * @Description: - * @Author: zhangheng - * @CreateDate: 2021/12/7 19:05 - * @Version: v1.0 - */ + * @Author weaver_cl + * @Description: TODO + * @Date 2022/3/17 + * @Version V1.0 + **/ @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/enums/SalaryFormulaReferenceEnum.java b/src/com/engine/salary/enums/SalaryFormulaReferenceEnum.java index ec513acb2..e7ed5a300 100644 --- a/src/com/engine/salary/enums/SalaryFormulaReferenceEnum.java +++ b/src/com/engine/salary/enums/SalaryFormulaReferenceEnum.java @@ -4,38 +4,39 @@ package com.engine.salary.enums; import java.util.Objects; /** - * @description: 薪资项目公式引用分类 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 11/1/21 10:16 AM - * @version:v1.0 - */ -public enum SalaryFormulaReferenceEnum implements BaseEnum { + * 薪资项目公式引用分类 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public enum SalaryFormulaReferenceEnum implements BaseEnum { - SALARY_ITEM(1, "薪资项目", 84960), - // SALARY_ITEM_OF_HISTORY(2, "历史台账薪资项目", 85364), - EMPLOYEE_INFO(3, "员工基本信息", 85366), - SALARY_ARCHIVES(4, "薪资档案", 85368), - ATTEND(5, "考勤引用", 85367), - ADD_UP_SITUATION(6, "往期累计情况", 104412), - ADD_UP_DEDUCTIONS(7, "累计专项附加扣除", 85380), - WELFARE(8, "社保福利", 87522), - OTHER_DEDUCTION(9, "其他免税扣除", 93849), + SALARY_ITEM("salaryItem", "薪资项目", 84960), + // SALARY_ITEM_OF_HISTORY("salaryItemOfHistory", "历史台账薪资项目", 85364), + EMPLOYEE_INFO("employeeInfo", "员工基本信息", 85366), + SALARY_ARCHIVES("salaryArchives", "薪资档案", 85368), + ATTEND("attend", "考勤引用", 85367), + ADD_UP_SITUATION("addUpSituation", "往期累计情况", 104412), + ADD_UP_DEDUCTIONS("addUpDeductions", "累计专项附加扣除", 85380), + WELFARE("welfare", "社保福利", 87522), + OTHER_DEDUCTION("otherDeduction", "其他免税扣除", 93849), ; - private int value; + private String value; private String defaultLabel; private int labelId; - SalaryFormulaReferenceEnum(int value, String defaultLabel, int labelId) { + SalaryFormulaReferenceEnum(String value, String defaultLabel, int labelId) { this.value = value; this.defaultLabel = defaultLabel; this.labelId = labelId; } @Override - public Integer getValue() { + public String getValue() { return value; } @@ -51,7 +52,7 @@ public enum SalaryFormulaReferenceEnum implements BaseEnum { public static SalaryFormulaReferenceEnum parseByValue(String value) { for (SalaryFormulaReferenceEnum referenceEnum : SalaryFormulaReferenceEnum.values()) { - if (Objects.equals(referenceEnum.getValue() + "", value)) { + if (Objects.equals(referenceEnum.getValue(), value)) { return referenceEnum; } } diff --git a/src/com/engine/salary/enums/SalaryValueTypeEnum.java b/src/com/engine/salary/enums/SalaryValueTypeEnum.java index 775adddb8..8e2f03b54 100644 --- a/src/com/engine/salary/enums/SalaryValueTypeEnum.java +++ b/src/com/engine/salary/enums/SalaryValueTypeEnum.java @@ -5,12 +5,13 @@ import java.util.Arrays; import java.util.Objects; /** - * @description: 字段类型 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 11/1/21 4:35 PM - * @version:v1.0 - */ + * 字段类型 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public enum SalaryValueTypeEnum implements BaseEnum { INPUT(1, "输入", 84976), diff --git a/src/com/engine/salary/enums/salaryitem/SalaryDataTypeEnum.java b/src/com/engine/salary/enums/salaryitem/SalaryDataTypeEnum.java index f63b61d7b..4da922590 100644 --- a/src/com/engine/salary/enums/salaryitem/SalaryDataTypeEnum.java +++ b/src/com/engine/salary/enums/salaryitem/SalaryDataTypeEnum.java @@ -6,12 +6,13 @@ import java.util.Arrays; import java.util.Objects; /** - * @description: 薪资项目的字段类型 - * @author: xiajun - * @modified By: xiajun - * @date: 2022/3/10 17:16 - * @version:v1.0 - */ + * 薪资项目的字段类型 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public enum SalaryDataTypeEnum implements BaseEnum { STRING("string", "字符", 105093), NUMBER("number", "数值", 87625), diff --git a/src/com/engine/salary/init.sql b/src/com/engine/salary/init.sql index 7de2f213e..c0406a2ba 100644 --- a/src/com/engine/salary/init.sql +++ b/src/com/engine/salary/init.sql @@ -22,6 +22,8 @@ alter table hrsa_salary_archive_item modify id bigint auto_increment; alter table hrsa_salary_acct_record modify id bigint auto_increment; alter table hrsa_salary_acct_emp modify id bigint auto_increment; alter table hrsa_acct_result_temp modify id bigint auto_increment; +alter table hrsa_formula modify id bigint auto_increment; +alter table hrsa_formula_var modify id bigint auto_increment; --福利方案主键自增增加 diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index 932b5827a..513b4a35d 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -174,7 +174,7 @@ + SELECT + + FROM hrsa_formula t + WHERE delete_type = 0 + + + + + + + + + + + + INSERT INTO hrsa_formula + + + + id, + + + name, + + + description, + + + module, + + + use_for, + + + reference_type, + + + return_type, + + + validate_type, + + + extend_param, + + + formula, + + + creator, + + + delete_type, + + + create_time, + + + update_time, + + + + + #{id}, + + + #{name}, + + + #{description}, + + + #{module}, + + + #{useFor}, + + + #{referenceType}, + + + #{returnType}, + + + #{validateType}, + + + #{extendParam}, + + + #{formula}, + + + #{creator}, + + + #{deleteType}, + + + #{createTime}, + + + #{updateTime}, + + + + + + + UPDATE hrsa_formula + + name=#{name}, + description=#{description}, + module=#{module}, + use_for=#{useFor}, + reference_type=#{referenceType}, + return_type=#{returnType}, + validate_type=#{validateType}, + extend_param=#{extendParam}, + formula=#{formula}, + creator=#{creator}, + delete_type=#{deleteType}, + create_time=#{createTime}, + update_time=#{updateTime}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_formula + + + name=#{name}, + + + description=#{description}, + + + module=#{module}, + + + use_for=#{useFor}, + + + reference_type=#{referenceType}, + + + return_type=#{returnType}, + + + validate_type=#{validateType}, + + + extend_param=#{extendParam}, + + + formula=#{formula}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + create_time=#{createTime}, + + + update_time=#{updateTime}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_formula + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/formula/FormulaVarMapper.java b/src/com/engine/salary/mapper/formula/FormulaVarMapper.java new file mode 100644 index 000000000..ca25e4752 --- /dev/null +++ b/src/com/engine/salary/mapper/formula/FormulaVarMapper.java @@ -0,0 +1,49 @@ +package com.engine.salary.mapper.formula; + +import com.engine.salary.entity.salaryformula.po.FormulaVar; + +import java.util.List; + +public interface FormulaVarMapper { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(FormulaVar formulaVar); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + FormulaVar getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param formulaVar 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(FormulaVar formulaVar); + + /** + * 修改,忽略null字段 + * + * @param formulaVar 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(FormulaVar formulaVar); + + void deleteByFormulaId(Long formulaId); +} \ No newline at end of file diff --git a/src/com/engine/salary/mapper/formula/FormulaVarMapper.xml b/src/com/engine/salary/mapper/formula/FormulaVarMapper.xml new file mode 100644 index 000000000..faf6d97c0 --- /dev/null +++ b/src/com/engine/salary/mapper/formula/FormulaVarMapper.xml @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + t + . + id + , t.name + , t.formula_id + , t.field_id + , t.field_name + , t.field_type + , t.source + , t.order_index + , t.creator + , t.delete_type + , t.create_time + , t.update_time + + + + + + + + + + + + + + + INSERT INTO hrsa_formula_var + + + + name, + + + formula_id, + + + field_id, + + + field_name, + + + field_type, + + + source, + + + order_index, + + + creator, + + + delete_type, + + + create_time, + + + update_time, + + + + + #{name}, + + + #{formulaId}, + + + #{fieldId}, + + + #{fieldName}, + + + #{fieldType}, + + + #{source}, + + + #{orderIndex}, + + + #{creator}, + + + #{deleteType}, + + + #{createTime}, + + + #{updateTime}, + + + + + + + + + UPDATE hrsa_formula_var + + + name=#{name}, + + + formula_id=#{formulaId}, + + + field_id=#{fieldId}, + + + field_name=#{fieldName}, + + + field_type=#{fieldType}, + + + source=#{source}, + + + order_index=#{orderIndex}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + create_time=#{createTime}, + + + update_time=#{updateTime}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + UPDATE hrsa_formula_var + SET delete_type=1 + WHERE formula_id = #{formulaId} + AND delete_type = 0 + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryacct/ExcelAcctResultMapper.java b/src/com/engine/salary/mapper/salaryacct/ExcelAcctResultMapper.java new file mode 100644 index 000000000..f1fc6dedb --- /dev/null +++ b/src/com/engine/salary/mapper/salaryacct/ExcelAcctResultMapper.java @@ -0,0 +1,54 @@ +package com.engine.salary.mapper.salaryacct; + +import com.engine.salary.entity.salaryacct.po.ExcelAcctResultPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +/** + * 线下excel核算的结果 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public interface ExcelAcctResultMapper { + + /** + * 分页查询ExcelAcctResult和SalaryAcctResult的employeeId + * + * @return + */ + List listEmployeeIdUnionSalaryAcctResult(@Param("employeeIds") Collection employeeIds, + @Param("salaryAcctRecordId") Long salaryAcctRecordId); + + /** + * 批量新增 + * + * @param excelAcctResults + */ + void batchInsert(@Param("collection") Collection excelAcctResults); + + /** + * 根据薪资核算记录id删除 + * + * @param salaryAcctEmployeeIds + */ + void deleteBySalaryAcctEmployeeIds(@Param("salaryAcctEmployeeIds") Collection salaryAcctEmployeeIds); + + /** + * 根据薪资核算记录id删除 + * + * @param salaryAcctRecordIds + */ + void deleteBySalaryAcctRecordIds(@Param("salaryAcctRecordIds") Collection salaryAcctRecordIds); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(ExcelAcctResultPO excelAcctResult); +} diff --git a/src/com/engine/salary/mapper/salaryacct/ExcelAcctResultMapper.xml b/src/com/engine/salary/mapper/salaryacct/ExcelAcctResultMapper.xml new file mode 100644 index 000000000..6af2efc2e --- /dev/null +++ b/src/com/engine/salary/mapper/salaryacct/ExcelAcctResultMapper.xml @@ -0,0 +1,194 @@ + + + + + + + + INSERT INTO hrsa_excel_acct_result(salary_sob_id, salary_acct_emp_id, salary_acct_record_id, employee_id, + salary_item_id, result_value, creator, create_time, update_time, + delete_type, tenant_key) + VALUES + + ( + #{item.salarySobId}, + #{item.salaryAcctEmpId}, + #{item.salaryAcctRecordId}, + #{item.employeeId}, + #{item.salaryItemId}, + #{item.resultValue}, + #{item.creator}, + #{item.createTime}, + #{item.updateTime}, + #{item.deleteType}, + #{item.tenantKey} + ) + + + + INSERT INTO hrsa_excel_acct_result(salary_sob_id, salary_acct_emp_id, salary_acct_record_id, employee_id, + salary_item_id, result_value, creator, create_time, update_time, + delete_type, tenant_key) + + + select + #{item.salarySobId}, + #{item.salaryAcctEmpId}, + #{item.salaryAcctRecordId}, + #{item.employeeId}, + #{item.salaryItemId}, + #{item.resultValue}, + #{item.creator}, + #{item.createTime}, + #{item.updateTime}, + #{item.deleteType}, + #{item.tenantKey} + from dual + + + + INSERT INTO hrsa_excel_acct_result( salary_sob_id, salary_acct_emp_id, salary_acct_record_id, employee_id, + salary_item_id, result_value, creator, create_time, update_time, + delete_type, tenant_key) + VALUES + + ( + #{item.salarySobId}, + #{item.salaryAcctEmpId}, + #{item.salaryAcctRecordId}, + #{item.employeeId}, + #{item.salaryItemId}, + #{item.resultValue}, + #{item.creator}, + #{item.createTime}, + #{item.updateTime}, + #{item.deleteType}, + #{item.tenantKey} + ) + + + + + DELETE FROM hrsa_excel_acct_result + WHERE salary_acct_emp_id IN + + #{salaryAcctEmployeeId} + + + + + DELETE FROM hrsa_excel_acct_result + WHERE salary_acct_record_id IN + + #{salaryAcctRecordId} + + + + + + + + + + + + + + + + + + + + + + + t.id + , t.salary_sob_id + , t.salary_acct_emp_id + , t.salary_acct_record_id + , t.employee_id + , t.salary_item_id + , t.result_value + , t.creator + , t.create_time + , t.update_time + , t.delete_type + , t.tenant_key + , t.tax_agent_id + + + + + diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.java b/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.java index e0bf720a8..578654a26 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.java +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.java @@ -51,4 +51,12 @@ public interface InsuranceAccountBatchMapper { */ void updateById(@Param("pos") InsuranceAccountBatchPO pos); + /** + * + * @param billMonth + * @param billStatus + * @return + */ + InsuranceAccountBatchPO getByBillStatus(@Param("billMonth") String billMonth,@Param("billStatus")Integer billStatus); + } diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml index 1c7dd297e..1282ac474 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountBatchMapper.xml @@ -83,7 +83,7 @@ AND - t.bill_month between param.startTime and param.endTime + t.bill_month between #{param.startTime} and #{param.endTime} @@ -118,6 +118,17 @@ + + + UPDATE hrsa_bill_batch SET delete_type = 1 diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java index dbaaf190b..f858c4951 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.java @@ -1,6 +1,7 @@ package com.engine.salary.mapper.siaccount; import com.engine.salary.entity.siaccount.param.InsuranceAccountDetailParam; +import com.engine.salary.entity.siaccount.param.SupplementAccountBaseParam; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import org.apache.ibatis.annotations.Param; @@ -47,5 +48,37 @@ public interface InsuranceAccountDetailMapper { void batchSaveAccountDetails(@Param("accounts") Collection accounts); + /** + * 条件查询 + * @param billMonth + * @return + */ List selectList(@Param("billMonth") String billMonth); + + + /** + * 根据账单月份删除 + * @param billMonth + */ + void batchDeleteNotFile(@Param("billMonth") String billMonth); + + + /** + * 批量删除 + * @param pos + */ + void batchDelSupplementAccountDetails(@Param("pos") Collection pos); + + + /** + * 根据员工id批量删除 + * @param pos + */ + void batchDelSupplementDetailsByIds(@Param("pos") Collection pos); + + + void batchUnConfirmedInspectDetails(@Param("ids") Collection ids); + + + void batchIgnoreInspectDetails(@Param("ids") Collection ids); } diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml index 0110ca112..e8aa31111 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountDetailMapper.xml @@ -97,11 +97,11 @@ AND - t.bill_month = param.billMonth + t.bill_month = #{param.billMonth} AND - t.payment_status = param.paymentStatus + t.payment_status = #{param.paymentStatus} AND t.employee_id IN @@ -118,7 +118,6 @@ FROM hrsa_bill_detail t WHERE t.delete_type = 0 - 1 = 1 ORDER BY t.update_time DESC @@ -133,7 +132,7 @@ - SELECT t.employee_id FROM @@ -144,13 +143,58 @@ - + UPDATE hrsa_bill_detail SET delete_type = 1 WHERE id = #{id} AND delete_type = 0 + + DELETE + FROM hrsa_bill_detail + WHERE delete_type = 0 + AND bill_month = #{billMonth} + AND bill_status = 0 + + + + + UPDATE hrsa_bill_detail + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{po.id} + + + + + UPDATE + hrsa_bill_inspect + SET + inspect_status = 0 + WHERE + delete_type = 0 + AND id IN + + #{id} + + + + + UPDATE + hrsa_bill_inspect + SET + inspect_status = 1 + WHERE + delete_type = 0 + AND id IN + + #{id} + + + @@ -165,6 +209,17 @@ + + UPDATE hrsa_bill_detail + SET delete_type = 1 + WHERE delete_type = 0 + AND employee_id IN + + #{po.employeeId} + + + + INSERT INTO hrsa_bill_detail (employee_id,bill_month,bill_status,payment_status,supplementary_month,supplementary_projects,resource_from,social_pay_org,social_account,fund_pay_org, diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountInspectMapper.java b/src/com/engine/salary/mapper/siaccount/InsuranceAccountInspectMapper.java index c358e4617..59b93a602 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountInspectMapper.java +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountInspectMapper.java @@ -4,6 +4,7 @@ import com.engine.salary.entity.siaccount.po.InsuranceAccountInspectPO; import org.apache.ibatis.annotations.Param; import java.util.Collection; +import java.util.List; /** * @Author weaver_cl @@ -25,4 +26,18 @@ public interface InsuranceAccountInspectMapper { */ void batchSaveInspectDetails(@Param("pos") Collection pos); + + /** + * + * @param inspectStatus + * @param billMonth + * @return + */ + List getByInspectStatusAndBillMonth(@Param("inspectStatus")Integer inspectStatus,@Param("billMonth")String billMonth); + + + List getByInspectStatusAndIds(@Param("inspectStatus")Integer inspectStatus,@Param("ids")Collection ids); + + + } diff --git a/src/com/engine/salary/mapper/siaccount/InsuranceAccountInspectMapper.xml b/src/com/engine/salary/mapper/siaccount/InsuranceAccountInspectMapper.xml index 5e7499a00..8f2f94327 100644 --- a/src/com/engine/salary/mapper/siaccount/InsuranceAccountInspectMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/InsuranceAccountInspectMapper.xml @@ -32,6 +32,34 @@ , t.tenant_key + + + + + AND t.id IN + + #{id} + + + + + diff --git a/src/com/engine/salary/mapper/siaccount/SIAccountDetailTempMapper.xml b/src/com/engine/salary/mapper/siaccount/SIAccountDetailTempMapper.xml index 02862dca8..5ffbf57d1 100644 --- a/src/com/engine/salary/mapper/siaccount/SIAccountDetailTempMapper.xml +++ b/src/com/engine/salary/mapper/siaccount/SIAccountDetailTempMapper.xml @@ -1,6 +1,6 @@ - + diff --git a/src/com/engine/salary/mapper/sicategory/ICategoryMapper.java b/src/com/engine/salary/mapper/sicategory/ICategoryMapper.java index d19afd3fa..ad8caba72 100644 --- a/src/com/engine/salary/mapper/sicategory/ICategoryMapper.java +++ b/src/com/engine/salary/mapper/sicategory/ICategoryMapper.java @@ -66,4 +66,12 @@ public interface ICategoryMapper { */ List listByWelfareType(@Param("welfareType") Integer welfareType, @Param("dataType") Integer dataType); + + /** + * 根据数据类型查询 + * @param dataType + * @return + */ + List listByDataType(@Param("dataType") Integer dataType); + } diff --git a/src/com/engine/salary/mapper/sicategory/ICategoryMapper.xml b/src/com/engine/salary/mapper/sicategory/ICategoryMapper.xml index ac1551c1c..24c617ab0 100644 --- a/src/com/engine/salary/mapper/sicategory/ICategoryMapper.xml +++ b/src/com/engine/salary/mapper/sicategory/ICategoryMapper.xml @@ -97,6 +97,22 @@ ORDER BY id DESC + + + + + + UPDATE hrsa_insurance_category diff --git a/src/com/engine/salary/service/FormulaRunService.java b/src/com/engine/salary/service/FormulaRunService.java new file mode 100644 index 000000000..b945d3513 --- /dev/null +++ b/src/com/engine/salary/service/FormulaRunService.java @@ -0,0 +1,13 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryformula.po.FormulaVar; + +import java.util.List; + +public interface FormulaRunService { + + Object run(ExpressFormula expressFormula, List formulaVars, DataCollectionEmployee simpleEmployee); + +} diff --git a/src/com/engine/salary/service/RemoteExcelService.java b/src/com/engine/salary/service/RemoteExcelService.java index 7894abedf..8081451ee 100644 --- a/src/com/engine/salary/service/RemoteExcelService.java +++ b/src/com/engine/salary/service/RemoteExcelService.java @@ -1,6 +1,7 @@ package com.engine.salary.service; -import com.weaver.excel.formula.api.entity.FormulaVar; + +import com.engine.salary.entity.salaryformula.po.FormulaVar; import java.util.List; import java.util.Map; @@ -12,6 +13,9 @@ public interface RemoteExcelService { List fieldList(String sourceId, Map extendParam); + List> fieldGroupList(Map extendParam); + + // ExcelPage dataSourceList(String categoryId, ExcelPage page, Map extendParam, SimpleEmployee employee); // // List findProperData(String dataId, String fieldId, String fieldType, Map extendParam, SimpleEmployee employee); diff --git a/src/com/engine/salary/service/SIAccountService.java b/src/com/engine/salary/service/SIAccountService.java index 4c6a086ed..0eb66576a 100644 --- a/src/com/engine/salary/service/SIAccountService.java +++ b/src/com/engine/salary/service/SIAccountService.java @@ -1,9 +1,10 @@ package com.engine.salary.service; -import com.engine.salary.entity.siaccount.param.AccountParam; -import com.engine.salary.entity.siaccount.param.InsuranceAccountBatchParam; -import com.engine.salary.entity.siaccount.param.InsuranceAccountDetailParam; +import com.engine.salary.entity.siaccount.dto.InsuranceAccountTabDTO; +import com.engine.salary.entity.siaccount.param.*; +import java.util.Collection; +import java.util.List; import java.util.Map; /** @@ -14,18 +15,120 @@ import java.util.Map; **/ public interface SIAccountService { + /** + * 查询台账列表 + * @param insuranceAccountBatchParam + * @return + */ Map listPage(InsuranceAccountBatchParam insuranceAccountBatchParam); + /** + * 获取正常缴纳列表 + * @param insuranceAccountDetailParam + * @return + */ Map listCommonPage(InsuranceAccountDetailParam insuranceAccountDetailParam); + /** + * 根据姓名名获取正常缴纳列表 + * @param insuranceAccountDetailParam + * @return + */ Map listCommonPageByName(InsuranceAccountDetailParam insuranceAccountDetailParam); + /** + * 获取补缴缴纳列表 + * @param insuranceAccountDetailParam + * @return + */ Map listSupplementaryPage(InsuranceAccountDetailParam insuranceAccountDetailParam); + /** + * 根据姓名获取补缴缴纳列表 + * @param insuranceAccountDetailParam + * @return + */ Map supplementaryByNameList(InsuranceAccountDetailParam insuranceAccountDetailParam); + /** + * 获取核算月份备注填写表单 + * @param params + * @return + */ Map getForm(Map params); - Map save(AccountParam param); + /** + * 保存并进入核算 + * @param param + */ + void save(AccountParam param); + + /** + * 正常缴纳页核算 + * @param saveCommonAccountParam + */ + void commonAccount(SaveCommonAccountParam saveCommonAccountParam); + + /** + * 删除月份表单 + * @param accountParam + */ + void delete(AccountParam accountParam); + + /** + * 添加正常缴纳人员 + * @param accountParam + */ + void saveCommonAccount(SaveCommonAccountParam accountParam); + + /** + * 添加补缴人员 + * @param saveSupplementaryAccountParam + */ + void saveSupplementaryAccount(SaveSupplementaryAccountParam saveSupplementaryAccountParam); + + /** + * 删除正常缴纳人员 + * @param accountParam + */ + void deleteCommonAccount(SaveCommonAccountParam accountParam); + + /** + * 删除补缴人员 + * @param supplementAccountBaseParams + */ + void deleteSummplementaryAccount(List supplementAccountBaseParams); + + /** + * 台账归档 + * @param accountParam + */ + void file(AccountParam accountParam); + + /** + * 重置核算异常 + * @param ids + */ + void unconfirmed(Collection ids); + + + /** + * 获取核算异常列表页是否导出档案开关 + * @param billMonth + */ + Map buttonCheck(String billMonth); + + + /** + * 忽略核算异常 + * @param longs + */ + void ignore(Collection longs); + + /** + * tab信息 + * @param billMonth + */ + InsuranceAccountTabDTO tabList(String billMonth); } diff --git a/src/com/engine/salary/service/SalaryAcctExcelService.java b/src/com/engine/salary/service/SalaryAcctExcelService.java index 514e7f9f5..2c2b44332 100644 --- a/src/com/engine/salary/service/SalaryAcctExcelService.java +++ b/src/com/engine/salary/service/SalaryAcctExcelService.java @@ -60,14 +60,14 @@ public interface SalaryAcctExcelService { */ XSSFWorkbook exportImportTemplate(SalaryAcctImportTemplateParam param); -// /** -// * 薪资核算线下对比结果导出 -// * -// * @param queryParam -// * @return -// */ -// XSSFWorkbook exportComparisonResult(SalaryComparisonResultQueryParam queryParam); -// + /** + * 薪资核算线下对比结果导出 + * + * @param queryParam + * @return + */ + XSSFWorkbook exportComparisonResult(SalaryComparisonResultQueryParam queryParam); + // /** // * 薪资核算线下对比结果导入模板导出 // * diff --git a/src/com/engine/salary/service/SalaryComparisonResultService.java b/src/com/engine/salary/service/SalaryComparisonResultService.java index 00f832e05..0dd6ef22f 100644 --- a/src/com/engine/salary/service/SalaryComparisonResultService.java +++ b/src/com/engine/salary/service/SalaryComparisonResultService.java @@ -8,12 +8,13 @@ import java.util.Collection; import java.util.List; /** - * @description: 薪资核算的线下对比结果 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 1/20/22 7:00 PM - * @version:v1.0 - */ + * 薪资核算的线下对比结果 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public interface SalaryComparisonResultService { /** diff --git a/src/com/engine/salary/service/SalaryFormulaService.java b/src/com/engine/salary/service/SalaryFormulaService.java index eed762123..8527912dc 100644 --- a/src/com/engine/salary/service/SalaryFormulaService.java +++ b/src/com/engine/salary/service/SalaryFormulaService.java @@ -1,17 +1,19 @@ package com.engine.salary.service; -import com.weaver.excel.formula.api.entity.ExpressFormula; +import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryformula.param.SalaryFormulaSaveParam; import java.util.Collection; import java.util.List; /** - * @description: 薪酬管理公式编辑器 - * @author: xiajun - * @modified By: xiajun - * @date: Created in 12/7/21 5:38 PM - * @version:v1.0 - */ + * 薪酬管理公式编辑器 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ public interface SalaryFormulaService { /** @@ -26,8 +28,11 @@ public interface SalaryFormulaService { * 根据公式id获取公式内容 * * @param formulaId - * @param tenantKey * @return */ ExpressFormula getExpressFormula(Long formulaId); + + void save(SalaryFormulaSaveParam salaryFormulaSaveParam); + + void update(SalaryFormulaSaveParam salaryFormulaSaveParam); } diff --git a/src/com/engine/salary/service/SalaryItemService.java b/src/com/engine/salary/service/SalaryItemService.java index a129d3b2b..13034fc0b 100644 --- a/src/com/engine/salary/service/SalaryItemService.java +++ b/src/com/engine/salary/service/SalaryItemService.java @@ -4,7 +4,7 @@ import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam; import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.enums.SalarySystemTypeEnum; -import com.github.pagehelper.PageInfo; +import com.engine.salary.util.page.PageInfo; import java.util.Collection; import java.util.List; diff --git a/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java b/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java new file mode 100644 index 000000000..c4dd580a6 --- /dev/null +++ b/src/com/engine/salary/service/impl/FormulaRunServiceImpl.java @@ -0,0 +1,33 @@ +package com.engine.salary.service.impl; + +import com.engine.core.impl.Service; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryformula.po.FormulaVar; +import com.engine.salary.service.FormulaRunService; +import org.apache.commons.jexl3.*; + +import java.util.List; + +public class FormulaRunServiceImpl extends Service implements FormulaRunService { + @Override + public Object run(ExpressFormula expressFormula, List formulaVars, DataCollectionEmployee simpleEmployee) { + + + String formula = expressFormula.getFormula(); + + JexlBuilder jexlBuilder = new JexlBuilder(); + // 创建Jexl表达式引擎 + JexlEngine jexlEngine = jexlBuilder.create(); + // 创建Jexl表达式解析器 + JexlScript jexlScript = jexlEngine.createScript(formula); + // 创建Jexl表达式变量上下文 + JexlContext jexlContext = new MapContext(); + formulaVars.forEach(v->{ + jexlContext.set(v.getFieldId(),v.getContent()); + }); + // 执行Jexl表达式,得到结果 + Object execute = jexlScript.execute(jexlContext); + return execute; + } +} diff --git a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java index 88d432fa3..6560353bc 100644 --- a/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/RemoteExcelServiceImpl.java @@ -10,6 +10,7 @@ import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; import com.engine.salary.entity.datacollection.param.AttendQuoteFieldQueryParam; import com.engine.salary.entity.datacollection.po.OtherDeductionPO; import com.engine.salary.entity.formula.DataType; +import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaTaxRateDTO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; @@ -22,7 +23,6 @@ import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.google.common.collect.Lists; -import com.weaver.excel.formula.api.entity.FormulaVar; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -130,6 +130,16 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic return vars; } + @Override + public List> fieldGroupList(Map extendParam) { + return Arrays.stream(SalaryFormulaReferenceEnum.values()).map(e -> { + Map map = new HashMap<>(); + map.put("key", e.getValue()); + map.put("value", SalaryI18nUtil.getI18nLabel(e.getLabelId(), e.getDefaultLabel())); + return map; + }).collect(Collectors.toList()); + } + // @Override // public ExcelPage dataSourceList(String categoryId, ExcelPage page, Map extendParam, SimpleEmployee employee) { // log.info("categoryId: {}, page: {}", categoryId, JsonUtil.toJsonString(page)); @@ -218,7 +228,7 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic private List salaryItem2FormulaVar(SalaryFormulaReferenceEnum referenceEnum, Map extendParam) { Set salaryItemIds = Collections.emptySet(); - Object salarySobId = extendParam.get("salarySobId"); + Object salarySobId = extendParam == null ? null : extendParam.get("salarySobId"); if (Objects.nonNull(salarySobId)) { List salarySobItems = getSalarySobItemService(user).listBySalarySobId(Long.valueOf(String.valueOf(salarySobId))); salaryItemIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId); @@ -233,12 +243,9 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic .map(e -> { FormulaVar formulaVar = new FormulaVar(); formulaVar.setFieldId(referenceEnum.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + e.getCode()); - formulaVar.setTitle(e.getName()); - formulaVar.setFormId("" + referenceEnum.getValue()); - formulaVar.setDataType(DataType.NUMBER); - formulaVar.setModule(SalaryFormulaFieldConstant.MODULE); - formulaVar.setProperKey(DataType.NUMBER); - formulaVar.setProperKey(e.getDataType()); + formulaVar.setName(e.getName()); + formulaVar.setSource("" + referenceEnum.getValue()); + formulaVar.setFieldType(e.getDataType()); return formulaVar; }).collect(Collectors.toList()); @@ -258,13 +265,11 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic } else { formulaVar.setFieldId(annotation.fieldId()); } - formulaVar.setModule(SalaryFormulaFieldConstant.MODULE); - formulaVar.setTitle(SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.defaultLabel())); - formulaVar.setFormId(formId); - formulaVar.setDataType(annotation.dataType()); - formulaVar.setProperKey(DataType.NUMBER); + formulaVar.setName(SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.defaultLabel())); + formulaVar.setSource(formId); + formulaVar.setFieldType(annotation.dataType()); if (StringUtils.equals(formId, "" + SalaryFormulaReferenceEnum.EMPLOYEE_INFO.getValue())) { - formulaVar.setProperKey(DataType.STRING); + formulaVar.setSource(DataType.STRING); } formulaVars.add(formulaVar); } @@ -279,12 +284,12 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic List formulaVars = Lists.newArrayListWithExpectedSize(welfareColumns.size()); welfareColumns.forEach((k, v) -> { FormulaVar formulaVar = new FormulaVar(); - formulaVar.setFieldId(referenceEnum.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + v); - formulaVar.setModule(SalaryFormulaFieldConstant.MODULE); - formulaVar.setTitle(k); - formulaVar.setFormId("" + referenceEnum.getValue()); - formulaVar.setDataType(DataType.NUMBER); - formulaVar.setProperKey(DataType.NUMBER); +// formulaVar.setFieldId(referenceEnum.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + v); +// formulaVar.setModule(SalaryFormulaFieldConstant.MODULE); +// formulaVar.setTitle(k); +// formulaVar.setFormId("" + referenceEnum.getValue()); +// formulaVar.setDataType(DataType.NUMBER); +// formulaVar.setProperKey(DataType.NUMBER); formulaVars.add(formulaVar); }); return formulaVars; @@ -298,11 +303,9 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic List formulaVars = fields.stream().map(e -> { FormulaVar formulaVar = new FormulaVar(); formulaVar.setFieldId(referenceEnum.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + e.getId()); - formulaVar.setModule(SalaryFormulaFieldConstant.MODULE); - formulaVar.setTitle(e.getFieldName()); - formulaVar.setFormId("" + referenceEnum.getValue()); - formulaVar.setDataType(DataType.NUMBER); - formulaVar.setProperKey(DataType.NUMBER); + formulaVar.setName(e.getFieldName()); + formulaVar.setSource("" + referenceEnum.getValue()); + formulaVar.setFieldType(DataType.NUMBER); return formulaVar; }).collect(Collectors.toList()); return formulaVars; diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index a2aa2c007..7e7b2cc5f 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -13,17 +13,18 @@ import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; import com.engine.salary.entity.siaccount.bo.InsuranceAccountBO; import com.engine.salary.entity.siaccount.dto.InsuranceAccountBatchListDTO; -import com.engine.salary.entity.siaccount.param.AccountParam; -import com.engine.salary.entity.siaccount.param.InsuranceAccountBatchParam; -import com.engine.salary.entity.siaccount.param.InsuranceAccountDetailParam; -import com.engine.salary.entity.siaccount.param.Permission; +import com.engine.salary.entity.siaccount.dto.InsuranceAccountTabDTO; +import com.engine.salary.entity.siaccount.param.*; import com.engine.salary.entity.siaccount.po.InsuranceAccountBatchPO; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; +import com.engine.salary.entity.siaccount.po.InsuranceAccountInspectPO; import com.engine.salary.enums.siaccount.BillStatusEnum; +import com.engine.salary.enums.siaccount.InspectStatusEnum; import com.engine.salary.enums.siaccount.PaymentStatusEnum; import com.engine.salary.mapper.datacollection.EmployMapper; 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.service.ColumnBuildService; import com.engine.salary.service.RecordsBuildService; import com.engine.salary.service.SIAccountService; @@ -33,6 +34,7 @@ import java.util.stream.Collectors; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryFormItemUtil; +import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.valid.ValidUtil; @@ -136,7 +138,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { //数据组装 List> records = getService(user).buildCommonRecords(insuranceAccountDetailPOS, employeeId); - PageInfo> pageInfos = new PageInfo>(records); + PageInfo> pageInfos = new PageInfo<>(records); pageInfos.setTotal(records.size()); pageInfos.setPageNum(queryParam.getCurrent()); pageInfos.setPageSize(queryParam.getPageSize()); @@ -174,7 +176,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Long employeeId = (long)user.getUID(); Map datas = new HashMap<>(); - //正常缴纳列表 + //补缴缴纳列表 queryParam.setPaymentStatus(PaymentStatusEnum.REPAIR.getValue()); List list = MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class).list(queryParam); PageInfo pageInfo = new PageInfo<>(list,InsuranceAccountDetailPO.class); @@ -251,27 +253,124 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { return apidatas; } - /** - * 保存月份和备注信息并进入核算 - * - * @param param 请求入参 - *

- * 接口逻辑: - * 1、检查当前月份是否已经归档,如果已经归档直接返回,状态为未归档继续执行 - * 2、从基础人员表左连接部门和离职表以及档案表,查询出来符合缴纳的人员清单 - * (1)离职日期在当月一号零时之后 - * (2)档案中配置了福利缴纳开始缴纳月,开始时间包含当前月 - * 3、forkjoin核算并入库 - * 4、更新台账 - */ @Override - public Map save(AccountParam param) { - Map apidatas = new HashMap<>(); + public void save(AccountParam param) { Long employeeId = (long)user.getUID(); - String lastname = user.getLastname(); + String lastName = user.getLastname(); ValidUtil.doValidator(param); - siAccountBiz.save(true,param,employeeId,lastname); - return apidatas; + siAccountBiz.save(true,param,employeeId,lastName); + } + + @Override + public void commonAccount(SaveCommonAccountParam param) { + Long employeeId = (long)user.getUID(); + ValidUtil.doValidator(param); + siAccountBiz.saveCommonAccount(param,employeeId); + } + + @Override + public void delete(AccountParam accountParam) { + Long employeeId = (long)user.getUID(); + siAccountBiz.delete(accountParam,employeeId); + } + + @Override + public void saveCommonAccount(SaveCommonAccountParam accountParam) { + Long employeeId = (long)user.getUID(); + siAccountBiz.saveCommonAccount(accountParam,employeeId); + } + + @Override + public void saveSupplementaryAccount(SaveSupplementaryAccountParam saveSupplementaryAccountParam) { + Long employeeId = (long)user.getUID(); + siAccountBiz.saveSupplementaryAccount(saveSupplementaryAccountParam,employeeId); + } + + @Override + public void deleteCommonAccount(SaveCommonAccountParam param) { + Long employeeId = (long)user.getUID(); + siAccountBiz.deleteCommonAccount(param,employeeId); + } + + @Override + public void deleteSummplementaryAccount(List supplementAccountBaseParams) { + Long employeeId = (long)user.getUID(); + siAccountBiz.deleteSupplementaryAccount(supplementAccountBaseParams,employeeId); + } + + @Override + public void file(AccountParam accountParam) { + Long employeeId = (long)user.getUID(); + String billMonth = accountParam.getBillMonth(); + siAccountBiz.file(billMonth,employeeId); + } + + @Override + public void unconfirmed(Collection ids) { + List insuranceAccountInspectPOS = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class).getByInspectStatusAndIds(InspectStatusEnum.COMFORED.getValue(),ids); + + if (CollectionUtils.isNotEmpty(insuranceAccountInspectPOS)) { + MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class).batchUnConfirmedInspectDetails(insuranceAccountInspectPOS.stream().map(InsuranceAccountInspectPO::getId).collect(Collectors.toList())); + } + } + + + @Override + public Map buttonCheck(String billMonth) { + Map result = new HashMap<>(); + List list = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class).getByInspectStatusAndBillMonth(InspectStatusEnum.IGNORE.getValue(),billMonth); + if (CollectionUtils.isEmpty(list)) { + result.put("displayFlag", false); + return result; + } + result.put("displayFlag", true); + return result; + } + + @Override + public void ignore(Collection ids) { + List insuranceAccountInspectPOS = MapperProxyFactory.getProxy(InsuranceAccountInspectMapper.class).getByInspectStatusAndIds(InspectStatusEnum.IGNORE.getValue(),ids); + + if (CollectionUtils.isNotEmpty(insuranceAccountInspectPOS)) { + MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class).batchIgnoreInspectDetails(insuranceAccountInspectPOS.stream().map(InsuranceAccountInspectPO::getId).collect(Collectors.toList())); + } + } + + @Override + public InsuranceAccountTabDTO tabList(String billMonth) { + InsuranceAccountTabDTO insuranceAccountTabDTO = InsuranceAccountTabDTO.builder().build(); + InsuranceAccountBatchPO insuranceAccountBatchPO = MapperProxyFactory.getProxy(InsuranceAccountBatchMapper.class).getByBillMonth(billMonth); + boolean isShow = false; + if (insuranceAccountBatchPO == null || insuranceAccountBatchPO.getBillStatus() == BillStatusEnum.NOT_ARCHIVED.getValue()) { + isShow = true; + } + if (insuranceAccountBatchPO != null) { + insuranceAccountTabDTO.setRemarks(insuranceAccountBatchPO.getRemarks()); + } + List> tabList = new ArrayList<>(); + Map common = new HashMap<>(); + common.put("id", "1"); + common.put("content", SalaryI18nUtil.getI18nLabel( 92265, "正常缴纳")); + tabList.add(common); + if (isShow) { + Map change = new HashMap<>(); + change.put("id", "2"); + change.put("content", SalaryI18nUtil.getI18nLabel( 100509, "异动清单")); + tabList.add(change); + } + Map repair = new HashMap<>(); + repair.put("id", "3"); + repair.put("content", SalaryI18nUtil.getI18nLabel(92267, "补缴")); + tabList.add(repair); + + Map overView = new HashMap<>(); + overView.put("id", "4"); + overView.put("content", SalaryI18nUtil.getI18nLabel( 99927, "总览")); + tabList.add(overView); + insuranceAccountTabDTO.setTabList(tabList); + insuranceAccountTabDTO.setShow(isShow); + insuranceAccountTabDTO.setBillMonth(billMonth); + return insuranceAccountTabDTO; } diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 3adf0128e..e4ba86ea2 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -9,6 +9,8 @@ import com.engine.salary.entity.datacollection.AddUpSituation; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.AttendQuoteDataDTO; import com.engine.salary.entity.datacollection.po.OtherDeductionPO; +import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryformula.po.FormulaVar; import com.engine.salary.entity.salaryacct.bo.*; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; @@ -22,8 +24,6 @@ import com.engine.salary.enums.SalaryFormulaReferenceEnum; import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; import com.google.common.collect.Lists; -import com.weaver.excel.formula.api.entity.ExpressFormula; -import com.weaver.excel.formula.api.entity.FormulaVar; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -45,7 +45,7 @@ import java.util.stream.Collectors; @Slf4j public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcctCalculateService { - + private SalaryAcctResultService getSalaryAcctResultService(User user) { return (SalaryAcctResultService) ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); } @@ -53,43 +53,45 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc private SalaryEmployeeService getSalaryEmployeeService(User user) { return (SalaryEmployeeService) ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } - + private SalaryArchiveService getSalaryArchiveService(User user) { return (SalaryArchiveService) ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); } - + private AddUpSituationService getAddUpSituationService(User user) { return (AddUpSituationService) ServiceUtil.getService(AddUpSituationServiceImpl.class, user); } - + private AddUpDeductionService getAddUpDeductionService(User user) { return (AddUpDeductionService) ServiceUtil.getService(AddUpDeductionServiceImpl.class, user); } - + private OtherDeductionService getOtherDeductionService(User user) { return (OtherDeductionService) ServiceUtil.getService(OtherDeductionServiceImpl.class, user); } - + // private SIAccountService siAccountService; - + private AttendQuoteDataService getAttendQuoteDataService(User user) { return (AttendQuoteDataService) ServiceUtil.getService(AttendQuoteDataServiceImpl.class, user); } - -// private ExcelRunService excelRunService; - + + private FormulaRunService getFormulaRunService(User user) { + return (FormulaRunService) ServiceUtil.getService(FormulaRunServiceImpl.class, user); + } + private SalaryAcctResultTempService getSalaryAcctResultTempService(User user) { return (SalaryAcctResultTempService) ServiceUtil.getService(SalaryAcctResultTempServiceImpl.class, user); } - + private SalaryAcctProgressService salaryAcctProgressService; - + private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { return (SalaryAcctEmployeeService) ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); } @@ -244,12 +246,17 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc private String runExpressFormula(ExpressFormula expressFormula, Map formulaVarValueMap, DataCollectionEmployee simpleEmployee) { // 给公式中的变量填入值 List formulaVars = ExpressFormulaBO.buildFormulaVar4Accounting(expressFormula, formulaVarValueMap); + + String formula = expressFormula.getFormula(); + + // todo 运行公式 -// ExcelResult excelResult = excelRunService.run(expressFormula, formulaVars, simpleEmployee); + Object run = getFormulaRunService(user).run(expressFormula, formulaVars, simpleEmployee); // if (excelResult.isStatus()) { // return excelResult.getStringData(); // } - return StringUtils.EMPTY; + return run.toString(); +// return StringUtils.EMPTY; } /** diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index bc4e4eac7..ac7a6b4c4 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -9,13 +9,16 @@ import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; import com.engine.salary.entity.salaryacct.dto.SalaryAccEmployeeListDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctImportFieldDTO; +import com.engine.salary.entity.salaryacct.dto.SalaryComparisonResultListDTO; import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctImportTemplateParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; +import com.engine.salary.entity.salaryacct.param.SalaryComparisonResultQueryParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; +import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.taxrate.TaxAgent; import com.engine.salary.enums.SalaryValueTypeEnum; @@ -74,9 +77,9 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // return (SalaryFormulaService) ServiceUtil.getService(SalaryFormulaServiceImpl.class, user); // } -// private SalaryComparisonResultService getSalaryComparisonResultService(User user) { -// return (SalaryComparisonResultService) ServiceUtil.getService(SalaryComparisonResultServiceImpl.class, user); -// } + private SalaryComparisonResultService getSalaryComparisonResultService(User user) { + return (SalaryComparisonResultService) ServiceUtil.getService(SalaryComparisonResultServiceImpl.class, user); + } private TaxAgentBiz taxAgentService = new TaxAgentBiz(); @@ -317,76 +320,61 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc return ExcelUtil.genWorkbookV2(rows, sheetName); } -// -// @Override -// public XSSFWorkbook exportComparisonResult(SalaryComparisonResultQueryParam queryParam) { -// // 查询薪资核算记录 -// SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); -// if (Objects.isNull(salaryAcctRecordPO)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); -// } -// // 查询线下对比结果 -// SalaryComparisonResultListDTO salaryComparisonResultListDTO = getSalaryComparisonResultService(user).listByParam(queryParam); -// // 薪资核算线下对比结果列表表头 -// List headerList = Lists.newArrayList(); -// // 查询薪资核算所用的薪资账套的员工信息字段 -// List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); -// Set employeeFieldCodeSet = SalaryEntityUtil.properties(salarySobEmpFieldPOS, SalarySobEmpFieldPO::getFieldCode); -// // 查询薪资项目 -// List salaryItemPOS = getSalarySobItemService(user).listBySalarySobId4SalaryItem(salaryAcctRecordPO.getSalarySobId()); -// Set salaryItemIds = SalaryEntityUtil.properties(salaryItemPOS, salaryItemPO -> "" + salaryItemPO.getId()); -// for (WeaTableColumn weaTableColumn : salaryComparisonResultListDTO.getWeaTableColumns()) { -// // 员工信息字段 -// if (employeeFieldCodeSet.contains(weaTableColumn.getDataIndex())) { -// headerList.add(weaTableColumn.getTitle()); -// } -// // 薪资项目的表头 -// if (salaryItemIds.contains(weaTableColumn.getDataIndex())) { -// headerList.add(weaTableColumn.getTitle() + " (线上值)"); -// headerList.add(weaTableColumn.getTitle() + " (线下值)"); -// } -// } -// String[] headers = headerList.toArray(new String[0]); -// -// List> resultMapList = salaryComparisonResultListDTO.getData().getRecords(); -// // excel导出的数据 -// List> rows = Lists.newArrayListWithExpectedSize(resultMapList.size()); -// for (Map map : resultMapList) { -// List row = Lists.newArrayList(); -// for (WeaTableColumn weaTableColumn : salaryComparisonResultListDTO.getWeaTableColumns()) { -// // 员工信息字段的值 -// if (employeeFieldCodeSet.contains(weaTableColumn.getDataIndex())) { -// row.add(map.get(weaTableColumn.getDataIndex())); -// } -// // 薪资项目的值 -// if (salaryItemIds.contains(weaTableColumn.getDataIndex())) { -// Map tempMap = (Map) map.getOrDefault(weaTableColumn.getDataIndex(), Collections.emptyMap()); -// row.add(tempMap.get("acctResultValue")); -// row.add(tempMap.get("excelResultValue")); -// } -// } -// rows.add(row); -// } -// -// ExcelSheetData excelSheetData = new ExcelSheetData(); -// excelSheetData.setSheetName("线下对比结果"); -// excelSheetData.setHeaders(Collections.singletonList(headers)); -// excelSheetData.setRows(rows); -// ExportExcelInfo exportExcelInfo = ExportExcelInfo.builder() -// .fileName("线下对比结果") -// .dataType("线下对比结果") -// .function(excelExportParam.getFunction()) -// .handlerName("comparisonResultHandler") -// .flag(true) -// .bizId(String.valueOf(excelExportParam.getBiz())) -// .module(excelExportParam.getModule()) -// .userId(simpleEmployee.getEmployeeId()) -// .tenantKey(tenantKey) -// .operator(simpleEmployee.getUsername()) -// .eteamsId(eteamsId) -// .build(); -// return salaryBatchService.simpleExportExcel(exportExcelInfo, Collections.singletonList(excelSheetData)); -// } + + @Override + public XSSFWorkbook exportComparisonResult(SalaryComparisonResultQueryParam queryParam) { + // 查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); + if (Objects.isNull(salaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); + } + // 查询线下对比结果 + SalaryComparisonResultListDTO salaryComparisonResultListDTO = getSalaryComparisonResultService(user).listByParam(queryParam); + // 薪资核算线下对比结果列表表头 + List headerList = Lists.newArrayList(); + // 查询薪资核算所用的薪资账套的员工信息字段 + List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + Set employeeFieldCodeSet = SalaryEntityUtil.properties(salarySobEmpFieldPOS, SalarySobEmpFieldPO::getFieldCode); + // 查询薪资项目 + List salaryItemPOS = getSalarySobItemService(user).listBySalarySobId4SalaryItem(salaryAcctRecordPO.getSalarySobId()); + Set salaryItemIds = SalaryEntityUtil.properties(salaryItemPOS, salaryItemPO -> "" + salaryItemPO.getId()); + for (WeaTableColumn weaTableColumn : salaryComparisonResultListDTO.getWeaTableColumns()) { + // 员工信息字段 + if (employeeFieldCodeSet.contains(weaTableColumn.getColumn())) { + headerList.add(weaTableColumn.getText()); + } + // 薪资项目的表头 + if (salaryItemIds.contains(weaTableColumn.getColumn())) { + headerList.add(weaTableColumn.getText() + " (线上值)"); + headerList.add(weaTableColumn.getText() + " (线下值)"); + } + } + + List> resultMapList = salaryComparisonResultListDTO.getData().getList(); + // excel导出的数据 + List> rows = new ArrayList<>(); + rows.add(headerList); + for (Map map : resultMapList) { + List row = Lists.newArrayList(); + for (WeaTableColumn weaTableColumn : salaryComparisonResultListDTO.getWeaTableColumns()) { + // 员工信息字段的值 + if (employeeFieldCodeSet.contains(weaTableColumn.getColumn())) { + row.add(map.get(weaTableColumn.getColumn())); + } + // 薪资项目的值 + if (salaryItemIds.contains(weaTableColumn.getColumn())) { + Map tempMap = (Map) map.getOrDefault(weaTableColumn.getColumn(), Collections.emptyMap()); + row.add(tempMap.get("acctResultValue")); + row.add(tempMap.get("excelResultValue")); + } + } + rows.add(row); + } + + String sheetName = "线下对比结果"; + + return ExcelUtil.genWorkbookV2(rows, sheetName); + } // // // @Override diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 04bc1c018..f735b85fd 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -6,6 +6,7 @@ import com.engine.salary.biz.TaxAgentBiz; import com.engine.salary.common.LocalDateRange; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; +import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculateBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctCalculatePriorityBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; @@ -39,7 +40,6 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.weaver.excel.formula.api.entity.ExpressFormula; import com.weaver.util.threadPool.ThreadPoolUtil; import com.weaver.util.threadPool.constant.ModulePoolEnum; import com.weaver.util.threadPool.entity.LocalRunnable; @@ -95,8 +95,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return (SalaryEmployeeService) ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); } private SalaryFormulaService getSalaryFormulaService(User user) { -// return (SalaryFormulaService) ServiceUtil.getService(SalaryFormulaServiceImpl.class, user); - return null; + return (SalaryFormulaService) ServiceUtil.getService(SalaryFormulaServiceImpl.class, user); } private SalarySobAdjustRuleService getSalarySobAdjustRuleService(User user) { return (SalarySobAdjustRuleService) ServiceUtil.getService(SalarySobAdjustRuleServiceImpl.class, user); @@ -390,7 +389,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 8、查询公式详情 Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); formulaIds.addAll(SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getFormulaId)); - List expressFormulas = Lists.newArrayList();//getSalaryFormulaService(user).listExpressFormula(formulaIds); + List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); // 9、计算薪资项目的运算优先级 List> salarySobItemsWithPriority = SalaryAcctCalculatePriorityBO.calculatePriority(salarySobItemPOS, salaryItemPOS, expressFormulas); // 10、根据id查询其他合并计税的薪资核算记录 @@ -482,6 +481,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // salaryAcctRecordLoggerTemplate.write(loggerContext); } catch (Exception e) { log.info("薪资核算出错:{}", e.getMessage(), e); + throw new SalaryRunTimeException(e); // salaryAcctProgressService.fail("" + calculateParam.getSalaryAcctRecordId(), SalaryI18nUtil.getI18nLabel(99642, "薪资核算出错") + ": " + e.getMessage()); } finally { // 数据库字段加密用 diff --git a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java index f938c6685..cabd27ac7 100644 --- a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java @@ -1,244 +1,257 @@ -//package com.engine.salary.service.impl; -// -//import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; -//import com.engine.core.impl.Service; -//import com.engine.salary.service.SalaryComparisonResultService; -//import com.google.common.collect.Sets; -//import com.weaver.common.component.table.column.WeaTableColumn; -//import com.weaver.common.component.table.page.Page; -//import com.weaver.common.hrm.service.HrmCommonEmployeeService; -//import com.weaver.excel.formula.api.entity.ExpressFormula; -//import com.weaver.hrm.salary.dao.ExcelAcctResultMapper; -//import com.weaver.hrm.salary.entity.salaryacct.bo.SalaryAcctResultBO; -//import com.weaver.hrm.salary.entity.salaryacct.dto.SalaryComparisonResultListDTO; -//import com.weaver.hrm.salary.entity.salaryacct.param.SalaryAcctEmployeeQueryParam; -//import com.weaver.hrm.salary.entity.salaryacct.param.SalaryComparisonResultQueryParam; -//import com.weaver.hrm.salary.entity.salaryacct.po.ExcelAcctResultPO; -//import com.weaver.hrm.salary.entity.salaryacct.po.SalaryAcctEmployeePO; -//import com.weaver.hrm.salary.entity.salaryacct.po.SalaryAcctRecordPO; -//import com.weaver.hrm.salary.entity.salaryacct.po.SalaryAcctResultPO; -//import com.weaver.hrm.salary.entity.salaryarchive.po.TaxAgentPO; -//import com.weaver.hrm.salary.entity.salaryitem.po.SalaryItemPO; -//import com.weaver.hrm.salary.entity.salarysob.bo.SalarySobItemAggregateBO; -//import com.weaver.hrm.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; -//import com.weaver.hrm.salary.entity.salarysob.po.SalarySobEmpFieldPO; -//import com.weaver.hrm.salary.entity.salarysob.po.SalarySobItemGroupPO; -//import com.weaver.hrm.salary.entity.salarysob.po.SalarySobItemPO; -//import com.weaver.hrm.salary.entity.salarysob.po.SalarySobPO; -//import com.weaver.hrm.salary.exception.SalaryRunTimeException; -//import com.weaver.hrm.salary.service.*; -//import com.weaver.hrm.salary.util.SalaryEntityUtil; -//import com.weaver.hrm.salary.util.SalaryI18nUtil; -//import com.weaver.hrm.salary.util.SalaryPageUtil; -//import com.weaver.teams.domain.user.SimpleEmployee; -//import org.apache.commons.collections4.CollectionUtils; -//import org.apache.commons.lang3.BooleanUtils; -//import org.apache.commons.lang3.StringUtils; -//import org.apache.commons.lang3.math.NumberUtils; -// -//import java.util.*; -//import java.util.stream.Collectors; -// -///** -// * 薪资核算的线下对比结果 -// *

Copyright: Copyright (c) 2022

-// *

Company: 泛微软件

-// * -// * @author qiantao -// * @version 1.0 -// **/ -//public class SalaryComparisonResultServiceImpl extends Service implements SalaryComparisonResultService { -// -// -// private ExcelAcctResultMapper excelAcctResultMapper; -// -// private SalaryAcctResultService salaryAcctResultService; -// -// private SalaryAcctEmployeeService salaryAcctEmployeeService; -// -// private SalarySobItemService salarySobItemService; -// -// private SalaryAcctRecordService salaryAcctRecordService; -// -// private SalarySobEmpFieldService salarySobEmpFieldService; -// -// private HrmCommonEmployeeService hrmCommonEmployeeService; -// -// private TaxAgentService taxAgentService; -// -// private SalaryFormulaService salaryFormulaService; -// -// private SalaryItemService salaryItemService; -// -// private SalarySobService salarySobService; -// -// private SalarySobItemGroupService salarySobItemGroupService; -// -// @Override -// public List listBySalaryAcctRecordId(Long salaryAcctRecordId, String tenantKey) { -// return new LambdaQueryChainWrapper<>(excelAcctResultMapper) -// .eq(ExcelAcctResultPO::getTenantKey, tenantKey) -// .eq(ExcelAcctResultPO::getDeleteType, 0) -// .eq(ExcelAcctResultPO::getSalaryAcctRecordId, salaryAcctRecordId) -// .list(); -// } -// -// @Override -// public List listBySalaryAcctEmployeeIds(Collection salaryAcctEmployeeIds, String tenantKey) { -// if (CollectionUtils.isEmpty(salaryAcctEmployeeIds)) { -// return Collections.emptyList(); -// } -// return new LambdaQueryChainWrapper<>(excelAcctResultMapper) -// .eq(ExcelAcctResultPO::getTenantKey, tenantKey) -// .eq(ExcelAcctResultPO::getDeleteType, 0) -// .in(ExcelAcctResultPO::getSalaryAcctEmpId, salaryAcctEmployeeIds) -// .list(); -// } -// -// @Override -// public SalaryComparisonResultListDTO listPageByParam(SalaryComparisonResultQueryParam queryParam, String tenantKey) { -// return listByParam(true, queryParam, tenantKey); -// } -// -// @Override -// public SalaryComparisonResultListDTO listByParam(SalaryComparisonResultQueryParam queryParam, String tenantKey) { -// return listByParam(false, queryParam, tenantKey); -// } -// -// /** -// * 根据薪资核算人员查询薪资核算线下对比结果 -// * -// * @param queryParam 列表查询条件 -// * @param tenantKey 租户key -// * @return -// */ -// private SalaryComparisonResultListDTO listByParam(boolean needPage, SalaryComparisonResultQueryParam queryParam, String tenantKey) { -// // 查询薪资核算记录 -// SalaryAcctRecordPO salaryAcctRecordPO = salaryAcctRecordService.getById(queryParam.getSalaryAcctRecordId(), tenantKey); -// if (Objects.isNull(salaryAcctRecordPO)) { -// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); -// } -// // 查询薪资核算所用薪资账套 -// SalarySobPO salarySobPO = salarySobService.getById(salaryAcctRecordPO.getSalarySobId(), tenantKey); -// // 查询薪资核算所用的薪资账套的员工信息字段 -// List salarySobEmpFieldPOS = salarySobEmpFieldService.listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), tenantKey); -// // 查询薪资账套的薪资项目分类 -// List salarySobItemGroupPOS = salarySobItemGroupService.listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), tenantKey); -// // 查询薪资核算所用薪资账套的薪资项目副本 -// List salarySobItemPOS = salarySobItemService.listBySalarySobId(salaryAcctRecordPO.getSalarySobId(), tenantKey); -// // 查询公式详情 -// Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); -// List expressFormulas = salaryFormulaService.listExpressFormula(formulaIds, tenantKey); -// // 转换成 -// Map expressFormulaMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId, ExpressFormula::getFormula); -// Map customParameters = SalaryEntityUtil.convert2Map(salarySobItemPOS, SalarySobItemPO::getSalaryItemId, salarySobItemPO -> { -// if (salarySobItemPO.getFormulaId() <= 0) { -// return SalaryI18nUtil.getI18nLabel(92004, "输入/导入"); -// } -// return expressFormulaMap.getOrDefault(salarySobItemPO.getFormulaId(), StringUtils.EMPTY); -// }); -// // 查询薪资项目 -// Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); -// List salaryItemPOS = salaryItemService.listByIds(salaryItemIds, tenantKey); -// // 转换成聚合dto -// SalarySobItemAggregateBO salarySobItemAggregateBO = new SalarySobItemAggregateBO(salarySobPO, salarySobEmpFieldPOS, -// salarySobItemGroupPOS, salarySobItemPOS, expressFormulas, salaryItemPOS); -// SalarySobItemAggregateDTO salarySobItemAggregateDTO = salarySobItemAggregateBO.convert2AggregateDTO(); -// -// // 薪资核算人员 -// List salaryAcctEmployeePOS = salaryAcctEmployeeService.listByResultQueryParam(queryParam, tenantKey); -// if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { -// // 构建薪资核算结果列表表头 -// List weaTableColumns = SalaryAcctResultBO.buildTableColumns4ComparisonResult(salarySobItemAggregateDTO, Collections.emptySet()); -// // 构建列表数据 -// Page> dtoPage = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize()); -// dtoPage.setTotal(NumberUtils.INTEGER_ZERO); -// dtoPage.setRecords(Collections.emptyList()); -// // 返回结果 -// return new SalaryComparisonResultListDTO().setWeaTableColumns(weaTableColumns).setData(dtoPage); -// } -// // 薪资核算结果 -// List salaryAcctResultPOS; -// // 线下导入结果 -// List excelAcctResultPOS; -// // 如果薪资核算人员太多,利用薪资核算人员id查询薪资核算结果的效率就不太好,改为直接用薪资核算记录id查询 -// if (salaryAcctEmployeePOS.size() > 1000) { -// // 查询薪资核算结果 -// salaryAcctResultPOS = salaryAcctResultService.listBySalaryAcctRecordIds(Collections.singleton(queryParam.getSalaryAcctRecordId()), tenantKey); -// // 查询线下导入结果 -// excelAcctResultPOS = listBySalaryAcctRecordId(queryParam.getSalaryAcctRecordId(), tenantKey); -// } else { -// // 薪资核算人员id -// Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId); -// // 查询薪资核算结果 -// salaryAcctResultPOS = salaryAcctResultService.listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds, tenantKey); -// // 查询线下导入结果 -// excelAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds, tenantKey); -// } -// -// // 查询个税扣缴义务人 -// Set taxAgentIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getTaxAgentId); -// List taxAgentPOS = taxAgentService.listByIds(taxAgentIds, tenantKey); -// // 查询人员信息 -// List employeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getEmployeeId, Collectors.toList()); -// List simpleEmployees = hrmCommonEmployeeService.getEmployeeByIds(employeeIds, tenantKey); -// // 判断是否存在合并计税 -// Set salaryAcctEmployeeIds4ConsolidatedTax; -// if (StringUtils.isEmpty(queryParam.getConsolidatedTaxation())) { -// salaryAcctEmployeeIds4ConsolidatedTax = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId); -// } else { -// SalaryAcctEmployeeQueryParam accEmployeeQueryParam = new SalaryAcctEmployeeQueryParam() -// .setSalaryAcctRecordId(queryParam.getSalaryAcctRecordId()) -// .setIds(SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId)); -// List salaryAcctEmployeePOS4ConsolidatedTax = salaryAcctEmployeeService.listByParam4ConsolidatedTax(accEmployeeQueryParam, tenantKey); -// salaryAcctEmployeeIds4ConsolidatedTax = SalaryEntityUtil.properties(salaryAcctEmployeePOS4ConsolidatedTax, SalaryAcctEmployeePO::getId); -// } -// // 系统值和线下值不一致的薪资项目id -// Set includeSalaryItemIds = Sets.newHashSetWithExpectedSize(salaryItemPOS.size()); -// // 转换成薪资核算线下对比结果 -// List> resultMapList = SalaryAcctResultBO.buildComparisonTableData(salaryItemPOS, salarySobEmpFieldPOS, simpleEmployees, -// salaryAcctEmployeePOS, salaryAcctResultPOS, excelAcctResultPOS, taxAgentPOS, customParameters, salaryAcctEmployeeIds4ConsolidatedTax, includeSalaryItemIds); -// // 系统值和线下值一致的人员 -// if (queryParam.isOnlyDiffEmployee()) { -// // 过滤系统值和线下值一致的薪资核算人员 -// resultMapList = resultMapList.stream() -// .filter(map -> BooleanUtils.toBoolean(String.valueOf(map.get("different")))) -// .collect(Collectors.toList()); -// } -// // 分页 -// Page> dtoPage = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize()); -// dtoPage.setTotal(resultMapList.size()); -// if (needPage) { -// dtoPage.setRecords(SalaryPageUtil.subList((int) dtoPage.getCurrent(), (int) dtoPage.getSize(), resultMapList)); -// } else { -// dtoPage.setRecords(resultMapList); -// } -// Set excludeSalaryItemIds = Sets.newHashSet(); -// if (queryParam.isOnlyDiffSalaryItem()) { -// // 过滤系统值和线下值一致的薪资项目 -// excludeSalaryItemIds = salaryItemPOS.stream() -// .filter(salaryItemPO -> !includeSalaryItemIds.contains(salaryItemPO.getId())) -// .map(SalaryItemPO::getId) -// .collect(Collectors.toSet()); -// } -// // 构建薪资核算结果列表表头 -// List weaTableColumns = SalaryAcctResultBO.buildTableColumns4ComparisonResult(salarySobItemAggregateDTO, excludeSalaryItemIds); -// // 返回结果 -// return new SalaryComparisonResultListDTO().setWeaTableColumns(weaTableColumns).setData(dtoPage); -// } -// -// @Override -// public void batchSave(Collection excelAcctResultPOS) { -// excelAcctResultMapper.batchInsert(excelAcctResultPOS); -// } -// -// @Override -// public void deleteBySalaryAcctEmployeeIds(Collection salaryAcctEmployeeIds, String tenantKey) { -// excelAcctResultMapper.deleteBySalaryAcctEmployeeIds(salaryAcctEmployeeIds, tenantKey); -// } -// -// @Override -// public void deleteBySalaryAcctRecordIds(Collection salaryAcctRecordIds, String tenantKey) { -// excelAcctResultMapper.deleteBySalaryAcctRecordIds(salaryAcctRecordIds, tenantKey); -// } -//} +package com.engine.salary.service.impl; + +import com.cloudstore.eccom.pc.table.WeaTableColumn; +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.biz.TaxAgentBiz; +import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; +import com.engine.salary.entity.salaryacct.dto.SalaryComparisonResultListDTO; +import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeQueryParam; +import com.engine.salary.entity.salaryacct.param.SalaryComparisonResultQueryParam; +import com.engine.salary.entity.salaryacct.po.ExcelAcctResultPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; +import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; +import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO; +import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO; +import com.engine.salary.entity.salarysob.po.SalarySobItemPO; +import com.engine.salary.entity.salarysob.po.SalarySobPO; +import com.engine.salary.entity.taxrate.TaxAgent; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.salaryacct.ExcelAcctResultMapper; +import com.engine.salary.service.*; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.PageUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; +import weaver.hrm.User; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 薪资核算的线下对比结果 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalaryComparisonResultServiceImpl extends Service implements SalaryComparisonResultService { + + + private ExcelAcctResultMapper getExcelAcctResultMapper() { + return MapperProxyFactory.getProxy(ExcelAcctResultMapper.class); + } + + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return (SalaryAcctResultService) ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } + + private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { + return (SalaryAcctEmployeeService) ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); + } + + private SalarySobItemService getSalarySobItemService(User user) { + return (SalarySobItemService) ServiceUtil.getService(SalarySobItemServiceImpl.class, user); + } + + private SalaryAcctRecordService getSalaryAcctRecordService(User user) { + return (SalaryAcctRecordService) ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); + } + + private SalarySobEmpFieldService getSalarySobEmpFieldService(User user) { + return (SalarySobEmpFieldService) ServiceUtil.getService(SalarySobEmpFieldServiceImpl.class, user); + } + + private SalaryEmployeeService getSalaryEmployeeService(User user) { + return (SalaryEmployeeService) ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user); + } + + private TaxAgentBiz taxAgentService = new TaxAgentBiz(); + + private SalaryFormulaService getSalaryFormulaService(User user) { + return null; +// return (SalaryFormulaService)ServiceUtil.getService(SalaryFormulaServiceImpl.class,user); + } + + private SalaryItemService getSalaryItemService(User user) { + return (SalaryItemService) ServiceUtil.getService(SalaryItemServiceImpl.class, user); + } + + private SalarySobService getSalarySobService(User user) { + return (SalarySobService) ServiceUtil.getService(SalarySobServiceImpl.class, user); + } + + private SalarySobItemGroupService getSalarySobItemGroupService(User user) { + return (SalarySobItemGroupService) ServiceUtil.getService(SalarySobItemGroupServiceImpl.class, user); + } + + @Override + public List listBySalaryAcctRecordId(Long salaryAcctRecordId) { + return getExcelAcctResultMapper().listSome(ExcelAcctResultPO.builder().salaryAcctRecordId(salaryAcctRecordId).build()); + } + + @Override + public List listBySalaryAcctEmployeeIds(Collection salaryAcctEmployeeIds) { + if (CollectionUtils.isEmpty(salaryAcctEmployeeIds)) { + return Collections.emptyList(); + } + return getExcelAcctResultMapper().listSome(ExcelAcctResultPO.builder().salaryAcctEmpIds(salaryAcctEmployeeIds).build()); + } + + @Override + public SalaryComparisonResultListDTO listPageByParam(SalaryComparisonResultQueryParam queryParam) { + return listByParam(true, queryParam); + } + + @Override + public SalaryComparisonResultListDTO listByParam(SalaryComparisonResultQueryParam queryParam) { + return listByParam(false, queryParam); + } + + /** + * 根据薪资核算人员查询薪资核算线下对比结果 + * + * @param queryParam 列表查询条件 + * @return + */ + private SalaryComparisonResultListDTO listByParam(boolean needPage, SalaryComparisonResultQueryParam queryParam) { + // 查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId()); + if (Objects.isNull(salaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); + } + // 查询薪资核算所用薪资账套 + SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); + // 查询薪资核算所用的薪资账套的员工信息字段 + List salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + // 查询薪资账套的薪资项目分类 + List salarySobItemGroupPOS = getSalarySobItemGroupService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + // 查询薪资核算所用薪资账套的薪资项目副本 + List salarySobItemPOS = getSalarySobItemService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + // 查询公式详情 + Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); + List expressFormulas = Lists.newArrayList();//todo getSalaryFormulaService(user).listExpressFormula(formulaIds); + // 转换成 + Map expressFormulaMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId, ExpressFormula::getFormula); + Map customParameters = SalaryEntityUtil.convert2Map(salarySobItemPOS, SalarySobItemPO::getSalaryItemId, salarySobItemPO -> { + if (salarySobItemPO.getFormulaId() <= 0) { + return SalaryI18nUtil.getI18nLabel(92004, "输入/导入"); + } + return expressFormulaMap.getOrDefault(salarySobItemPO.getFormulaId(), StringUtils.EMPTY); + }); + // 查询薪资项目 + Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); + List salaryItemPOS = getSalaryItemService(user).listByIds(salaryItemIds); + // 转换成聚合dto + SalarySobItemAggregateBO salarySobItemAggregateBO = new SalarySobItemAggregateBO(salarySobPO, salarySobEmpFieldPOS, + salarySobItemGroupPOS, salarySobItemPOS, expressFormulas, salaryItemPOS); + SalarySobItemAggregateDTO salarySobItemAggregateDTO = salarySobItemAggregateBO.convert2AggregateDTO(); + + // 薪资核算人员 + List salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listByResultQueryParam(queryParam); + if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { + // 构建薪资核算结果列表表头 + List weaTableColumns = SalaryAcctResultBO.buildTableColumns4ComparisonResult(salarySobItemAggregateDTO, Collections.emptySet()); + // 构建列表数据 + // 返回结果 + return new SalaryComparisonResultListDTO().setWeaTableColumns(weaTableColumns).setData(new PageInfo<>()); + } + // 薪资核算结果 + List salaryAcctResultPOS; + // 线下导入结果 + List excelAcctResultPOS; + // 如果薪资核算人员太多,利用薪资核算人员id查询薪资核算结果的效率就不太好,改为直接用薪资核算记录id查询 + if (salaryAcctEmployeePOS.size() > 1000) { + // 查询薪资核算结果 + salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(queryParam.getSalaryAcctRecordId())); + // 查询线下导入结果 + excelAcctResultPOS = listBySalaryAcctRecordId(queryParam.getSalaryAcctRecordId()); + } else { + // 薪资核算人员id + Set salaryAcctEmployeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId); + // 查询薪资核算结果 + salaryAcctResultPOS = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); + // 查询线下导入结果 + excelAcctResultPOS = listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); + } + + // 查询个税扣缴义务人 + Set taxAgentIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getTaxAgentId); + List taxAgentPOS = taxAgentService.listByIds(taxAgentIds); + // 查询人员信息 + List employeeIds = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getEmployeeId, Collectors.toList()); + List simpleEmployees = getSalaryEmployeeService(user).listByIds(employeeIds); + // 判断是否存在合并计税 + Set salaryAcctEmployeeIds4ConsolidatedTax; + if (StringUtils.isEmpty(queryParam.getConsolidatedTaxation())) { + salaryAcctEmployeeIds4ConsolidatedTax = SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId); + } else { + SalaryAcctEmployeeQueryParam accEmployeeQueryParam = SalaryAcctEmployeeQueryParam.builder() + .salaryAcctRecordId(queryParam.getSalaryAcctRecordId()) + .ids(SalaryEntityUtil.properties(salaryAcctEmployeePOS, SalaryAcctEmployeePO::getId)) + .build(); + List salaryAcctEmployeePOS4ConsolidatedTax = getSalaryAcctEmployeeService(user).listByParam4ConsolidatedTax(accEmployeeQueryParam); + salaryAcctEmployeeIds4ConsolidatedTax = SalaryEntityUtil.properties(salaryAcctEmployeePOS4ConsolidatedTax, SalaryAcctEmployeePO::getId); + } + // 系统值和线下值不一致的薪资项目id + Set includeSalaryItemIds = Sets.newHashSetWithExpectedSize(salaryItemPOS.size()); + // 转换成薪资核算线下对比结果 + List> resultMapList = SalaryAcctResultBO.buildComparisonTableData(salaryItemPOS, salarySobEmpFieldPOS, simpleEmployees, + salaryAcctEmployeePOS, salaryAcctResultPOS, excelAcctResultPOS, taxAgentPOS, customParameters, salaryAcctEmployeeIds4ConsolidatedTax, includeSalaryItemIds); + // 系统值和线下值一致的人员 + if (queryParam.isOnlyDiffEmployee()) { + // 过滤系统值和线下值一致的薪资核算人员 + resultMapList = resultMapList.stream() + .filter(map -> BooleanUtils.toBoolean(String.valueOf(map.get("different")))) + .collect(Collectors.toList()); + } + // 分页 + PageInfo> dtoPage = new PageInfo<>(); + dtoPage.setTotal(resultMapList.size()); + if (needPage) { + dtoPage.setList(PageUtil.subList(queryParam.getCurrent(), queryParam.getPageSize(), resultMapList)); + } else { + dtoPage.setList(resultMapList); + } + Set excludeSalaryItemIds = Sets.newHashSet(); + if (queryParam.isOnlyDiffSalaryItem()) { + // 过滤系统值和线下值一致的薪资项目 + excludeSalaryItemIds = salaryItemPOS.stream() + .filter(salaryItemPO -> !includeSalaryItemIds.contains(salaryItemPO.getId())) + .map(SalaryItemPO::getId) + .collect(Collectors.toSet()); + } + // 构建薪资核算结果列表表头 + List weaTableColumns = SalaryAcctResultBO.buildTableColumns4ComparisonResult(salarySobItemAggregateDTO, excludeSalaryItemIds); + // 返回结果 + return new SalaryComparisonResultListDTO().setWeaTableColumns(weaTableColumns).setData(dtoPage); + } + + @Override + public void batchSave(Collection excelAcctResultPOS) { + getExcelAcctResultMapper().batchInsert(excelAcctResultPOS); + } + + @Override + public void deleteBySalaryAcctEmployeeIds(Collection salaryAcctEmployeeIds) { + getExcelAcctResultMapper().deleteBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); + } + + @Override + public void deleteBySalaryAcctRecordIds(Collection salaryAcctRecordIds) { + getExcelAcctResultMapper().deleteBySalaryAcctRecordIds(salaryAcctRecordIds); + } +} diff --git a/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java new file mode 100644 index 000000000..8e7db8de4 --- /dev/null +++ b/src/com/engine/salary/service/impl/SalaryFormulaServiceImpl.java @@ -0,0 +1,165 @@ +package com.engine.salary.service.impl; + +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryformula.ExpressFormula; +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.exception.SalaryRunTimeException; +import com.engine.salary.mapper.formula.FormulaMapper; +import com.engine.salary.mapper.formula.FormulaVarMapper; +import com.engine.salary.service.SalaryFormulaService; +import com.engine.salary.util.db.MapperProxyFactory; +import com.engine.salary.util.valid.RuntimeTypeEnum; +import com.engine.salary.util.valid.ValidUtil; +import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.math.NumberUtils; +import org.springframework.beans.BeanUtils; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 薪酬管理公式编辑器 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +public class SalaryFormulaServiceImpl extends Service implements SalaryFormulaService { + + + private FormulaMapper getFormulaMapper() { + return MapperProxyFactory.getProxy(FormulaMapper.class); + } + + private FormulaVarMapper getFormulaVarMapper() { + return MapperProxyFactory.getProxy(FormulaVarMapper.class); + } + + + @Override + public List listExpressFormula(Collection formulaIds) { + formulaIds = formulaIds.stream().filter(id -> id != null && id > 0).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(formulaIds)) { + return Collections.emptyList(); + } + try { + // 当前租户自己新建的公式 + List expressFormulas = getFormulaMapper().listByIds(Lists.newArrayList(formulaIds)); + + return expressFormulas.stream() + .filter(Objects::nonNull) + .map(m -> { + ExpressFormula expressFormula = new ExpressFormula(); + BeanUtils.copyProperties(m, expressFormula); + List formulaVarPOS = getFormulaVarMapper().listSome(FormulaVar.builder().formulaId(m.getId()).build()); + expressFormula.setParameters(formulaVarPOS); + return expressFormula; + }) + .collect(Collectors.toList()); + } catch (Exception e) { + log.info("获取公示详情失败", e); + throw new SalaryRunTimeException("获取公示详情失败"); + } + } + + @Override + public ExpressFormula getExpressFormula(Long formulaId) { + if (formulaId == null || formulaId <= 0) { + return null; + } + try { + // 当前租户自己新建的公式 + FormulaPO formulaPO = getFormulaMapper().getById(formulaId); + ExpressFormula expressFormula = new ExpressFormula(); + BeanUtils.copyProperties(formulaPO, expressFormula); + List formulaVarPOS = getFormulaVarMapper().listSome(FormulaVar.builder().formulaId(formulaId).build()); + expressFormula.setParameters(formulaVarPOS); + + return expressFormula; + } catch (Exception e) { + log.info("获取公示详情失败", e); + throw new SalaryRunTimeException("获取公示详情失败"); + } + } + + @Override + public void save(SalaryFormulaSaveParam param) { + + FormulaPO formulaPO = new FormulaPO(); + + formulaPO.setName(param.getName()); + formulaPO.setDescription(param.getDescription()); + formulaPO.setModule(param.getModule()); + formulaPO.setUseFor(param.getUseFor()); + formulaPO.setReferenceType(param.getReferenceType()); + formulaPO.setReturnType(param.getReturnType()); + formulaPO.setValidateType(param.getValidateType()); + formulaPO.setExtendParam(param.getExtendParam()); + formulaPO.setFormula(param.getFormula()); + formulaPO.setDeleteType(NumberUtils.INTEGER_ZERO); + + Date now = new Date(); + formulaPO.setCreateTime(now); + formulaPO.setUpdateTime(now); + formulaPO.setCreator((long) user.getUID()); + getFormulaMapper().insertIgnoreNull(formulaPO); + + List parameters = param.getParameters(); + parameters.forEach(po -> { + po.setFormulaId(formulaPO.getId()); + po.setDeleteType(NumberUtils.INTEGER_ZERO); + po.setCreator((long) user.getUID()); + po.setCreateTime(now); + po.setUpdateTime(now); + getFormulaVarMapper().insertIgnoreNull(po); + }); + + } + + + @Override + public void update(SalaryFormulaSaveParam param) { + + ValidUtil.doValidator(param, RuntimeTypeEnum.UPDATE); + + Long id = param.getId(); + FormulaPO formulaPO = getFormulaMapper().getById(id); + if (formulaPO == null) { + throw new SalaryRunTimeException("公式不存在或已删除"); + } + + formulaPO.setName(param.getName()); + formulaPO.setDescription(param.getDescription()); + formulaPO.setModule(param.getModule()); + formulaPO.setUseFor(param.getUseFor()); + formulaPO.setReferenceType(param.getReferenceType()); + formulaPO.setReturnType(param.getReturnType()); + formulaPO.setValidateType(param.getValidateType()); + formulaPO.setExtendParam(param.getExtendParam()); + formulaPO.setFormula(param.getFormula()); + formulaPO.setDeleteType(NumberUtils.INTEGER_ZERO); + + Date now = new Date(); + formulaPO.setUpdateTime(now); + formulaPO.setCreator((long) user.getUID()); + getFormulaMapper().updateIgnoreNull(formulaPO); + + List parameters = param.getParameters(); + //删除公式下的变量 + getFormulaVarMapper().deleteByFormulaId(id); + parameters.forEach(po -> { + po.setCreator((long) user.getUID()); + po.setCreateTime(now); + po.setUpdateTime(now); + getFormulaVarMapper().insertIgnoreNull(po); + }); + + } + +} diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 69c6f172e..bc70fb580 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -17,7 +17,7 @@ import com.engine.salary.service.SalaryItemService; import com.engine.salary.service.SalarySobItemService; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; -import com.github.pagehelper.PageInfo; +import com.engine.salary.util.page.PageInfo; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; import weaver.hrm.User; diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index 0ba8ed754..f2227fb9b 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -6,6 +6,7 @@ import com.engine.salary.biz.SalarySobBiz; import com.engine.salary.biz.SalarySobItemBiz; import com.engine.salary.biz.SalarySobItemGroupBiz; import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO; import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; @@ -18,7 +19,6 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.service.*; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; -import com.weaver.excel.formula.api.entity.ExpressFormula; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; @@ -270,6 +270,9 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe @Override public void batchSave(Collection salarySobItemPOS) { + if (CollectionUtils.isEmpty(salarySobItemPOS)){ + return; + } salarySobItemMapper.batchInsert(salarySobItemPOS); } diff --git a/src/com/engine/salary/transmethod/TransMethod.java b/src/com/engine/salary/transmethod/TransMethod.java index f261cddaf..58058052a 100644 --- a/src/com/engine/salary/transmethod/TransMethod.java +++ b/src/com/engine/salary/transmethod/TransMethod.java @@ -1,7 +1,7 @@ package com.engine.salary.transmethod; import com.engine.salary.enums.SalaryCycleTypeEnum; -import com.engine.salary.enums.SalaryDataSourceEnum; +import com.engine.salary.enums.SalaryValueTypeEnum; import com.engine.salary.enums.datacollection.AttendQuoteFieldSourceTypeEnum; import com.engine.salary.enums.datacollection.AttendQuoteFieldTypeEnum; import com.engine.salary.enums.datacollection.AttendQuoteSourceTypeEnum; @@ -90,7 +90,7 @@ public class TransMethod { * @return */ public static String datasource(String datasource) { - return SalaryDataSourceEnum.getDefaultLabelByValue(Integer.valueOf(datasource)); + return SalaryValueTypeEnum.getDefaultLabelByValue(Integer.valueOf(datasource)); } /** diff --git a/src/com/engine/salary/util/excel/ExcelUtil.java b/src/com/engine/salary/util/excel/ExcelUtil.java index 22ce0fa4a..0565fee40 100644 --- a/src/com/engine/salary/util/excel/ExcelUtil.java +++ b/src/com/engine/salary/util/excel/ExcelUtil.java @@ -119,7 +119,7 @@ public class ExcelUtil { cell.setCellValue(SalaryDateUtil.getFormatLocalDate((Date) o)); } else { cell.setCellType(CellType.STRING); - cell.setCellValue(String.valueOf(o)); + cell.setCellValue(o == null ? "" : o.toString()); } } } @@ -184,8 +184,8 @@ public class ExcelUtil { } } - if(CollectionUtils.isNotEmpty(comments)){ - for (ExcelComment c:comments) { + if (CollectionUtils.isNotEmpty(comments)) { + for (ExcelComment c : comments) { XSSFDrawing patr = sheet.createDrawingPatriarch(); XSSFComment cellComment = patr.createCellComment(new XSSFClientAnchor(c.dx1, c.dy1, c.dx2, c.dy2, c.col1, c.row1, c.col2, c.row2)); cellComment.setString(c.content); diff --git a/src/com/engine/salary/web/SIAccountController.java b/src/com/engine/salary/web/SIAccountController.java index 6ae03e1b6..86aed3402 100644 --- a/src/com/engine/salary/web/SIAccountController.java +++ b/src/com/engine/salary/web/SIAccountController.java @@ -2,12 +2,14 @@ package com.engine.salary.web; import com.engine.common.util.ParamUtil; import com.engine.common.util.ServiceUtil; -import com.engine.salary.entity.siaccount.param.AccountParam; -import com.engine.salary.entity.siaccount.param.InsuranceAccountBatchParam; -import com.engine.salary.entity.siaccount.param.InsuranceAccountDetailParam; +import com.engine.salary.entity.siaccount.dto.InsuranceAccountTabDTO; +import com.engine.salary.entity.siaccount.param.*; import com.engine.salary.service.impl.SIAccountServiceImpl; import com.engine.salary.util.ResponseResult; +import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.parameters.RequestBody; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.web.bind.annotation.RequestParam; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; import com.engine.salary.service.SIAccountService; @@ -17,6 +19,8 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.*; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; +import java.util.Collection; +import java.util.List; import java.util.Map; /** @@ -28,11 +32,12 @@ import java.util.Map; public class SIAccountController { public SIAccountService getService(User user) { - return ServiceUtil.getService(SIAccountServiceImpl.class,user); + return ServiceUtil.getService(SIAccountServiceImpl.class, user); } /** * 获取台账列表页 + * * @param request * @param response * @return @@ -40,13 +45,14 @@ public class SIAccountController { @GET @Path("/batch/list") @Produces(MediaType.APPLICATION_JSON) - public String list(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody InsuranceAccountBatchParam insuranceAccountBatchParam) { + public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody InsuranceAccountBatchParam insuranceAccountBatchParam) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>().run(getService(user)::listPage, insuranceAccountBatchParam); } /** * 获取正常缴纳列表 + * * @param request * @param response * @param insuranceAccountDetailParam @@ -63,6 +69,7 @@ public class SIAccountController { /** * 根据姓名获取正常缴纳列表 + * * @param request * @param response * @param insuranceAccountDetailParam @@ -72,13 +79,14 @@ public class SIAccountController { @Path("/detail/common/search") @Produces(MediaType.APPLICATION_JSON) public String commonByNameList(@Context HttpServletRequest request, @Context HttpServletResponse response, - @RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) { + @RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>().run(getService(user)::listCommonPageByName, insuranceAccountDetailParam); } /** * 获取补缴缴纳列表 + * * @param request * @param response * @param insuranceAccountDetailParam @@ -88,13 +96,14 @@ public class SIAccountController { @Path("/detail/supplementary/list") @Produces(MediaType.APPLICATION_JSON) public String listSupplementaryPage(@Context HttpServletRequest request, @Context HttpServletResponse response, - @RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) { + @RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>().run(getService(user)::listSupplementaryPage, insuranceAccountDetailParam); } /** * 根据姓名获取补缴缴纳列表 + * * @param request * @param response * @param insuranceAccountDetailParam @@ -104,7 +113,7 @@ public class SIAccountController { @Path("/detail/supplementary/search") @Produces(MediaType.APPLICATION_JSON) public String supplementaryByNameList(@Context HttpServletRequest request, @Context HttpServletResponse response, - @RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) { + @RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult>().run(getService(user)::supplementaryByNameList, insuranceAccountDetailParam); } @@ -112,6 +121,7 @@ public class SIAccountController { /** * 获取核算月份备注填写表单 + * * @param request * @param response * @return @@ -127,6 +137,7 @@ public class SIAccountController { /** * 保存并进入核算 + * * @param request * @param response * @param param @@ -138,15 +149,188 @@ public class SIAccountController { public String save(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>().run(getService(user)::save, param); + return new ResponseResult().run(getService(user)::save, param); + } + + + /** + * 正常缴纳页核算 + * + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/commonAccount") + @Produces(MediaType.APPLICATION_JSON) + public String commonAccount(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody SaveCommonAccountParam param) { + User user = HrmUserVarify.getUser(request, response); + if (CollectionUtils.isNotEmpty(param.getIncludes())) { + return new ResponseResult().run(getService(user)::commonAccount, param); + } else { + AccountParam reqParam = new AccountParam(); + reqParam.setBillMonth(param.getBillMonth()); + return new ResponseResult().run(getService(user)::save, reqParam); + } + } + + + /** + * 删除月份表单 + * + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/delete") + @Produces(MediaType.APPLICATION_JSON) + public String delete(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody AccountParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult().run(getService(user)::delete, param); + } + + +// @GetMapping("commonForm") +// @ApiOperation("正常缴纳添加缴纳人员表单") +// @WeaPermission +// public WeaResult queryCommonForm() { +// return siAccountWrapper.getCommonForm(UserContext.getCurrentUser().getEmployeeId(), TenantContext.getCurrentTenantKey()); +// } + + @POST + @Path("/common/save") + @Produces(MediaType.APPLICATION_JSON) + public String save(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody SaveCommonAccountParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult().run(getService(user)::saveCommonAccount, param); + } + + +// @GetMapping("querySupplementaryForm") +// @ApiOperation("补缴添加缴纳人员表单") +// @WeaPermission +// public WeaResult querySupplementaryForm() { +// return siAccountWrapper.getSupplementaryForm(UserContext.getCurrentUser().getEmployeeId(), TenantContext.getCurrentTenantKey()); +// } + + + @POST + @Path("/supplementary/save") + @Produces(MediaType.APPLICATION_JSON) + public String saveSummplementaryAccount(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody SaveSupplementaryAccountParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult().run(getService(user)::saveSupplementaryAccount, param); + } + + + @POST + @Path("/common/delete") + @Produces(MediaType.APPLICATION_JSON) + public String deleteCommon(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody SaveCommonAccountParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult().run(getService(user)::deleteCommonAccount, param); + } + + + @POST + @Path("/supplementary/delete") + @Produces(MediaType.APPLICATION_JSON) + public String deleteSummplementaryAccount(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody List param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, String>().run(getService(user)::deleteSummplementaryAccount, param); + } + + + @POST + @Path("/file") + @Produces(MediaType.APPLICATION_JSON) + public String file(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody AccountParam accountParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult().run(getService(user)::file, accountParam); + } + +// @GET +// @Path("/changeList") +// @Produces(MediaType.APPLICATION_JSON) +// public String changeList(@Context HttpServletRequest request, @Context HttpServletResponse response, +// @RequestBody InsuranceAccountDetailParam insuranceAccountDetailParam) { +// User user = HrmUserVarify.getUser(request, response); +// return new ResponseResult>().run(getService(user)::changeList, insuranceAccountDetailParam); +// } + + +// @GetMapping("overView") +// @ApiOperation("总览") +// @WeaPermission +// public WeaResult> overView(@RequestParam(value = "billMonth") String billMonth) { +// return siAccountWrapper.overView(billMonth, UserContext.getCurrentUser().getEmployeeId(), TenantContext.getCurrentTenantKey()); +// } +// + + @GET + @Path("/tabList") + @Produces(MediaType.APPLICATION_JSON) + public String tabList(@Context HttpServletRequest request, @Context HttpServletResponse response, + @QueryParam("billMonth") String billMonth) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult().run(getService(user)::tabList, billMonth); } +// @GetMapping("inspectList") +// @ApiOperation("核算失败列表") +// @WeaPermission +// public WeaResult getInspectTable(@RequestParam(value = "billMonth") String billMonth) { +// return siAccountWrapper.getInspectTable(billMonth, UserContext.getCurrentUser().getEmployeeId(), TenantContext.getCurrentTenantKey()); +// } +// +// @PostMapping("inspectAccount") +// @ApiOperation("核算核算异常") +// @WeaPermission +// public WeaResult accountInspect(@RequestBody InspectAccountParam param) { +// return siAccountWrapper.accountInspect(param.getIds(), param.getBillMonth(), UserContext.getCurrentUser().getEmployeeId(), TenantContext.getCurrentTenantKey()); +// } +// + @POST + @Path("/ignore") + @Produces(MediaType.APPLICATION_JSON) + public String ignore(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody Collection ids) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, String>().run(getService(user)::ignore, ids); + } + @POST + @Path("/unconfirmed") + @Produces(MediaType.APPLICATION_JSON) + public String unconfirmed(@Context HttpServletRequest request, @Context HttpServletResponse response, + @RequestBody Collection ids) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, String>().run(getService(user)::unconfirmed, ids); + } + @GET + @Path("/getDisplayFlag") + @Produces(MediaType.APPLICATION_JSON) + public String buttonCheck(@Context HttpServletRequest request, @Context HttpServletResponse response, + @QueryParam("billMonth") String billMonth) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>().run(getService(user)::buttonCheck, billMonth); + } + } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 441889855..b66621e18 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -8,13 +8,12 @@ import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum; +import com.engine.salary.service.SalaryAcctExcelService; +import com.engine.salary.service.impl.SalaryAcctExcelServiceImpl; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.page.PageInfo; -import com.engine.salary.wrapper.SalaryAcctEmployeeWrapper; -import com.engine.salary.wrapper.SalaryAcctExcelWrapper; -import com.engine.salary.wrapper.SalaryAcctRecordWrapper; -import com.engine.salary.wrapper.SalaryAcctResultWrapper; +import com.engine.salary.wrapper.*; import io.swagger.v3.oas.annotations.parameters.RequestBody; import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -62,11 +61,17 @@ public class SalaryAcctController { } // private SalaryAcctCheckResultWrapper salaryAcctCheckResultWrapper; -// private SalaryComparisonResultWrapper salaryComparisonResultWrapper; + private SalaryComparisonResultWrapper getSalaryComparisonResultWrapper(User user) { + return (SalaryComparisonResultWrapper) ServiceUtil.getService(SalaryComparisonResultWrapper.class, user); + } + private SalaryAcctExcelWrapper getSalaryAcctExcelWrapper(User user) { return (SalaryAcctExcelWrapper) ServiceUtil.getService(SalaryAcctExcelWrapper.class, user); } -// private SalaryAcctExcelService salaryAcctExcelService; + + private SalaryAcctExcelService getSalaryAcctExcelService(User user) { + return (SalaryAcctExcelService) ServiceUtil.getService(SalaryAcctExcelServiceImpl.class, user); + } // private SalaryBatchService salaryBatchService; // // /**********************************薪资核算记录相关 start*********************************/ @@ -305,9 +310,9 @@ public class SalaryAcctController { } - /**********************************薪资核算人员相关 end*********************************/ + // **********************************薪资核算人员相关 end*********************************/ - /**********************************薪资核算结果 start*********************************/ + // **********************************薪资核算结果 start*********************************/ //薪资核算结果列表 @POST @@ -368,7 +373,8 @@ public class SalaryAcctController { @Path("/acctresult/export") @Produces(MediaType.APPLICATION_OCTET_STREAM) public Response exportSalaryAcctResult(@Context HttpServletRequest request, @Context HttpServletResponse response) { - SalaryAcctResultQueryParam param = null; + SalaryAcctResultQueryParam param = new SalaryAcctResultQueryParam(); + setSalaryAcctResultQueryParam(request,param); User user = HrmUserVarify.getUser(request, response); XSSFWorkbook workbook = getSalaryAcctExcelWrapper(user).exportSalaryAcctResult(param); String time = LocalDate.now().toString(); @@ -387,40 +393,53 @@ public class SalaryAcctController { } -// @GetMapping("/acctresult/importField") + // @GetMapping("/acctresult/importField") // @ApiOperation("导入核算结果前生成导入模板时可选的薪资项目") // @WeaPermission // public WeaResult getImportField(@RequestParam(value = "salaryAcctRecordId") Long salaryAcctRecordId) { -// SalaryAcctImportFieldDTO importField = salaryAcctExcelService.getImportField(salaryAcctRecordId, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey()); +// SalaryAcctImportFieldDTO importField = getSalaryAcctExcelService(user).getImportField(salaryAcctRecordId, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey()); // return WeaResult.success(importField); // } // -// @PostMapping("/acctresult/importtemplate/export") -// @ApiOperation("导出导入模板") -// @WeaPermission -// public WeaResult> exportImportTemplate(@RequestBody @Validated SalaryAcctImportTemplateParam param) { -// SimpleEmployee simpleEmployee = UserContext.getCurrentUser(); -// String tenantKey = TenantContext.getCurrentTenantKey(); -// String eteamsId = TenantRpcContext.getEteamsId(); -// Map map = salaryAcctExcelWrapper.exportImportTemplate(param, simpleEmployee, tenantKey, eteamsId); -// return WeaResult.success(map); -// } -// -// @GetMapping("/acctresult/importParams") -// @ApiOperation("获取导入核算结果的导入参数") -// @WeaPermission -// public WeaResult getAcctResultImportParams() { -// return WeaResult.success(salaryBatchService.buildImportParam("importSalaryAcctResult", -// "importSalaryAcctResult", -// "薪资核算结果", -// null, -// null)); -// } -// -// /**********************************薪资核算结果 end*********************************/ -// -// /**********************************检验异常 start*********************************/ -// + + //导出导入模板 + @GET + @Path("/acctresult/importtemplate/export") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportImportTemplate(@Context HttpServletRequest request, @Context HttpServletResponse response) { + SalaryAcctImportTemplateParam param = new SalaryAcctImportTemplateParam(); + setSalaryAcctResultQueryParam(request,param); + + String importType = request.getParameter("importType"); + if (StringUtils.isNotBlank(importType)) { + param.setImportType(importType); + } + String salaryItemIds = request.getParameter("salaryItemIds"); + if (StringUtils.isNotBlank(salaryItemIds)) { + param.setSalaryItemIds(Arrays.stream(salaryItemIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); + } + + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getSalaryAcctExcelWrapper(user).exportImportTemplate(param); + String time = LocalDate.now().toString(); + String fileName = "薪资核算导入模板" + time; + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } + + // **********************************薪资核算结果 end*********************************/ + + // **********************************检验异常 start*********************************/ + // @GetMapping("/checkresult/getCount") // @ApiOperation(("获取校验结果(异常)总数")) // @WeaPermission @@ -491,18 +510,20 @@ public class SalaryAcctController { // return WeaResult.success(map); // } // -// /**********************************检验异常 end*********************************/ -// -// /**********************************线下对比 start*********************************/ -// -// @PostMapping("/comparisonresult/list") -// @ApiOperation("线上线下对比结果列表") -// @WeaPermission -// public WeaResult>> listComparisonResult(@RequestBody @Validated SalaryComparisonResultQueryParam queryParam) { -// WeaTable> weaTable = salaryComparisonResultWrapper.listPage(queryParam, TenantContext.getCurrentTenantKey()); -// return WeaResult.success(weaTable); -// } -// + // **********************************检验异常 end*********************************/ + + // **********************************线下对比 start*********************************/ + + //线上线下对比结果列表 + @POST + @Path("/comparisonresult/list") + @Produces(MediaType.APPLICATION_JSON) + public String listComparisonResult(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryComparisonResultQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>().run(getSalaryComparisonResultWrapper(user)::listPage, param); + } + + // @GetMapping("/comparisonresult/importParams") // @ApiOperation("获取导入核算结果的导入参数") // @WeaPermission @@ -513,7 +534,79 @@ public class SalaryAcctController { // null, // null)); // } -// + + //导出线上线下对比结果 + @GET + @Path("/comparisonresult/export") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportComparisonResult(@Context HttpServletRequest request, @Context HttpServletResponse response) { + SalaryComparisonResultQueryParam param = new SalaryComparisonResultQueryParam(); + + setSalaryAcctResultQueryParam(request, param); + String onlyDiffEmployee = request.getParameter("onlyDiffEmployee"); + if(StringUtils.isNotBlank(onlyDiffEmployee)){ + param.setOnlyDiffEmployee(Boolean.parseBoolean(onlyDiffEmployee)); + } + String onlyDiffSalaryItem = request.getParameter("onlyDiffSalaryItem"); + if(StringUtils.isNotBlank(onlyDiffSalaryItem)){ + param.setOnlyDiffSalaryItem(Boolean.parseBoolean(onlyDiffSalaryItem)); + } + + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getSalaryAcctExcelWrapper(user).exportComparisonResult(param); + String time = LocalDate.now().toString(); + String fileName = "线下对比结果" + time; + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } + + private void setSalaryAcctResultQueryParam(HttpServletRequest request, SalaryAcctResultQueryParam param) { + String salaryAcctRecordId = request.getParameter("salaryAcctRecordId"); + if (StringUtils.isNotBlank(salaryAcctRecordId)) { + param.setSalaryAcctRecordId(Long.parseLong(salaryAcctRecordId)); + } + String employeeName = request.getParameter("employeeName"); + if (StringUtils.isNotBlank(employeeName)) { + param.setEmployeeName(employeeName); + } + String taxAgentId = request.getParameter("taxAgentId"); + if (StringUtils.isNotBlank(taxAgentId)) { + param.setTaxAgentId(Long.parseLong(taxAgentId)); + } + String departmentIds = request.getParameter("departmentIds"); + if (StringUtils.isNotBlank(departmentIds)) { + param.setDepartmentIds(Arrays.stream(departmentIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); + } + String positionIds = request.getParameter("positionIds"); + if (StringUtils.isNotBlank(positionIds)) { + param.setPositionIds(Arrays.stream(positionIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); + } + String status = request.getParameter("status"); + if (StringUtils.isNotBlank(status)) { + param.setStatus(SalaryEmployeeStatusEnum.parseByValue(Integer.parseInt(status))); + } + //fixme 日期 + request.getParameter("dismissDate"); + String consolidatedTaxation = request.getParameter("consolidatedTaxation"); + if (StringUtils.isNotBlank(consolidatedTaxation)) { + param.setConsolidatedTaxation(consolidatedTaxation); + } + String ids = request.getParameter("ids"); + if (StringUtils.isNotBlank(ids)) { + param.setIds(Arrays.stream(ids.split(",")).map(Long::valueOf).collect(Collectors.toList())); + } + } + + // @PostMapping("/comparisonresult/export") // @ApiOperation("导出线上线下对比结果") // @WeaPermission diff --git a/src/com/engine/salary/web/SalaryFormulaController.java b/src/com/engine/salary/web/SalaryFormulaController.java new file mode 100644 index 000000000..6c87d4765 --- /dev/null +++ b/src/com/engine/salary/web/SalaryFormulaController.java @@ -0,0 +1,65 @@ +package com.engine.salary.web; + +import com.engine.common.util.ServiceUtil; +import com.engine.salary.entity.salaryformula.dto.ExpressFormulaDTO; +import com.engine.salary.entity.salaryformula.param.SalaryFormulaFieldQueryParam; +import com.engine.salary.entity.salaryformula.param.SalaryFormulaSaveParam; +import com.engine.salary.entity.salaryformula.po.FormulaVar; +import com.engine.salary.util.ResponseResult; +import com.engine.salary.wrapper.SalaryFormulaWrapper; +import io.swagger.v3.oas.annotations.parameters.RequestBody; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.*; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import java.util.List; +import java.util.Map; + +public class SalaryFormulaController { + + + private SalaryFormulaWrapper getSalaryFormulaWrapper(User user) { + return (SalaryFormulaWrapper) ServiceUtil.getService(SalaryFormulaWrapper.class, user); + } + + //变量项 + @POST + @Path("/search/group") + @Produces(MediaType.APPLICATION_JSON) + public String fieldGroupList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody Map param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, List>>().run(getSalaryFormulaWrapper(user)::fieldGroupList, param); + } + + //变量字段列表 + @POST + @Path("/search/field") + @Produces(MediaType.APPLICATION_JSON) + public String fieldList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryFormulaFieldQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>().run(getSalaryFormulaWrapper(user)::fieldList, param); + } + + //获取公式详情 + @GET + @Path("/detail") + @Produces(MediaType.APPLICATION_JSON) + public String detail(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "formulaId") Long formulaId) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult().run(getSalaryFormulaWrapper(user)::detail, formulaId); + } + + @POST + @Path("/save") + @Produces(MediaType.APPLICATION_JSON) + public String save(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryFormulaSaveParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult().run(getSalaryFormulaWrapper(user)::save, param); + } + + +} diff --git a/src/com/engine/salary/web/SalaryItemController.java b/src/com/engine/salary/web/SalaryItemController.java index c91b63e56..1bb6eb69a 100644 --- a/src/com/engine/salary/web/SalaryItemController.java +++ b/src/com/engine/salary/web/SalaryItemController.java @@ -10,6 +10,7 @@ import com.engine.salary.entity.salaryitem.param.SysSalaryItemSearchParam; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.util.ResponseResult; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.SalaryItemWrapper; import com.engine.salary.wrapper.SysSalaryItemWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; @@ -58,7 +59,7 @@ public class SalaryItemController { @Produces(MediaType.APPLICATION_JSON) public String listSalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemSearchParam searchParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>().run(getSalaryItemWrapper(user)::listPage, searchParam); + return new ResponseResult>().run(getSalaryItemWrapper(user)::listPageV2, searchParam); } @@ -75,7 +76,7 @@ public class SalaryItemController { @Produces(MediaType.APPLICATION_JSON) public String listCanDeleteSalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemSearchParam searchParam) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult>().run(getSalaryItemWrapper(user)::listPage4CanDelete, searchParam); + return new ResponseResult>().run(getSalaryItemWrapper(user)::listPage4CanDelete, searchParam); } /** diff --git a/src/com/engine/salary/wrapper/SalaryAcctExcelWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctExcelWrapper.java index 98dd6d9ad..f7fd95d7b 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctExcelWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctExcelWrapper.java @@ -5,6 +5,7 @@ import com.engine.core.impl.Service; import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctImportTemplateParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; +import com.engine.salary.entity.salaryacct.param.SalaryComparisonResultQueryParam; import com.engine.salary.service.SalaryAcctExcelService; import com.engine.salary.service.impl.SalaryAcctExcelServiceImpl; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -68,9 +69,9 @@ public class SalaryAcctExcelWrapper extends Service { * @param queryParam * @return */ -// public Map exportComparisonResult(SalaryComparisonResultQueryParam queryParam) { -// return getSalaryAcctExcelService(user).exportComparisonResult(excelExportParam, queryParam, simpleEmployee, tenantKey, eteamsId); -// } + public XSSFWorkbook exportComparisonResult(SalaryComparisonResultQueryParam queryParam) { + return getSalaryAcctExcelService(user).exportComparisonResult( queryParam); + } /** * 薪资核算线下对比结果导入模板导出 diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index b64471b20..8ef64cf69 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -19,9 +19,6 @@ import com.engine.salary.service.impl.*; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.valid.ValidUtil; -import com.weaver.util.threadPool.ThreadPoolUtil; -import com.weaver.util.threadPool.constant.ModulePoolEnum; -import com.weaver.util.threadPool.entity.LocalRunnable; import weaver.hrm.User; import java.util.HashMap; @@ -187,13 +184,13 @@ public class SalaryAcctResultWrapper extends Service { // .setMessage(StringUtils.EMPTY); // salaryAcctProgressService.initProgress("" + calculateParam.getSalaryAcctRecordId(), initProgress, simpleEmployee.getEmployeeId(), tenantKey); // 异步执行薪资核算 - LocalRunnable localRunnable = new LocalRunnable() { - @Override - public void execute() { +// LocalRunnable localRunnable = new LocalRunnable() { +// @Override +// public void execute() { getSalaryAcctResultService(user).calculate(calculateParam, simpleEmployee); - } - }; - ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "salaryAcctCalculate", localRunnable); +// } +// }; +// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "salaryAcctCalculate", localRunnable); } /** diff --git a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java index 6af114a88..9e2e3462b 100644 --- a/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryArchiveItemWrapper.java @@ -22,11 +22,9 @@ import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; -import org.springframework.stereotype.Component; import weaver.hrm.User; import java.util.*; -import java.util.concurrent.ExecutorService; import java.util.stream.Collectors; /** @@ -37,16 +35,13 @@ import java.util.stream.Collectors; * @author qiantao * @version 1.0 **/ -@Component + public class SalaryArchiveItemWrapper extends Service { private SalaryArchiveItemService getSalaryArchiveItemService(User user) { return (SalaryArchiveItemService) ServiceUtil.getService(SalaryArchiveItemServiceImpl.class, user); } - private ExecutorService taskExecutor; - - /** * 构建薪资项目基础信息表单 * diff --git a/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java b/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java new file mode 100644 index 000000000..86af72c62 --- /dev/null +++ b/src/com/engine/salary/wrapper/SalaryComparisonResultWrapper.java @@ -0,0 +1,59 @@ +package com.engine.salary.wrapper; + +import com.cloudstore.eccom.pc.table.WeaTable; +import com.cloudstore.eccom.result.WeaResultMsg; +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryacct.dto.SalaryComparisonResultListDTO; +import com.engine.salary.entity.salaryacct.param.SalaryComparisonResultQueryParam; +import com.engine.salary.service.SalaryAcctRecordService; +import com.engine.salary.service.SalaryComparisonResultService; +import com.engine.salary.service.SalarySobEmpFieldService; +import com.engine.salary.service.SalarySobItemService; + +import java.util.HashMap; +import java.util.Map; + +/** + * 薪资核算线下对比结果 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalaryComparisonResultWrapper extends Service { + + + private SalaryComparisonResultService salaryComparisonResultService; + + private SalaryAcctRecordService salaryAcctRecordService; + + private SalarySobEmpFieldService salarySobEmpFieldService; + + private SalarySobItemService salarySobItemService; + + /** + * 薪资核算线下对比列表 + * + * @param queryParam 列表查询条件 + * @return + */ + public Map listPage(SalaryComparisonResultQueryParam queryParam) { + // 查询薪资核算线下对比列表 + SalaryComparisonResultListDTO salaryComparisonResultListDTO = salaryComparisonResultService.listPageByParam(queryParam); + + WeaTable table = new WeaTable(); + table.setColumns(salaryComparisonResultListDTO.getWeaTableColumns()); + + + WeaResultMsg result = new WeaResultMsg(false); + result.putAll(table.makeDataResult()); + result.success(); + + Map datas = new HashMap<>(); + datas.put("pageInfo", salaryComparisonResultListDTO.getData()); + datas.put("dataKey",result.getResultMap()); + + return datas; + } +} diff --git a/src/com/engine/salary/wrapper/SalaryFormulaWrapper.java b/src/com/engine/salary/wrapper/SalaryFormulaWrapper.java new file mode 100644 index 000000000..49131016d --- /dev/null +++ b/src/com/engine/salary/wrapper/SalaryFormulaWrapper.java @@ -0,0 +1,74 @@ +package com.engine.salary.wrapper; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryformula.ExpressFormula; +import com.engine.salary.entity.salaryformula.param.SalaryFormulaSaveParam; +import com.engine.salary.entity.salaryformula.po.FormulaVar; +import com.engine.salary.entity.salaryformula.bo.SalaryFormulaBO; +import com.engine.salary.entity.salaryformula.dto.ExpressFormulaDTO; +import com.engine.salary.entity.salaryformula.param.SalaryFormulaFieldQueryParam; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.service.RemoteExcelService; +import com.engine.salary.service.SalaryFormulaService; +import com.engine.salary.service.impl.RemoteExcelServiceImpl; +import com.engine.salary.service.impl.SalaryFormulaServiceImpl; +import org.apache.commons.collections4.CollectionUtils; +import weaver.hrm.User; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/** + * 薪资项目 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalaryFormulaWrapper extends Service { + + private RemoteExcelService getRemoteExcelService(User user) { + return (RemoteExcelService) ServiceUtil.getService(RemoteExcelServiceImpl.class, user); + } + + private SalaryFormulaService getSalaryFormulaService(User user) { + return (SalaryFormulaService) ServiceUtil.getService(SalaryFormulaServiceImpl.class, user); + } + + + /** + * 公式字段列表 + * + * @param param 查询参数 + * @return + */ + public List fieldList(SalaryFormulaFieldQueryParam param) { + return getRemoteExcelService(user).fieldList(param.getSourceId(), param.getExtendParam()); + } + + + /** + * 公式字段分类 + * + * @param param 查询参数 + * @return + */ + public List> fieldGroupList(Map param) { + return getRemoteExcelService(user).fieldGroupList(param); + } + + public ExpressFormulaDTO detail(Long formulaId) { + List expressFormulas = getSalaryFormulaService(user).listExpressFormula(Collections.singleton(formulaId)); + if (CollectionUtils.isEmpty(expressFormulas)) { + throw new SalaryRunTimeException("获取公式详情失败"); + } + return SalaryFormulaBO.convert2DTO(expressFormulas).get(0); + } + + public void save(SalaryFormulaSaveParam salaryFormulaSaveParam) { + getSalaryFormulaService(user).save(salaryFormulaSaveParam); + } +} diff --git a/src/com/engine/salary/wrapper/SalaryItemWrapper.java b/src/com/engine/salary/wrapper/SalaryItemWrapper.java index c38750fec..177bce13c 100644 --- a/src/com/engine/salary/wrapper/SalaryItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryItemWrapper.java @@ -1,10 +1,9 @@ package com.engine.salary.wrapper; -import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.component.WeaFormOption; +import com.engine.salary.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; import com.engine.salary.entity.salaryitem.bo.SysSalaryItemBO; import com.engine.salary.entity.salaryitem.dto.SalaryItemFormDTO; @@ -20,11 +19,13 @@ import com.engine.salary.service.SalaryFormulaService; import com.engine.salary.service.SalaryItemService; import com.engine.salary.service.SalarySobItemService; import com.engine.salary.service.SysSalaryItemService; +import com.engine.salary.service.impl.SalaryFormulaServiceImpl; import com.engine.salary.service.impl.SalaryItemServiceImpl; import com.engine.salary.service.impl.SalarySobItemServiceImpl; import com.engine.salary.service.impl.SysSalaryItemServiceImpl; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.valid.RuntimeTypeEnum; import com.engine.salary.util.valid.ValidUtil; import org.apache.commons.collections4.CollectionUtils; @@ -51,7 +52,10 @@ public class SalaryItemWrapper extends Service { return (SysSalaryItemService) ServiceUtil.getService(SysSalaryItemServiceImpl.class, user); } - private SalaryFormulaService salaryFormulaService; + private SalaryFormulaService getSalaryFormulaService(User user) { + return (SalaryFormulaService) ServiceUtil.getService(SalaryFormulaServiceImpl.class, user); + } + private SalarySobItemService getSalarySobItemService(User user) { return (SalarySobItemService) ServiceUtil.getService(SalarySobItemServiceImpl.class, user); @@ -63,88 +67,52 @@ public class SalaryItemWrapper extends Service { * @param searchParam 查询参数 * @return */ - public Map listPage(SalaryItemSearchParam searchParam) { + public PageInfo listPageV2(SalaryItemSearchParam searchParam) { - SalaryWeaTable table = new SalaryWeaTable(user, SalaryItemListDTO.class); + // 1、查询薪资项目 + PageInfo page = getSalaryItemService(user).listPageByParam(searchParam); + List salaryItemList = page.getList(); - String fields = " t.id" + - " , t.name" + - " , t.code" + - " , t.system_type" + - " , t.sys_salary_item_id" + - " , t.use_default as useDefault" + - " , t.use_in_employee_salary as useInEmployeeSalary" + - " , t.rounding_mode as roundingMode" + - " , t.pattern" + - " , t.value_type as valueType" + - " , t.formula_id" + - " , t.description" + - " , t.can_edit" + - " , t.data_type as dataType" + - " , t.can_delete"; + //最终返回的分页对象 + PageInfo salaryItemListDTOPage = new PageInfo<>(SalaryItemListDTO.class); + salaryItemListDTOPage.setPageSize(page.getPageSize()); + salaryItemListDTOPage.setPageNum(page.getPageNum()); + salaryItemListDTOPage.setTotal(page.getTotal()); - String from = "from hrsa_salary_item t"; + // 被薪资账套引用的薪资项目 + List salarySobItems = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(salaryItemList)) { + //2、填充公式内容 + Set formulaIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getFormulaId); + List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); + // 转换成薪资项目列表dto + List salaryItemListDTOS = SalaryItemBO.convert2ListDTO(salaryItemList, expressFormulas); + //3、被引用的薪资项目不能删除 + Set salaryItemIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getId); + salarySobItems = getSalarySobItemService(user).listBySalaryItemIds(salaryItemIds); + if (CollectionUtils.isNotEmpty(salarySobItems)) { + Set salaryItemIdsUseBySob = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId); + salaryItemListDTOS.forEach(dto->{ + if (salaryItemIdsUseBySob.contains(dto.getId())){ + dto.setCanDelete(false); + } + }); + } + salaryItemListDTOPage.setList(salaryItemListDTOS); + } - table.setBackfields(fields); - table.setSqlform(from); - table.setSqlwhere(SalaryItemSearchParam.makeSqlWhere(searchParam)); - table.setSqlorderby("t.id DESC"); - table.setSqlprimarykey("t.id"); - table.setSqlisdistinct("false"); - - WeaResultMsg result = new WeaResultMsg(false); - result.putAll(table.makeDataResult()); - result.success(); - return result.getResultMap(); - - -// // 1、查询薪资项目 -// PageInfo page = getSalaryItemService(user).listPageByParam(searchParam); -// List salaryItemList = page.getList(); -// -// //最终返回的分页对象 -// PageInfo salaryItemListDTOPage = new PageInfo<>(); -// -// if (CollectionUtils.isNotEmpty(salaryItemList)) { -// //2、填充公式内容 -// Set formulaIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getFormulaId); -// // todo 查询公式 -// List expressFormulas = salaryFormulaService.listExpressFormula(formulaIds); -// // 转换成薪资项目列表dto -// salaryItemListDTOPage.setList(SalaryItemBO.convert2ListDTO(salaryItemList, expressFormulas)); -// -// //3、被引用的薪资项目不能删除 -// // 查询被账套引用的薪资项目 -// Set salaryItemIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getId); -// List salarySobItemPOS = salarySobItemService.listBySalaryItemIds(salaryItemIds); -// } - -// // 构建前端所需的数据格式 -// WeaTable weaTable = SalaryFormatUtil.getInstance().buildTable(SalaryItemListDTO.class, dtoPage); -// // 被薪资账套引用的薪资项目不可删除 -// if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(salarySobItems)) { -// Set salaryItemIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId); -// for (int i = 0; i < page.getRecords().size(); i++) { -// SalaryItemPO salaryItemPO = page.getRecords().get(i); -// if (salaryItemIds.contains(salaryItemPO.getId())) { -// Permission permission = weaTable.getOperatesPermission().get(i).get(1); -// permission.setVisible(false); -// permission.setDisabled(true); -// } -// } -// } + return salaryItemListDTOPage; } - /** * 可以删除的薪资项目列表 * * @param searchParam 查询人员 * @return */ - public Map listPage4CanDelete(SalaryItemSearchParam searchParam) { + public PageInfo listPage4CanDelete(SalaryItemSearchParam searchParam) { // 查询所有薪资账套中的薪资项目副本 List salarySobItemPOS = getSalarySobItemService(user).list(); // 被引用的薪资项目id @@ -152,8 +120,7 @@ public class SalaryItemWrapper extends Service { // 排除被引用的薪资项目(被引用的薪资项目不可以删除) searchParam.setExcludeIds(salaryItemIds); // 转换成前端所需的数据格式 - Map map = listPage(searchParam); - return map; + return listPageV2(searchParam); } @@ -170,24 +137,11 @@ public class SalaryItemWrapper extends Service { } // 查询公式详情 Set formulaIds = SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getFormulaId); -// todo List expressFormulas = salaryFormulaService.listExpressFormula(formulaIds); + List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); // 转换成薪资项目列表dto - return SalaryItemBO.convert2ListDTO(salaryItemPOS, null); + return SalaryItemBO.convert2ListDTO(salaryItemPOS, expressFormulas); } -// /** -// * 薪资项目列表的高级搜索 -// * -// * @return -// */ -// public WeaSearchCondition getSearchCondition() { -// WeaSearchCondition searchCondition = SalaryFormatUtil.getInstance() -// .buildCondition(SalaryItemSearchConditionDTO.class, new SalaryItemSearchConditionDTO(), "salaryItemCondition"); -// // "其他条件"不要 -// searchCondition.getGroups().remove(1); -// return searchCondition; -// } - /** * 薪资项目详情 * @@ -206,17 +160,16 @@ public class SalaryItemWrapper extends Service { if (Objects.isNull(salaryItemPO) && Objects.isNull(sysSalaryItemPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98299, "参数错误,薪资项目不存在或已被删除")); } - //todo 公式详情 -// ExpressFormula expressFormula; + ExpressFormula expressFormula; // // 转换成薪资项目详情dto if (Objects.isNull(salaryItemPO)) { salaryItemFormDTO = SysSalaryItemBO.convert2FormDTO(sysSalaryItemPO); -// expressFormula = salaryFormulaService.getExpressFormula(sysSalaryItemPO.getFormulaId()); + expressFormula = getSalaryFormulaService(user).getExpressFormula(sysSalaryItemPO.getFormulaId()); } else { salaryItemFormDTO = SalaryItemBO.convert2FormDTO(salaryItemPO); -// expressFormula = salaryFormulaService.getExpressFormula(salaryItemPO.getFormulaId()); + expressFormula = getSalaryFormulaService(user).getExpressFormula(salaryItemPO.getFormulaId()); } -// salaryItemFormDTO.setFormulaContent(Optional.ofNullable(expressFormula).map(ExpressFormula::getFormula).orElse("")); + salaryItemFormDTO.setFormulaContent(Optional.ofNullable(expressFormula).map(ExpressFormula::getFormula).orElse("")); } return salaryItemFormDTO; } diff --git a/src/com/engine/salary/wrapper/SalarySobCheckRuleWrapper.java b/src/com/engine/salary/wrapper/SalarySobCheckRuleWrapper.java index c14c8e758..d607c8b37 100644 --- a/src/com/engine/salary/wrapper/SalarySobCheckRuleWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobCheckRuleWrapper.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.entity.salaryformula.ExpressFormula; import com.engine.salary.entity.salarysob.bo.SalarySobCheckRuleBO; import com.engine.salary.entity.salarysob.dto.SalarySobCheckRuleFormDTO; import com.engine.salary.entity.salarysob.dto.SalarySobCheckRuleListDTO; @@ -15,7 +16,6 @@ import com.engine.salary.service.SalarySobCheckRuleService; import com.engine.salary.service.impl.SalarySobCheckRuleServiceImpl; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.page.PageInfo; -import com.weaver.excel.formula.api.entity.ExpressFormula; import weaver.hrm.User; import java.util.ArrayList; diff --git a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java index 2f0671d21..6316a2aaa 100644 --- a/src/com/engine/salary/wrapper/SalarySobItemWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobItemWrapper.java @@ -34,7 +34,7 @@ import java.util.*; * @author qiantao * @version 1.0 **/ -@Component + public class SalarySobItemWrapper extends Service { private SalarySobItemService getSalarySobItemService(User user) { diff --git a/src/com/engine/salary/wrapper/SysSalaryItemWrapper.java b/src/com/engine/salary/wrapper/SysSalaryItemWrapper.java index 595442d01..8657ef8ca 100644 --- a/src/com/engine/salary/wrapper/SysSalaryItemWrapper.java +++ b/src/com/engine/salary/wrapper/SysSalaryItemWrapper.java @@ -32,7 +32,7 @@ import java.util.stream.Collectors; * @author qiantao * @version 1.0 **/ -@Component + public class SysSalaryItemWrapper extends Service { diff --git a/src/com/engine/workflow/cmd/requestForm/remind/GetEmailRemindUrlCmd.java b/src/com/engine/workflow/cmd/requestForm/remind/GetEmailRemindUrlCmd.java new file mode 100644 index 000000000..d339f52ba --- /dev/null +++ b/src/com/engine/workflow/cmd/requestForm/remind/GetEmailRemindUrlCmd.java @@ -0,0 +1,160 @@ +package com.engine.workflow.cmd.requestForm.remind; + +import com.engine.common.biz.AbstractCommonCommand; +import com.engine.common.entity.BizLogContext; +import com.engine.core.interceptor.CommandContext; +import com.google.common.base.Strings; +import com.google.common.collect.Maps; +import org.apache.commons.lang.StringUtils; +import weaver.conn.RecordSet; +import weaver.general.BaseBean; +import weaver.general.GCONST; +import weaver.general.Util; +import weaver.hrm.User; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 邮件提醒候取链接 + * Created by wcc on 2019/7/2. + */ +public class GetEmailRemindUrlCmd extends AbstractCommonCommand> { + + protected String requestName; + protected String requestId; + + public GetEmailRemindUrlCmd(User user, Map params, String requestId, String requestName) throws UnsupportedEncodingException { + this.user = user; + this.params = params; + this.requestId = requestId; + this.requestName = requestName; + } + + @Override + public Map execute(CommandContext commandContext) { + BaseBean baseBean = new BaseBean(); + + RecordSet rs = new RecordSet(); + if (Strings.isNullOrEmpty(requestName)) { + rs.executeQuery("select requestNameNew from workflow_requestbase where requestid = ?", requestId); + rs.next(); + requestName = rs.getString(1); + } + String emailLink = "(" + requestName + ")"; + +// 从数据库中取得OAaddress数据作为host + rs.executeQuery("select oaaddress from systemset"); + rs.next(); + String host = Util.null2String(rs.getString("oaaddress")); + baseBean.writeLog("qc1602252---static_host=" + host); + +// String domain = (String) Util_DataCache.getObjVal("qc1602252"+this.user.getUID()); +// baseBean.writeLog("qc1602252---key="+"qc1602252"+this.user.getUID()); +// baseBean.writeLog("qc1602252---domain="+domain); +// if(StringUtils.isNotBlank(domain)){ +// host = domain; +// }else{ +// //找不到人与域名映射的情况,获取requestId映射的域名 +// String requestIdDomain = (String) Util_DataCache.getObjVal("domain"+requestId); +// baseBean.writeLog("domain---key="+"domain"+requestId); +// baseBean.writeLog("requestIdDomain="+requestIdDomain); +// if(StringUtils.isNotBlank(requestIdDomain)){ +// host = requestIdDomain; +// } +// } + + + //为适配移动端,将流程创建人的分部与域名绑定 + if (StringUtils.isNotBlank(requestId) && !"-1".equals(requestId)) { + baseBean.writeLog("qc1602252---requestId=" + requestId); + baseBean.writeLog("qc1602252---config=" + SubCompanyName + "--" + Domain + "--" + XXFWSubCompanyName + "--" + XXFWDomain); + baseBean.writeLog("qc1602252---requestId=" + requestId); + rs.executeQuery("select creater from workflow_requestbase where requestid = ?", requestId); + if (rs.next()) { + String creater = rs.getString("creater"); + baseBean.writeLog("qc1602252---requestId creater= " + requestId + "---" + creater); + rs.executeQuery("select subcompanyid1 from hrmresource where id = ?", creater); + if (rs.next()) { + String subcompanyid1 = rs.getString("subcompanyid1"); + baseBean.writeLog("qc1602252---requestId creater subcompanyid1=" + requestId + "---" + creater + "---" + subcompanyid1); + Map map = new HashMap<>(); + map.put("subcompanyid1", subcompanyid1); + Map subcompany = getSubcompany(map); + String targetUrl = subcompany.get("targetUrl"); + host = targetUrl; + baseBean.writeLog("qc1602252---" + "---requestId creater lastsubcompanyid1=" + requestId + "---" + creater + "---" + subcompany.get("subcompanyid1")); + baseBean.writeLog("qc1602252---requestId creater subcompanyname=" + requestId + "---" + creater + "---" + subcompany.get("subcompanyname")); + baseBean.writeLog("qc1602252---requestId creater targetUrl=" + requestId + "---" + creater + "---" + subcompany.get("targetUrl")); + } + } + } + + if (!Strings.isNullOrEmpty(host)) { + String loginPage = "/login/LoginMail.jsp"; + String gotoPage = "/common/chatResource/view.html?resourcetype=0&resourceid=" + requestId; + if (GCONST.getMailReminderSet()) { + loginPage = Strings.isNullOrEmpty(GCONST.getMailLoginPage()) ? loginPage : GCONST.getMailLoginPage(); + gotoPage = Strings.isNullOrEmpty(GCONST.getMailGotoPage()) ? gotoPage : GCONST.getMailGotoPage(); + } + try { + gotoPage = URLEncoder.encode(gotoPage, "utf-8"); + //需要编码两次 + gotoPage = URLEncoder.encode(gotoPage, "utf-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + String url = String.format("%s?gopage=%s&target=2", loginPage, gotoPage); + emailLink = "(" + requestName + ")"; + } + baseBean.writeLog("qc1602252---requestId=" + requestId); + baseBean.writeLog("qc1602252---emailLink=" + emailLink); + Map result = new HashMap<>(); + result.put("url", emailLink); + return result; + } + + @Override + public BizLogContext getLogContext() { + return null; + } + + BaseBean baseBean = new BaseBean(); + String SubCompanyName = Util.null2String(new String(Util.null2String(baseBean.getPropValue("SZSM_subcompany_domain_config", "SubCompanyName")).getBytes("ISO-8859-1"), "utf-8")).trim(); + String Domain = Util.null2String(new String(Util.null2String(baseBean.getPropValue("SZSM_subcompany_domain_config", "Domain")).getBytes("ISO-8859-1"), "utf-8")).trim(); + String XXFWSubCompanyName = Util.null2String(new String(Util.null2String(baseBean.getPropValue("SZSM_subcompany_domain_config", "XXFWSubCompanyName")).getBytes("ISO-8859-1"), "utf-8")).trim(); + String XXFWDomain = Util.null2String(new String(Util.null2String(baseBean.getPropValue("SZSM_subcompany_domain_config", "XXFWDomain")).getBytes("ISO-8859-1"), "utf-8")).trim(); + + private List SubCompanyNameList = Arrays.stream(SubCompanyName.split(",")).collect(Collectors.toList()); + private List XXFWSubCompanyNameList = Arrays.stream(XXFWSubCompanyName.split(",")).collect(Collectors.toList()); + + private Map getSubcompany(Map map) { + + Map hashMap = Maps.newHashMap(); + RecordSet rs = new RecordSet(); + rs.executeQuery("select SUPSUBCOMID,SUBCOMPANYNAME from hrmsubcompany where id = ? ", map.get("subcompanyid1")); + if (rs.next()) { + String subcompanyid1 = rs.getString("SUPSUBCOMID"); + String subcompanyname = rs.getString("SUBCOMPANYNAME"); + hashMap.put("subcompanyid1", subcompanyid1); + hashMap.put("subcompanyname", subcompanyname); + if (SubCompanyNameList.contains(subcompanyname)) { + hashMap.put("targetUrl", Domain); + return hashMap; + } else if (XXFWSubCompanyNameList.contains(subcompanyname)) { + hashMap.put("targetUrl", XXFWDomain); + return hashMap; + } else { + if (!map.get("subcompanyid1").equals(hashMap.get("subcompanyid1"))) { + return getSubcompany(hashMap); + } else { + return hashMap; + } + } + } + return hashMap; + } +} diff --git a/src/com/engine/workflow/web/RequestFormAction.java b/src/com/engine/workflow/web/RequestFormAction.java new file mode 100644 index 000000000..9dc6f0eb0 --- /dev/null +++ b/src/com/engine/workflow/web/RequestFormAction.java @@ -0,0 +1,1167 @@ +package com.engine.workflow.web; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.SerializerFeature; +import com.api.browser.bean.SearchConditionOption; +import com.engine.common.util.ParamUtil; +import com.engine.common.util.ServiceUtil; +import com.engine.workflow.biz.freeNode.FreeNodeAsyncSubmitBiz; +import com.engine.workflow.biz.requestForm.DetailTemplateDownloadBiz; +import com.engine.workflow.biz.requestForm.RequestFormBiz; +import com.engine.workflow.biz.requestForm.RequestRemindBiz; +import com.engine.workflow.biz.requestList.RequestListBiz; +import com.engine.workflow.biz.requestSubmit.RequestBatchForwardBiz; +import com.engine.workflow.biz.requestSubmit.RequestBatchSubmitThread; +import com.engine.workflow.biz.requestSubmit.RequestSubmitThread; +import com.engine.workflow.constant.RemindTypeEnum; +import com.engine.workflow.constant.requestForm.RequestExecuteType; +import com.engine.workflow.entity.requestForm.RequestOperationResultBean; +import com.engine.workflow.service.*; +import com.engine.workflow.service.impl.*; +import com.google.common.base.Strings; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import weaver.filter.WeaverRequest; +import weaver.general.Util; +import weaver.hrm.HrmUserVarify; +import weaver.hrm.User; +import weaver.workflow.request.WFAutoApproveThreadPoolUtil; +import weaver.workflow.workflow.WorkflowConfigComInfo; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Context; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by jhy on 2018/2/23. + */ +public class RequestFormAction { + + private RequestFormService getLoadFormService(HttpServletRequest request, HttpServletResponse response) { + User user = RequestFormBiz.getFormUser(request, response, true); + return (RequestFormService) ServiceUtil.getService(RequestFormServiceImpl.class, user); + } + + private RequestFormServiceImpl getFormService(HttpServletRequest request, HttpServletResponse response) { + User user = RequestFormBiz.getFormUser(request, response, false); + return (RequestFormServiceImpl) ServiceUtil.getService(RequestFormServiceImpl.class, user); + } + + private RequestLogService getLogService(HttpServletRequest request, HttpServletResponse response) { + User user = RequestFormBiz.getFormUser(request, response, false); + return (RequestLogService) ServiceUtil.getService(RequestLogServiceImpl.class, user); + } + + private SignInputService getSignInputService(HttpServletRequest request, HttpServletResponse response) { + User user = RequestFormBiz.getFormUser(request, response, false); + return (SignInputService) ServiceUtil.getService(SignInputServiceImpl.class, user); + } + + + private WorkflowTransferSetService getWfTransferSetService(HttpServletRequest request, HttpServletResponse response) { + User user = RequestFormBiz.getFormUser(request, response, false); + return (WorkflowTransferSetService) ServiceUtil.getService(WorkflowTransferSetServiceImpl.class, user); + } + + private HtmlToPdfService getHtmlToPdfService(HttpServletRequest request, HttpServletResponse response){ + User user = RequestFormBiz.getFormUser(request, response, false); + return (HtmlToPdfService)ServiceUtil.getService(HtmlToPdfServiceImpl.class, user); + } + + /** + * 流程测试选择人员后判断用户是否有创建权限 + **/ + @POST + @Path("/judgeCreateRight") + @Produces(MediaType.TEXT_PLAIN) + public String judgeCreateRight(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getLoadFormService(request, response).judgeCreateRight(request); + return JSON.toJSONString(apidatas); + } + + /** + * 表单加载基础信息接口 + **/ + @POST + @Path("/loadForm") + @Produces(MediaType.TEXT_PLAIN) + public String loadForm(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// response.setCharacterEncoding("utf-8"); + long start = System.currentTimeMillis(); + String result = getLoadFormService(request, response).loadForm(request); + long duration = System.currentTimeMillis() - start; + if (result.endsWith("}")) + result = result.substring(0, result.length() - 1) + ",\"durationTime\":" + duration + "}"; + return result; + } + + /** + * 模板预览接口 + **/ + @POST + @Path("/loadPreView") + @Produces(MediaType.TEXT_PLAIN) + public String loadPreView(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// response.setCharacterEncoding("utf-8"); + String result = getFormService(request, response).loadPreView(ParamUtil.request2Map(request)); + return result; + } + + /** + * 加载明细数据接口 + **/ + @POST + @Path("/detailData") + @Produces(MediaType.TEXT_PLAIN) + public String detailData(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).loadDetailData(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect); + } + + /** 保存明细分页信息 **/ + @POST + @Path("/saveDetailPaging") + @Produces(MediaType.TEXT_PLAIN) + public String saveDetailPaging(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).saveDetailPaging(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/updateReqInfo") + @Produces(MediaType.TEXT_PLAIN) + public String updateReqInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + RequestFormServiceImpl formService = getFormService(request, response); + Map apidatas = formService.updateReqInfo(request); + FreeNodeAsyncSubmitBiz.execute(request,formService); + return JSON.toJSONString(apidatas); + } + + /** + * 右键菜单接口 + **/ + @POST + @Path("/rightMenu") + @Produces(MediaType.TEXT_PLAIN) + public String rightMenu(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getRightMenu(request,ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 流程状态接口 + **/ + @POST + @Path("/wfstatusnew") + @Produces(MediaType.TEXT_PLAIN) + public String getStatusData(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map reqParams = ParamUtil.request2Map(request); + reqParams.put("request",request); + Map apidatas = getFormService(request, response).getStatusData(reqParams); + return JSONObject.toJSONString(apidatas); + } + + /** + * 流程状态计数接口 + **/ + @POST + @Path("/wfstatuscount") + @Produces(MediaType.TEXT_PLAIN) + public String getStatusCount(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map reqParams = ParamUtil.request2Map(request); + reqParams.put("request",request); + Map apidatas = getFormService(request, response).getStatusCount(reqParams); + return JSONObject.toJSONString(apidatas); + } + + /** + * 相关资源接口 + **/ + @GET + @Path("/resources") + @Produces(MediaType.TEXT_PLAIN) + public String getResourcesKey(@Context HttpServletRequest request, @Context HttpServletResponse response) throws Exception { + Map apidatas = getFormService(request, response).getResourcesKey(ParamUtil.request2Map(request)); + return JSONObject.toJSONString(apidatas); + } + + /** + * 表单修改日志接口 + **/ + @POST + @Path("/getModifyLog") + @Produces(MediaType.TEXT_PLAIN) + public String getModifyLog(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// response.setCharacterEncoding("utf-8"); + Map apidatas = getFormService(request, response).getModifyLog(request); + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/requestBatchSubmit") + @Produces(MediaType.TEXT_PLAIN) + public String requestBatchSubmit(@Context HttpServletRequest request, @Context HttpServletResponse response) { + RequestFormServiceImpl formService = getFormService(request, response); + Map apidatas = new HashMap (); + User user = formService.getUser(); + + WorkflowConfigComInfo configComInfo = new WorkflowConfigComInfo(); + boolean defaultAsyncSubmit = "1".equals(Util.null2String(configComInfo.getValue("request_batchsubmit_async"))); + //需要异步提交 + boolean needBatchSubmit = "1".equals(request.getParameter("needBatchSubmit")); + if (needBatchSubmit && defaultAsyncSubmit) { + WeaverRequest weaverRequest = new WeaverRequest(request); + weaverRequest.setSession(request.getSession()); + RequestBatchSubmitThread batchSubmitThread = new RequestBatchSubmitThread(weaverRequest, formService); + //更新流程状态, 从“待办”更新为“处理中”, 处理中的流程在待办、已办中均不显示(可通过查询流程进行查询到) + batchSubmitThread.executeSubmitBefore(); + //异步执行提交,在提交成功后, 将流程状态改为“已处理”,如发生异常,则更新为“待办”, 并发送错误提交消息到消息中心 + WFAutoApproveThreadPoolUtil.getFixedThreadPool().execute(batchSubmitThread); + } else { + apidatas = formService.requestBatchSubmit(request); + } + + String submitReqIds = Util.null2String(request.getParameter("multiSubIds")); + if(submitReqIds.endsWith(",")) + submitReqIds = submitReqIds.substring(0,submitReqIds.length()-1); + apidatas.put("submitReqIds",submitReqIds);//返回本次提交请求的requestid,用于reload走微搜时数据处理 + + return JSON.toJSONString(apidatas); + } + + /** + * loglist + **/ + @POST + @Path("/getRequestLogBaseInfo") + @Produces(MediaType.TEXT_PLAIN) + public String getRequestLogBaseInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + return JSON.toJSONString(getLogService(request, response).getRequestLogBaseInfo(ParamUtil.request2Map(request))); + } + + @POST + @Path("/getRequestLogList") + @Produces(MediaType.TEXT_PLAIN) + public String getRequestLogList(@Context HttpServletRequest request, @Context HttpServletResponse response) { + return JSON.toJSONString(getLogService(request, response).getRequestLogList(request, ParamUtil.request2Map(request))); + } + + @POST + @Path("/updateUserTxStatus") + @Produces(MediaType.TEXT_PLAIN) + public String updateSignTXStatus(@Context HttpServletRequest request, @Context HttpServletResponse response) { + return JSON.toJSONString(getLogService(request, response).updateUserTxStatus(ParamUtil.request2Map(request))); + } + + @POST + @Path("/updateRequestLogPageSize") + @Produces(MediaType.TEXT_PLAIN) + public String updateRequestLogPageSize(@Context HttpServletRequest request, @Context HttpServletResponse response) { + return JSON.toJSONString(getLogService(request, response).updateRequestLogPageSize(ParamUtil.request2Map(request))); + } + + @GET + @Path("/addDocReadTag") + @Produces(MediaType.TEXT_PLAIN) + public String addDocReadTag(@Context HttpServletRequest request, @Context HttpServletResponse response) { + return JSON.toJSONString(getLogService(request, response).addDocReadLog(ParamUtil.request2Map(request))); + } + + /** + * 签字意见输入框 + **/ + @POST + @Path("/signInput") + @Produces(MediaType.TEXT_PLAIN) + public String signInput(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map reqParams = ParamUtil.request2Map(request); + reqParams.put("request",request); + return JSON.toJSONString(getSignInputService(request, response).getSignInputInfo(reqParams)); + } + + /** + * 判断退回方式 + **/ + @POST + @Path("/judgeRejectWay") + @Produces(MediaType.TEXT_PLAIN) + public String judgeRejectWay(@Context HttpServletRequest request, @Context HttpServletResponse response) { + RequestFormServiceImpl service = getFormService(request, response); + Map apidatas = service.judgeRejectWay(request); + int rejecttype = Util.getIntValue(apidatas.get("rejecttype")+""); + if(rejecttype == 2){ //选择退回节点时,直接算出弹窗所需信息 + Map params = (Map)apidatas.get("params"); + Map chooseInfo = service.getRejectOption(params); + List> rejectNodeList = (List>)chooseInfo.get("rejectNodeList"); + List> remindNodeList = (List>)chooseInfo.get("remindNodeList"); + List submitDirectNodeOptions = (List)chooseInfo.get("submitDirectNodeOptions"); + //当选择退回信息只有一个退回节点可选时,不弹窗直接退回 + if(rejectNodeList != null && remindNodeList !=null && submitDirectNodeOptions != null && rejectNodeList.size() == 1 && remindNodeList.size() == 0 && submitDirectNodeOptions.size() == 0){ + String nodeKey = Util.null2String(rejectNodeList.get(0).get("key")); + int isrejectremind = Util.getIntValue(Util.null2String(params.get("isrejectremind"))); + String directRejectNodeid = nodeKey.substring(0, nodeKey.indexOf("_")); + String directRemindNodeid = isrejectremind == 1 ? directRejectNodeid : ""; + apidatas.put("rejecttype", 1); + params.put("RejectNodes", directRemindNodeid); + params.put("RejectToNodeid", directRejectNodeid); + }else{ + apidatas.put("chooseInfo", chooseInfo); + } + } + return JSON.toJSONString(apidatas); + } + + /** + * 流程提交 + **/ + @POST + @Path("/requestOperation") + @Produces(MediaType.TEXT_PLAIN) + public String requestOperation(@Context HttpServletRequest request, @Context HttpServletResponse response) { + saveDomainCache(request, response); + + Map apidatas = null; + + RequestFormServiceImpl formService = getFormService(request, response); + String openByDefaultBrowser = Util.null2String(request.getParameter("openByDefaultBrowser")); + boolean isThrowThread = RequestSubmitThread.isThrowThread(request); + if (isThrowThread) { + WeaverRequest weaverRequest = new WeaverRequest(request); + weaverRequest.setSession(request.getSession()); + RequestSubmitThread submitThread = new RequestSubmitThread(formService, weaverRequest); + submitThread.initSubmitLog(); + WFAutoApproveThreadPoolUtil.getFixedThreadPool().execute(submitThread); + apidatas = new HashMap(); + RequestOperationResultBean resultBean = new RequestOperationResultBean(); + resultBean.setType(RequestExecuteType.ASYNC_SUBMIT); + apidatas.put("data", resultBean); + } else { + apidatas = formService.requestSubmit(request); + } + if("1".equals(openByDefaultBrowser)){//钉钉、企业微信pc客户端以默认浏览器打开流程,提交时保存客户端和浏览器交互数据 + User user = RequestFormBiz.getFormUser(request, response, true); + String requestid = Util.null2String(request.getParameter("requestid")); + if(isThrowThread || requestid.equals(new RequestListBiz().removeDoingReqId(requestid,user))){//抛线程处理流程,或者提交流程后状态变更,做记录保存 + RequestListBiz.putRecord(user,requestid); + } + RequestOperationResultBean resultBean = (RequestOperationResultBean) apidatas.get("data"); + if(resultBean != null){ + Map resultInfo = resultBean.getResultInfo(); + resultInfo.put("openByDefaultBrowser",openByDefaultBrowser);//下一个节点还是自己,防止参数丢失 + } + } + return JSON.toJSONString(apidatas); + } + + /** + * 缓存用户域名 qc1602252 + * @param request + * @param response + */ + private void saveDomainCache(HttpServletRequest request, HttpServletResponse response) { +// BaseBean baseBean = new BaseBean(); +// try{ +// User cuser = HrmUserVarify.getUser(request, response); +// String scheme = request.getScheme(); +// String serverName= request.getServerName(); +// String domain = scheme +"://"+ serverName ; +// int port= request.getServerPort(); +// if(port != 80){ +// domain = domain +":" + port; +// } +// Util_DataCache.setObjVal("qc1602252"+cuser.getUID() , domain); +// +// //解决自动审批时,当前处理人获取不到,故将requestid与域名映射 +// String requestid = request.getParameter("requestid"); +// if(StringUtils.isNotBlank(requestid)&&!"-1".equals(requestid)){ +// Util_DataCache.setObjVal("domain"+requestid , domain); +// } +// +// }catch (Exception e){ +// baseBean.writeLog("qc1602252---saveDomainCache---error"); +// baseBean.writeLog(e); +// } + } + + + + + /** + * 转发、转办、意见征询等提交 + **/ + @POST + @Path("/remarkOperate") + @Produces(MediaType.TEXT_PLAIN) + public String remarkOperate(@Context HttpServletRequest request, @Context HttpServletResponse response) { + saveDomainCache(request, response); + Map apidatas = getFormService(request, response).forwardSubmit(request); + String openByDefaultBrowser = Util.null2String(request.getParameter("openByDefaultBrowser")); + int forwardflag = Util.getIntValue(request.getParameter("forwardflag")); + if((forwardflag == 2 || forwardflag == 3 || forwardflag == 5) && "1".equals(openByDefaultBrowser)){ + User user = RequestFormBiz.getFormUser(request, response, true); + String requestid = Util.null2String(request.getParameter("requestid")); + RequestListBiz.putRecord(user,requestid); + } + return JSON.toJSONString(apidatas); + } + + /** + * 流程撤回 + **/ + @POST + @Path("/requestWithdraw") + @Produces(MediaType.TEXT_PLAIN) + public String requestWithdraw(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).requestWithdraw(request); + return JSON.toJSONString(apidatas); + } + + /** + * 批注回复提交 + **/ + @POST + @Path("/remarkOperation") + @Produces(MediaType.TEXT_PLAIN) + public String remarkOperation(@Context HttpServletRequest request, @Context HttpServletResponse response) { + saveDomainCache(request, response); + Map apidatas = getFormService(request, response).remarkSubmit(request); + String openByDefaultBrowser = Util.null2String(request.getParameter("openByDefaultBrowser")); + if("1".equals(openByDefaultBrowser)){//钉钉、企业微信pc客户端以默认浏览器打开流程,提交时保存客户端和浏览器交互数据 + User user = RequestFormBiz.getFormUser(request, response, true); + String requestid = Util.null2String(request.getParameter("requestid")); + RequestListBiz.putRecord(user,requestid); + } + return JSON.toJSONString(apidatas); + } + + /** + * 功能管理相关 + **/ + @POST + @Path("/functionLink") + @Produces(MediaType.TEXT_PLAIN) + public String functionLink(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).functionManage(request, response); + String openByDefaultBrowser = Util.null2String(request.getParameter("openByDefaultBrowser")); + String flag = Util.null2String(request.getParameter("flag")); + if(("ov".equals(flag) || "rb".equals(flag) || "cancel".equals(flag) || "stop".equals(flag) || "restart".equals(flag)) && "1".equals(openByDefaultBrowser)){ + User user = RequestFormBiz.getFormUser(request, response, true); + String requestid = Util.null2String(request.getParameter("requestid")); + RequestListBiz.putRecord(user,requestid); + } + return JSON.toJSONString(apidatas); + } + + /** + * 触发子流程 + **/ + @POST + @Path("/triggerSubWf") + @Produces(MediaType.TEXT_PLAIN) + public String triggerSubWf(@Context HttpServletRequest request, @Context HttpServletResponse response) { + saveDomainCache(request, response); + Map apidatas = getFormService(request, response).triggerSubWf(request); + return JSON.toJSONString(apidatas); + } + + /** + * 附件上传 + **/ + @POST + @Path("/docUpload") + @Produces(MediaType.TEXT_PLAIN) + public String docUpload(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).uploadFile(request, response); + return JSONObject.toJSONString(apidatas); + } + + /** + * 获取附件字段信息 + **/ + @POST + @Path("/getUploadFileInfo") + @Produces(MediaType.TEXT_PLAIN) + public String getUploadFileInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getFileFieldObj(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 创建流程编号 + **/ + @POST + @Path("/createWfCode") + @Produces(MediaType.TEXT_PLAIN) + public String createWfCode(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).createWfCode(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 获取流程编号字段值 + **/ + @POST + @Path("/loadWfCodeFieldValueInfo") + @Produces(MediaType.TEXT_PLAIN) + public String loadWfCodeFieldValueInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getWfCodeFieldValue(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 添加常用批示语 + **/ + @POST + @Path("/addWfPhrase") + @Produces(MediaType.TEXT_PLAIN) + public String addWfPhrase(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getSignInputService(request, response).addWfPhrase(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 获取常用批示语 + **/ + @POST + @Path("/getPhrases") + @Produces(MediaType.TEXT_PLAIN) + public String getPhrases(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getSignInputService(request, response).getPhrases(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 流程导入 + **/ + @POST + @Path("/requestImport") + @Produces(MediaType.TEXT_PLAIN) + public String requestImport(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).requestImport(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 流程明细导入 + **/ + @POST + @Path("/doImportDetail") + @Produces(MediaType.TEXT_PLAIN) + public String requestDetailImport(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).requestDetailImport(request); + return JSON.toJSONString(apidatas); + } + + /** + * 明细导入触发字段联动 + **/ + @POST + @Path("/riggerFieldLinkageCfg") + @Produces(MediaType.TEXT_PLAIN) + public String importFieldLinkageCfg(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).importFieldLinkageCfg(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 明细导入导出excel模板可包含只读字段 + **/ + @POST + @Path("/exportFieldSet") + @Produces(MediaType.TEXT_PLAIN) + public String exportFieldSet(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).exportFieldSet(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 明细导入执行公式 + **/ + @POST + @Path("/riggerFormulaCfg") + @Produces(MediaType.TEXT_PLAIN) + public String importFormulaCfg(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).importFormulaCfg(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 异常处理选人 + **/ + @POST + @Path("/chooseExceptionOperator") + @Produces(MediaType.TEXT_PLAIN) + public String chooseExceptionOperator(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).chooseExceptionOperator(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 超时设置 + **/ + @POST + @Path("/overTimeSetting") + @Produces(MediaType.TEXT_PLAIN) + public String overTimeSetting(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).overTimeSetting(request); + return JSON.toJSONString(apidatas); + } + + /** + * 打印日志基础信息 + **/ + @POST + @Path("/getPrintLogBase") + @Produces(MediaType.TEXT_PLAIN) + public String getPrintLogBase(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getPrintLogBase(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 打印日志数据信息 + **/ + @POST + @Path("/getPrintLogData") + @Produces(MediaType.TEXT_PLAIN) + public String getPrintLogData(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getPrintLogData(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 自由流转读取数据 + **/ + @POST + @Path("/freeFlowRead") + @Produces(MediaType.TEXT_PLAIN) + public String freeFlowRead(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).freeFlowRead(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 自由流转保存数据 + **/ + @POST + @Path("/freeFlowSave") + @Produces(MediaType.TEXT_PLAIN) + public String freeFlowSave(@Context HttpServletRequest request, @Context HttpServletResponse response) { + saveDomainCache(request, response); + Map apidatas = getFormService(request, response).freeFlowSave(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 流转设定按钮-返回数据 + * add by jym + **/ + @POST + @Path("/getTransferCondition") + @Produces(MediaType.TEXT_PLAIN) + public String getTransferCondition(@Context HttpServletRequest request,@Context HttpServletResponse response){ + Map apidatas = new HashMap(); + apidatas = getWfTransferSetService(request, response).getTransferCondition(ParamUtil.request2Map(request)); + return JSONObject.toJSONString(apidatas); + } + + /** + * 流程编辑锁定相关操作 + **/ + @POST + @Path("/editLockOper") + @Produces(MediaType.TEXT_PLAIN) + public String editLockOper(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).editLockOper(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 获取节点打印模板信息 + **/ + @POST + @Path("/loadPrintTemplates") + @Produces(MediaType.TEXT_PLAIN) + public String loadPrintTemplates(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = null; + try { + User user = HrmUserVarify.getUser(request, response); + /*E9打印登录超时报错(QC:527424)*/ + if(user == null) { + response.sendRedirect("/wui/index.html"); + return null; + } + apidatas = getFormService(request, response).loadPrintTemplates(ParamUtil.request2Map(request)); + } catch (IOException e) { + e.printStackTrace(); + } + return JSON.toJSONString(apidatas); + } + + /** + * 运算表达式 + **/ + @POST + @Path("/doEvalExpression") + @Produces(MediaType.TEXT_PLAIN) + public String doEvalExpression(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).doEvalExpression(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 生成打印日志 + **/ + @POST + @Path("/generatePrintLog") + @Produces(MediaType.TEXT_PLAIN) + public String generatePrintLog(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + /*E9打印登录超时报错(QC:527424)*/ + if(user == null) { + try { + response.sendRedirect("/wui/index.html"); + return null; + } catch (IOException e) { + e.printStackTrace(); + } + } + Map apidatas = getFormService(request, response).generatePrintLog(request); + return JSON.toJSONString(apidatas); + } + + /** + * 流程中当前操作者已转发信息 + * @param request + * @param response + * @return + */ + @GET + @Path("/getForwardDatas") + @Produces(MediaType.TEXT_PLAIN) + public String getForwardDatas(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getForwardDatas(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 转发收回 + * @param request + * @param response + * @return + */ + @POST + @Path("/doBack") + @Produces(MediaType.TEXT_PLAIN) + public String doBack(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).doBack(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * form tab 扩展 + * @param request + * @param response + * @return + */ + @POST + @Path("/getFormTab") + @Produces("text/plain;charset=utf-8") + public String loadFormTab(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getFormTab(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + @GET + @Path("/dowloadTemplate") + @Produces(MediaType.APPLICATION_OCTET_STREAM)//返回方式为流 + public Response exportExcel(@Context HttpServletRequest request, @Context HttpServletResponse response) { + ByteArrayOutputStream os = null; + InputStream input = null; + try { + User user = RequestFormBiz.getFormUser(request, response, false); + DetailTemplateDownloadBiz dtdBiz = new DetailTemplateDownloadBiz(user); + + os = new ByteArrayOutputStream(); + + HSSFWorkbook wb =dtdBiz.templateDownload(request, response); + wb.write(os); + input = new ByteArrayInputStream(os.toByteArray()); + + String filename = dtdBiz.getFilename(); + //filename = java.net.URLEncoder.encode(filename, "UTF-8"); + filename = StringUtils.replace(filename, "/", ""); + filename = StringUtils.replace(filename, "%2F", ""); + filename = StringUtils.replace(filename, "+", "%20"); + filename = Util.formatMultiLang(filename, "7"); + + return Response + .ok(input) + .header("Content-disposition", "attachment;filename=" + filename) + .header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try{ + input.close(); + os.close(); + }catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + + + @POST + @Path("/saveMobileSignAnnex") + @Produces("text/plain;charset=utf-8") + public String saveMobileSignAnnex(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getSignInputService(request, response).saveMobileSignAnnexCmd(request); + return JSON.toJSONString(apidatas); + } + + /** + * 获取指定下一节点流转condition + * @param request + * @param response + * @return + */ + @POST + @Path("/getSelectNextFlowCondition") + @Produces("text/plain;charset=utf-8") + public String getSelectNextFlowCondition(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getSelectNextFlowCondition(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 获取指定下一节点流转节点信息 + * @param request + * @param response + * @return + */ + @POST + @Path("/getSelectFlowNodeInfo") + @Produces("text/plain;charset=utf-8") + public String getSelectFlowNodeInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getSelectNextFlowNodes(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 获取流程默认提醒方式及当前节点操作者 + * @param request + * @param response + * @return + */ + @GET + @Path("/getRemindData") + @Produces("text/plain;charset=utf-8") + public String getRemindData(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getRemindData(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 提醒 + * @param request + * @param response + * @return + */ + @POST + @Path("/doRemind") + @Produces("text/plain;charset=utf-8") + public String requestRemind(@Context HttpServletRequest request, @Context HttpServletResponse response) { + saveDomainCache(request, response); + Map apidatas = new HashMap<>(); + + User user = RequestFormBiz.getFormUser(request, response, false); + RequestRemindService requestRemindService = (RequestRemindService) ServiceUtil.getService(RequestRemindServiceImpl.class, user); + + Map params = ParamUtil.request2Map(request); + String remindType = Util.null2String(params.get("remindTypes")); //提醒方式 + int requestId = Util.getIntValue(Util.null2String(params.get("requestId"))); + if(Strings.isNullOrEmpty(remindType)){ + return JSON.toJSONString(apidatas); + } + String[] remindTypeArr = remindType.split(","); + for(String t : remindTypeArr){ + if(RemindTypeEnum.SMS.getCode().equals(t)){ + apidatas = requestRemindService.remindBySMS(params); + } + if(RemindTypeEnum.EMAIL.getCode().equals(t)){ + apidatas = requestRemindService.remindByEmail(params); + } + if(RemindTypeEnum.WECHAT.getCode().equals(t)){ + apidatas = requestRemindService.remindByWeChat(params); + } + } + + RequestRemindBiz.updateRemindTypes("",requestId); + return JSON.toJSONString(apidatas); + } + + /** 判断当前流程状态 */ + @POST + @Path("/judgeRequestIsValid") + @Produces("text/plain;charset=utf-8") + public String judgeRequestIsValid(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).judgeRequestIsValid(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** 意见征询收回 */ + @POST + @Path("/doTakeBack") + @Produces("text/plain;charset=utf-8") + public String doTakeBack(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).takeBack(ParamUtil.request2Map(request)); + String openByDefaultBrowser = Util.null2String(request.getParameter("openByDefaultBrowser")); + if("1".equals(openByDefaultBrowser)){ + User user = RequestFormBiz.getFormUser(request, response, true); + String requestid = Util.null2String(request.getParameter("requestid")); + RequestListBiz.putRecord(user,requestid); + } + return JSON.toJSONString(apidatas); + } + + /** + * 获取自定义菜单设置 + **/ + @POST + @Path("/getCustomOperation") + @Produces("text/plain;charset=utf-8") + public String getCustomOperation(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).getCustomOperation(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 指定自定义动作 + **/ + @GET + @Path("/runCustomOperationAction") + @Produces("text/plain;charset=utf-8") + public String runCustomOperationAction(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).runCustomOperationAction(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 结束意见征询 + **/ + @POST + @Path("/doTakEnd") + @Produces("text/plain;charset=utf-8") + public String doTakEnd(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getFormService(request, response).doTakEnd(request, ParamUtil.request2Map(request)); + String openByDefaultBrowser = Util.null2String(request.getParameter("openByDefaultBrowser")); + if("1".equals(openByDefaultBrowser)){ + User user = RequestFormBiz.getFormUser(request, response, true); + String requestid = Util.null2String(request.getParameter("requestid")); + RequestListBiz.putRecord(user,requestid); + } + return JSON.toJSONString(apidatas); + } + + + /** + * 获取意见所有接收人 + **/ + @GET + @Path("/getLogAllReceiveUser") + @Produces("text/plain;charset=utf-8") + public String getLogAllReceiveUser(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map apidatas = getLogService(request, response).getLogAllReceiveUser(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + + /** + * 获取节点意见设置 + **/ + @GET + @Path("/getNodeSignSet") + @Produces("text/plain;charset=utf-8") + public String getNodeSignSet(@Context HttpServletRequest request, @Context HttpServletResponse response) { + Map reqParams = ParamUtil.request2Map(request); + reqParams.put("request", request); + + Map apidatas = getSignInputService(request, response).getNodeSignSet(reqParams); + return JSON.toJSONString(apidatas); + } + + /** + * 后台html转pdf + **/ + @GET + @Path("/getHtmlToPdf") + @Produces("text/plain;charset=utf-8") + public String gethtmltopdf(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// response.setCharacterEncoding("utf-8"); + Map params = ParamUtil.request2Map(request); + Map apidatas = getHtmlToPdfService(request, response).getFormDatas(params); + return JSON.toJSONString(apidatas); + } + + /** + * 获取明细数据的keyid + **/ + @POST + @Path("/detailDataKeyId") + @Produces("text/plain;charset=utf-8") + public String getDetailDataKeyId(@Context HttpServletRequest request, @Context HttpServletResponse response) { +// response.setCharacterEncoding("utf-8"); + Map params = ParamUtil.request2Map(request); + Map apidatas = getFormService(request, response).getDetailDataKeyId(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + //获取套红预览地址 + @POST + @Path("/getThPreviewUrl") + @Produces("text/plain;charset=utf-8") + public String getThPreviewUrl(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).getThPreviewUrl(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + //获取套红模板地址 + @POST + @Path("/getThMouldList") + @Produces("text/plain;charset=utf-8") + public String getThModuleList(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).getThMouldList(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * Detail Export Settings + * 明细表导出设置。 + */ + @GET + @Path("/getDetailExpSet") + @Produces("text/plain;charset=utf-8") + public String getDetailExpSet(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).getDetailExpSet(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/saveDetailExpSet") + @Produces("text/plain;charset=utf-8") + public String saveDetailExpSet(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).saveDetailExpSet(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 批量转发 + * @param request + * @param response + * @return + */ + @POST + @Path("/batchForward") + @Produces("text/plain;charset=utf-8") + public String batchForward(@Context HttpServletRequest request, @Context HttpServletResponse response){ + saveDomainCache(request, response); + User user = RequestFormBiz.getFormUser(request, response, false); + RequestBatchForwardBiz batchForwardBiz = new RequestBatchForwardBiz(); + WeaverRequest weaverRequest = new WeaverRequest(request); + weaverRequest.setSession(request.getSession()); + Map apidatas = batchForwardBiz.executeForward(weaverRequest,user); + return JSON.toJSONString(apidatas); + } + + /** + * 获取自动批准后的下一节点 + * @param request + * @param response + * @return + */ + @POST + @Path("/getNextNodeContent") + @Produces("text/plain;charset=utf-8") + public String getNextNodeContent(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).getNextNodeContent(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + + /** + * 流程删除验证 + * @param request + * @param response + * @return + */ + @POST + @Path("/delRequestVerify") + @Produces("text/plain;charset=utf-8") + public String delRequestVerify(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).delRequestVerify(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + + + /** + * 获取自由流程新建流程选择表单按钮 + * @param request + * @param response + * @return + */ + @GET + @Path("/getFreeNodeBrowserItem") + @Produces("text/plain;charset=utf-8") + public String getFreeNodeBrowserItem(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).getFreeNodeBrowserItem(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + /** + * 获取自由流程新建流程选择表单按钮 + * @param request + * @param response + * @return + */ + @POST + @Path("/saveFreeNodeFormConfig") + @Produces("text/plain;charset=utf-8") + public String saveFreeNodeFormConfig(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).saveFreeNodeFormConfig(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/conformCheck") + @Produces("text/plain;charset=utf-8") + public String conformCheck(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).conformCheck(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + + @POST + @Path("/getDetailByRequestId") + @Produces("text/plain;charset=utf-8") + public String getDetailByRequestId(@Context HttpServletRequest request, @Context HttpServletResponse response){ + Map apidatas = getFormService(request, response).getDetailByRequestId(ParamUtil.request2Map(request)); + return JSON.toJSONString(apidatas); + } + +}