From d5a3e8b26b0b987d18c5cb252dd249afc492cbe2 Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 13 Nov 2023 15:17:47 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=BE=AE=E8=B0=83=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=EF=BC=9B=E6=B7=BB=E5=8A=A0=E5=8D=8F=E8=AE=AE=E7=B1=BB=E6=94=AF?= =?UTF-8?q?=E4=BB=98=E6=A0=B8=E9=94=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serve/modules/tbs/entity/TbsActivity.java | 1 + .../modules/third/PortalOfCostController.java | 32 +++++ .../entity/ProcessCreateContractCheckBo.java | 32 +++++ .../service/PortalOfCostApplication.java | 120 ++++++++++++++++++ .../controller/VtbVerificationController.java | 3 + .../modules/vtb/entity/VtbVerification.java | 4 +- .../vtb/entity/so/VtbVerificationSo.java | 3 + 7 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/qs/serve/modules/third/entity/ProcessCreateContractCheckBo.java diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java index 831e0b28..4c23fede 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivity.java @@ -207,6 +207,7 @@ public class TbsActivity implements Serializable { /** 模板id */ private Long templateId; + @TableField(condition = SqlCondition.LIKE) private String templateTitle; private String templateBudgetIds; diff --git a/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java b/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java index 78caf4ac..5531faea 100644 --- a/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java +++ b/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java @@ -8,6 +8,7 @@ import com.qs.serve.common.util.JsonUtil; import com.qs.serve.modules.sys.entity.SysSyncLog; import com.qs.serve.modules.sys.service.SysSyncLogService; import com.qs.serve.modules.third.consts.ThirtyConst; +import com.qs.serve.modules.third.entity.ProcessCreateContractCheckBo; import com.qs.serve.modules.third.entity.ProcessCreateCostApplyBo; import com.qs.serve.modules.third.entity.ProcessCreatePolicyCostBo; import com.qs.serve.modules.third.service.PortalOfCostApplication; @@ -66,6 +67,37 @@ public class PortalOfCostController { return R.error("支付异常"); } + + /** + * 协议类费用 核销支付记录;添加释放接口,释放合同不再支付的金额; + * @param createBo + * @return + */ + @PostMapping("createByContractCheck") + public R createByContractCheck(@Valid @RequestBody ProcessCreateContractCheckBo createBo, HttpServletRequest request){ + SysSyncLog syncLog = new SysSyncLog(); + syncLog.setFromPlat("协议类核销支付"); + syncLog.setUrl(request.getRequestURI()); + syncLog.setRequestJson(JsonUtil.objectToJson(createBo)); + syncLog.setEntityClass(ProcessCreateCostApplyBo.class.getName()); + try { + ThirdTokenUtil.checkToken(request); + portalOfCostApplication.createByContractCheck(createBo); + syncLog.setSuccessStatus(1); + } catch (Exception e) { + log.error("协议类核销支付(费用申请)===>{}", JsonUtil.objectToJson(createBo)); + syncLog.setFailReason(e.getMessage()); + return R.error(e.getMessage()); + } + sysSyncLogService.save(syncLog); + if(syncLog.getSuccessStatus()!=null&&syncLog.getSuccessStatus().equals(1)){ + return R.ok(); + } + return R.error("支付异常"); + } + + + /** * 一站式创建费用(政策) * @param createBo diff --git a/src/main/java/com/qs/serve/modules/third/entity/ProcessCreateContractCheckBo.java b/src/main/java/com/qs/serve/modules/third/entity/ProcessCreateContractCheckBo.java new file mode 100644 index 00000000..586ff930 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/third/entity/ProcessCreateContractCheckBo.java @@ -0,0 +1,32 @@ +package com.qs.serve.modules.third.entity; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/11/13 + */ +@Data +public class ProcessCreateContractCheckBo { + + /** 费用编码 */ + private String costCode; + + /** 核销与支付金额 */ + private BigDecimal amount; + + /** 发票号 */ + private String billNumber; + + /** 发货单号 */ + private String dispatchCode; + + /** 业务人员编码 */ + private String userCode; + + /** 核销与支付备注 */ + private String remark; + +} diff --git a/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java b/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java index adb5008e..92f5022a 100644 --- a/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java +++ b/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java @@ -940,8 +940,128 @@ public class PortalOfCostApplication { } + @Transactional(rollbackFor = Exception.class) + public void createByContractCheck(ProcessCreateContractCheckBo createBo){ + TbsCostApply costApply = costApplyService.getByCode(createBo.getCostCode()); + TbsActivity activity = activityService.listByCostApplyId(costApply.getId()).get(0); + List subjectList = activitySubjectService.listByActivityId(activity.getId()); + BmsSupplier supplier = supplierService.getById(costApply.getSupplierId()); + BigDecimal totalAmount = createBo.getAmount(); + SysUser user = userService.getByAccount(createBo.getUserCode()); + LocalDateTime nowTime = LocalDateTime.now(); + //保存核销申请 + VtbVerification verification = new VtbVerification(); + verification.setDisCode(createBo.getDispatchCode()); + verification.setBillNumber(createBo.getBillNumber()); + verification.setVerificationCode("HXC"+ CodeGenUtil.generate(CodeGenUtil.SourceKey.Verification)); + verification.setVerificationMainCode(verification.getVerificationCode()); + verification.setCostApplyId(costApply.getId()); + verification.setFinishedTime(nowTime); + verification.setVerificationState(VtbVerificationState.Finished.getCode()); + verification.setActivityId(activity.getId()); + verification.setSupplierId(activity.getSupplierId()); + verification.setSupplierCode(activity.getSupplierCode()); + verification.setSupplierName(activity.getSupplierName()); + verification.setUserId(user.getId()); + verification.setUserCode(user.getCode()); + verification.setUserName(user.getName()); + verification.setAmount(totalAmount); + verification.setAmountRecord(totalAmount); + verification.setPaymentState(ResultFlag.OK); + verificationService.save(verification); + + //协议类的要直接支付 + PayPayment payPayment = new PayPayment(); + payPayment.setPayType(PaymentType.PAYMENT); + payPayment.setPayCode("PM" + StringUtils.genShortId()); + payPayment.setSupplierId(Long.parseLong(supplier.getId())); + payPayment.setSupplierCode(supplier.getCode()); + payPayment.setSupplierName(supplier.getName()); + payPayment.setPayAmount(totalAmount); + payPayment.setCostApplyId(costApply.getId()); + payPayment.setUserId(user.getId()); + payPayment.setUserCode(user.getCode()); + payPayment.setUserName(user.getName()); + payPayment.setPayTime(nowTime); + payPayment.setErpCode(createBo.getDispatchCode()); + payPayment.setBillNumber(createBo.getBillNumber()); + payPayment.setCreateBy(user.getName()); + payPayment.setCreateTime(LocalDateTime.now()); + paymentService.save(payPayment); + //保存核销费用结果 + BigDecimal subjectSurplus = createBo.getAmount(); + for (TbsActivitySubject subject : subjectList) { + if(subjectSurplus.compareTo(BigDecimal.ZERO)==0){ + break; + } + //当前项支付多少 + BigDecimal currItemAmount; + //科目还有多少金额未支付 + BigDecimal totalUnPay = subject.getUsedAmount()==null?subject.getAmount():subject.getAmount().subtract(subject.getUsedAmount()); + //节点金额>科目的剩余金额 + if(totalUnPay.compareTo(subjectSurplus)>=0){ + currItemAmount = subjectSurplus; + subjectSurplus = BigDecimal.ZERO; + }else { + subjectSurplus = subjectSurplus.subtract(totalUnPay); + currItemAmount = totalUnPay; + } + //科目总支付 + BigDecimal totalPay = subject.getUsedAmount().add(currItemAmount); + + VtbVerificationSubject verificationSubject = new VtbVerificationSubject(); + verificationSubject.setVerificationId(verification.getId()); + verificationSubject.setVerificationSubCode(verification.getVerificationCode()+"_1"); + verificationSubject.setCostApplyId(costApply.getId()); + verificationSubject.setActivityId(activity.getId()); + verificationSubject.setSubjectId(subject.getId()); + verificationSubject.setSubjectCode(subject.getSubjectCode()); + verificationSubject.setSubjectName(subject.getSubjectName()); + verificationSubject.setSupplierId(Long.parseLong(supplier.getId())); + verificationSubject.setSupplierCode(supplier.getCode()); + verificationSubject.setSupplierName(supplier.getName()); + verificationSubject.setPayFinishedFlag(ResultFlag.OK); + verificationSubject.setUsedAmount(currItemAmount); + verificationSubject.setUsedAmountRecord(currItemAmount); + verificationSubject.setCountPerson(0); + verificationSubject.setCountSession(0); + + PayPaymentItem paymentItem = new PayPaymentItem(); + paymentItem.setPaymentId(payPayment.getId()); + paymentItem.setPayType(PaymentType.PAYMENT); + paymentItem.setSupplierId(Long.parseLong(supplier.getId())); + paymentItem.setItemPayAmount(totalAmount); + paymentItem.setVerificationId(verification.getId()); + paymentItem.setVerificationCode(verification.getVerificationCode()); + paymentItem.setVerificationMainCode(verification.getVerificationCode()); + paymentItem.setVerificationSubjectId(verificationSubject.getId()); + paymentItem.setCostApplyId(costApply.getId()); + paymentItem.setActivityId(activity.getId()); + paymentItem.setActivityCode(activity.getActivityCode()); + paymentItem.setSubjectId(subject.getId()); + paymentItem.setSubjectCode(subject.getSubjectCode()); + paymentItem.setSubjectName(subject.getSubjectName()); + paymentItem.setCreateBy(user.getName()); + paymentItem.setCreateTime(LocalDateTime.now()); + + //保存和更新项 + TbsActivitySubject activitySubject = new TbsActivitySubject(); + activitySubject.setId(subject.getId()); + activitySubject.setUsedAmount(totalPay); + activitySubjectService.updateById(subject); + paymentItemService.save(paymentItem); + verificationSubjectService.save(verificationSubject); + + } + + + + + + } + /** * 创建流程中,初始化SKU列表 * @param invCodes diff --git a/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java b/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java index b9a8fc53..9216c8ca 100644 --- a/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java +++ b/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java @@ -137,6 +137,9 @@ public class VtbVerificationController { }else if(loadMy!=null&&loadMy.equals(1)){ lqw.eq(VtbVerification::getUserId,AuthContextUtils.getSysUserId()); } + if(StringUtils.hasText(param.getTemplateTitle())){ + lqw.like(VtbVerification::getTemplateTitle,param.getTemplateTitle()); + } lqw.orderByDesc(VtbVerification::getId); PageUtil.startPage(); List listObjectIds = vtbVerificationService.list(lqw); diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java index e812632b..25965e5b 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerification.java @@ -183,6 +183,9 @@ public class VtbVerification implements Serializable { @TableField(condition = SqlCondition.LIKE) private String userName; + @TableField(condition = SqlCondition.LIKE) + private String templateTitle; + /** * 业务继承人 */ @@ -214,6 +217,5 @@ public class VtbVerification implements Serializable { @TableField(exist = false) private Object costApplyInfo; - } diff --git a/src/main/java/com/qs/serve/modules/vtb/entity/so/VtbVerificationSo.java b/src/main/java/com/qs/serve/modules/vtb/entity/so/VtbVerificationSo.java index eecb9fd8..6cbb908b 100644 --- a/src/main/java/com/qs/serve/modules/vtb/entity/so/VtbVerificationSo.java +++ b/src/main/java/com/qs/serve/modules/vtb/entity/so/VtbVerificationSo.java @@ -71,5 +71,8 @@ public class VtbVerificationSo implements Serializable { @TableField(condition = SqlCondition.LIKE) private String supplierBizRegionThirdName; + /** 模板名称 */ + private String templateTitle; + } From f2fa90f644c981113cd18c1b75a5ee8b352f9424 Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 13 Nov 2023 18:05:05 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E7=B1=BB=EF=BC=9B?= =?UTF-8?q?=E9=A2=84=E7=AE=97=E5=BC=82=E5=B8=B8=E8=A1=A5=E5=81=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tbs/controller/TbsBudgetController.java | 14 +++++++++ .../tbs/mapper/TbsBudgetLogMapper.java | 1 + .../mapper/TbsScheduleItemBudgetMapper.java | 10 ++++++ .../modules/third/PortalOfCostController.java | 31 +++++++++++++++++-- .../entity/ProcessReleaseContractBo.java | 20 ++++++++++++ .../service/PortalOfCostApplication.java | 13 ++++++-- 6 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/third/entity/ProcessReleaseContractBo.java diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java index a79f2ef1..6449a060 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java @@ -16,6 +16,7 @@ import com.qs.serve.modules.tbs.common.util.TbsBudgetLogBuildUtil; import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.bo.*; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogWithAmount; +import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetAmount; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetVo; import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudgetMapper; @@ -435,5 +436,18 @@ public class TbsBudgetController { tbsBudgetService.updateBudgetAfterStart(param); return R.ok(); } + + @GetMapping("/syncNotExitLog") + public R syncNotExitLog(){ + List items = tbsScheduleItemBudgetMapper.listNotCreateLogBudget(); + for (TbsScheduleItemBudget item : items) { + TbsBudget budget = tbsBudgetService.getById(item.getBudgetId()); + TbsBudgetLog budgetLog = TbsBudgetLogBuildUtil.toTbsBudgetLog(new SysUser(),budget,item,BudgetLogOptFlag.State_0,item.getBudgetAmount()); + budgetLog.setRemark("sync"); + tbsBudgetLogService.save(budgetLog); + } + return R.ok(); + } + } diff --git a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetLogMapper.java b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetLogMapper.java index 3b30d098..7a4c0e49 100644 --- a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetLogMapper.java +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetLogMapper.java @@ -37,5 +37,6 @@ public interface TbsBudgetLogMapper extends BaseMapper { @Update("update tbs_budget_log set del_flag = #{delState} WHERE cost_apply_id = #{costApplyId}") void updateLogDelFlagByCostApply(@Param("costApplyId")Long costApplyId,@Param("delState")Integer delState); + } diff --git a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java index 41155d0e..0b01c661 100644 --- a/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java +++ b/src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.tbs.mapper; +import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogPreAmount; @@ -152,5 +153,14 @@ public interface TbsScheduleItemBudgetMapper extends BaseMapper getAllByScheduleItemIdList(@Param("selectIds") List ids); + + @InterceptorIgnore(tenantLine = "true") + @Select(" SELECT tsib.* FROM `tbs_schedule_item_budget` tsib " + + " LEFT JOIN tbs_budget ON tsib.budget_id = tbs_budget.id " + + " LEFT JOIN tbs_budget_log ON (tsib.budget_id = tbs_budget_log.budget_id " + + " and tsib.schedule_item_id = tbs_budget_log.schedule_item_id and tbs_budget_log.opt_type = 0) " + + " where tbs_budget.del_flag = 0 and tbs_budget.budget_state = 1 and tbs_budget_log.id is null and budget_amount > 0") + List listNotCreateLogBudget(); + } diff --git a/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java b/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java index 5531faea..4755cdc3 100644 --- a/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java +++ b/src/main/java/com/qs/serve/modules/third/PortalOfCostController.java @@ -11,6 +11,7 @@ import com.qs.serve.modules.third.consts.ThirtyConst; import com.qs.serve.modules.third.entity.ProcessCreateContractCheckBo; import com.qs.serve.modules.third.entity.ProcessCreateCostApplyBo; import com.qs.serve.modules.third.entity.ProcessCreatePolicyCostBo; +import com.qs.serve.modules.third.entity.ProcessReleaseContractBo; import com.qs.serve.modules.third.service.PortalOfCostApplication; import com.qs.serve.modules.tzc.service.TzcPolicyGoodsSyncService; import lombok.AllArgsConstructor; @@ -69,7 +70,7 @@ public class PortalOfCostController { /** - * 协议类费用 核销支付记录;添加释放接口,释放合同不再支付的金额; + * 协议类费用 核销支付记录 * @param createBo * @return */ @@ -96,7 +97,33 @@ public class PortalOfCostController { return R.error("支付异常"); } - + /** + * 协议类费用 释放接口,释放合同不再支付的金额; + * @param contractBo + * @return + */ + @PostMapping("releaseContractCost") + public R releaseContractCost(@Valid @RequestBody ProcessReleaseContractBo contractBo, HttpServletRequest request){ + SysSyncLog syncLog = new SysSyncLog(); + syncLog.setFromPlat("协议类释放"); + syncLog.setUrl(request.getRequestURI()); + syncLog.setRequestJson(JsonUtil.objectToJson(contractBo)); + syncLog.setEntityClass(ProcessCreateCostApplyBo.class.getName()); + try { + ThirdTokenUtil.checkToken(request); + portalOfCostApplication.releaseContractCost(contractBo); + syncLog.setSuccessStatus(1); + } catch (Exception e) { + log.error("协议类核销支付(费用申请)===>{}", JsonUtil.objectToJson(contractBo)); + syncLog.setFailReason(e.getMessage()); + return R.error(e.getMessage()); + } + sysSyncLogService.save(syncLog); + if(syncLog.getSuccessStatus()!=null&&syncLog.getSuccessStatus().equals(1)){ + return R.ok(); + } + return R.error("支付异常"); + } /** * 一站式创建费用(政策) diff --git a/src/main/java/com/qs/serve/modules/third/entity/ProcessReleaseContractBo.java b/src/main/java/com/qs/serve/modules/third/entity/ProcessReleaseContractBo.java new file mode 100644 index 00000000..8490b159 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/third/entity/ProcessReleaseContractBo.java @@ -0,0 +1,20 @@ +package com.qs.serve.modules.third.entity; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/11/13 + */ +@Data +public class ProcessReleaseContractBo { + + /** 费用编码 */ + private String costCode; + + /** 核销与支付备注 */ + private String remark; + +} diff --git a/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java b/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java index 92f5022a..796dbebd 100644 --- a/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java +++ b/src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java @@ -940,6 +940,10 @@ public class PortalOfCostApplication { } + /** + * 协议类费用 核销支付记录 + * @param createBo + */ @Transactional(rollbackFor = Exception.class) public void createByContractCheck(ProcessCreateContractCheckBo createBo){ TbsCostApply costApply = costApplyService.getByCode(createBo.getCostCode()); @@ -1055,10 +1059,13 @@ public class PortalOfCostApplication { verificationSubjectService.save(verificationSubject); } + } - - - + /** + * 协议类费用 释放接口,释放合同不再支付的金额; + * @param contractBo + */ + public void releaseContractCost(ProcessReleaseContractBo contractBo){ } From 5b5958df50cee15b6530ac079455f9084ff708c9 Mon Sep 17 00:00:00 2001 From: Yen Date: Wed, 15 Nov 2023 09:43:44 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=94=BF=E7=AD=96?= =?UTF-8?q?=E9=A2=84=E7=AE=97=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/manager/AsyncFactory.java | 35 +++++++++++-------- .../common/framework/redis/RedisService.java | 28 +++++++++++++++ .../tbs/controller/TbsBudgetController.java | 9 ++++- .../impl/TzcPolicyOperationServiceImpl.java | 4 ++- src/main/java/com/qs/serve/task/PayTask.java | 4 ++- 5 files changed, 63 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/qs/serve/common/framework/manager/AsyncFactory.java b/src/main/java/com/qs/serve/common/framework/manager/AsyncFactory.java index 5dba1ed8..b20be01e 100644 --- a/src/main/java/com/qs/serve/common/framework/manager/AsyncFactory.java +++ b/src/main/java/com/qs/serve/common/framework/manager/AsyncFactory.java @@ -118,22 +118,29 @@ public class AsyncFactory { return new TimerTask() { @Override public void run() { - try { - log.debug("--------------------------SubmitPolicy CallbackTimer Sleep Start------------------------------"); - AuthContextUtils.setTenant("001"); - Thread.sleep(7*1000); - TzcPolicyOperationServiceImpl operationService = SpringUtils.getBean(TzcPolicyOperationServiceImpl.class); - String summeryResult = operationService.checkAffairSummery(policyId.toString()); - if(summeryResult.equals(TzcPolicyOperationServiceImpl.SummeryState_Success)){ - //调用成功回调方法 - TbsAffairCommitBo finishedParam = new TbsAffairCommitBo(); - finishedParam.setPolicyId(policyId); - operationService.doFinished(finishedParam); + TzcPolicyOperationServiceImpl operationService = SpringUtils.getBean(TzcPolicyOperationServiceImpl.class); + RedisService redisService = SpringUtils.getBean(RedisService.class); + boolean createLock = redisService.tryToLock(operationService.getTemplateCode(),policyId+""); + if(createLock){ + try { + log.debug("--------------------------SubmitPolicy CallbackTimer Sleep Start------------------------------"); + AuthContextUtils.setTenant("001"); + Thread.sleep(3*1000); + String summeryResult = operationService.checkAffairSummery(policyId.toString()); + if(summeryResult.equals(TzcPolicyOperationServiceImpl.SummeryState_Success)){ + //调用成功回调方法 + TbsAffairCommitBo finishedParam = new TbsAffairCommitBo(); + finishedParam.setPolicyId(policyId); + operationService.doFinished(finishedParam); + } + log.debug("--------------------------SubmitPolicy CallbackTimer summeryResult:{}------------------------------",summeryResult); + } catch (Exception e) { + e.printStackTrace(); + }finally { + redisService.removeLock(operationService.getTemplateCode(),policyId+""); } - log.debug("--------------------------SubmitPolicy CallbackTimer summeryResult:{}------------------------------",summeryResult); - } catch (Exception e) { - e.printStackTrace(); } + } }; } diff --git a/src/main/java/com/qs/serve/common/framework/redis/RedisService.java b/src/main/java/com/qs/serve/common/framework/redis/RedisService.java index dfae685c..e054ec96 100644 --- a/src/main/java/com/qs/serve/common/framework/redis/RedisService.java +++ b/src/main/java/com/qs/serve/common/framework/redis/RedisService.java @@ -329,4 +329,32 @@ public class RedisService { ZSetOperations zset = redisTemplate.opsForZSet(); return zset.rangeByScore(key, scoure, scoure1); } + + /** + * 移除业务锁 + * @param code + * @param targetId + */ + public void removeLock(String code,String targetId){ + String key = "lock_commit:"+code+":"+targetId; + this.remove(key); + } + + /** + * 锁 + * @param code + * @param targetId + * @return true--新建锁成功,false反之 + */ + public boolean tryToLock(String code,String targetId){ + String key = "lock_commit:"+code+":"+targetId; + Integer existState = getInteger(key); + if(existState==null){ + this.set(key,1,20,TimeUnit.SECONDS); + return true; + }else { + return false; + } + } + } diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java index 6449a060..de71443e 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java @@ -442,7 +442,14 @@ public class TbsBudgetController { List items = tbsScheduleItemBudgetMapper.listNotCreateLogBudget(); for (TbsScheduleItemBudget item : items) { TbsBudget budget = tbsBudgetService.getById(item.getBudgetId()); - TbsBudgetLog budgetLog = TbsBudgetLogBuildUtil.toTbsBudgetLog(new SysUser(),budget,item,BudgetLogOptFlag.State_0,item.getBudgetAmount()); + SysUser sysUser = sysUserService.getById(budget.getUserId()); + if(sysUser==null){ + sysUser = new SysUser(); + sysUser.setId("1"); + sysUser.setName("Admin"); + sysUser.setCode("Admin"); + } + TbsBudgetLog budgetLog = TbsBudgetLogBuildUtil.toTbsBudgetLog(sysUser,budget,item,BudgetLogOptFlag.State_0,item.getBudgetAmount()); budgetLog.setRemark("sync"); tbsBudgetLogService.save(budgetLog); } diff --git a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyOperationServiceImpl.java b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyOperationServiceImpl.java index 98d9318e..581040d3 100644 --- a/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyOperationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyOperationServiceImpl.java @@ -1,6 +1,8 @@ package com.qs.serve.modules.tzc.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.qs.serve.common.framework.manager.AsyncFactory; +import com.qs.serve.common.framework.manager.AsyncManager; import com.qs.serve.common.model.consts.BudgetLogRollbackFlag; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.enums.BudgetLogOptFlag; @@ -147,7 +149,7 @@ public class TzcPolicyOperationServiceImpl implements SeeYonOperationService { @Override public void doCommitBacked(String targetId) { - + AsyncManager.me().execute(AsyncFactory.submitPolicy(Long.parseLong(targetId))); } @Override diff --git a/src/main/java/com/qs/serve/task/PayTask.java b/src/main/java/com/qs/serve/task/PayTask.java index 62373731..ba9238dd 100644 --- a/src/main/java/com/qs/serve/task/PayTask.java +++ b/src/main/java/com/qs/serve/task/PayTask.java @@ -74,7 +74,9 @@ public class PayTask { costApplyService.updateBatchById(updatePayStateList); //更新支付表记录,用于实现增量更新 List costIds4Update = updatePayStateList.stream().map(TbsCostApply::getId).collect(Collectors.toList()); - payPaymentItemMapper.updateSyncCostState(costIds4Update); + if(costIds4Update.size()>0){ + payPaymentItemMapper.updateSyncCostState(costIds4Update); + } } } From 361c799e18a9260e973bcbd8af3804c02ff95343 Mon Sep 17 00:00:00 2001 From: Yen Date: Wed, 15 Nov 2023 09:47:11 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E8=B0=83=E5=BA=A6=E9=85=8D=E7=BD=AE=E7=94=A8=E4=BA=8E=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E8=B4=9F=E8=BD=BD=E5=9D=87=E8=A1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/qs/serve/task/PayTask.java | 2 ++ .../com/qs/serve/task/controller/TaskActivityController.java | 2 +- .../java/com/qs/serve/task/controller/TaskPayController.java | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/qs/serve/task/PayTask.java b/src/main/java/com/qs/serve/task/PayTask.java index ba9238dd..da2cfb55 100644 --- a/src/main/java/com/qs/serve/task/PayTask.java +++ b/src/main/java/com/qs/serve/task/PayTask.java @@ -11,6 +11,7 @@ import com.qs.serve.modules.tbs.entity.TbsCostApply; import com.qs.serve.modules.tbs.service.TbsCostApplyService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -26,6 +27,7 @@ import java.util.stream.Collectors; @Slf4j @Component @AllArgsConstructor +@ConditionalOnProperty(value = "project.task", havingValue = "true") public class PayTask { private final TbsCostApplyService costApplyService; diff --git a/src/main/java/com/qs/serve/task/controller/TaskActivityController.java b/src/main/java/com/qs/serve/task/controller/TaskActivityController.java index 4896fef4..72190d5e 100644 --- a/src/main/java/com/qs/serve/task/controller/TaskActivityController.java +++ b/src/main/java/com/qs/serve/task/controller/TaskActivityController.java @@ -34,7 +34,7 @@ import java.util.List; @AllArgsConstructor @RestController @RequestMapping("/task/activity") -//@ConditionalOnProperty(value = "project.task", havingValue = "true") +@ConditionalOnProperty(value = "project.task", havingValue = "true") public class TaskActivityController { private final TbsActivityService activityService; diff --git a/src/main/java/com/qs/serve/task/controller/TaskPayController.java b/src/main/java/com/qs/serve/task/controller/TaskPayController.java index a0b94775..31b60452 100644 --- a/src/main/java/com/qs/serve/task/controller/TaskPayController.java +++ b/src/main/java/com/qs/serve/task/controller/TaskPayController.java @@ -4,6 +4,7 @@ import com.qs.serve.common.model.dto.R; import com.qs.serve.modules.pay.service.impl.PayApplicationService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.RestController; @AllArgsConstructor @RestController @RequestMapping("/task/pay") +@ConditionalOnProperty(value = "project.task", havingValue = "true") public class TaskPayController { PayApplicationService applicationService;