feat: 收款认领推送金蝶定时任务增加single-flight分布式锁及Nacos配置
This commit is contained in:
+32
-6
@@ -63,8 +63,10 @@ import org.springblade.transport.pojo.entity.ReceiptFlowRecord;
|
||||
import org.springblade.transport.pojo.vo.ReceiptFlowVO;
|
||||
import org.springblade.transport.service.IFormalSettlementService;
|
||||
import org.springblade.transport.service.IReceiptFlowService;
|
||||
import org.springblade.transport.support.KingdeeSyncLockSupport;
|
||||
import org.springblade.transport.support.TransportBusinessSupport;
|
||||
import org.springblade.transport.wrapper.ReceiptFlowWrapper;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
@@ -115,6 +117,10 @@ public class ReceiptFlowServiceImpl extends BaseServiceImpl<KingdeeReceiptFlowMa
|
||||
*/
|
||||
private static final DateTimeFormatter BFI_DATE_TIME_FORMATTER =
|
||||
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
/**
|
||||
* 定时推送收款认领 single-flight 锁键前缀(多副本定时任务共用)
|
||||
*/
|
||||
private static final String RECEIPT_CLAIM_PUSH_LOCK_PREFIX = "transport:receipt-flow:kingdee-claim-push:";
|
||||
|
||||
private final ReceiptClaimMapper claimMapper;
|
||||
private final ReceiptClaimSettlementMapper claimSettlementMapper;
|
||||
@@ -124,6 +130,14 @@ public class ReceiptFlowServiceImpl extends BaseServiceImpl<KingdeeReceiptFlowMa
|
||||
private final IBfiService bfiService;
|
||||
private final BfiProperties bfiProperties;
|
||||
private final TransactionTemplate transactionTemplate;
|
||||
private final KingdeeSyncLockSupport kingdeeSyncLockSupport;
|
||||
|
||||
/**
|
||||
* 定时推送收款认领 single-flight 锁租约秒数,须大于最坏一轮耗时(逐认领人远程查公告 + 逐条推送),
|
||||
* 否则租约到期后另一副本会并发起跑;进程异常退出时锁在租约到期后自动释放
|
||||
*/
|
||||
@Value("${thirdParty.bfi.receiptClaimPush.lockLeaseSeconds:1800}")
|
||||
private long receiptClaimPushLockLeaseSeconds;
|
||||
|
||||
@Override
|
||||
public IPage<ReceiptFlowVO> selectPage(IPage<KingdeeReceiptFlow> page, ReceiptFlowVO query) {
|
||||
@@ -691,15 +705,27 @@ public class ReceiptFlowServiceImpl extends BaseServiceImpl<KingdeeReceiptFlowMa
|
||||
}
|
||||
|
||||
/**
|
||||
* 定时推送金蝶:扫描认领完成且未推送过的流水,按认领人姓名串行处理——
|
||||
* 先重查该认领人的 A301-2 最新公告并推完其名下全部流水,再到下一个认领人。
|
||||
* <p>
|
||||
* A301-2 的 claimusers 必填且为单个用户姓名,定时任务无登录人上下文,
|
||||
* 故按认领人逐人查询公告,按公告id(bill_id)匹配流水。
|
||||
* 单条流水推送失败独立消化,不影响同批其他流水。
|
||||
* 定时推送金蝶:扫描认领完成且未推送过的流水,按认领人姓名分组重查 A301-2 最新公告后逐条推送。
|
||||
* 多副本部署下由 single-flight 分布式锁保证同一轮全局最多一份在跑,已有轮次进行中则本轮跳过。
|
||||
*
|
||||
* @return 执行摘要
|
||||
*/
|
||||
@Override
|
||||
public String pushClaimByTask() {
|
||||
return kingdeeSyncLockSupport.runSingleFlight(RECEIPT_CLAIM_PUSH_LOCK_PREFIX, receiptClaimPushLockLeaseSeconds,
|
||||
"定时推送收款认领", this::executeReceiptClaimPush);
|
||||
}
|
||||
|
||||
/**
|
||||
* 定时推送收款认领主体:按认领人姓名串行处理——
|
||||
* 先重查该认领人的 A301-2 最新公告并推完其名下全部流水,再到下一个认领人。
|
||||
* A301-2 的 claimusers 必填且为单个用户姓名,定时任务无登录人上下文,
|
||||
* 故按认领人逐人查询公告,按公告id(bill_id)匹配流水。
|
||||
* 单条流水推送失败独立消化,不影响同批其他流水。
|
||||
*
|
||||
* @return 执行摘要
|
||||
*/
|
||||
private String executeReceiptClaimPush() {
|
||||
List<KingdeeReceiptFlow> candidates = list(Wrappers.<KingdeeReceiptFlow>lambdaQuery()
|
||||
.isNotNull(KingdeeReceiptFlow::getBillId)
|
||||
.in(KingdeeReceiptFlow::getPushStatus, List.of(
|
||||
|
||||
@@ -164,6 +164,15 @@ thirdParty:
|
||||
syncEnabled: ${BFI_PAY_RESULT_SYNC_ENABLED:true}
|
||||
# 调度 cron,默认每10分钟
|
||||
cron: ${BFI_PAY_RESULT_CRON:0 */10 * * * ?}
|
||||
# 收款认领推送金蝶定时任务(A301-3 收款认领结果推送)
|
||||
receiptClaimPush:
|
||||
# 推送任务开关,默认关闭(联调稳定后开启)
|
||||
syncEnabled: ${BFI_RECEIPT_CLAIM_PUSH_SYNC_ENABLED:false}
|
||||
# 调度 cron,默认每10分钟
|
||||
cron: ${BFI_RECEIPT_CLAIM_PUSH_CRON:0 */10 * * * ?}
|
||||
# single-flight 分布式锁租约秒数,须大于最坏一轮耗时(逐认领人远程查公告+逐条推送),
|
||||
# 进程异常退出时锁在租约到期后自动释放
|
||||
lockLeaseSeconds: ${BFI_RECEIPT_CLAIM_PUSH_LOCK_LEASE_SECONDS:1800}
|
||||
|
||||
#百度OCR配置,API Key和Secret Key请通过环境变量注入
|
||||
baidu:
|
||||
|
||||
@@ -135,6 +135,15 @@ thirdParty:
|
||||
syncEnabled: ${BFI_PAY_RESULT_SYNC_ENABLED:true}
|
||||
# 调度 cron,默认每10分钟
|
||||
cron: ${BFI_PAY_RESULT_CRON:0 */10 * * * ?}
|
||||
# 收款认领推送金蝶定时任务(A301-3 收款认领结果推送)
|
||||
receiptClaimPush:
|
||||
# 推送任务开关,默认关闭(联调稳定后开启)
|
||||
syncEnabled: ${BFI_RECEIPT_CLAIM_PUSH_SYNC_ENABLED:false}
|
||||
# 调度 cron,默认每10分钟
|
||||
cron: ${BFI_RECEIPT_CLAIM_PUSH_CRON:0 */10 * * * ?}
|
||||
# single-flight 分布式锁租约秒数,须大于最坏一轮耗时(逐认领人远程查公告+逐条推送),
|
||||
# 进程异常退出时锁在租约到期后自动释放
|
||||
lockLeaseSeconds: ${BFI_RECEIPT_CLAIM_PUSH_LOCK_LEASE_SECONDS:1800}
|
||||
|
||||
#百度OCR配置,API Key和Secret Key请通过环境变量注入
|
||||
baidu:
|
||||
|
||||
@@ -64,3 +64,12 @@ thirdParty:
|
||||
syncEnabled: ${BFI_PAY_RESULT_SYNC_ENABLED:true}
|
||||
# 调度 cron,默认每10分钟
|
||||
cron: ${BFI_PAY_RESULT_CRON:0 */10 * * * ?}
|
||||
# 收款认领推送金蝶定时任务(A301-3 收款认领结果推送)
|
||||
receiptClaimPush:
|
||||
# 推送任务开关,默认关闭(联调稳定后开启)
|
||||
syncEnabled: ${BFI_RECEIPT_CLAIM_PUSH_SYNC_ENABLED:false}
|
||||
# 调度 cron,默认每10分钟
|
||||
cron: ${BFI_RECEIPT_CLAIM_PUSH_CRON:0 */10 * * * ?}
|
||||
# single-flight 分布式锁租约秒数,须大于最坏一轮耗时(逐认领人远程查公告+逐条推送),
|
||||
# 进程异常退出时锁在租约到期后自动释放
|
||||
lockLeaseSeconds: ${BFI_RECEIPT_CLAIM_PUSH_LOCK_LEASE_SECONDS:1800}
|
||||
|
||||
Reference in New Issue
Block a user