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 296af29..e94a27f 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 @@
 public class SettlementLogController {
   @Autowired
   private SettlementLogService settlementLogService;
+  @Autowired
+  private SettlementAsyncTask settlementAsyncTask;
 
   @GetMapping("/settlelog/index")
   public String userdtlView() {
@@ -46,7 +48,8 @@
   @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 a9fbfa0..e771add 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.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 @@
 @Configuration
 @EnableAsync
 class SpringAsyncConfig : AsyncConfigurer {
-    @Bean(value = ["shopAccBalanceUpdater", "queryAgentPayResult"])
+    @Bean(value = ["shopAccBalanceUpdater"])
     fun threadPoolExecutor(): Executor {
         return ThreadPoolTaskExecutor().apply {
             corePoolSize = 5
@@ -41,6 +44,15 @@
         }
     }
 
+    @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 @@
         }
     }
 
+    @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 @@
             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 3ba86e1..2e381f2 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);
+                });
             });
         });
 
