From 4e4ebe24a9698181688878511e9a56c679466187 Mon Sep 17 00:00:00 2001 From: Xia Kaixiang Date: Tue, 10 Sep 2019 11:04:42 +0800 Subject: [PATCH] =?utf8?q?=E9=A1=B5=E9=9D=A2=E8=B0=83=E8=B5=B7=E7=BB=93?= =?utf8?q?=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../controller/SettlementLogController.java | 7 ++- .../com/supwisdom/dlpay/api/async_tasks.kt | 60 ++++++++++++++++++- .../templates/system/settlelog/index.html | 42 +++++++------ 3 files changed, 88 insertions(+), 21 deletions(-) diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettlementLogController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettlementLogController.java index 296af29c..e94a27f1 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettlementLogController.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettlementLogController.java @@ -1,8 +1,8 @@ package com.supwisdom.dlpay.system.controller; +import com.supwisdom.dlpay.api.SettlementAsyncTask; import com.supwisdom.dlpay.api.bean.JsonResult; import com.supwisdom.dlpay.framework.domain.TSettleLog; -import com.supwisdom.dlpay.framework.domain.TSyspara; import com.supwisdom.dlpay.framework.util.PageResult; import com.supwisdom.dlpay.framework.util.WebConstant; import com.supwisdom.dlpay.system.bean.SettleLogSearchBean; @@ -19,6 +19,8 @@ import org.springframework.web.bind.annotation.*; public class SettlementLogController { @Autowired private SettlementLogService settlementLogService; + @Autowired + private SettlementAsyncTask settlementAsyncTask; @GetMapping("/settlelog/index") public String userdtlView() { @@ -46,7 +48,8 @@ public class SettlementLogController { @ResponseBody public JsonResult doSettlement() { try { - return JsonResult.error("暂不支持调用结算执行逻辑"); + settlementAsyncTask.doHandSettleTask(); + return JsonResult.ok("异步结算中,请查询日志查看结算结果"); } catch (Exception e) { e.printStackTrace(); return JsonResult.error("系统处理异常").put("exception", e); diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt index a9fbfa09..e771adde 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/async_tasks.kt @@ -9,10 +9,13 @@ import com.supwisdom.dlpay.api.domain.TTransactionMain import com.supwisdom.dlpay.api.repositories.ShopaccService import com.supwisdom.dlpay.api.service.DtlQueryResultService import com.supwisdom.dlpay.api.service.TransactionServiceProxy +import com.supwisdom.dlpay.exception.TransactionException +import com.supwisdom.dlpay.framework.service.DayendSettleService import com.supwisdom.dlpay.framework.service.SystemUtilService import com.supwisdom.dlpay.framework.tenant.TenantContext import com.supwisdom.dlpay.framework.util.ApplicationUtil import com.supwisdom.dlpay.framework.util.Constants +import com.supwisdom.dlpay.framework.util.StringUtil import com.supwisdom.dlpay.framework.util.TradeDict import com.supwisdom.dlpay.util.ConstantUtil import mu.KotlinLogging @@ -32,7 +35,7 @@ import java.util.concurrent.Executor @Configuration @EnableAsync class SpringAsyncConfig : AsyncConfigurer { - @Bean(value = ["shopAccBalanceUpdater", "queryAgentPayResult"]) + @Bean(value = ["shopAccBalanceUpdater"]) fun threadPoolExecutor(): Executor { return ThreadPoolTaskExecutor().apply { corePoolSize = 5 @@ -41,6 +44,15 @@ class SpringAsyncConfig : AsyncConfigurer { } } + @Bean(value = ["queryAgentPayResult"]) + fun queryAgentPayResultExecutor(): Executor { + return ThreadPoolTaskExecutor().apply { + corePoolSize = 5 + maxPoolSize = 10 + setWaitForTasksToCompleteOnShutdown(true) + } + } + @Bean(name = ["sourcetypeCheckTaskExecutor"]) fun threadPoolTaskExecutor(): Executor { return ThreadPoolTaskExecutor().apply { @@ -50,6 +62,15 @@ class SpringAsyncConfig : AsyncConfigurer { } } + @Bean(name = ["handSettlementAsyncTask"]) + fun handSettlementAsyncTaskExecutor(): Executor { + return ThreadPoolTaskExecutor().apply { + corePoolSize = 5 + maxPoolSize = 10 + setWaitForTasksToCompleteOnShutdown(true) + } + } + override fun getAsyncUncaughtExceptionHandler(): AsyncUncaughtExceptionHandler? { return MyAsyncUncaughtExceptionHandler() } @@ -155,5 +176,42 @@ class AgentQueryResultTask { ex.printStackTrace() } } +} + +/** + * 异步调用结算任务 + * */ +@Component +class SettlementAsyncTask { + @Autowired + private lateinit var dayendSettleService: DayendSettleService + + private val logger = KotlinLogging.logger { } + + @Async("handSettlementAsyncTask") + fun doHandSettleTask() { + logger.info("进入手动发起的异步结算:") + if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID) + val settleLog = dayendSettleService.doCreateSettleLog() //记录日志 + try { + val ret = dayendSettleService.doDayendSettle() + if (ret) { + logger.info("异步结算完成,结算成功") + dayendSettleService.doUpdateSettleLog(settleLog.update("0", "成功结算")) + } + } catch (ex: TransactionException) { + logger.error("异步结算报错!${ex.message}") + dayendSettleService.doUpdateSettleLog(settleLog.update("" + ex.code(), ex.message)) + } catch (e: Exception) { + if (!StringUtil.isEmpty(e.message)) { + logger.error("异步结算报错!${e.message}") + dayendSettleService.doUpdateSettleLog(settleLog.update("-9", e.message)) + } else { + logger.error("异步结算报错!${e.javaClass.name}") + e.printStackTrace() + dayendSettleService.doUpdateSettleLog(settleLog.update("-8", e.javaClass.name)) + } + } + } } \ No newline at end of file diff --git a/payapi/src/main/resources/templates/system/settlelog/index.html b/payapi/src/main/resources/templates/system/settlelog/index.html index 3ba86e15..2e381f2e 100644 --- a/payapi/src/main/resources/templates/system/settlelog/index.html +++ b/payapi/src/main/resources/templates/system/settlelog/index.html @@ -68,7 +68,11 @@ fixed: 'left', sort: true, templet: function (e) { - return admin.formatDate(e.endtime); + if(null!=e.endtime) { + return admin.formatDate(e.endtime); + }else{ + return ''; + } } }, { @@ -123,23 +127,25 @@ }); $('#search-settlelog-deal').click(function () { - var token = $("meta[name='_csrf_token']").attr("value"); - admin.go('[[@{/settlelog/dosettle}]]', { - _csrf: token - }, function (data) { - if (data.code === 200) { - layer.msg(data.msg, {icon: 1, time: 1000}); - table.reload('settlementLogTable'); - } else if (data.code === 401) { - layer.msg(data.msg, {icon: 2, time: 1500}, function () { - location.replace('[[@{/login}]]'); - }, 1000); - } else { - layer.msg(data.msg, {icon: 2}); - return; - } - }, function (err) { - admin.errorBack(err); + layer.confirm("确定要调起结算吗?", function () { + var token = $("meta[name='_csrf_token']").attr("value"); + admin.go('[[@{/settlelog/dosettle}]]', { + _csrf: token + }, function (data) { + if (data.code === 200) { + layer.msg(data.msg, {icon: 1, time: 1000}); + table.reload('settlementLogTable'); + } else if (data.code === 401) { + layer.msg(data.msg, {icon: 2, time: 1500}, function () { + location.replace('[[@{/login}]]'); + }, 1000); + } else { + layer.msg(data.msg, {icon: 2}); + return; + } + }, function (err) { + admin.errorBack(err); + }); }); }); -- 2.17.1