소스 검색

初始化

LIJIAN 1 개월 전
부모
커밋
868f630c7a

+ 17 - 5
ema-admin/src/main/java/com/ema/admin/modules/system/controller/SysTimersJobController.java

@@ -1,5 +1,6 @@
 package com.ema.admin.modules.system.controller;
 
+import com.ema.common.domain.enums.BooleanEnum;
 import com.mybatisflex.core.paginate.Page;
 import com.ema.admin.modules.system.entity.SysTimersJob;
 import com.ema.admin.modules.system.enums.SysTimerJobEnum;
@@ -11,9 +12,12 @@ import com.ema.common.aspect.logger.Logger;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -41,6 +45,7 @@ public class SysTimersJobController {
     @PostMapping("save")
     @ApiOperation("保存定时任务")
     @Logger(type = LogTypeEnum.SAVE)
+    @Transactional(rollbackFor = Exception.class)
     public boolean save(@RequestBody @ApiParam("定时任务") SysTimersJob sysTimersJob) {
         boolean save = sysTimersJobService.save(sysTimersJob);
         if (save && SysTimerJobEnum.Status.RUNNING.getCode().equals(sysTimersJob.getJobStatus())) {
@@ -75,6 +80,7 @@ public class SysTimersJobController {
     @PutMapping("update")
     @ApiOperation("根据主键更新定时任务")
     @Logger(type = LogTypeEnum.UPDATE)
+    @Transactional(rollbackFor = Exception.class)
     public boolean update(@RequestBody @ApiParam("定时任务主键") SysTimersJob sysTimersJob) {
         boolean update = sysTimersJobService.updateById(sysTimersJob);
         if (update && SysTimerJobEnum.Status.STOP.getCode().equals(sysTimersJob.getJobStatus())) {
@@ -139,12 +145,18 @@ public class SysTimersJobController {
     @Logger(type = LogTypeEnum.UPDATE)
     public boolean start(@PathVariable @ApiParam("定时任务主键") String id) {
         SysTimersJob sysTimersJob = sysTimersJobService.getById(id);
-        sysTimersJob.setJobStatus(SysTimerJobEnum.Status.RUNNING.getCode());
-        boolean update = sysTimersJobService.updateById(sysTimersJob);
-        if (update) {
-            return timerExeService.startTimer(sysTimersJob.getId(), sysTimersJob.getCron(), sysTimersJob.getActionClass());
+        try {
+            timerExeService.startTimer(sysTimersJob.getId(), sysTimersJob.getCron(), sysTimersJob.getActionClass());
+            sysTimersJob.setJobStatus(SysTimerJobEnum.Status.RUNNING.getCode());
+            return sysTimersJobService.updateById(sysTimersJob);
+        } catch (Exception e) {
+            sysTimersJob.setJobStatus(SysTimerJobEnum.Status.STOP.getCode());
+            sysTimersJob.setLastTime(new Date());
+            sysTimersJob.setLastStatus(BooleanEnum.FALSE.getValue());
+            sysTimersJob.setLastMsg("启动失败:" + e.getMessage());
+            sysTimersJobService.updateById(sysTimersJob);
+            throw e;
         }
-        return false;
     }
 
 }

+ 5 - 1
ema-admin/src/main/resources/web/js/common.js

@@ -47,13 +47,17 @@ var Common = {
                 }
             },
             success: function(res) {
-                if (res.code === 401 || res.code === 403 || (res.msg && res.msg.indexOf('登录') !== -1)) {
+                if (res.code === 1004) {
                     layer.msg('登录已过期,请重新登录', { icon: 2 }, function() {
                         localStorage.clear();
                         parent.location.href = '../index.html';
                     });
                     return;
                 }
+                if (res.code !== 200) {
+                    layer.msg(res.message, { icon: 2 });
+                    return;
+                }
                 options.success && options.success(res);
             },
             error: function(xhr) {

+ 18 - 7
ema-admin/src/main/resources/web/pages/job/job_list.html

@@ -68,6 +68,16 @@
         {{# } }}
     </script>
     
+    <script type="text/html" id="lastStatusTpl">
+        {{# if(d.lastStatus === '1') { }}
+            <span class="layui-badge layui-bg-green">成功</span>
+        {{# } else if(d.lastStatus === '0') { }}
+            <span class="layui-badge layui-bg-red">失败</span>
+        {{# } else { }}
+            <span class="layui-badge layui-bg-gray">-</span>
+        {{# } }}
+    </script>
+    
     <script src="../../lib/jquery.min.js"></script>
     <script src="../../lib/layui/layui.js"></script>
     <script src="../../js/config.js"></script>
@@ -83,13 +93,14 @@
                 url: Config.api.timersJob.page,
                 page: { curr: 1, limit: 10, limits: [10, 20, 30, 50] },
                 cols: [[
-                    { field: 'timerName', title: '任务名称', width: 180 },
-                    { field: 'actionClass', title: '执行类', width: 250 },
-                    { field: 'cron', title: 'CRON表达式', width: 150 },
-                    { field: 'jobStatus', title: '状态', width: 100, templet: '#statusTpl' },
-                    { field: 'lastTime', title: '上次执行', width: 170, templet: function(d) { return Common.formatDate(d.lastTime); } },
-                    { field: 'createTime', title: '创建时间', width: 170, templet: function(d) { return Common.formatDate(d.createTime); } },
-                    { field: 'remark', title: '备注' },
+                    { field: 'timerName', title: '任务名称', width: 150 },
+                    { field: 'actionClass', title: '执行类', width: 220 },
+                    { field: 'cron', title: 'CRON表达式', width: 130 },
+                    { field: 'jobStatus', title: '任务状态', width: 90, templet: '#statusTpl' },
+                    { field: 'lastTime', title: '执行时间', width: 160, templet: function(d) { return Common.formatDate(d.lastTime); } },
+                    { field: 'lastStatus', title: '执行状态', width: 120, templet: '#lastStatusTpl' },
+                    { field: 'lastMsg', title: '执行消息', minWidth: 150 },
+                    { field: 'remark', title: '备注', minWidth: 120 },
                     { fixed: 'right', title: '操作', width: 250, align: 'center', toolbar: '#toolbar' }
                 ]]
             });