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); + } } }