From d48f6131e09706798f7b1e342199bc7b889b2e7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 14 Jan 2025 09:15:09 +0800 Subject: [PATCH 01/17] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/OtherDeductionServiceImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index 8d838f3ed..09853cdbb 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -2549,6 +2549,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getFreeIncomeMapper().updateIgnoreNull(po); } + + List freeIncomePOS = getFreeIncomeMapper().listSome(FreeIncomePO.builder().mainId(mainId).build()); + String sum = freeIncomePOS.stream().filter(po -> NumberUtil.isNumber(po.getFreeAmount())).map(po -> new BigDecimal(po.getFreeAmount())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString(); + deductionPO.setFreeIncome(sum); +// getOtherDeductionMapper().updateData(); + } @Override From 0bb2abc28155e40bc3b619c58b90a43efbbb4fea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 14 Jan 2025 14:56:36 +0800 Subject: [PATCH 02/17] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OtherDeductionDetailDeleteParam.java | 2 + .../salary/service/OtherDeductionService.java | 41 +++++++ .../impl/OtherDeductionServiceImpl.java | 112 +++++++++++++++++- 3 files changed, 150 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/entity/datacollection/param/OtherDeductionDetailDeleteParam.java b/src/com/engine/salary/entity/datacollection/param/OtherDeductionDetailDeleteParam.java index 447c04b87..c97a0b9a7 100644 --- a/src/com/engine/salary/entity/datacollection/param/OtherDeductionDetailDeleteParam.java +++ b/src/com/engine/salary/entity/datacollection/param/OtherDeductionDetailDeleteParam.java @@ -23,4 +23,6 @@ public class OtherDeductionDetailDeleteParam { // 主键id private List ids; + + private Long mainId; } diff --git a/src/com/engine/salary/service/OtherDeductionService.java b/src/com/engine/salary/service/OtherDeductionService.java index c8e72bb1e..c02d4a948 100644 --- a/src/com/engine/salary/service/OtherDeductionService.java +++ b/src/com/engine/salary/service/OtherDeductionService.java @@ -3,6 +3,7 @@ package com.engine.salary.service; import com.engine.salary.entity.datacollection.dto.*; import com.engine.salary.entity.datacollection.param.*; import com.engine.salary.entity.datacollection.po.*; +import com.engine.salary.enums.datacollection.TaxFreeTypeEnum; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -125,35 +126,75 @@ public interface OtherDeductionService { String extendToLastMonth(OtherDeductionExtendLastParam param); PageInfo freeIncomeList(OtherDeductionDetailQueryParam param); + PageInfo derateDeductionList(OtherDeductionDetailQueryParam param); + PageInfo endowmentInsuranceList(OtherDeductionDetailQueryParam param); + PageInfo grantDonationList(OtherDeductionDetailQueryParam param); + PageInfo healthInsuranceList(OtherDeductionDetailQueryParam param); + PageInfo otherDerateDeductionList(OtherDeductionDetailQueryParam param); + PageInfo personalPensionList(OtherDeductionDetailQueryParam param); List queryFreeIncomes(OtherDeductionFreeListQueryParam param); + List queryDerateDeductions(OtherDeductionFreeListQueryParam param); + List queryEndowmentInsurances(OtherDeductionFreeListQueryParam param); + List queryGrantDonations(OtherDeductionFreeListQueryParam param); + List queryHealthInsurances(OtherDeductionFreeListQueryParam param); + List queryOtherDerateDeductions(OtherDeductionFreeListQueryParam param); + List queryPersonalPensions(OtherDeductionFreeListQueryParam param); void saveFreeIncome(FreeIncomeSaveParam param); + void saveEndowmentInsurance(EndowmentInsuranceSaveParam param); + void saveGrantDonation(GrantDonationSaveParam param); + void saveHealthInsurance(HealthInsuranceSaveParam param); + void saveOtherDerateDeduction(OtherDerateDeductionSaveParam param); + void saveDerateDeduction(DerateDeductionSaveParam param); + void savePersonalPension(PersonalPensionSaveParam param); void deleteFreeIncome(OtherDeductionDetailDeleteParam param); + void deleteEndowmentInsurance(OtherDeductionDetailDeleteParam param); + void deleteGrantDonation(OtherDeductionDetailDeleteParam param); + void deleteHealthInsurance(OtherDeductionDetailDeleteParam param); + void deleteOtherDerateDeduction(OtherDeductionDetailDeleteParam param); + void deleteDerateDeduction(OtherDeductionDetailDeleteParam param); + void deletePersonalPension(OtherDeductionDetailDeleteParam param); + void syncMain(Long mainId, List taxFreeTypes); + + void syncFreeIncome(OtherDeductionPO mainPO); + + void syncEndowmentInsurance(OtherDeductionPO mainPO); + + void syncGrantDonation(OtherDeductionPO mainPO); + + void syncHealthInsurance(OtherDeductionPO mainPO); + + void syncOtherDerateDeduction(OtherDeductionPO mainPO); + + void syncDerateDeduction(OtherDeductionPO mainPO); + + void syncPersonalPension(OtherDeductionPO mainPO); + } diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index 09853cdbb..387d4ffd9 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -21,6 +21,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; +import com.engine.salary.enums.datacollection.TaxFreeTypeEnum; import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.datacollection.*; @@ -2550,11 +2551,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getFreeIncomeMapper().updateIgnoreNull(po); } - List freeIncomePOS = getFreeIncomeMapper().listSome(FreeIncomePO.builder().mainId(mainId).build()); - String sum = freeIncomePOS.stream().filter(po -> NumberUtil.isNumber(po.getFreeAmount())).map(po -> new BigDecimal(po.getFreeAmount())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString(); - deductionPO.setFreeIncome(sum); -// getOtherDeductionMapper().updateData(); - + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.FREE_INCOME)); } @Override @@ -2606,6 +2603,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getEndowmentInsuranceMapper().updateIgnoreNull(po); } + + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.ENDOWMENT_INSURANCE)); } @Override @@ -2659,6 +2658,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getGrantDonationMapper().updateIgnoreNull(po); } + + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.GRANT_DONATION)); } @Override @@ -2708,6 +2709,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getHealthInsuranceMapper().updateIgnoreNull(po); } + + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.HEALTH_INSURANCE)); } @Override @@ -2751,6 +2754,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getOtherDerateDeductionMapper().updateIgnoreNull(po); } + + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.OTHER_DERATE_DEDUCTION)); } @Override @@ -2796,6 +2801,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getDerateDeductionMapper().updateIgnoreNull(po); } + + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.DERATE_DEDUCTION)); } @Override @@ -2841,41 +2848,136 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getPersonalPensionMapper().updateIgnoreNull(po); } + + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.PERSONAL_PENSION)); } @Override public void deleteFreeIncome(OtherDeductionDetailDeleteParam param) { getFreeIncomeMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.FREE_INCOME)); } @Override public void deleteEndowmentInsurance(OtherDeductionDetailDeleteParam param) { getEndowmentInsuranceMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.ENDOWMENT_INSURANCE)); } @Override public void deleteGrantDonation(OtherDeductionDetailDeleteParam param) { getGrantDonationMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.GRANT_DONATION)); } @Override public void deleteHealthInsurance(OtherDeductionDetailDeleteParam param) { getHealthInsuranceMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.HEALTH_INSURANCE)); } @Override public void deleteOtherDerateDeduction(OtherDeductionDetailDeleteParam param) { getOtherDerateDeductionMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.OTHER_DERATE_DEDUCTION)); } @Override public void deleteDerateDeduction(OtherDeductionDetailDeleteParam param) { getDerateDeductionMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.DERATE_DEDUCTION)); } @Override public void deletePersonalPension(OtherDeductionDetailDeleteParam param) { getPersonalPensionMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.PERSONAL_PENSION)); + } + + @Override + public void syncMain(Long mainId,List taxFreeTypes) { + OtherDeductionPO deductionPO = getById(mainId); + if (deductionPO == null) { + throw new SalaryRunTimeException("主表不存在!"); + } + + if(taxFreeTypes.contains(TaxFreeTypeEnum.FREE_INCOME)){ + syncFreeIncome(deductionPO); + } + if(taxFreeTypes.contains(TaxFreeTypeEnum.HEALTH_INSURANCE)){ + syncEndowmentInsurance(deductionPO); + } + if(taxFreeTypes.contains(TaxFreeTypeEnum.ENDOWMENT_INSURANCE)){ + syncGrantDonation(deductionPO); + } + if(taxFreeTypes.contains(TaxFreeTypeEnum.GRANT_DONATION)){ + syncHealthInsurance(deductionPO); + } + if(taxFreeTypes.contains(TaxFreeTypeEnum.DERATE_DEDUCTION)){ + syncDerateDeduction(deductionPO); + } + if(taxFreeTypes.contains(TaxFreeTypeEnum.OTHER_DERATE_DEDUCTION)){ + syncOtherDerateDeduction(deductionPO); + } + if(taxFreeTypes.contains(TaxFreeTypeEnum.PERSONAL_PENSION)){ + syncPersonalPension(deductionPO); + } + } + + @Override + public void syncFreeIncome(OtherDeductionPO mainPO) { + List freeIncomePOS = getFreeIncomeMapper().listSome(FreeIncomePO.builder().mainId(mainPO.getId()).build()); + String sum = freeIncomePOS.stream().filter(po -> NumberUtil.isNumber(po.getFreeAmount())).map(po -> new BigDecimal(po.getFreeAmount())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString(); + mainPO.setFreeIncome(sum); + getOtherDeductionMapper().updateData(Collections.singletonList(mainPO)); + } + + @Override + public void syncEndowmentInsurance(OtherDeductionPO mainPO) { + List endowmentInsurancePOS = getEndowmentInsuranceMapper().listSome(EndowmentInsurancePO.builder().mainId(mainPO.getId()).build()); + String sum = endowmentInsurancePOS.stream().filter(po -> NumberUtil.isNumber(po.getCurrentDeduction())).map(po -> new BigDecimal(po.getCurrentDeduction())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString(); + mainPO.setTaxDelayEndowmentInsurance(sum); + getOtherDeductionMapper().updateData(Collections.singletonList(mainPO)); + } + + @Override + public void syncGrantDonation(OtherDeductionPO mainPO) { + List grantDonationPOS = getGrantDonationMapper().listSome(GrantDonationPO.builder().mainId(mainPO.getId()).build()); + String sum = grantDonationPOS.stream().filter(po -> NumberUtil.isNumber(po.getActualDeduction())).map(po -> new BigDecimal(po.getActualDeduction())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString(); + mainPO.setDeductionAllowedDonation(sum); + getOtherDeductionMapper().updateData(Collections.singletonList(mainPO)); + } + + @Override + public void syncHealthInsurance(OtherDeductionPO mainPO) { + List healthInsurancePOS = getHealthInsuranceMapper().listSome(HealthInsurancePO.builder().mainId(mainPO.getId()).build()); + String sum = healthInsurancePOS.stream().filter(po -> NumberUtil.isNumber(po.getCurrentDeduction())).map(po -> new BigDecimal(po.getCurrentDeduction())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString(); + mainPO.setBusinessHealthyInsurance(sum); + getOtherDeductionMapper().updateData(Collections.singletonList(mainPO)); + } + + @Override + public void syncOtherDerateDeduction(OtherDeductionPO mainPO) { + List otherDerateDeductionPOS = getOtherDerateDeductionMapper().listSome(OtherDerateDeductionPO.builder().mainId(mainPO.getId()).build()); + String sum = otherDerateDeductionPOS.stream().filter(po -> NumberUtil.isNumber(po.getOtherDeduction())).map(po -> new BigDecimal(po.getOtherDeduction())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString(); + mainPO.setOtherDeduction(sum); + getOtherDeductionMapper().updateData(Collections.singletonList(mainPO)); + } + + @Override + public void syncDerateDeduction(OtherDeductionPO mainPO) { + List derateDeductionPOS = getDerateDeductionMapper().listSome(DerateDeductionPO.builder().mainId(mainPO.getId()).build()); + String sum = derateDeductionPOS.stream().filter(po -> NumberUtil.isNumber(po.getDerateAmount())).map(po -> new BigDecimal(po.getDerateAmount())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString(); + mainPO.setDerateDeduction(sum); + getOtherDeductionMapper().updateData(Collections.singletonList(mainPO)); + } + + @Override + public void syncPersonalPension(OtherDeductionPO mainPO) { + List personalPensionPOS = getPersonalPensionMapper().listSome(PersonalPensionPO.builder().mainId(mainPO.getId()).build()); + String sum = personalPensionPOS.stream().filter(po -> NumberUtil.isNumber(po.getPayAmount())).map(po -> new BigDecimal(po.getPayAmount())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString(); + mainPO.setPrivatePension(sum); + getOtherDeductionMapper().updateData(Collections.singletonList(mainPO)); } } From aea27897b76b5da0deaca0fc9303ce10355cfc36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 14 Jan 2025 17:05:31 +0800 Subject: [PATCH 03/17] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=B8=BB=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/OtherDeductionServiceImpl.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index 387d4ffd9..c27802d5f 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -1560,6 +1560,14 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction l.setMainId(po.getId()); getPersonalPensionMapper().insertIgnoreNull(l); }); + + syncMain(po.getId(), Arrays.asList(TaxFreeTypeEnum.FREE_INCOME, + TaxFreeTypeEnum.HEALTH_INSURANCE, + TaxFreeTypeEnum.ENDOWMENT_INSURANCE, + TaxFreeTypeEnum.GRANT_DONATION, + TaxFreeTypeEnum.DERATE_DEDUCTION, + TaxFreeTypeEnum.OTHER_DERATE_DEDUCTION, + TaxFreeTypeEnum.PERSONAL_PENSION)); }); return apidatas; @@ -2895,31 +2903,31 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } @Override - public void syncMain(Long mainId,List taxFreeTypes) { + public void syncMain(Long mainId, List taxFreeTypes) { OtherDeductionPO deductionPO = getById(mainId); if (deductionPO == null) { throw new SalaryRunTimeException("主表不存在!"); } - if(taxFreeTypes.contains(TaxFreeTypeEnum.FREE_INCOME)){ + if (taxFreeTypes.contains(TaxFreeTypeEnum.FREE_INCOME)) { syncFreeIncome(deductionPO); } - if(taxFreeTypes.contains(TaxFreeTypeEnum.HEALTH_INSURANCE)){ + if (taxFreeTypes.contains(TaxFreeTypeEnum.HEALTH_INSURANCE)) { syncEndowmentInsurance(deductionPO); } - if(taxFreeTypes.contains(TaxFreeTypeEnum.ENDOWMENT_INSURANCE)){ + if (taxFreeTypes.contains(TaxFreeTypeEnum.ENDOWMENT_INSURANCE)) { syncGrantDonation(deductionPO); } - if(taxFreeTypes.contains(TaxFreeTypeEnum.GRANT_DONATION)){ + if (taxFreeTypes.contains(TaxFreeTypeEnum.GRANT_DONATION)) { syncHealthInsurance(deductionPO); } - if(taxFreeTypes.contains(TaxFreeTypeEnum.DERATE_DEDUCTION)){ + if (taxFreeTypes.contains(TaxFreeTypeEnum.DERATE_DEDUCTION)) { syncDerateDeduction(deductionPO); } - if(taxFreeTypes.contains(TaxFreeTypeEnum.OTHER_DERATE_DEDUCTION)){ + if (taxFreeTypes.contains(TaxFreeTypeEnum.OTHER_DERATE_DEDUCTION)) { syncOtherDerateDeduction(deductionPO); } - if(taxFreeTypes.contains(TaxFreeTypeEnum.PERSONAL_PENSION)){ + if (taxFreeTypes.contains(TaxFreeTypeEnum.PERSONAL_PENSION)) { syncPersonalPension(deductionPO); } } From 7a58e92fc7372ec86f3523a09f22ad8373ade176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 15 Jan 2025 16:11:34 +0800 Subject: [PATCH 04/17] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=B8=BB=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/OtherDeductionServiceImpl.java | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index c27802d5f..a5a76dd77 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -2232,9 +2232,51 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction public XSSFWorkbook downloadDetailTemplate(OtherDeductionQueryParam param) { + List freeIncomeList= new ArrayList<>(); + List endowmentInsurancePOS =new ArrayList<>(); + List grantDonationPOS =new ArrayList<>(); + List healthInsurancePOS =new ArrayList<>(); + List otherDerateDeductionPOS =new ArrayList<>(); + List derateDeductionPOS =new ArrayList<>(); + List personalPensionPOS =new ArrayList<>(); + if (param.isHasData()) { + long employeeId = user.getUID(); + //排序配置 + OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); + param.setOrderRule(orderRule); + + List list = getOtherDeductionMapper().list(param); + encryptUtil.decryptList(list, OtherDeductionListDTO.class); + SalaryI18nUtil.i18nList(list); + // 开启分权并且不是薪酬模块总管理员 + if (getTaxAgentService(user).isOpenDevolution() && !getTaxAgentService(user).isChief(employeeId)) { + List taxAgentIdsAsAdmin = getTaxAgentService(user).listAllTaxAgentsAsAdmin(employeeId).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); + list = list.stream().filter(f -> + // 作为管理员 + taxAgentIdsAsAdmin.contains(f.getTaxAgentId()) + ).collect(Collectors.toList()); + } + list.forEach(dto -> { + freeIncomeList.addAll(getFreeIncomeMapper().listSome(FreeIncomePO.builder().mainId(dto.getId()).build())); + endowmentInsurancePOS.addAll(getEndowmentInsuranceMapper().listSome(EndowmentInsurancePO.builder().mainId(dto.getId()).build())); + grantDonationPOS.addAll( getGrantDonationMapper().listSome(GrantDonationPO.builder().mainId(dto.getId()).build())); + healthInsurancePOS.addAll( getHealthInsuranceMapper().listSome(HealthInsurancePO.builder().mainId(dto.getId()).build())); + otherDerateDeductionPOS.addAll(getOtherDerateDeductionMapper().listSome(OtherDerateDeductionPO.builder().mainId(dto.getId()).build())); + derateDeductionPOS.addAll(getDerateDeductionMapper().listSome(DerateDeductionPO.builder().mainId(dto.getId()).build())); + personalPensionPOS.addAll(getPersonalPensionMapper().listSome(PersonalPensionPO.builder().mainId(dto.getId()).build())); + }); + } + + + Map>> map = new LinkedHashMap<>(); List freeIncomeTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "免税事项", "免税性质", "免税金额"); + List> freeIncomeRowList = new ArrayList<>(); + freeIncomeList.forEach(po->{ + List row = new ArrayList<>(); + row.add(Util.null2String(po.get())); + }); map.put("免税收入", Arrays.asList(freeIncomeTitle)); List healthInsuranceTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "税优识别码", "保单生效日期", "年度保费", "月度保费", "本期扣除金额"); map.put("商业健康保险", Arrays.asList(healthInsuranceTitle)); @@ -2249,7 +2291,6 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction List personalPensionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "凭证类型", "凭证编码", "缴费金额"); map.put("个人养老金", Arrays.asList(personalPensionTitle)); - XSSFWorkbook book = ExcelUtil.genWorkbookV2(map); return book; } From f2cbbbe18a9f523f3207eada1cae69b0a2252597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 16 Jan 2025 13:41:17 +0800 Subject: [PATCH 05/17] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E9=99=84=E8=A1=A8?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/OtherDeductionServiceImpl.java | 236 +++++++++++++++--- 1 file changed, 199 insertions(+), 37 deletions(-) diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index a5a76dd77..d6fcf058e 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -54,6 +54,7 @@ import org.apache.commons.lang3.Validate; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.BeanUtils; import weaver.file.ImageFileManager; import weaver.general.Util; @@ -2232,15 +2233,15 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction public XSSFWorkbook downloadDetailTemplate(OtherDeductionQueryParam param) { - List freeIncomeList= new ArrayList<>(); - List endowmentInsurancePOS =new ArrayList<>(); - List grantDonationPOS =new ArrayList<>(); - List healthInsurancePOS =new ArrayList<>(); - List otherDerateDeductionPOS =new ArrayList<>(); - List derateDeductionPOS =new ArrayList<>(); - List personalPensionPOS =new ArrayList<>(); + List freeIncomeList = new ArrayList<>(); + List healthInsuranceList = new ArrayList<>(); + List endowmentInsuranceList = new ArrayList<>(); + List grantDonationList = new ArrayList<>(); + List derateDeductionList = new ArrayList<>(); + List otherDerateDeductionList = new ArrayList<>(); + List personalPensionList = new ArrayList<>(); if (param.isHasData()) { - long employeeId = user.getUID(); + long employeeId = user.getUID(); //排序配置 OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); param.setOrderRule(orderRule); @@ -2257,39 +2258,158 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction ).collect(Collectors.toList()); } list.forEach(dto -> { - freeIncomeList.addAll(getFreeIncomeMapper().listSome(FreeIncomePO.builder().mainId(dto.getId()).build())); - endowmentInsurancePOS.addAll(getEndowmentInsuranceMapper().listSome(EndowmentInsurancePO.builder().mainId(dto.getId()).build())); - grantDonationPOS.addAll( getGrantDonationMapper().listSome(GrantDonationPO.builder().mainId(dto.getId()).build())); - healthInsurancePOS.addAll( getHealthInsuranceMapper().listSome(HealthInsurancePO.builder().mainId(dto.getId()).build())); - otherDerateDeductionPOS.addAll(getOtherDerateDeductionMapper().listSome(OtherDerateDeductionPO.builder().mainId(dto.getId()).build())); - derateDeductionPOS.addAll(getDerateDeductionMapper().listSome(DerateDeductionPO.builder().mainId(dto.getId()).build())); - personalPensionPOS.addAll(getPersonalPensionMapper().listSome(PersonalPensionPO.builder().mainId(dto.getId()).build())); + List freeIncomeListDTOS = freeIncomePO2DTO(getFreeIncomeMapper().listSome(FreeIncomePO.builder().mainId(dto.getId()).build())); + freeIncomeList.addAll(freeIncomeListDTOS); + List endowmentInsuranceListDTOS = endowmentInsurancePO2DTO(getEndowmentInsuranceMapper().listSome(EndowmentInsurancePO.builder().mainId(dto.getId()).build())); + endowmentInsuranceList.addAll(endowmentInsuranceListDTOS); + List grantDonationListDTOS = grantDonationPO2DTO(getGrantDonationMapper().listSome(GrantDonationPO.builder().mainId(dto.getId()).build())); + grantDonationList.addAll(grantDonationListDTOS); + List healthInsuranceListDTOS = healthInsurancePO2DTO(getHealthInsuranceMapper().listSome(HealthInsurancePO.builder().mainId(dto.getId()).build())); + healthInsuranceList.addAll(healthInsuranceListDTOS); + List otherDerateDeductionListDTOS = otherDerateDeductionPO2DTO(getOtherDerateDeductionMapper().listSome(OtherDerateDeductionPO.builder().mainId(dto.getId()).build())); + otherDerateDeductionList.addAll(otherDerateDeductionListDTOS); + List derateDeductionListDTOS = derateDeductionPO2DTO(getDerateDeductionMapper().listSome(DerateDeductionPO.builder().mainId(dto.getId()).build())); + derateDeductionList.addAll(derateDeductionListDTOS); + List personalPensionListDTOS = personalPensionPO2DTO(getPersonalPensionMapper().listSome(PersonalPensionPO.builder().mainId(dto.getId()).build())); + personalPensionList.addAll(personalPensionListDTOS); }); } - - Map>> map = new LinkedHashMap<>(); - List freeIncomeTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "免税事项", "免税性质", "免税金额"); List> freeIncomeRowList = new ArrayList<>(); - freeIncomeList.forEach(po->{ + List freeIncomeTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "免税事项", "免税性质", "免税金额"); + freeIncomeRowList.add(freeIncomeTitle); + freeIncomeList.forEach(dto -> { List row = new ArrayList<>(); - row.add(Util.null2String(po.get())); + row.add(dto.getUsername()); + row.add(dto.getTaxAgentName()); + row.add(dto.getDepartmentName()); + row.add(dto.getMobile()); + row.add(dto.getJobNum()); + row.add(dto.getIdNo()); + row.add(dto.getFreeItem()); + row.add(dto.getFreeProperty()); + row.add(dto.getFreeAmount()); + freeIncomeRowList.add(row); }); - map.put("免税收入", Arrays.asList(freeIncomeTitle)); + map.put("免税收入", freeIncomeRowList); + + List> healthInsuranceRowList = new ArrayList<>(); List healthInsuranceTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "税优识别码", "保单生效日期", "年度保费", "月度保费", "本期扣除金额"); - map.put("商业健康保险", Arrays.asList(healthInsuranceTitle)); + healthInsuranceRowList.add(healthInsuranceTitle); + healthInsuranceList.forEach(dto -> { + List row = new ArrayList<>(); + row.add(dto.getUsername()); + row.add(dto.getTaxAgentName()); + row.add(dto.getDepartmentName()); + row.add(dto.getMobile()); + row.add(dto.getJobNum()); + row.add(dto.getIdNo()); + row.add(dto.getIdentificationNumber()); + row.add(dto.getEffectiveDate()); + row.add(dto.getYearPremium()); + row.add(dto.getMonthPremium()); + row.add(dto.getCurrentDeduction()); + healthInsuranceRowList.add(row); + }); + map.put("商业健康保险", healthInsuranceRowList); + + + List> endowmentInsuranceRowList = new ArrayList<>(); List endowmentInsuranceTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "税延养老账户编号", "报税校验码", "年度保费", "月度保费", "本期扣除金额"); - map.put("税延养老保险", Arrays.asList(endowmentInsuranceTitle)); + endowmentInsuranceRowList.add(endowmentInsuranceTitle); + endowmentInsuranceList.forEach(dto -> { + List row = new ArrayList<>(); + row.add(dto.getUsername()); + row.add(dto.getTaxAgentName()); + row.add(dto.getDepartmentName()); + row.add(dto.getMobile()); + row.add(dto.getJobNum()); + row.add(dto.getIdNo()); + row.add(dto.getAccountNumber()); + row.add(dto.getCheckCode()); + row.add(dto.getYearPremium()); + row.add(dto.getMonthPremium()); + row.add(dto.getCurrentDeduction()); + endowmentInsuranceRowList.add(row); + }); + map.put("税延养老保险", endowmentInsuranceRowList); + + List> grantDonationRowList = new ArrayList<>(); List grantDonationTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "受赠单位名称", "受赠单位纳税人识别号", "凭证号", "捐赠日期", "捐赠金额", "扣除比例", "实际扣除金额"); - map.put("准予扣除的捐赠额", Arrays.asList(grantDonationTitle)); + grantDonationRowList.add(grantDonationTitle); + grantDonationList.forEach(dto -> { + List row = new ArrayList<>(); + row.add(dto.getUsername()); + row.add(dto.getTaxAgentName()); + row.add(dto.getDepartmentName()); + row.add(dto.getMobile()); + row.add(dto.getJobNum()); + row.add(dto.getIdNo()); + row.add(dto.getRecipientName()); + row.add(dto.getTaxCode()); + row.add(dto.getDonationNumber()); + row.add(dto.getDonateDate()); + row.add(dto.getDonateAmount()); + row.add(dto.getDeductionProportion()); + row.add(dto.getActualDeduction()); + grantDonationRowList.add(row); + }); + map.put("准予扣除的捐赠额", grantDonationRowList); + + List> derateDeductionRowList = new ArrayList<>(); List derateDeductionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "减免事项", "减免性质", "减免金额"); - map.put("减免税额", Arrays.asList(derateDeductionTitle)); + derateDeductionRowList.add(derateDeductionTitle); + derateDeductionList.forEach(dto -> { + List row = new ArrayList<>(); + row.add(dto.getUsername()); + row.add(dto.getTaxAgentName()); + row.add(dto.getDepartmentName()); + row.add(dto.getMobile()); + row.add(dto.getJobNum()); + row.add(dto.getIdNo()); + row.add(dto.getDerateItem()); + row.add(dto.getDerateProperty()); + row.add(dto.getDerateAmount()); + derateDeductionRowList.add(row); + }); + map.put("减免税额", derateDeductionRowList); + + List> otherDerateDeductionRowList = new ArrayList<>(); List otherDerateDeductionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "其他免税扣除金额", "备注"); - map.put("其他", Arrays.asList(otherDerateDeductionTitle)); + otherDerateDeductionRowList.add(otherDerateDeductionTitle); + otherDerateDeductionList.forEach(dto -> { + List row = new ArrayList<>(); + row.add(dto.getUsername()); + row.add(dto.getTaxAgentName()); + row.add(dto.getDepartmentName()); + row.add(dto.getMobile()); + row.add(dto.getJobNum()); + row.add(dto.getIdNo()); + row.add(dto.getOtherDeduction()); + row.add(dto.getRemark()); + otherDerateDeductionRowList.add(row); + }); + map.put("其他", otherDerateDeductionRowList); + + List> personalPensionRowList = new ArrayList<>(); List personalPensionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "凭证类型", "凭证编码", "缴费金额"); - map.put("个人养老金", Arrays.asList(personalPensionTitle)); + personalPensionRowList.add(personalPensionTitle); + personalPensionList.forEach(dto -> { + List row = new ArrayList<>(); + row.add(dto.getUsername()); + row.add(dto.getTaxAgentName()); + row.add(dto.getDepartmentName()); + row.add(dto.getMobile()); + row.add(dto.getJobNum()); + row.add(dto.getIdNo()); + row.add(dto.getVoucherTypeName()); + row.add(dto.getVoucherNo()); + row.add(dto.getPayAmount()); + personalPensionRowList.add(row); + }); + map.put("个人养老金", personalPensionRowList); XSSFWorkbook book = ExcelUtil.genWorkbookV2(map); return book; @@ -2306,6 +2426,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getFreeIncomeMapper().listSome(build); + List listDTOS = freeIncomePO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, FreeIncomeListDTO.class); + } + + @NotNull + private List freeIncomePO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, FreeIncomePO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2324,7 +2450,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, FreeIncomeListDTO.class); + return listDTOS; } @Override @@ -2337,6 +2463,11 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getDerateDeductionMapper().listSome(build); + List listDTOS = derateDeductionPO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, DerateDeductionListDTO.class); + } + + private List derateDeductionPO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, DerateDeductionPO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2355,7 +2486,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, DerateDeductionListDTO.class); + return listDTOS; } @Override @@ -2368,6 +2499,13 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getEndowmentInsuranceMapper().listSome(build); + + List listDTOS = endowmentInsurancePO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, EndowmentInsuranceListDTO.class); + } + + @NotNull + private List endowmentInsurancePO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, EndowmentInsurancePO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2386,7 +2524,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, EndowmentInsuranceListDTO.class); + return listDTOS; } @Override @@ -2399,6 +2537,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getGrantDonationMapper().listSome(build); + List listDTOS = grantDonationPO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, GrantDonationListDTO.class); + } + + @NotNull + private List grantDonationPO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, GrantDonationPO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2417,7 +2561,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, GrantDonationListDTO.class); + return listDTOS; } @Override @@ -2430,6 +2574,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getHealthInsuranceMapper().listSome(build); + List listDTOS = healthInsurancePO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, HealthInsuranceListDTO.class); + } + + @NotNull + private List healthInsurancePO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, HealthInsurancePO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2448,7 +2598,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, HealthInsuranceListDTO.class); + return listDTOS; } @Override @@ -2461,6 +2611,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getOtherDerateDeductionMapper().listSome(build); + List listDTOS = otherDerateDeductionPO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, OtherDerateDeductionListDTO.class); + } + + @NotNull + private List otherDerateDeductionPO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, OtherDerateDeductionPO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2479,7 +2635,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, OtherDerateDeductionListDTO.class); + return listDTOS; } @Override @@ -2492,6 +2648,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getPersonalPensionMapper().listSome(build); + List listDTOS = personalPensionPO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, PersonalPensionListDTO.class); + } + + @NotNull + private List personalPensionPO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, PersonalPensionPO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2510,7 +2672,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, PersonalPensionListDTO.class); + return listDTOS; } @Override @@ -2954,13 +3116,13 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction syncFreeIncome(deductionPO); } if (taxFreeTypes.contains(TaxFreeTypeEnum.HEALTH_INSURANCE)) { - syncEndowmentInsurance(deductionPO); + syncHealthInsurance(deductionPO); } if (taxFreeTypes.contains(TaxFreeTypeEnum.ENDOWMENT_INSURANCE)) { - syncGrantDonation(deductionPO); + syncEndowmentInsurance(deductionPO); } if (taxFreeTypes.contains(TaxFreeTypeEnum.GRANT_DONATION)) { - syncHealthInsurance(deductionPO); + syncGrantDonation(deductionPO); } if (taxFreeTypes.contains(TaxFreeTypeEnum.DERATE_DEDUCTION)) { syncDerateDeduction(deductionPO); From 4875bd327c3efb123def63a79741373e11a26ac3 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 5 Feb 2025 15:52:34 +0800 Subject: [PATCH 06/17] =?UTF-8?q?=E7=A4=BE=E4=BF=9D=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E5=8B=BE=E9=80=89=E4=BA=86=E6=9A=82=E4=B8=8D?= =?UTF-8?q?=E7=BC=B4=E7=BA=B3=E7=9A=84=E4=B8=8D=E5=87=BA=E7=8E=B0=E5=9C=A8?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/SIAccountBiz.java | 6 +++--- .../salary/mapper/siarchives/FundSchemeMapper.java | 2 +- .../salary/mapper/siarchives/FundSchemeMapper.xml | 1 + .../salary/mapper/siarchives/OtherSchemeMapper.java | 2 +- .../salary/mapper/siarchives/OtherSchemeMapper.xml | 1 + .../salary/mapper/siarchives/SocialSchemeMapper.java | 2 +- .../salary/mapper/siarchives/SocialSchemeMapper.xml | 1 + .../salary/service/impl/SIAccountServiceImpl.java | 12 ++++++------ 8 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/com/engine/salary/biz/SIAccountBiz.java b/src/com/engine/salary/biz/SIAccountBiz.java index 9b2bbb180..56a1ce4b8 100644 --- a/src/com/engine/salary/biz/SIAccountBiz.java +++ b/src/com/engine/salary/biz/SIAccountBiz.java @@ -439,11 +439,11 @@ public class SIAccountBiz extends Service { public List listCanPayEmpIds(Long paymentOrganization, String billMonth) { List listCanPayEmpIds = new ArrayList<>(); //社保档案中可进行缴纳的人员 - List socialCanPayEmpIds = getSocialSchemeMapper().listCanPayEmpIds(paymentOrganization, billMonth); + List socialCanPayEmpIds = getSocialSchemeMapper().listCanPayEmpIds(paymentOrganization, billMonth, 0); //公积金档案中可进行缴纳的人员 - List fundCanPayEmpIds = getFundSchemeMapper().listCanPayEmpIds(paymentOrganization, billMonth); + List fundCanPayEmpIds = getFundSchemeMapper().listCanPayEmpIds(paymentOrganization, billMonth, 0); //其他福利档案中可进行缴纳的人员 - List otherCanPayEmpIds = getOtherSchemeMapper().listCanPayEmpIds(paymentOrganization, billMonth); + List otherCanPayEmpIds = getOtherSchemeMapper().listCanPayEmpIds(paymentOrganization, billMonth, 0); if (socialCanPayEmpIds != null && socialCanPayEmpIds.size() > 0) { listCanPayEmpIds.addAll(socialCanPayEmpIds); } diff --git a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java index c7dfa1233..07396a02b 100644 --- a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java +++ b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.java @@ -67,7 +67,7 @@ public interface FundSchemeMapper { * @param paymentOrganization * @return */ - List listCanPayEmpIds(@Param("paymentOrganization")Long paymentOrganization, @Param("billMonth")String billMonth); + List listCanPayEmpIds(@Param("paymentOrganization")Long paymentOrganization, @Param("billMonth")String billMonth, @Param("nonPayment") Integer nonPayment); List listAll(); diff --git a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml index 644a21d18..8cb8fc4e0 100644 --- a/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml +++ b/src/com/engine/salary/mapper/siarchives/FundSchemeMapper.xml @@ -266,6 +266,7 @@ AND fund_scheme_id is not null AND fund_start_time is not null AND fund_start_time #{billMonth} AND (fund_end_time is null OR fund_end_time = ]]> #{billMonth} OR fund_end_time ='') + AND non_payment = #{nonPayment} ${sql} + + diff --git a/src/com/engine/salary/remote/cbs8/config/EBS2ECConfig.java b/src/com/engine/salary/remote/cbs8/config/EBS2ECConfig.java new file mode 100644 index 000000000..dcc3a3fb6 --- /dev/null +++ b/src/com/engine/salary/remote/cbs8/config/EBS2ECConfig.java @@ -0,0 +1,63 @@ +package com.engine.salary.remote.cbs8.config; + +import com.thoughtworks.xstream.annotations.XStreamAlias; +import com.thoughtworks.xstream.annotations.XStreamAsAttribute; +import com.thoughtworks.xstream.annotations.XStreamImplicit; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@XStreamAlias("config") +public class EBS2ECConfig { + @XStreamAlias("name") + @XStreamAsAttribute + private String name; + + @XStreamImplicit(itemFieldName = "table") + private List tables; + + @Data + public static class Table { + @XStreamAlias("name") + @XStreamAsAttribute + private String name; + + @XStreamAlias("key") + @XStreamAsAttribute + private String key; + + @XStreamAlias("modeId") + @XStreamAsAttribute + private Integer modeId; + + @XStreamImplicit(itemFieldName = "field") + private List fields; + + @Data + public static class Field { + @XStreamAlias("name") + @XStreamAsAttribute + private String name; + + @XStreamAlias("key") + @XStreamAsAttribute + private String key; + + @XStreamAlias("ebsKey") + @XStreamAsAttribute + private String ebsKey; + + @XStreamAlias("unique") + @XStreamAsAttribute + private boolean unique; + + } + } +} diff --git a/src/com/engine/salary/timer/CBS8GetTransactionDetailJob.java b/src/com/engine/salary/timer/CBS8GetTransactionDetailJob.java index 7d23e311b..07dc0c7bf 100644 --- a/src/com/engine/salary/timer/CBS8GetTransactionDetailJob.java +++ b/src/com/engine/salary/timer/CBS8GetTransactionDetailJob.java @@ -2,16 +2,28 @@ package com.engine.salary.timer; import cn.hutool.core.util.StrUtil; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.SQLMapper; import com.engine.salary.mapper.hrm.HrmSnapshotMapper; import com.engine.salary.remote.cbs8.client.AccountManagementClient; +import com.engine.salary.remote.cbs8.config.EBS2ECConfig; import com.engine.salary.remote.cbs8.request.GetTransactionDetailRequest; +import com.engine.salary.remote.cbs8.response.GetTransactionDetailResponse; +import com.engine.salary.util.JsonUtil; import com.engine.salary.util.db.MapperProxyFactory; +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.security.AnyTypePermission; import lombok.extern.slf4j.Slf4j; +import weaver.conn.RecordSet; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.GCONST; +import weaver.general.TimeUtil; import weaver.hrm.User; import weaver.interfaces.schedule.BaseCronJob; +import java.io.File; +import java.text.SimpleDateFormat; import java.time.LocalDate; -import java.util.Arrays; +import java.util.*; import java.util.stream.Collectors; /** @@ -46,6 +58,10 @@ public class CBS8GetTransactionDetailJob extends BaseCronJob { return MapperProxyFactory.getProxy(HrmSnapshotMapper.class); } + private SQLMapper getSQLMapper() { + return MapperProxyFactory.getProxy(SQLMapper.class); + } + @Override public void execute() { User user = new User(); @@ -74,7 +90,81 @@ public class CBS8GetTransactionDetailJob extends BaseCronJob { if (StrUtil.isNotBlank(paymentNatureList)) { requestParam.setPaymentNatureList(Arrays.stream(paymentNatureList.split(",")).collect(Collectors.toList())); } - accountManagementClient.transactionDetailQuery(requestParam); + GetTransactionDetailResponse getTransactionDetailResponse = accountManagementClient.transactionDetailQuery(requestParam); + List list = getTransactionDetailResponse.getData().getList(); + + //加载cbs配置 + XStream xStream = new XStream(); + String resource = GCONST.getRootPath() + "WEB-INF" + File.separatorChar + "CBS2ECConfig.xml"; + File file = new File(resource); + xStream.addPermission(AnyTypePermission.ANY); + xStream.processAnnotations(EBS2ECConfig.class); + EBS2ECConfig dto = (EBS2ECConfig) xStream.fromXML(file); + EBS2ECConfig.Table table = dto.getTables().get(0); + Integer modeId = table.getModeId(); + String tableName = table.getKey(); + + //获取已存在的数据 + EBS2ECConfig.Table.Field uniqueField = table.getFields().stream().filter(EBS2ECConfig.Table.Field::isUnique).findFirst().orElse(null); + if(uniqueField == null){ + throw new SalaryRunTimeException("未设置唯一标识字段"); + } + String uniqueKey = uniqueField.getKey(); + String uniqueEbsKey = uniqueField.getEbsKey(); + List uniqueDataKeys = getSQLMapper().listString(String.format("select %s from %s", uniqueKey, tableName)); + + for (GetTransactionDetailResponse.Detail detail : list) { + Map detailMap = JsonUtil.parseMap(detail, String.class); + String uniqueData = detailMap.get(uniqueEbsKey); + if (StrUtil.isBlank(uniqueData)) { + log.warn("跳过cbs交易数据,唯一标识返回空,uniqueKey:{},uniqueEbsKey:{}", uniqueKey, uniqueEbsKey); + continue; + } + if (uniqueDataKeys.contains(uniqueData)) { + log.warn("跳过cbs交易数据,数据已存在,uniqueKey:{},uniqueEbsKey:{},值{}", uniqueKey, uniqueEbsKey, uniqueData); + continue; + } + + List fields = new ArrayList() {{ + add("formmodeid"); + add("modedatacreater"); + add("modedatacreatertype"); + add("modedatacreatedate"); + add("modedatacreatetime"); + }}; + String currDate = TimeUtil.getCurrentDateString(); + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); + String currTime = sdf.format(new Date()); + List values = new ArrayList() {{ + add(modeId); + add(1); + add(0); + add(String.format("'%s'", currDate)); + add(String.format("'%s'", currTime)); + }}; + for (EBS2ECConfig.Table.Field field : table.getFields()) { + //数据库字段 + String fieldName = field.getKey(); + fields.add(fieldName); + // 接口值 + values.add(String.format("'%s'", detailMap.getOrDefault(field.getEbsKey(), ""))); + } + + String sql = String.format("insert into %s (%s) values (%s)", tableName, String.join(",", fields), values.stream().map(Object::toString).collect(Collectors.joining(","))); + RecordSet rs = new RecordSet(); + rs.execute(sql); + + if (modeId != null) { + rs.executeQuery("select max(id) from " + tableName); + int mainId = 0; + if (rs.next()) { + mainId = rs.getInt(1); + } + ModeRightInfo ModeRightInfo = new ModeRightInfo(); + ModeRightInfo.setNewRight(true); + ModeRightInfo.editModeDataShare(1, modeId, mainId); + } + } } catch (Exception e) { log.error("获取CBS交易信息失败", e); throw new SalaryRunTimeException("获取CBS交易信息失败," + e.getMessage(), e); From 388352b9375661321a7def806321c5e1a604076a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 26 Feb 2025 14:40:28 +0800 Subject: [PATCH 13/17] =?UTF-8?q?=E7=A5=A8=E6=8D=AE=E6=B1=A0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/CBS2ECConfig.xml | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/resource/WEB-INF/CBS2ECConfig.xml b/resource/WEB-INF/CBS2ECConfig.xml index cf16cf4ab..7dc238ed3 100644 --- a/resource/WEB-INF/CBS2ECConfig.xml +++ b/resource/WEB-INF/CBS2ECConfig.xml @@ -2,13 +2,25 @@ -
- +
+ - - - - + + + + +
+ + + + + + + + + + +
From fb005a8139b6f1a07e06d6e05d02462fef02b494 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 26 Feb 2025 17:25:51 +0800 Subject: [PATCH 14/17] =?UTF-8?q?=E7=A5=A8=E6=8D=AE=E6=B1=A0=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/CBS2ECConfig.xml | 18 +- .../cbs8/client/AccountManagementClient.java | 4 +- .../cbs8/client/BillManagementClient.java | 4 +- .../engine/salary/timer/CBS8GetDtaJob.java | 130 ------------- ...Job.java => SyncCBSAccountDetailsJob.java} | 26 ++- .../salary/timer/SyncCBSPayDetailsJob.java | 183 ++++++++++++++++++ 6 files changed, 213 insertions(+), 152 deletions(-) delete mode 100644 src/com/engine/salary/timer/CBS8GetDtaJob.java rename src/com/engine/salary/timer/{CBS8GetTransactionDetailJob.java => SyncCBSAccountDetailsJob.java} (89%) create mode 100644 src/com/engine/salary/timer/SyncCBSPayDetailsJob.java diff --git a/resource/WEB-INF/CBS2ECConfig.xml b/resource/WEB-INF/CBS2ECConfig.xml index 7dc238ed3..563605ccb 100644 --- a/resource/WEB-INF/CBS2ECConfig.xml +++ b/resource/WEB-INF/CBS2ECConfig.xml @@ -3,7 +3,6 @@ - @@ -12,15 +11,14 @@
- - - - - - - - - + + + + + + + +
diff --git a/src/com/engine/salary/remote/cbs8/client/AccountManagementClient.java b/src/com/engine/salary/remote/cbs8/client/AccountManagementClient.java index 579c68574..40041bc9c 100644 --- a/src/com/engine/salary/remote/cbs8/client/AccountManagementClient.java +++ b/src/com/engine/salary/remote/cbs8/client/AccountManagementClient.java @@ -28,14 +28,14 @@ public class AccountManagementClient extends CBS8BaseClient { .build(); String requestData = JsonUtil.toJsonString(requestParam); - log.info(url + "\n" + requestData); + log.info("获取cbs交易参数," + url + "\n" + requestData); HttpPost httpPost = setupRequest(url, requestData); try (CloseableHttpResponse response = client.execute(httpPost)) { byte[] finalResponseData = handleResponse(response); String req = new String(finalResponseData, StandardCharsets.UTF_8); GetTransactionDetailResponse getTransactionDetailResponse = JsonUtil.parseBean(req, GetTransactionDetailResponse.class); - log.info(url + "\n" + JsonUtil.toJsonString(getTransactionDetailResponse)); + log.info("获取cbs交易结果," + "\n" + JsonUtil.toJsonString(getTransactionDetailResponse)); if (Objects.isNull(getTransactionDetailResponse)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); diff --git a/src/com/engine/salary/remote/cbs8/client/BillManagementClient.java b/src/com/engine/salary/remote/cbs8/client/BillManagementClient.java index f0b30a97c..069c3c4e4 100644 --- a/src/com/engine/salary/remote/cbs8/client/BillManagementClient.java +++ b/src/com/engine/salary/remote/cbs8/client/BillManagementClient.java @@ -27,14 +27,14 @@ public class BillManagementClient extends CBS8BaseClient { .build(); String requestData = JsonUtil.toJsonString(requestParam); - log.info(url + "\n" + requestData); + log.info("获取cbs票据参数," + url + "\n" + requestData); HttpPost httpPost = setupRequest(url, requestData); try (CloseableHttpResponse response = client.execute(httpPost)) { byte[] finalResponseData = handleResponse(response); String req = new String(finalResponseData, StandardCharsets.UTF_8); GetDtaResponse getDtaResponse = JsonUtil.parseBean(req, GetDtaResponse.class); - log.info(url + "\n" + JsonUtil.toJsonString(getDtaResponse)); + log.info("获取cbs票据结果," + "\n" + JsonUtil.toJsonString(getDtaResponse)); if (Objects.isNull(getDtaResponse)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); diff --git a/src/com/engine/salary/timer/CBS8GetDtaJob.java b/src/com/engine/salary/timer/CBS8GetDtaJob.java deleted file mode 100644 index 044d02c79..000000000 --- a/src/com/engine/salary/timer/CBS8GetDtaJob.java +++ /dev/null @@ -1,130 +0,0 @@ -package com.engine.salary.timer; - -import cn.hutool.core.util.StrUtil; -import com.engine.salary.exception.SalaryRunTimeException; -import com.engine.salary.mapper.hrm.HrmSnapshotMapper; -import com.engine.salary.remote.cbs8.client.BillManagementClient; -import com.engine.salary.remote.cbs8.request.GetDtaRequest; -import com.engine.salary.remote.cbs8.response.GetDtaResponse; -import com.engine.salary.util.db.MapperProxyFactory; -import lombok.extern.slf4j.Slf4j; -import weaver.hrm.User; -import weaver.interfaces.schedule.BaseCronJob; - -import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * 获取CBS票据信息 - *

Copyright: Copyright (c) 2024

- *

Company: 泛微软件

- * - * @author qiantao - * @version 1.0 - **/ -@Slf4j -public class CBS8GetDtaJob extends BaseCronJob { - - /** - * 出票日期起 格式为yyyy-mm-dd,出票日期起止不允许一边有值一边无值,日期间隔最大为一年 - */ - private String issueDateStart; - /** - * 出票日期止 格式为yyyy-mm-dd,出票日期起止不允许一边有值一边无值,日期间隔最大为一年 - */ - private String issueDateEnd; - - /** - * 持票人单位编码 多选。填在cbs系统公共设置>基础信息>组织机构维护的单位编码 - */ - private String displayHoldOrganizationCodeList; - /** - * 持票人账号 多选。 - */ - private String holdAccountList; - - - private HrmSnapshotMapper getHrmSnapshotMapper() { - return MapperProxyFactory.getProxy(HrmSnapshotMapper.class); - } - - @Override - public void execute() { - User user = new User(); - user.setUid(1); - user.setLoginid("sysadmin"); - - try { - GetDtaRequest requestParam = new GetDtaRequest(); - requestParam.setCurrentPage(1); - requestParam.setPageSize(1000); - - if (StrUtil.isNotBlank(issueDateStart) && StrUtil.isNotBlank(issueDateEnd)) { - requestParam.setIssueDateStart(issueDateStart); - requestParam.setIssueDateEnd(issueDateEnd); - } else { - String nowDate = LocalDate.now().toString(); - requestParam.setIssueDateStart(nowDate); - requestParam.setIssueDateEnd(nowDate); - } - requestParam.setDisplayHoldOrganizationCodeList(Arrays.stream(displayHoldOrganizationCodeList.split(",")).collect(Collectors.toList())); - requestParam.setHoldAccountList(Arrays.stream(holdAccountList.split(",")).collect(Collectors.toList())); - - BillManagementClient bailManagementClient = new BillManagementClient(); - GetDtaResponse getDtaResponse = bailManagementClient.dtaQuery(requestParam); - - List list = getDtaResponse.getData().getList(); - - - Integer modeId = 1; - List fields = new ArrayList() {{ - add("formmodeid"); - add("modedatacreater"); - add("modedatacreatertype"); - add("modedatacreatedate"); - add("modedatacreatetime"); - }}; -// String currDate = TimeUtil.getCurrentDateString(); -// SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); -// String currTime = sdf.format(new Date()); -// List values = new ArrayList() {{ -// add(modeId); -// add(1); -// add(0); -// add(String.format("'%s'", currDate)); -// add(String.format("'%s'", currTime)); -// }}; -// for (PushSettingItemPO item : pushSettingItemPOS) { -// //数据库字段 -// String fieldName = item.getFieldName(); -// fields.add(fieldName); -// // 公式变量的值 -// String field = item.getItem(); -// String value = formulaVarValueMap.getOrDefault(field, StringUtils.EMPTY); -// PushItemFieldEnum pushItemFieldEnum = PushItemFieldEnum.parseByValue(item.getFieldType()); -// values.add(pushItemFieldEnum.convertValue(value)); -// } -// String tableName = setting.getTableName(); -// String sql = String.format("insert into %s (%s) values (%s)", tableName, String.join(",", fields), values.stream().map(Object::toString).collect(Collectors.joining(","))); -// RecordSet rs = new RecordSet(); -// rs.execute(sql); -// -// if (modeId != null) { -// rs.executeQuery("select max(id) from " + tableName); -// int mainId = 0; -// if (rs.next()) { -// mainId = rs.getInt(1); -// } -// ModeRightInfo ModeRightInfo = new ModeRightInfo(); -// ModeRightInfo.setNewRight(true); -// ModeRightInfo.editModeDataShare(1, modeId, mainId); -// } - } catch (Exception e) { - log.error("获取CBS票据信息失败", e); - throw new SalaryRunTimeException("获取CBS票据信息失败," + e.getMessage(), e); - } - } -} diff --git a/src/com/engine/salary/timer/CBS8GetTransactionDetailJob.java b/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java similarity index 89% rename from src/com/engine/salary/timer/CBS8GetTransactionDetailJob.java rename to src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java index 07dc0c7bf..75d7a5877 100644 --- a/src/com/engine/salary/timer/CBS8GetTransactionDetailJob.java +++ b/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java @@ -3,7 +3,6 @@ package com.engine.salary.timer; import cn.hutool.core.util.StrUtil; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.SQLMapper; -import com.engine.salary.mapper.hrm.HrmSnapshotMapper; import com.engine.salary.remote.cbs8.client.AccountManagementClient; import com.engine.salary.remote.cbs8.config.EBS2ECConfig; import com.engine.salary.remote.cbs8.request.GetTransactionDetailRequest; @@ -27,7 +26,7 @@ import java.util.*; import java.util.stream.Collectors; /** - * 获取CBS交易信息 + * 获取境内账户明细 *

Copyright: Copyright (c) 2024

*

Company: 泛微软件

* @@ -35,7 +34,7 @@ import java.util.stream.Collectors; * @version 1.0 **/ @Slf4j -public class CBS8GetTransactionDetailJob extends BaseCronJob { +public class SyncCBSAccountDetailsJob extends BaseCronJob { /** * 开始日期 格式为yyyy-mm-dd @@ -54,10 +53,6 @@ public class CBS8GetTransactionDetailJob extends BaseCronJob { */ private String paymentNatureList; - private HrmSnapshotMapper getHrmSnapshotMapper() { - return MapperProxyFactory.getProxy(HrmSnapshotMapper.class); - } - private SQLMapper getSQLMapper() { return MapperProxyFactory.getProxy(SQLMapper.class); } @@ -106,7 +101,7 @@ public class CBS8GetTransactionDetailJob extends BaseCronJob { //获取已存在的数据 EBS2ECConfig.Table.Field uniqueField = table.getFields().stream().filter(EBS2ECConfig.Table.Field::isUnique).findFirst().orElse(null); - if(uniqueField == null){ + if (uniqueField == null) { throw new SalaryRunTimeException("未设置唯一标识字段"); } String uniqueKey = uniqueField.getKey(); @@ -126,12 +121,16 @@ public class CBS8GetTransactionDetailJob extends BaseCronJob { } List fields = new ArrayList() {{ + //建模默认字段 add("formmodeid"); add("modedatacreater"); add("modedatacreatertype"); add("modedatacreatedate"); add("modedatacreatetime"); + //业务逻辑字段,收款类型,默认是银行存款 + add("sklx"); }}; + String currDate = TimeUtil.getCurrentDateString(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); String currTime = sdf.format(new Date()); @@ -141,6 +140,8 @@ public class CBS8GetTransactionDetailJob extends BaseCronJob { add(0); add(String.format("'%s'", currDate)); add(String.format("'%s'", currTime)); + //业务逻辑字段,收款类型,默认是银行存款 + add(0); }}; for (EBS2ECConfig.Table.Field field : table.getFields()) { //数据库字段 @@ -150,6 +151,15 @@ public class CBS8GetTransactionDetailJob extends BaseCronJob { values.add(String.format("'%s'", detailMap.getOrDefault(field.getEbsKey(), ""))); } + /* + * 认领逻辑, + * 根据回款人去表里匹配【回款人与办事处的对照表】 + * 如果能匹配到数据,则状态改为已自动认领,同时把办事处(部门)的值同步到办事处字段中,是否系统自动认领同步为是; + * 如对照标准无数据,则状态为:未认领; + */ + + + String sql = String.format("insert into %s (%s) values (%s)", tableName, String.join(",", fields), values.stream().map(Object::toString).collect(Collectors.joining(","))); RecordSet rs = new RecordSet(); rs.execute(sql); diff --git a/src/com/engine/salary/timer/SyncCBSPayDetailsJob.java b/src/com/engine/salary/timer/SyncCBSPayDetailsJob.java new file mode 100644 index 000000000..40aaf4fa0 --- /dev/null +++ b/src/com/engine/salary/timer/SyncCBSPayDetailsJob.java @@ -0,0 +1,183 @@ +package com.engine.salary.timer; + +import cn.hutool.core.util.StrUtil; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.SQLMapper; +import com.engine.salary.remote.cbs8.client.BillManagementClient; +import com.engine.salary.remote.cbs8.config.EBS2ECConfig; +import com.engine.salary.remote.cbs8.request.GetDtaRequest; +import com.engine.salary.remote.cbs8.response.GetDtaResponse; +import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.security.AnyTypePermission; +import lombok.extern.slf4j.Slf4j; +import weaver.conn.RecordSet; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.GCONST; +import weaver.general.TimeUtil; +import weaver.hrm.User; +import weaver.interfaces.schedule.BaseCronJob; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 获取票据收款明细 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +public class SyncCBSPayDetailsJob extends BaseCronJob { + + + /** + * 持票人单位编码 多选。填在cbs系统公共设置>基础信息>组织机构维护的单位编码 + */ + private String displayHoldOrganizationCodeList; + /** + * 持票人账号 多选。 + */ + private String holdAccountList; + + /** + * 出票日期起 格式为yyyy-mm-dd,出票日期起止不允许一边有值一边无值,日期间隔最大为一年 + */ + private String issueDateStart; + /** + * 出票日期止 格式为yyyy-mm-dd,出票日期起止不允许一边有值一边无值,日期间隔最大为一年 + */ + private String issueDateEnd; + + /** + * 系统票据类型 多选。按附录4.1.3票据类型-票据状态-流通标志级联关系表选择后按顺序填写。系统票据类型枚举见附录4.1.3。票据状态枚举见附录4.1.4。流通标志枚举见附录4.1.5。 + */ + private String billVarietyList; + + private SQLMapper getSQLMapper() { + return MapperProxyFactory.getProxy(SQLMapper.class); + } + + @Override + public void execute() { + User user = new User(); + user.setUid(1); + user.setLoginid("sysadmin"); + + try { + GetDtaRequest requestParam = new GetDtaRequest(); + requestParam.setCurrentPage(1); + requestParam.setPageSize(1000); + + if (StrUtil.isNotBlank(issueDateStart) && StrUtil.isNotBlank(issueDateEnd)) { + requestParam.setIssueDateStart(issueDateStart); + requestParam.setIssueDateEnd(issueDateEnd); + } else { + String nowDate = LocalDate.now().toString(); + requestParam.setIssueDateStart(nowDate); + requestParam.setIssueDateEnd(nowDate); + } + if(StrUtil.isBlank(displayHoldOrganizationCodeList)){ + throw new SalaryRunTimeException("持票人单位编码为空,请在计划任务配置此项!"); + } + requestParam.setDisplayHoldOrganizationCodeList(Arrays.stream(displayHoldOrganizationCodeList.split(",")).collect(Collectors.toList())); + if(StrUtil.isBlank(holdAccountList)){ + throw new SalaryRunTimeException("持票人账号为空,请在计划任务配置此项!"); + } + requestParam.setHoldAccountList(Arrays.stream(holdAccountList.split(",")).collect(Collectors.toList())); + requestParam.setBillVarietyList(Arrays.stream(billVarietyList.split(",")).collect(Collectors.toList())); + + BillManagementClient bailManagementClient = new BillManagementClient(); + GetDtaResponse getDtaResponse = bailManagementClient.dtaQuery(requestParam); + + List list = getDtaResponse.getData().getList(); + + //加载cbs配置 + XStream xStream = new XStream(); + String resource = GCONST.getRootPath() + "WEB-INF" + File.separatorChar + "CBS2ECConfig.xml"; + File file = new File(resource); + xStream.addPermission(AnyTypePermission.ANY); + xStream.processAnnotations(EBS2ECConfig.class); + EBS2ECConfig dto = (EBS2ECConfig) xStream.fromXML(file); + EBS2ECConfig.Table table = dto.getTables().get(1); + Integer modeId = table.getModeId(); + String tableName = table.getKey(); + + //获取已存在的数据 + EBS2ECConfig.Table.Field uniqueField = table.getFields().stream().filter(EBS2ECConfig.Table.Field::isUnique).findFirst().orElse(null); + if (uniqueField == null) { + throw new SalaryRunTimeException("未设置唯一标识字段"); + } + String uniqueKey = uniqueField.getKey(); + String uniqueEbsKey = uniqueField.getEbsKey(); + List uniqueDataKeys = getSQLMapper().listString(String.format("select %s from %s", uniqueKey, tableName)); + + for (GetDtaResponse.Detail detail : list) { + Map detailMap = JsonUtil.parseMap(detail, String.class); + String uniqueData = detailMap.get(uniqueEbsKey); + if (StrUtil.isBlank(uniqueData)) { + log.warn("跳过cbs票据数据,唯一标识返回空,uniqueKey:{},uniqueEbsKey:{}", uniqueKey, uniqueEbsKey); + continue; + } + if (uniqueDataKeys.contains(uniqueData)) { + log.warn("跳过cbs票据数据,数据已存在,uniqueKey:{},uniqueEbsKey:{},值{}", uniqueKey, uniqueEbsKey, uniqueData); + continue; + } + + List fields = new ArrayList() {{ + add("formmodeid"); + add("modedatacreater"); + add("modedatacreatertype"); + add("modedatacreatedate"); + add("modedatacreatetime"); + //业务逻辑字段,收款类型 + add("sklx"); + }}; + String currDate = TimeUtil.getCurrentDateString(); + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); + String currTime = sdf.format(new Date()); + List values = new ArrayList() {{ + add(modeId); + add(1); + add(0); + add(String.format("'%s'", currDate)); + add(String.format("'%s'", currTime)); + //业务逻辑字段,收款类型,银承,商承 + add("AC01".equals(detailMap.get("billType")) ? 0 : 1); + }}; + + for (EBS2ECConfig.Table.Field field : table.getFields()) { + //数据库字段 + String fieldName = field.getKey(); + fields.add(fieldName); + // 接口值 + values.add(String.format("'%s'", detailMap.getOrDefault(field.getEbsKey(), ""))); + } + + String sql = String.format("insert into %s (%s) values (%s)", tableName, String.join(",", fields), values.stream().map(Object::toString).collect(Collectors.joining(","))); + RecordSet rs = new RecordSet(); + rs.execute(sql); + + if (modeId != null) { + rs.executeQuery("select max(id) from " + tableName); + int mainId = 0; + if (rs.next()) { + mainId = rs.getInt(1); + } + ModeRightInfo ModeRightInfo = new ModeRightInfo(); + ModeRightInfo.setNewRight(true); + ModeRightInfo.editModeDataShare(1, modeId, mainId); + } + } + } catch (Exception e) { + log.error("获取CBS票据信息失败", e); + throw new SalaryRunTimeException("获取CBS票据信息失败," + e.getMessage(), e); + } + } +} From 28b5ee71f6a76fa991ebc7c8a873fdea63728a60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 3 Mar 2025 17:38:28 +0800 Subject: [PATCH 15/17] =?UTF-8?q?=E6=B1=87=E6=AC=BE=E4=BA=BA=E4=B8=8E?= =?UTF-8?q?=E5=8A=9E=E4=BA=8B=E5=A4=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/CBS2ECConfig.xml | 4 +- .../salary/mapper/cbs/UfHkrdzbMapper.java | 57 ++++ .../salary/mapper/cbs/UfHkrdzbMapper.xml | 322 ++++++++++++++++++ .../cbs8/client/AccountManagementClient.java | 1 + .../salary/remote/cbs8/po/UfHkrdzbPO.java | 55 +++ .../remote/cbs8/response/CBS8PageInfo.java | 77 +++++ .../GetTransactionDetailResponse.java | 3 +- .../timer/SyncCBSAccountDetailsJob.java | 57 +++- 8 files changed, 568 insertions(+), 8 deletions(-) create mode 100644 src/com/engine/salary/mapper/cbs/UfHkrdzbMapper.java create mode 100644 src/com/engine/salary/mapper/cbs/UfHkrdzbMapper.xml create mode 100644 src/com/engine/salary/remote/cbs8/po/UfHkrdzbPO.java create mode 100644 src/com/engine/salary/remote/cbs8/response/CBS8PageInfo.java diff --git a/resource/WEB-INF/CBS2ECConfig.xml b/resource/WEB-INF/CBS2ECConfig.xml index 563605ccb..c8af3283c 100644 --- a/resource/WEB-INF/CBS2ECConfig.xml +++ b/resource/WEB-INF/CBS2ECConfig.xml @@ -5,8 +5,8 @@ - - + +
diff --git a/src/com/engine/salary/mapper/cbs/UfHkrdzbMapper.java b/src/com/engine/salary/mapper/cbs/UfHkrdzbMapper.java new file mode 100644 index 000000000..cfe5e56a6 --- /dev/null +++ b/src/com/engine/salary/mapper/cbs/UfHkrdzbMapper.java @@ -0,0 +1,57 @@ +package com.engine.salary.mapper.cbs; + +import com.engine.salary.remote.cbs8.po.UfHkrdzbPO; + +import java.util.List; + +public interface UfHkrdzbMapper { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(UfHkrdzbPO ufHkrdzb); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + UfHkrdzbPO getById(Integer id); + + /** + * 新增,忽略null字段 + * + * @param ufHkrdzb 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(UfHkrdzbPO ufHkrdzb); + + /** + * 修改,修改所有字段 + * + * @param ufHkrdzb 修改的记录 + * @return 返回影响行数 + */ + int update(UfHkrdzbPO ufHkrdzb); + + /** + * 修改,忽略null字段 + * + * @param ufHkrdzb 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(UfHkrdzbPO ufHkrdzb); + + +} \ No newline at end of file diff --git a/src/com/engine/salary/mapper/cbs/UfHkrdzbMapper.xml b/src/com/engine/salary/mapper/cbs/UfHkrdzbMapper.xml new file mode 100644 index 000000000..7380ec2c5 --- /dev/null +++ b/src/com/engine/salary/mapper/cbs/UfHkrdzbMapper.xml @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + t + . + id + , t.requestId + , t.formmodeid + , t.modedatacreater + , t.modedatacreatertype + , t.modedatacreatedate + , t.modedatacreatetime + , t.MODEUUID + , t.form_biz_id + , t.gsbm + , t.khbm + , t.khmc + , t.bmbm + , t.bmd + , t.bm + , t.modedatamodifier + , t.modedatamodifydatetime + + + + + + + + + + + + + + + INSERT INTO uf_hkrdzb + + + + requestId, + + + formmodeid, + + + modedatacreater, + + + modedatacreatertype, + + + modedatacreatedate, + + + modedatacreatetime, + + + MODEUUID, + + + form_biz_id, + + + gsbm, + + + khbm, + + + khmc, + + + bmbm, + + + bmd, + + + bm, + + + modedatamodifier, + + + modedatamodifydatetime, + + + + + #{requestId}, + + + #{formmodeid}, + + + #{modedatacreater}, + + + #{modedatacreatertype}, + + + #{modedatacreatedate}, + + + #{modedatacreatetime}, + + + #{modeuuid}, + + + #{formBizId}, + + + #{gsbm}, + + + #{khbm}, + + + #{khmc}, + + + #{bmbm}, + + + #{bmd}, + + + #{bm}, + + + #{modedatamodifier}, + + + #{modedatamodifydatetime}, + + + + + + + + + UPDATE uf_hkrdzb + + requestId=#{requestId}, + formmodeid=#{formmodeid}, + modedatacreater=#{modedatacreater}, + modedatacreatertype=#{modedatacreatertype}, + modedatacreatedate=#{modedatacreatedate}, + modedatacreatetime=#{modedatacreatetime}, + MODEUUID=#{modeuuid}, + form_biz_id=#{formBizId}, + gsbm=#{gsbm}, + khbm=#{khbm}, + khmc=#{khmc}, + bmbm=#{bmbm}, + bmd=#{bmd}, + bm=#{bm}, + modedatamodifier=#{modedatamodifier}, + modedatamodifydatetime=#{modedatamodifydatetime}, + + WHERE id = #{id} + + + + + + UPDATE uf_hkrdzb + + + requestId=#{requestId}, + + + formmodeid=#{formmodeid}, + + + modedatacreater=#{modedatacreater}, + + + modedatacreatertype=#{modedatacreatertype}, + + + modedatacreatedate=#{modedatacreatedate}, + + + modedatacreatetime=#{modedatacreatetime}, + + + MODEUUID=#{modeuuid}, + + + form_biz_id=#{formBizId}, + + + gsbm=#{gsbm}, + + + khbm=#{khbm}, + + + khmc=#{khmc}, + + + bmbm=#{bmbm}, + + + bmd=#{bmd}, + + + bm=#{bm}, + + + modedatamodifier=#{modedatamodifier}, + + + modedatamodifydatetime=#{modedatamodifydatetime}, + + + WHERE id = #{id} + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/remote/cbs8/client/AccountManagementClient.java b/src/com/engine/salary/remote/cbs8/client/AccountManagementClient.java index 40041bc9c..484cd8612 100644 --- a/src/com/engine/salary/remote/cbs8/client/AccountManagementClient.java +++ b/src/com/engine/salary/remote/cbs8/client/AccountManagementClient.java @@ -50,6 +50,7 @@ public class AccountManagementClient extends CBS8BaseClient { return getTransactionDetailResponse; } catch (IOException ignored) { + log.error("网络连接失败或超时!",ignored); throw new SalaryRunTimeException("网络连接失败或超时!"); } finally { client.close(); diff --git a/src/com/engine/salary/remote/cbs8/po/UfHkrdzbPO.java b/src/com/engine/salary/remote/cbs8/po/UfHkrdzbPO.java new file mode 100644 index 000000000..4d3de9bdd --- /dev/null +++ b/src/com/engine/salary/remote/cbs8/po/UfHkrdzbPO.java @@ -0,0 +1,55 @@ +package com.engine.salary.remote.cbs8.po; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UfHkrdzbPO { + private Integer id; + + private Integer requestId; + + private Integer formmodeid; + + private Integer modedatacreater; + + private Integer modedatacreatertype; + + private String modedatacreatedate; + + private String modedatacreatetime; + + private String modeuuid; + + private String formBizId; + + private String gsbm; + + private String khbm; + + private String khmc; + + private String bmbm; + + private Integer bmd; + + private Integer bm; + + private Integer modedatamodifier; + + private String modedatamodifydatetime; + + + private Collection ids; + + private Integer departmentId; + +} \ No newline at end of file diff --git a/src/com/engine/salary/remote/cbs8/response/CBS8PageInfo.java b/src/com/engine/salary/remote/cbs8/response/CBS8PageInfo.java new file mode 100644 index 000000000..2ae5c7e7e --- /dev/null +++ b/src/com/engine/salary/remote/cbs8/response/CBS8PageInfo.java @@ -0,0 +1,77 @@ +package com.engine.salary.remote.cbs8.response; + +import lombok.Data; + + +@Data +public class CBS8PageInfo { + /** + * 当前页 + */ + private int pageNum; + /** + * 每页的数量 + */ + private int pageSize; + /** + * 当前页的数量 + */ + private int size; + /** + * 总页数 + */ + private int pages; + /** + * 上一页 + */ + private int prePage; + /** + * 下一页 + */ + private int nextPage; + /** + * 总记录数 + */ + private long total; + /** + * 当前页面第一个元素在数据库中的行号 + */ + private int startRow; + /** + * 当前页面最后一个元素在数据库中的行号 + */ + private int endRow; + /** + * 是否为第一页 + */ + private boolean isFirstPage; + /** + * 是否为最后一页 + */ + private boolean isLastPage; + /** + * 是否有前一页 + */ + private boolean hasPreviousPage; + /** + * 是否有下一页 + */ + private boolean hasNextPage; + /** + * 导航页码数 + */ + private int navigatePages; + /** + * 所有导航页号 + */ + private int[] navigatepageNums; + /** + * 导航条上的第一页 + */ + private int navigateFirstPage; + /** + * 导航条上的最后一页 + */ + private int navigateLastPage; + +} diff --git a/src/com/engine/salary/remote/cbs8/response/GetTransactionDetailResponse.java b/src/com/engine/salary/remote/cbs8/response/GetTransactionDetailResponse.java index 6e6648a8c..61b2f5ddb 100644 --- a/src/com/engine/salary/remote/cbs8/response/GetTransactionDetailResponse.java +++ b/src/com/engine/salary/remote/cbs8/response/GetTransactionDetailResponse.java @@ -17,7 +17,8 @@ public class GetTransactionDetailResponse extends CBS8BaseResponse { private Body data; @Data - public static class Body { + @EqualsAndHashCode(callSuper = true) + public static class Body extends CBS8PageInfo{ /** * 明细列表 */ diff --git a/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java b/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java index 75d7a5877..52825832c 100644 --- a/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java +++ b/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java @@ -3,11 +3,14 @@ package com.engine.salary.timer; import cn.hutool.core.util.StrUtil; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.SQLMapper; +import com.engine.salary.mapper.cbs.UfHkrdzbMapper; import com.engine.salary.remote.cbs8.client.AccountManagementClient; import com.engine.salary.remote.cbs8.config.EBS2ECConfig; +import com.engine.salary.remote.cbs8.po.UfHkrdzbPO; import com.engine.salary.remote.cbs8.request.GetTransactionDetailRequest; import com.engine.salary.remote.cbs8.response.GetTransactionDetailResponse; import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.security.AnyTypePermission; @@ -57,6 +60,10 @@ public class SyncCBSAccountDetailsJob extends BaseCronJob { return MapperProxyFactory.getProxy(SQLMapper.class); } + private UfHkrdzbMapper getUfHkrdzbMapper() { + return MapperProxyFactory.getProxy(UfHkrdzbMapper.class); + } + @Override public void execute() { User user = new User(); @@ -88,6 +95,18 @@ public class SyncCBSAccountDetailsJob extends BaseCronJob { GetTransactionDetailResponse getTransactionDetailResponse = accountManagementClient.transactionDetailQuery(requestParam); List list = getTransactionDetailResponse.getData().getList(); + //判断是否还存在数据,递归查询 + boolean hasNextPage = getTransactionDetailResponse.getData().isHasNextPage(); + int nextPage = getTransactionDetailResponse.getData().getNextPage(); + while (hasNextPage) { + requestParam.setCurrentPage(nextPage); + GetTransactionDetailResponse nextPageResponse = accountManagementClient.transactionDetailQuery(requestParam); + List pageData = nextPageResponse.getData().getList(); + list.addAll(pageData); + hasNextPage = nextPageResponse.getData().isHasNextPage(); + nextPage = nextPageResponse.getData().getNextPage(); + } + //加载cbs配置 XStream xStream = new XStream(); String resource = GCONST.getRootPath() + "WEB-INF" + File.separatorChar + "CBS2ECConfig.xml"; @@ -108,6 +127,10 @@ public class SyncCBSAccountDetailsJob extends BaseCronJob { String uniqueEbsKey = uniqueField.getEbsKey(); List uniqueDataKeys = getSQLMapper().listString(String.format("select %s from %s", uniqueKey, tableName)); + //获取汇款人与办事处的对照数据 + List ufHkrdzbPOS = getUfHkrdzbMapper().listAll(); + Map customerDepartmentMap = SalaryEntityUtil.convert2Map(ufHkrdzbPOS, UfHkrdzbPO::getKhmc, UfHkrdzbPO::getDepartmentId); + for (GetTransactionDetailResponse.Detail detail : list) { Map detailMap = JsonUtil.parseMap(detail, String.class); String uniqueData = detailMap.get(uniqueEbsKey); @@ -127,8 +150,6 @@ public class SyncCBSAccountDetailsJob extends BaseCronJob { add("modedatacreatertype"); add("modedatacreatedate"); add("modedatacreatetime"); - //业务逻辑字段,收款类型,默认是银行存款 - add("sklx"); }}; String currDate = TimeUtil.getCurrentDateString(); @@ -140,25 +161,51 @@ public class SyncCBSAccountDetailsJob extends BaseCronJob { add(0); add(String.format("'%s'", currDate)); add(String.format("'%s'", currTime)); - //业务逻辑字段,收款类型,默认是银行存款 - add(0); }}; + + String hkr = ""; for (EBS2ECConfig.Table.Field field : table.getFields()) { //数据库字段 String fieldName = field.getKey(); fields.add(fieldName); // 接口值 + String value = detailMap.getOrDefault(field.getEbsKey(), ""); values.add(String.format("'%s'", detailMap.getOrDefault(field.getEbsKey(), ""))); + + //汇款人 + if ("hkr".equals(fieldName)) { + hkr = value; + } } + + //业务逻辑字段,收款类型,默认是银行存款 + fields.add("sklx"); + values.add(0); /* * 认领逻辑, - * 根据回款人去表里匹配【回款人与办事处的对照表】 + * 根据汇款人去表里匹配【汇款人与办事处的对照表】 * 如果能匹配到数据,则状态改为已自动认领,同时把办事处(部门)的值同步到办事处字段中,是否系统自动认领同步为是; * 如对照标准无数据,则状态为:未认领; */ + Integer departmentId = customerDepartmentMap.get(hkr); + if(departmentId!=null){ + //认领 + fields.add("zt"); + values.add(1); + //是否系统认领 + fields.add("sfxtzdrl"); + values.add(1); + //办事处 + fields.add("szbm"); + values.add(departmentId); + }else { + //未认领 + fields.add("zt"); + values.add(0); + } String sql = String.format("insert into %s (%s) values (%s)", tableName, String.join(",", fields), values.stream().map(Object::toString).collect(Collectors.joining(","))); RecordSet rs = new RecordSet(); From 848ce0a62dc0b2aab343206abd23d8f15b93e5d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 3 Mar 2025 18:10:02 +0800 Subject: [PATCH 16/17] =?UTF-8?q?1=E3=80=81=E9=80=92=E5=BD=92=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=88=86=E9=A1=B5=E9=80=BB=E8=BE=91=202=E3=80=81?= =?UTF-8?q?=E7=A5=A8=E6=8D=AE=E6=94=B6=E6=AC=BE=E6=89=BF=E5=85=91=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../remote/cbs8/response/GetDtaResponse.java | 2 +- .../timer/SyncCBSAccountDetailsJob.java | 14 ++-- .../salary/timer/SyncCBSPayDetailsJob.java | 70 +++++++++++++++++-- 3 files changed, 71 insertions(+), 15 deletions(-) diff --git a/src/com/engine/salary/remote/cbs8/response/GetDtaResponse.java b/src/com/engine/salary/remote/cbs8/response/GetDtaResponse.java index c2c92c61c..e2587a9b4 100644 --- a/src/com/engine/salary/remote/cbs8/response/GetDtaResponse.java +++ b/src/com/engine/salary/remote/cbs8/response/GetDtaResponse.java @@ -16,7 +16,7 @@ public class GetDtaResponse extends CBS8BaseResponse { private Body data; @Data - public static class Body { + public static class Body extends CBS8PageInfo{ /** * 明细列表 */ diff --git a/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java b/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java index 52825832c..5d7abfa35 100644 --- a/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java +++ b/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java @@ -71,9 +71,6 @@ public class SyncCBSAccountDetailsJob extends BaseCronJob { user.setLoginid("sysadmin"); try { - AccountManagementClient accountManagementClient = new AccountManagementClient(); - - GetTransactionDetailRequest requestParam = new GetTransactionDetailRequest(); requestParam.setCurrentPage(1); requestParam.setPageSize(1000); @@ -92,12 +89,15 @@ public class SyncCBSAccountDetailsJob extends BaseCronJob { if (StrUtil.isNotBlank(paymentNatureList)) { requestParam.setPaymentNatureList(Arrays.stream(paymentNatureList.split(",")).collect(Collectors.toList())); } - GetTransactionDetailResponse getTransactionDetailResponse = accountManagementClient.transactionDetailQuery(requestParam); - List list = getTransactionDetailResponse.getData().getList(); + + //查询前1000条数据 + AccountManagementClient accountManagementClient = new AccountManagementClient(); + GetTransactionDetailResponse response = accountManagementClient.transactionDetailQuery(requestParam); + List list = response.getData().getList(); //判断是否还存在数据,递归查询 - boolean hasNextPage = getTransactionDetailResponse.getData().isHasNextPage(); - int nextPage = getTransactionDetailResponse.getData().getNextPage(); + boolean hasNextPage = response.getData().isHasNextPage(); + int nextPage = response.getData().getNextPage(); while (hasNextPage) { requestParam.setCurrentPage(nextPage); GetTransactionDetailResponse nextPageResponse = accountManagementClient.transactionDetailQuery(requestParam); diff --git a/src/com/engine/salary/timer/SyncCBSPayDetailsJob.java b/src/com/engine/salary/timer/SyncCBSPayDetailsJob.java index 40aaf4fa0..b33978318 100644 --- a/src/com/engine/salary/timer/SyncCBSPayDetailsJob.java +++ b/src/com/engine/salary/timer/SyncCBSPayDetailsJob.java @@ -3,11 +3,14 @@ package com.engine.salary.timer; import cn.hutool.core.util.StrUtil; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.SQLMapper; +import com.engine.salary.mapper.cbs.UfHkrdzbMapper; import com.engine.salary.remote.cbs8.client.BillManagementClient; import com.engine.salary.remote.cbs8.config.EBS2ECConfig; +import com.engine.salary.remote.cbs8.po.UfHkrdzbPO; import com.engine.salary.remote.cbs8.request.GetDtaRequest; import com.engine.salary.remote.cbs8.response.GetDtaResponse; import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.security.AnyTypePermission; @@ -64,6 +67,10 @@ public class SyncCBSPayDetailsJob extends BaseCronJob { return MapperProxyFactory.getProxy(SQLMapper.class); } + private UfHkrdzbMapper getUfHkrdzbMapper() { + return MapperProxyFactory.getProxy(UfHkrdzbMapper.class); + } + @Override public void execute() { User user = new User(); @@ -93,10 +100,22 @@ public class SyncCBSPayDetailsJob extends BaseCronJob { requestParam.setHoldAccountList(Arrays.stream(holdAccountList.split(",")).collect(Collectors.toList())); requestParam.setBillVarietyList(Arrays.stream(billVarietyList.split(",")).collect(Collectors.toList())); + //查询前1000条数据 BillManagementClient bailManagementClient = new BillManagementClient(); - GetDtaResponse getDtaResponse = bailManagementClient.dtaQuery(requestParam); + GetDtaResponse response = bailManagementClient.dtaQuery(requestParam); + List list = response.getData().getList(); - List list = getDtaResponse.getData().getList(); + //判断是否还存在数据,递归查询 + boolean hasNextPage = response.getData().isHasNextPage(); + int nextPage = response.getData().getNextPage(); + while (hasNextPage) { + requestParam.setCurrentPage(nextPage); + GetDtaResponse nextPageResponse = bailManagementClient.dtaQuery(requestParam); + List pageData = nextPageResponse.getData().getList(); + list.addAll(pageData); + hasNextPage = nextPageResponse.getData().isHasNextPage(); + nextPage = nextPageResponse.getData().getNextPage(); + } //加载cbs配置 XStream xStream = new XStream(); @@ -118,6 +137,11 @@ public class SyncCBSPayDetailsJob extends BaseCronJob { String uniqueEbsKey = uniqueField.getEbsKey(); List uniqueDataKeys = getSQLMapper().listString(String.format("select %s from %s", uniqueKey, tableName)); + //获取汇款人与办事处的对照数据 + List ufHkrdzbPOS = getUfHkrdzbMapper().listAll(); + Map customerDepartmentMap = SalaryEntityUtil.convert2Map(ufHkrdzbPOS, UfHkrdzbPO::getKhmc, UfHkrdzbPO::getDepartmentId); + + for (GetDtaResponse.Detail detail : list) { Map detailMap = JsonUtil.parseMap(detail, String.class); String uniqueData = detailMap.get(uniqueEbsKey); @@ -136,8 +160,6 @@ public class SyncCBSPayDetailsJob extends BaseCronJob { add("modedatacreatertype"); add("modedatacreatedate"); add("modedatacreatetime"); - //业务逻辑字段,收款类型 - add("sklx"); }}; String currDate = TimeUtil.getCurrentDateString(); SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); @@ -148,16 +170,50 @@ public class SyncCBSPayDetailsJob extends BaseCronJob { add(0); add(String.format("'%s'", currDate)); add(String.format("'%s'", currTime)); - //业务逻辑字段,收款类型,银承,商承 - add("AC01".equals(detailMap.get("billType")) ? 0 : 1); }}; + String hkr = ""; for (EBS2ECConfig.Table.Field field : table.getFields()) { //数据库字段 String fieldName = field.getKey(); fields.add(fieldName); // 接口值 - values.add(String.format("'%s'", detailMap.getOrDefault(field.getEbsKey(), ""))); + String value = detailMap.getOrDefault(field.getEbsKey(), ""); + values.add(String.format("'%s'", value)); + + //汇款人 + if ("hkr".equals(fieldName)) { + hkr = value; + } + } + + //业务逻辑字段,收款类型 + fields.add("sklx"); + values. add("AC01".equals(detailMap.get("billType")) ? 0 : 1); + + /* + * 认领逻辑, + * 根据汇款人去表里匹配【汇款人与办事处的对照表】 + * 如果能匹配到数据,则状态改为已自动认领,同时把办事处(部门)的值同步到办事处字段中,是否系统自动认领同步为是; + * 如对照标准无数据,则状态为:未认领; + */ + Integer departmentId = customerDepartmentMap.get(hkr); + if(departmentId!=null){ + //认领 + fields.add("zt"); + values.add(1); + + //是否系统认领 + fields.add("sfxtzdrl"); + values.add(1); + + //办事处 + fields.add("szbm"); + values.add(departmentId); + }else { + //未认领 + fields.add("zt"); + values.add(0); } String sql = String.format("insert into %s (%s) values (%s)", tableName, String.join(",", fields), values.stream().map(Object::toString).collect(Collectors.joining(","))); From e663fac646db644b68def9aec2f36b5866646c51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 5 Mar 2025 10:56:49 +0800 Subject: [PATCH 17/17] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E7=A5=A8=E6=8D=AE?= =?UTF-8?q?=E6=B1=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/CBS2ECConfig.xml | 11 + .../timer/SyncCBSAccountDetailsJob.java | 69 +++- .../salary/timer/SyncCBSBillPoolJob.java | 311 ++++++++++++++++++ .../salary/timer/SyncCBSPayDetailsJob.java | 135 +++++++- 4 files changed, 504 insertions(+), 22 deletions(-) create mode 100644 src/com/engine/salary/timer/SyncCBSBillPoolJob.java diff --git a/resource/WEB-INF/CBS2ECConfig.xml b/resource/WEB-INF/CBS2ECConfig.xml index c8af3283c..e6bde94e6 100644 --- a/resource/WEB-INF/CBS2ECConfig.xml +++ b/resource/WEB-INF/CBS2ECConfig.xml @@ -22,4 +22,15 @@ + + + + + + + + +
+ + diff --git a/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java b/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java index 5d7abfa35..d8b7ab560 100644 --- a/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java +++ b/src/com/engine/salary/timer/SyncCBSAccountDetailsJob.java @@ -56,6 +56,55 @@ public class SyncCBSAccountDetailsJob extends BaseCronJob { */ private String paymentNatureList; + /** + * 日期类型 0-交易日期 + */ + private String dateType; + /** + * 账户列表 查询账户列表,不传默认返回全部 + */ + private String accountNoList; + /** + * 银行类型列表 例如招行CMB,银行类型枚举见附录4.1.5 + */ + private String bankTypeList; + /** + * 币种列表 见附录币种枚举,4.1.1 + */ + private String currencyList; + /** + * 明细来源 + * B:银行,即银行直联 + * U:用户,即手工/ERP接口导入 + * 不传默认查全部 + */ + private String detailedSources; + /** + * 明细类型 1-当日明细 2-历史明细 与明细日期无关,仅标识数据来源银行的不同接口 + */ + private String currentFlag; + + /** + * 账户性质列表 客户在公共设置>基础信息>账户性质查询自定义内容,例如AA-综合户,此处传值“AA” + */ + private String accountNatureList; + /** + * 银行流水号 银行流水号 + */ + private String bankSerialNumber; + /** + * 交易流水号 交易流水号,由CBS8定义生成的唯一标识 + */ + private Long transactionSerialNumber; + /** + * 单位编码列表 客户在公共设置>基础信息>组织机构维护,例如0001-XX科技有限公司,此处传0001 + */ + private String unitCodeList; + /** + * ERP业务参考号 erpSerialNumber + */ + private String erpSerialNumber; + private SQLMapper getSQLMapper() { return MapperProxyFactory.getProxy(SQLMapper.class); } @@ -82,13 +131,19 @@ public class SyncCBSAccountDetailsJob extends BaseCronJob { requestParam.setStartDate(nowDate); requestParam.setEndDate(nowDate); } - requestParam.setDateType("0"); - if (StrUtil.isNotBlank(loanType)) { - requestParam.setLoanType(loanType); - } - if (StrUtil.isNotBlank(paymentNatureList)) { - requestParam.setPaymentNatureList(Arrays.stream(paymentNatureList.split(",")).collect(Collectors.toList())); - } + requestParam.setLoanType(loanType); + requestParam.setPaymentNatureList(paymentNatureList == null ? null :Arrays.stream(paymentNatureList.split(",")).collect(Collectors.toList())); + requestParam.setDateType(dateType); + requestParam.setAccountNoList(accountNoList== null ? null :Arrays.stream(accountNoList.split(",")).collect(Collectors.toList())); + requestParam.setBankTypeList(bankTypeList== null ? null :Arrays.stream(bankTypeList.split(",")).collect(Collectors.toList())); + requestParam.setCurrencyList(currencyList== null ? null :Arrays.stream(currencyList.split(",")).collect(Collectors.toList())); + requestParam.setDetailedSources(detailedSources); + requestParam.setCurrentFlag(currentFlag); + requestParam.setAccountNatureList(accountNatureList== null ? null :Arrays.stream(accountNatureList.split(",")).collect(Collectors.toList())); + requestParam.setBankSerialNumber(bankSerialNumber); + requestParam.setTransactionSerialNumber(transactionSerialNumber); + requestParam.setUnitCodeList(unitCodeList== null ? null :Arrays.stream(unitCodeList.split(",")).collect(Collectors.toList())); + requestParam.setErpSerialNumber(erpSerialNumber); //查询前1000条数据 AccountManagementClient accountManagementClient = new AccountManagementClient(); diff --git a/src/com/engine/salary/timer/SyncCBSBillPoolJob.java b/src/com/engine/salary/timer/SyncCBSBillPoolJob.java new file mode 100644 index 000000000..48d885ec3 --- /dev/null +++ b/src/com/engine/salary/timer/SyncCBSBillPoolJob.java @@ -0,0 +1,311 @@ +package com.engine.salary.timer; + +import cn.hutool.core.util.StrUtil; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.SQLMapper; +import com.engine.salary.remote.cbs8.client.BillManagementClient; +import com.engine.salary.remote.cbs8.config.EBS2ECConfig; +import com.engine.salary.remote.cbs8.request.GetDtaRequest; +import com.engine.salary.remote.cbs8.response.GetDtaResponse; +import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.db.MapperProxyFactory; +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.security.AnyTypePermission; +import lombok.extern.slf4j.Slf4j; +import weaver.conn.RecordSet; +import weaver.formmode.setup.ModeRightInfo; +import weaver.general.GCONST; +import weaver.general.TimeUtil; +import weaver.general.Util; +import weaver.hrm.User; +import weaver.interfaces.schedule.BaseCronJob; + +import java.io.File; +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 获取票据池 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +public class SyncCBSBillPoolJob extends BaseCronJob { + + /** + * 持票人单位编码 多选。填在cbs系统公共设置>基础信息>组织机构维护的单位编码 + */ + private String displayHoldOrganizationCodeList; + /** + * 持票人账号 多选。 + */ + private String holdAccountList; + + /** + * 系统票据类型 多选。按附录4.1.3票据类型-票据状态-流通标志级联关系表选择后按顺序填写。系统票据类型枚举见附录4.1.3。票据状态枚举见附录4.1.4。流通标志枚举见附录4.1.5。 + */ + private String billVarietyList; + + /** + * 出票日期起 格式为yyyy-mm-dd,出票日期起止不允许一边有值一边无值,日期间隔最大为一年 + */ + private String issueDateStart; + + /** + * 出票日期止 格式为yyyy-mm-dd,出票日期起止不允许一边有值一边无值,日期间隔最大为一年 + */ + private String issueDateEnd; + + + /** + * 到期日期起 格式为yyyy-mm-dd,到期日期起止不允许一边有值一边无值,日期间隔最大为一年 + */ + private String dueDateStart; + /** + * 到期日期止 格式为yyyy-mm-dd,到期日期起止不允许一边有值一边无值,日期间隔最大为一年 + */ + private String dueDateEnd; + /** + * 票据种类 AC01-银承,AC02-商承 + */ + private String billType; + /** + * 票据来源 多选。1-直联交易,2-台账交易,3-台账登记,4-挑票同步,5-任务同步 + */ + private String draftSourceList; + /** + * 持票银行类型 多选。见附录4.1.1.银行类型枚举 + */ + private String holdBankTypeList; + + /** + * 持票签收日期起 格式为yyyy-mm-dd,持票签收日期起止不允许一边有值一边无值,日期间隔最大为一年 + */ + private String holdSignDateStart; + /** + * 持票签收日期止 格式为yyyy-mm-dd,持票签收日期起止不允许一边有值一边无值,日期间隔最大为一年 + */ + private String holdSignDateEnd; + /** + * 系统票据编号 + */ + private String draftNbr; + /** + * 票据(包)号 + */ + private String billNbr; + + /** + * 票据金额起 大于等于0,最多为两位小数且整数位上限为13位。票据金额起止不允许一边有值一边无值。单位(元) + */ + private BigDecimal billAmountStart; + + /** + * 票据金额止 大于等于0,最多为两位小数且整数位上限为13位。票据金额起止不允许一边有值一边无值。单位(元) + */ + private BigDecimal billAmountEnd; + + /** + * 子票区间起 子票区间起止不允许一边有值一边无值,最多12位 + */ + private String subBillIntervalStart; + /** + * 子票区间止 子票区间起止不允许一边有值一边无值,最多12位 + */ + private String subBillIntervalEnd; + + /** + * 票据状态 + */ + private String billStsList; + /** + * 流通标志 + */ + private String billTrsStsList; + /** + * 库存状态 1-已入库,2-已出库。 为空时默认查询全部数据 + */ + private String stockFlag; + /** + * 出库方式 0-空,2-背书,3-质押,4-解质,5-贴现,6-分包,7-结清, 8-作废。 为空时默认查询全部数据 + */ + private String outInvType; + /** + * 记录状态 NOR-正常,USE-占用,DEL-删除 SUC-完成。为空时默认查询全部数据 + */ + private String lockFlag; + + + private SQLMapper getSQLMapper() { + return MapperProxyFactory.getProxy(SQLMapper.class); + } + + @Override + public void execute() { + User user = new User(); + user.setUid(1); + user.setLoginid("sysadmin"); + + try { + GetDtaRequest requestParam = new GetDtaRequest(); + requestParam.setCurrentPage(1); + requestParam.setPageSize(1000); + + if (StrUtil.isBlank(displayHoldOrganizationCodeList)) { + throw new SalaryRunTimeException("持票人单位编码为空,请在计划任务配置此项!"); + } + requestParam.setDisplayHoldOrganizationCodeList(Arrays.stream(displayHoldOrganizationCodeList.split(",")).collect(Collectors.toList())); + + if (StrUtil.isBlank(holdAccountList)) { + throw new SalaryRunTimeException("持票人账号为空,请在计划任务配置此项!"); + } + requestParam.setHoldAccountList(Arrays.stream(holdAccountList.split(",")).collect(Collectors.toList())); + + if (StrUtil.isNotBlank(issueDateStart) && StrUtil.isNotBlank(issueDateEnd)) { + requestParam.setIssueDateStart(issueDateStart); + requestParam.setIssueDateEnd(issueDateEnd); + } else { + String nowDate = LocalDate.now().toString(); + requestParam.setIssueDateStart(nowDate); + requestParam.setIssueDateEnd(nowDate); + } + + //系统票据类型 + requestParam.setBillVarietyList(Arrays.stream(Util.null2String(billVarietyList).split(",")).collect(Collectors.toList())); + + requestParam.setDueDateStart(dueDateStart); + requestParam.setDueDateEnd(dueDateEnd); + requestParam.setBillType(billType); + requestParam.setDraftSourceList(draftSourceList==null ? null :Arrays.stream(draftSourceList.split(",")).collect(Collectors.toList())); + requestParam.setHoldBankTypeList(holdBankTypeList==null ? null :Arrays.stream(holdBankTypeList.split(",")).collect(Collectors.toList())); + requestParam.setHoldSignDateStart(holdSignDateStart); + requestParam.setHoldSignDateEnd(holdSignDateEnd); + requestParam.setDraftNbr(draftNbr); + requestParam.setBillNbr(billNbr); + requestParam.setBillAmountStart(billAmountStart); + requestParam.setBillAmountEnd(billAmountEnd); + requestParam.setSubBillIntervalStart(subBillIntervalStart); + requestParam.setSubBillIntervalEnd(subBillIntervalEnd); + requestParam.setBillStsList(billStsList==null ? null :Arrays.stream(billStsList.split(",")).collect(Collectors.toList())); + requestParam.setBillTrsStsList(billTrsStsList==null ? null :Arrays.stream(billTrsStsList.split(",")).collect(Collectors.toList())); + requestParam.setStockFlag(stockFlag); + requestParam.setOutInvType(outInvType); + requestParam.setLockFlag(lockFlag); + + //查询前1000条数据 + BillManagementClient bailManagementClient = new BillManagementClient(); + GetDtaResponse response = bailManagementClient.dtaQuery(requestParam); + List list = response.getData().getList(); + + //判断是否还存在数据,递归查询 + boolean hasNextPage = response.getData().isHasNextPage(); + int nextPage = response.getData().getNextPage(); + while (hasNextPage) { + requestParam.setCurrentPage(nextPage); + GetDtaResponse nextPageResponse = bailManagementClient.dtaQuery(requestParam); + List pageData = nextPageResponse.getData().getList(); + list.addAll(pageData); + hasNextPage = nextPageResponse.getData().isHasNextPage(); + nextPage = nextPageResponse.getData().getNextPage(); + } + + //加载cbs配置 + XStream xStream = new XStream(); + String resource = GCONST.getRootPath() + "WEB-INF" + File.separatorChar + "CBS2ECConfig.xml"; + File file = new File(resource); + xStream.addPermission(AnyTypePermission.ANY); + xStream.processAnnotations(EBS2ECConfig.class); + EBS2ECConfig dto = (EBS2ECConfig) xStream.fromXML(file); + EBS2ECConfig.Table table = dto.getTables().get(2); + Integer modeId = table.getModeId(); + String tableName = table.getKey(); + + //获取已存在的数据 + EBS2ECConfig.Table.Field uniqueField = table.getFields().stream().filter(EBS2ECConfig.Table.Field::isUnique).findFirst().orElse(null); + if (uniqueField == null) { + throw new SalaryRunTimeException("未设置唯一标识字段"); + } + String uniqueKey = uniqueField.getKey(); + String uniqueEbsKey = uniqueField.getEbsKey(); + List uniqueDataKeys = getSQLMapper().listString(String.format("select %s from %s", uniqueKey, tableName)); + + + for (GetDtaResponse.Detail detail : list) { + Map detailMap = JsonUtil.parseMap(detail, String.class); + String uniqueData = detailMap.get(uniqueEbsKey); + if (StrUtil.isBlank(uniqueData)) { + log.warn("跳过cbs票据池数据,唯一标识返回空,uniqueKey:{},uniqueEbsKey:{}", uniqueKey, uniqueEbsKey); + continue; + } + if (uniqueDataKeys.contains(uniqueData)) { + log.warn("跳过cbs票据池数据,数据已存在,uniqueKey:{},uniqueEbsKey:{},值{}", uniqueKey, uniqueEbsKey, uniqueData); + continue; + } + + List fields = new ArrayList() {{ + add("formmodeid"); + add("modedatacreater"); + add("modedatacreatertype"); + add("modedatacreatedate"); + add("modedatacreatetime"); + }}; + String currDate = TimeUtil.getCurrentDateString(); + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss"); + String currTime = sdf.format(new Date()); + List values = new ArrayList() {{ + add(modeId); + add(1); + add(0); + add(String.format("'%s'", currDate)); + add(String.format("'%s'", currTime)); + }}; + + for (EBS2ECConfig.Table.Field field : table.getFields()) { + //数据库字段 + String fieldName = field.getKey(); + fields.add(fieldName); + // 接口值 + String value = detailMap.getOrDefault(field.getEbsKey(), ""); + values.add(String.format("'%s'", value)); + } + + //业务逻辑字段,收款类型 + fields.add("pjlx"); + //应付票据 + Integer pjlx; + if ("ISS".equals(detail.getBillVariety())) { + pjlx = 2; + } else { + //应收票据 0:银承 1:商承 + pjlx = "AC01".equals(detail.getBillType()) ? 0 : 1; + } + values.add(pjlx); + + + String sql = String.format("insert into %s (%s) values (%s)", tableName, String.join(",", fields), values.stream().map(Object::toString).collect(Collectors.joining(","))); + RecordSet rs = new RecordSet(); + rs.execute(sql); + + if (modeId != null) { + rs.executeQuery("select max(id) from " + tableName); + int mainId = 0; + if (rs.next()) { + mainId = rs.getInt(1); + } + ModeRightInfo ModeRightInfo = new ModeRightInfo(); + ModeRightInfo.setNewRight(true); + ModeRightInfo.editModeDataShare(1, modeId, mainId); + } + } + } catch (Exception e) { + log.error("获取CBS票据池数据失败", e); + throw new SalaryRunTimeException("获取CBS票据池数据失败," + e.getMessage(), e); + } + } +} diff --git a/src/com/engine/salary/timer/SyncCBSPayDetailsJob.java b/src/com/engine/salary/timer/SyncCBSPayDetailsJob.java index b33978318..527d42c07 100644 --- a/src/com/engine/salary/timer/SyncCBSPayDetailsJob.java +++ b/src/com/engine/salary/timer/SyncCBSPayDetailsJob.java @@ -23,6 +23,7 @@ import weaver.hrm.User; import weaver.interfaces.schedule.BaseCronJob; import java.io.File; +import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.util.*; @@ -49,19 +50,99 @@ public class SyncCBSPayDetailsJob extends BaseCronJob { */ private String holdAccountList; + /** + * 系统票据类型 多选。按附录4.1.3票据类型-票据状态-流通标志级联关系表选择后按顺序填写。系统票据类型枚举见附录4.1.3。票据状态枚举见附录4.1.4。流通标志枚举见附录4.1.5。 + */ + private String billVarietyList; + /** * 出票日期起 格式为yyyy-mm-dd,出票日期起止不允许一边有值一边无值,日期间隔最大为一年 */ private String issueDateStart; + /** * 出票日期止 格式为yyyy-mm-dd,出票日期起止不允许一边有值一边无值,日期间隔最大为一年 */ private String issueDateEnd; + /** - * 系统票据类型 多选。按附录4.1.3票据类型-票据状态-流通标志级联关系表选择后按顺序填写。系统票据类型枚举见附录4.1.3。票据状态枚举见附录4.1.4。流通标志枚举见附录4.1.5。 + * 到期日期起 格式为yyyy-mm-dd,到期日期起止不允许一边有值一边无值,日期间隔最大为一年 */ - private String billVarietyList; + private String dueDateStart; + /** + * 到期日期止 格式为yyyy-mm-dd,到期日期起止不允许一边有值一边无值,日期间隔最大为一年 + */ + private String dueDateEnd; + /** + * 票据种类 AC01-银承,AC02-商承 + */ + private String billType; + /** + * 票据来源 多选。1-直联交易,2-台账交易,3-台账登记,4-挑票同步,5-任务同步 + */ + private String draftSourceList; + /** + * 持票银行类型 多选。见附录4.1.1.银行类型枚举 + */ + private String holdBankTypeList; + + /** + * 持票签收日期起 格式为yyyy-mm-dd,持票签收日期起止不允许一边有值一边无值,日期间隔最大为一年 + */ + private String holdSignDateStart; + /** + * 持票签收日期止 格式为yyyy-mm-dd,持票签收日期起止不允许一边有值一边无值,日期间隔最大为一年 + */ + private String holdSignDateEnd; + /** + * 系统票据编号 + */ + private String draftNbr; + /** + * 票据(包)号 + */ + private String billNbr; + + /** + * 票据金额起 大于等于0,最多为两位小数且整数位上限为13位。票据金额起止不允许一边有值一边无值。单位(元) + */ + private BigDecimal billAmountStart; + + /** + * 票据金额止 大于等于0,最多为两位小数且整数位上限为13位。票据金额起止不允许一边有值一边无值。单位(元) + */ + private BigDecimal billAmountEnd; + + /** + * 子票区间起 子票区间起止不允许一边有值一边无值,最多12位 + */ + private String subBillIntervalStart; + /** + * 子票区间止 子票区间起止不允许一边有值一边无值,最多12位 + */ + private String subBillIntervalEnd; + + /** + * 票据状态 + */ + private String billStsList; + /** + * 流通标志 + */ + private String billTrsStsList; + /** + * 库存状态 1-已入库,2-已出库。 为空时默认查询全部数据 + */ + private String stockFlag; + /** + * 出库方式 0-空,2-背书,3-质押,4-解质,5-贴现,6-分包,7-结清, 8-作废。 为空时默认查询全部数据 + */ + private String outInvType; + /** + * 记录状态 NOR-正常,USE-占用,DEL-删除 SUC-完成。为空时默认查询全部数据 + */ + private String lockFlag; private SQLMapper getSQLMapper() { return MapperProxyFactory.getProxy(SQLMapper.class); @@ -82,6 +163,16 @@ public class SyncCBSPayDetailsJob extends BaseCronJob { requestParam.setCurrentPage(1); requestParam.setPageSize(1000); + if (StrUtil.isBlank(displayHoldOrganizationCodeList)) { + throw new SalaryRunTimeException("持票人单位编码为空,请在计划任务配置此项!"); + } + requestParam.setDisplayHoldOrganizationCodeList(Arrays.stream(displayHoldOrganizationCodeList.split(",")).collect(Collectors.toList())); + + if (StrUtil.isBlank(holdAccountList)) { + throw new SalaryRunTimeException("持票人账号为空,请在计划任务配置此项!"); + } + requestParam.setHoldAccountList(Arrays.stream(holdAccountList.split(",")).collect(Collectors.toList())); + if (StrUtil.isNotBlank(issueDateStart) && StrUtil.isNotBlank(issueDateEnd)) { requestParam.setIssueDateStart(issueDateStart); requestParam.setIssueDateEnd(issueDateEnd); @@ -90,16 +181,29 @@ public class SyncCBSPayDetailsJob extends BaseCronJob { requestParam.setIssueDateStart(nowDate); requestParam.setIssueDateEnd(nowDate); } - if(StrUtil.isBlank(displayHoldOrganizationCodeList)){ - throw new SalaryRunTimeException("持票人单位编码为空,请在计划任务配置此项!"); - } - requestParam.setDisplayHoldOrganizationCodeList(Arrays.stream(displayHoldOrganizationCodeList.split(",")).collect(Collectors.toList())); - if(StrUtil.isBlank(holdAccountList)){ - throw new SalaryRunTimeException("持票人账号为空,请在计划任务配置此项!"); - } - requestParam.setHoldAccountList(Arrays.stream(holdAccountList.split(",")).collect(Collectors.toList())); + + //系统票据类型 requestParam.setBillVarietyList(Arrays.stream(billVarietyList.split(",")).collect(Collectors.toList())); + requestParam.setDueDateStart(dueDateStart); + requestParam.setDueDateEnd(dueDateEnd); + requestParam.setBillType(billType); + requestParam.setDraftSourceList(draftSourceList==null ? null :Arrays.stream(draftSourceList.split(",")).collect(Collectors.toList())); + requestParam.setHoldBankTypeList(holdBankTypeList==null ? null :Arrays.stream(holdBankTypeList.split(",")).collect(Collectors.toList())); + requestParam.setHoldSignDateStart(holdSignDateStart); + requestParam.setHoldSignDateEnd(holdSignDateEnd); + requestParam.setDraftNbr(draftNbr); + requestParam.setBillNbr(billNbr); + requestParam.setBillAmountStart(billAmountStart); + requestParam.setBillAmountEnd(billAmountEnd); + requestParam.setSubBillIntervalStart(subBillIntervalStart); + requestParam.setSubBillIntervalEnd(subBillIntervalEnd); + requestParam.setBillStsList(billStsList==null ? null :Arrays.stream(billStsList.split(",")).collect(Collectors.toList())); + requestParam.setBillTrsStsList(billTrsStsList==null ? null :Arrays.stream(billTrsStsList.split(",")).collect(Collectors.toList())); + requestParam.setStockFlag(stockFlag); + requestParam.setOutInvType(outInvType); + requestParam.setLockFlag(lockFlag); + //查询前1000条数据 BillManagementClient bailManagementClient = new BillManagementClient(); GetDtaResponse response = bailManagementClient.dtaQuery(requestParam); @@ -146,11 +250,11 @@ public class SyncCBSPayDetailsJob extends BaseCronJob { Map detailMap = JsonUtil.parseMap(detail, String.class); String uniqueData = detailMap.get(uniqueEbsKey); if (StrUtil.isBlank(uniqueData)) { - log.warn("跳过cbs票据数据,唯一标识返回空,uniqueKey:{},uniqueEbsKey:{}", uniqueKey, uniqueEbsKey); + log.warn("跳过cbs票据收款数据,唯一标识返回空,uniqueKey:{},uniqueEbsKey:{}", uniqueKey, uniqueEbsKey); continue; } if (uniqueDataKeys.contains(uniqueData)) { - log.warn("跳过cbs票据数据,数据已存在,uniqueKey:{},uniqueEbsKey:{},值{}", uniqueKey, uniqueEbsKey, uniqueData); + log.warn("跳过cbs票据收款数据,数据已存在,uniqueKey:{},uniqueEbsKey:{},值{}", uniqueKey, uniqueEbsKey, uniqueData); continue; } @@ -189,7 +293,8 @@ public class SyncCBSPayDetailsJob extends BaseCronJob { //业务逻辑字段,收款类型 fields.add("sklx"); - values. add("AC01".equals(detailMap.get("billType")) ? 0 : 1); + //应收票据 0:银承 1:商承 + values. add("AC01".equals(detail.getBillType()) ? 0 : 1); /* * 认领逻辑, @@ -232,8 +337,8 @@ public class SyncCBSPayDetailsJob extends BaseCronJob { } } } catch (Exception e) { - log.error("获取CBS票据信息失败", e); - throw new SalaryRunTimeException("获取CBS票据信息失败," + e.getMessage(), e); + log.error("获取CBS票据收款数据失败", e); + throw new SalaryRunTimeException("获取CBS票据收款数据信息失败," + e.getMessage(), e); } } }