Ver Fonte

定时任务

yuanhao há 2 anos atrás
pai
commit
8b867f9d1c

+ 80 - 2
in-cloud-ui/package-lock.json

@@ -2073,6 +2073,7 @@
         "thread-loader": "^2.1.3",
         "url-loader": "^2.2.0",
         "vue-loader": "^15.9.2",
+        "vue-loader-v16": "npm:vue-loader@^16.1.0",
         "vue-style-loader": "^4.1.2",
         "webpack": "^4.0.0",
         "webpack-bundle-analyzer": "^3.8.0",
@@ -2931,6 +2932,28 @@
         "@babel/helper-define-polyfill-provider": "^0.3.1"
       }
     },
+    "babel-polyfill": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmmirror.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+      "integrity": "sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==",
+      "requires": {
+        "babel-runtime": "^6.26.0",
+        "core-js": "^2.5.0",
+        "regenerator-runtime": "^0.10.5"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.6.12",
+          "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz",
+          "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ=="
+        },
+        "regenerator-runtime": {
+          "version": "0.10.5",
+          "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+          "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w=="
+        }
+      }
+    },
     "babel-runtime": {
       "version": "6.26.0",
       "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
@@ -3379,6 +3402,16 @@
       "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
       "dev": true
     },
+    "bindings": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz",
+      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "file-uri-to-path": "1.0.0"
+      }
+    },
     "bl": {
       "version": "4.1.0",
       "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
@@ -7505,6 +7538,13 @@
       "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==",
       "dev": true
     },
+    "file-uri-to-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+      "dev": true,
+      "optional": true
+    },
     "filemanager-webpack-plugin": {
       "version": "6.1.7",
       "resolved": "https://registry.npmjs.org/filemanager-webpack-plugin/-/filemanager-webpack-plugin-6.1.7.tgz",
@@ -11758,6 +11798,13 @@
         "thenify-all": "^1.0.0"
       }
     },
+    "nan": {
+      "version": "2.16.0",
+      "resolved": "https://registry.npmmirror.com/nan/-/nan-2.16.0.tgz",
+      "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA==",
+      "dev": true,
+      "optional": true
+    },
     "nanoid": {
       "version": "3.3.4",
       "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
@@ -17615,6 +17662,17 @@
       "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.14.tgz",
       "integrity": "sha512-x2284lgYvjOMj3Za7kqzRcUSxBboHqtgRE2zlos1qWaOye5yUmHn42LB1250NJBLRwEcdrB0JRwyPTEPhfQjiQ=="
     },
+    "vue-cron": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmmirror.com/vue-cron/-/vue-cron-1.0.9.tgz",
+      "integrity": "sha512-r8JnAjqpDsDj3a545156m7bca1xkrnIktks+N94KQA80OuKAiqhoz3Cq1JCyO+0ONXAOnLwvkjHiVCfL38XNbA==",
+      "requires": {
+        "babel-polyfill": "^6.26.0",
+        "babel-runtime": "^6.26.0",
+        "element-ui": "^2.0.7",
+        "vue": "^2.5.9"
+      }
+    },
     "vue-echarts": {
       "version": "5.0.0-beta.0",
       "resolved": "https://registry.npmjs.org/vue-echarts/-/vue-echarts-5.0.0-beta.0.tgz",
@@ -17752,6 +17810,18 @@
         }
       }
     },
+    "vue-loader-v16": {
+      "version": "npm:vue-loader@16.8.3",
+      "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
+      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chalk": "^4.1.0",
+        "hash-sum": "^2.0.0",
+        "loader-utils": "^2.0.0"
+      }
+    },
     "vue-router": {
       "version": "3.5.4",
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.4.tgz",
@@ -17894,7 +17964,11 @@
           "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
           "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
           "dev": true,
-          "optional": true
+          "optional": true,
+          "requires": {
+            "bindings": "^1.5.0",
+            "nan": "^2.12.1"
+          }
         },
         "glob-parent": {
           "version": "3.1.0",
@@ -18242,7 +18316,11 @@
           "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
           "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
           "dev": true,
-          "optional": true
+          "optional": true,
+          "requires": {
+            "bindings": "^1.5.0",
+            "nan": "^2.12.1"
+          }
         },
         "glob-parent": {
           "version": "3.1.0",

+ 1 - 0
in-cloud-ui/package.json

@@ -56,6 +56,7 @@
     "sortablejs": "^1.15.0",
     "vab-icon": "^0.0.1",
     "vue": "^2.6.14",
+    "vue-cron": "^1.0.9",
     "vue-echarts": "5.0.0-beta.0",
     "vue-router": "^3.5.3",
     "vuex": "^3.6.2",

+ 48 - 0
in-cloud-ui/src/api/quartz.js

@@ -0,0 +1,48 @@
+import request from '@/utils/request'
+
+export function fetchList(query) {
+  return request({
+    url: '/quartz/page',
+    method: 'get',
+    params: query
+  })
+}
+
+export function addObj(obj) {
+  return request({
+    url: '/quartz',
+    method: 'post',
+    data: obj
+  })
+}
+
+export function getAll() {
+  return request({
+    url: '/quartz/all/',
+    method: 'get'
+  })
+}
+
+
+export function getJobName(name) {
+  return request({
+    url: '/quartz/jobName/'+name,
+    method: 'get'
+  })
+}
+
+export function delObj(id) {
+  return request({
+    url: '/quartz/' + id,
+    method: 'delete'
+  })
+}
+
+export function putObj(obj) {
+  return request({
+    url: '/quartz',
+    method: 'put',
+    data: obj
+  })
+
+}

+ 12 - 0
in-cloud-ui/src/api/quartzBase.js

@@ -23,7 +23,19 @@ export function getExecuteClass(code) {
   })
 }
 
+export function getCode(code) {
+  return request({
+    url: '/quartzBase/code/' + code,
+    method: 'get'
+  })
+}
 
+export function getInCode(code) {
+  return request({
+    url: '/quartzBase/inCode/' + code,
+    method: 'get'
+  })
+}
 
 
 export function delObj(id) {

+ 3 - 0
in-cloud-ui/src/main.js

@@ -4,6 +4,9 @@ import store from './store'
 import router from './router'
 import './plugins'
 import '@/layouts/export'
+//全局引入
+import VueCron from 'vue-cron'
+Vue.use(VueCron);//使用方式:<vueCron></vueCron>
 /**
  * @author https://gitee.com/chu1204505056/vue-admin-better (不想保留author可删除)
  * @description 生产环境默认都使用mock,如果正式用于生产环境时,记得去掉

+ 53 - 17
in-cloud-ui/src/views/quartz/quartzBase/index.vue

@@ -9,7 +9,7 @@
           @submit.native.prevent
         >
           <el-form-item>
-            <el-input v-model="searchForm.code" placeholder="公司编码" />
+            <el-input v-model="searchForm.name" placeholder="定时任务名称" />
           </el-form-item>
           <el-form-item>
             <el-button
@@ -53,7 +53,12 @@
 
       <el-table-column
         show-overflow-tooltip
-        prop="sort"
+        prop="code"
+        label="编码"
+      />
+      <el-table-column
+        show-overflow-tooltip
+        prop="sor"
         label="排序"
       />
       <el-table-column show-overflow-tooltip prop="description" label="描述" />
@@ -102,13 +107,19 @@
           ></el-input>
         </el-form-item>
 
-        <el-form-item label="排序" prop="sort">
-          <el-input-number
-            v-model.trim="form.sort"
-            :min="1"
-            :max="15"
-            label="排序"
-          ></el-input-number>
+        <el-form-item label="编码" prop="code">
+          <el-input
+            v-model.trim="form.code"
+            autocomplete="off"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="排序" prop="sor">
+          <el-input
+            v-model.trim="form.sor"
+            type="string"
+            autocomplete="off"
+          ></el-input>
         </el-form-item>
 
         <el-form-item label="描述" prop="description">
@@ -138,13 +149,13 @@
 </template>
 
 <script>
-  import {
-    fetchList,
-    addObj,
-    putObj,
-    delObj,
-    getExecuteClass,
-  } from '@/api/quartzBase'
+import {
+  fetchList,
+  addObj,
+  putObj,
+  delObj,
+  getExecuteClass, getCode
+} from "@/api/quartzBase";
   import { getAll } from '@/api/integrationCompany'
   export default {
     name: 'QuartzBase',
@@ -165,6 +176,21 @@
         })
       }
 
+      const validateCode = (rule, value, callback) => {
+        if (!value) {
+          return callback(new Error('请输入编码'))
+        }
+        getCode(this.form.code, value).then((response) => {
+          if (this.dialogType === 'edit') callback()
+          let result = response.data
+          if (result !== null) {
+            callback(new Error('编码已存在'))
+          } else {
+            callback()
+          }
+        })
+      }
+
       return {
         dialogFormVisible: false,
         dialogType: '',
@@ -204,7 +230,14 @@
             },
           ],
 
-          sort: [
+          code: [
+            {
+              required: true,
+              trigger: 'blur',
+              validator: validateCode,
+            },
+          ],
+          sor: [
             {
               required: true,
               trigger: 'blur',
@@ -223,6 +256,8 @@
       this.getCompany()
     },
     methods: {
+      handleChange(value){this.form.sor = value}
+      ,
       getCompany() {
         getAll()
           .then((response) => {
@@ -328,6 +363,7 @@
         this.$refs.form.validate((valid) => {
           if (valid) {
             this.listLoading = true
+            console.log(this.form)
             putObj(this.form)
               .then((response) => {
                 this.$message({

+ 194 - 54
in-cloud-ui/src/views/quartz/quartzInfo/index.vue

@@ -8,9 +8,14 @@
           :inline="true"
           @submit.native.prevent
         >
-          <el-form-item>
-            <el-input v-model="searchForm.code" placeholder="场站标识" />
-          </el-form-item>
+          <el-select v-model="searchForm.stationCode" placeholder="请选择">
+            <el-option
+              v-for="item in stations"
+              :key="item.stationCode"
+              :label="item.name"
+              :value="item.stationCode"
+            ></el-option>
+          </el-select>
           <el-form-item>
             <el-button
               icon="el-icon-search"
@@ -62,11 +67,18 @@
       </el-table-column>
       <el-table-column show-overflow-tooltip prop="name" label="任务名称" />
       <el-table-column show-overflow-tooltip prop="jobName" label="任务标识" />
-      <el-table-column show-overflow-tooltip prop="jobState" label="任务状态"  />
-      <el-table-column show-overflow-tooltip prop="executeClass" label="执行类"  />
-      <el-table-column show-overflow-tooltip prop="cronExpression" label="cronb表达式"  />
-      <el-table-column show-overflow-tooltip prop="executeClass" label="执行类"  />
-      <el-table-column show-overflow-tooltip prop="description" label="描述"  />
+      <el-table-column show-overflow-tooltip prop="jobState" label="任务状态" />
+      <el-table-column
+        show-overflow-tooltip
+        prop="executeClass"
+        label="执行类"
+      />
+      <el-table-column
+        show-overflow-tooltip
+        prop="cronExpression"
+        label="cronb表达式"
+      />
+      <el-table-column show-overflow-tooltip prop="description" label="描述" />
 
       <el-table-column show-overflow-tooltip label="操作" width="180px">
         <template #default="{ row }">
@@ -96,26 +108,95 @@
       @close="close"
     >
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-        <el-form-item label="公司名称" prop="name">
-          <el-input v-model.trim="form.name" autocomplete="off"></el-input>
+        <el-form-item label="场站" prop="name">
+          <el-select
+            v-model="form.stationCode"
+            placeholder="请选择"
+            @change="selectStationChange($event)"
+          >
+            <el-option
+              v-for="item in stations"
+              :key="item.stationCode"
+              :label="item.name"
+              :value="item.stationCode"
+            ></el-option>
+          </el-select>
         </el-form-item>
-        <el-form-item label="公司编码" prop="code">
-          <el-input v-model.trim="form.code" autocomplete="off"></el-input>
+
+        <el-form-item label="执行类" prop="executeClass">
+          <el-select
+            v-model="form.executeClass"
+            placeholder="请选择"
+            @change="selectExecuteClassChange($event)"
+          >
+            <el-option
+              v-for="item in quartzBases"
+              :key="item.executeClass"
+              :label="item.name"
+              :value="item.executeClass"
+            ></el-option>
+          </el-select>
         </el-form-item>
-        <el-form-item label="联系方式" prop="contact">
-          <el-input v-model.trim="form.contact" autocomplete="off"></el-input>
+
+        <el-form-item label="cron" prop="cronExpression">
+          <el-popover v-model="cronPopover">
+            <cron
+              i18n="cn"
+              @change="changeCron"
+              @close="cronPopover = false"
+            ></cron>
+            <el-input
+              slot="reference"
+              style="margin-top: -50%"
+              v-model="form.cronExpression"
+              placeholder="请输入定时策略"
+              @click="cronPopover = true"
+            ></el-input>
+          </el-popover>
+        </el-form-item>
+
+
+        <el-form-item label="任务标识" prop="jobName">
+          <el-input
+            v-model.trim="form.jobName"
+            autocomplete="off"
+            :disabled="true"
+          ></el-input>
+        </el-form-item>
+
+
+
+
+        <el-form-item label="任务名称" prop="name">
+          <el-input v-model.trim="form.name" autocomplete="off"></el-input>
         </el-form-item>
 
-        <el-form-item label="鉴权URL" prop="username">
-          <el-input v-model.trim="form.comUrl" autocomplete="off"></el-input>
+        <el-form-item label="任务状态" prop="jobState">
+          <el-select
+            v-model="form.jobState"
+            placeholder="请选择"
+          >
+            <el-option
+              v-for="item in state"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
         </el-form-item>
 
-        <el-form-item label="推送数据URL" prop="username">
-          <el-input v-model.trim="form.pushUrl" autocomplete="off"></el-input>
+
+
+        <el-form-item label="开始时间" prop="startTime">
+          <el-date-picker
+            v-model.trim="form.startTime"
+            type="datetime"
+            placeholder="选择日期时间">
+          </el-date-picker>
         </el-form-item>
 
-        <el-form-item label="拉取数据URL" prop="username">
-          <el-input v-model.trim="form.pullUrl" autocomplete="off"></el-input>
+        <el-form-item label="类型" prop="jobType">
+          <el-input v-model.trim="form.jobType" autocomplete="off"></el-input>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -127,49 +208,55 @@
 </template>
 
 <script>
-  import {
-    fetchList,
-    addObj,
-    putObj,
-    delObj,
-    getObj,
-    getAll,
-  } from '@/api/integrationCompany'
+  import { fetchList, addObj, putObj, delObj,getJobName } from '@/api/quartz'
+  import { getCode, getInCode } from "@/api/quartzBase";
 
+  import { getAll } from '@/api/station'
+  import { cron } from 'vue-cron'
   export default {
-    name: 'quartzInfo',
-
+    name: 'QuartzInfo',
+    components: { cron },
     data() {
-      const validateInCompanyCode = (rule, value, callback) => {
+
+      const validateJobName = (rule, value, callback) => {
         if (!value) {
-          return callback(new Error('请输入一体化公司编码'))
+          return callback(new Error('请输入任务标识'))
         }
-        getObj(this.form.code, value).then((response) => {
+        getJobName(this.form.code, value).then((response) => {
           if (this.dialogType === 'edit') callback()
           let result = response.data
           if (result !== null) {
-            callback(new Error('一体化公司编码已存在'))
+            callback(new Error('任务标识存在'))
           } else {
             callback()
           }
         })
       }
-
       return {
+        cronPopover: false,
+        cron: '',
+        stations: [],
+        quartzBases: [],
+        inCode: '',
         dialogFormVisible: false,
         dialogType: '',
         title: '',
         tableData: [],
         companys: [],
-        elType: [
-          { label: '光电', value: 'E1' },
-          { label: '风电', value: 'E2' },
+        state: [
+          { label: '启动', value: 'start' },
+          { label: '停止', value: 'stop' },
+          { label: '重载', value: 'restart' },
         ],
         searchForm: {
-          code: null,
-          name: null,
+          stationCode: null,
+        },
+        form: {
+          stationCode: null,
+          executeClass: null,
+          jobName: null,
+          cronExpression: null,
         },
-        form: {},
         imgShow: true,
         list: [],
         imageList: [],
@@ -185,16 +272,25 @@
           pageSize: 20, // 每页显示多少条
         },
         rules: {
-          name: [
-            { required: true, trigger: 'blur', message: '请输入公司名称' },
+          name: [{ required: true, trigger: 'blur', message: '请输入名称' }],
+
+          executeClass: [
+            { required: true, trigger: 'blur', message: '请输入执行类' },
           ],
 
-          code: [
-            {
-              required: true,
-              trigger: 'blur',
-              validator: validateInCompanyCode,
-            },
+          jobName: [
+            { required: true, trigger: 'blur',  validator: validateJobName, },
+          ],
+
+          cronExpression: [
+            { required: true, trigger: 'blur', message: '请输入时间表达式' },
+          ],
+
+          startTime: [
+            { required: true, trigger: 'blur', message: '请输入开始时间' },
+          ],
+          jobState: [
+            { required: true, trigger: 'blur', message: '请输入状态' },
           ],
         },
       }
@@ -205,9 +301,53 @@
       },
     },
     created() {
-      this.fetchData()
+      this.getStations()
     },
     methods: {
+      changeCron(v) {
+        this.form.cronExpression = v
+      },
+      getStations() {
+        this.listLoading = true
+        getAll()
+          .then((response) => {
+            this.stations = response.data
+            this.fetchData()
+            this.listLoading = false
+          })
+          .catch(() => {
+            this.listLoading = false
+          })
+      },
+      getQuartzBaseInCode() {
+        getInCode(this.inCode)
+          .then((response) => {
+            this.quartzBases = response.data
+
+            this.listLoading = false
+          })
+          .catch(() => {
+            this.listLoading = false
+          })
+      },
+
+      selectStationChange(value) {
+        this.$set(this.form, 'executeClass', null)
+        const selectedItem = this.stations.find((item) => {
+          return item.stationCode === value
+          // 筛选出匹配数据,是对应数据的整个对象
+        })
+        this.inCode = selectedItem.inCode
+        this.getQuartzBaseInCode()
+      },
+
+      selectExecuteClassChange(value) {
+        const selectedItem = this.quartzBases.find((item) => {
+          return item.executeClass === value
+          // 筛选出匹配数据,是对应数据的整个对象
+        })
+        this.form.jobName = this.form.stationCode + '-' + selectedItem.code
+      },
       async fetchData() {
         this.listLoading = true
         fetchList(
@@ -306,8 +446,8 @@
               .then((response) => {
                 this.$message({
                   message: '修改成功',
-                  type: 'success'
-                });
+                  type: 'success',
+                })
                 this.dialogFormVisible = false
                 this.fetchData()
                 this.listLoading = false
@@ -315,8 +455,8 @@
               .catch(() => {
                 this.$message({
                   message: '修改失败',
-                  type: 'warning'
-                });
+                  type: 'warning',
+                })
                 this.listLoading = false
               })
           } else {

+ 28 - 1
in-cloud/src/main/java/com/jiayue/insu/incloud/controller/QuartzBaseController.java

@@ -1,5 +1,6 @@
 package com.jiayue.insu.incloud.controller;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.jiayue.insu.common.core.util.R;
@@ -33,7 +34,12 @@ public class QuartzBaseController {
 
     @GetMapping("/page")
     public R getStationPage(Page page, QuartzBase quartzBase) {
-        return R.ok(quartzBaseService.page(page, Wrappers.query(quartzBase)));
+        LambdaQueryWrapper<QuartzBase> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        if(quartzBase.getName()!=null){
+            lambdaQueryWrapper.like(QuartzBase::getName,quartzBase.getName());
+        }
+
+        return R.ok(quartzBaseService.page(page, lambdaQueryWrapper));
     }
 
     @GetMapping("/all")
@@ -52,6 +58,27 @@ public class QuartzBaseController {
         return R.ok(quartzBaseService.findByExecuteClass(executeClass));
     }
 
+    /**
+     * 通过标识
+     *
+     * @param code code
+     * @return R
+     */
+    @GetMapping("/code/{code}")
+    public R getByCode(@PathVariable("code") String  code) {
+        return R.ok(quartzBaseService.findByCode(code));
+    }
+
+    /**
+     * 通过 公司标识查询
+     *
+     * @param inCode inCode
+     * @return R
+     */
+    @GetMapping("/inCode/{inCode}")
+    public R getByInCode(@PathVariable("inCode") String  inCode) {
+        return R.ok(quartzBaseService.findByIncode(inCode));
+    }
 
     /**
      * 新增quartzBase

+ 1 - 1
in-cloud/src/main/java/com/jiayue/insu/incloud/controller/QuartzController.java

@@ -48,7 +48,7 @@ public class QuartzController {
      * @param jobName jobName
      * @return R
      */
-    @GetMapping("/{jobName}")
+    @GetMapping("/jobName/{jobName}")
     public R getByCode(@PathVariable("jobName") String  jobName) {
         return R.ok(quartzService.findByJobName(jobName));
     }

+ 3 - 1
in-cloud/src/main/java/com/jiayue/insu/incloud/entity/QuartzBase.java

@@ -26,11 +26,13 @@ public class QuartzBase extends BaseEntity{
     /*执行类*/
     private String executeClass;
     /*排序*/
-    private Integer sort;
+    private Integer sor;
     /*任务描述*/
     private String description;
     /*所属一体化公司*/
     private String inCode;
+    /*任务标识*/
+    private String code;
 
 
 }

+ 1 - 1
in-cloud/src/main/java/com/jiayue/insu/incloud/job/data/pull/PullCorrectDataJob.java → in-cloud/src/main/java/com/jiayue/insu/incloud/job/data/pull/QNHLPullCorrectDataJob.java

@@ -9,7 +9,7 @@ import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
 
-public class PullCorrectDataJob implements Job {
+public class QNHLPullCorrectDataJob implements Job {
 
 
     @Autowired

+ 3 - 2
in-cloud/src/main/java/com/jiayue/insu/incloud/pulldata/PullCorrectDataForQNHL.java

@@ -102,6 +102,7 @@ public class PullCorrectDataForQNHL implements IPullInitCorrectData{
 
 
         boolean result =false;
+        boolean isUpload = false;
         String response;
         RequestVo requestVo;
         List<ForecastData> list = new ArrayList<>();
@@ -215,7 +216,7 @@ public class PullCorrectDataForQNHL implements IPullInitCorrectData{
                                 if(b){
                                     File file = genFile(station);
                                     if(file!=null){
-                                        boolean isUpload = uploadFile(station.getStationCode() + "/" + file.getName(), file, station.getStationCode());
+                                        isUpload = uploadFile(station.getStationCode() + "/" + file.getName(), file, station.getStationCode());
                                     }
                                 }
 
@@ -244,7 +245,7 @@ public class PullCorrectDataForQNHL implements IPullInitCorrectData{
             }
         }
         recordService.save(record);
-        return result;
+        return isUpload;
 
     }
 

+ 6 - 0
in-cloud/src/main/java/com/jiayue/insu/incloud/service/QuartzBaseService.java

@@ -3,9 +3,15 @@ package com.jiayue.insu.incloud.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jiayue.insu.incloud.entity.QuartzBase;
 
+import java.util.List;
+
 public interface QuartzBaseService extends IService<QuartzBase> {
 
 
     QuartzBase findByExecuteClass(String executeClass);
 
+    QuartzBase findByCode(String code);
+
+    List<QuartzBase> findByIncode(String inCode);
+
 }

+ 6 - 0
in-cloud/src/main/java/com/jiayue/insu/incloud/service/QuartzService.java

@@ -2,10 +2,16 @@ package com.jiayue.insu.incloud.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.jiayue.insu.incloud.entity.Quartz;
+import org.quartz.SchedulerException;
+
+import java.text.ParseException;
 
 public interface QuartzService extends IService<Quartz> {
 
     Quartz findByJobName(String jobName);
 
+    boolean saveQuartz(Quartz quartz) throws SchedulerException, ClassNotFoundException, ParseException;
+
+    boolean updateQuartz(Quartz quartz) throws SchedulerException, ClassNotFoundException, ParseException;
 
 }

+ 16 - 0
in-cloud/src/main/java/com/jiayue/insu/incloud/service/impl/QuartzBaseServiceImpl.java

@@ -7,6 +7,8 @@ import com.jiayue.insu.incloud.mapper.QuartzBaseMapper;
 import com.jiayue.insu.incloud.service.QuartzBaseService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 public class QuartzBaseServiceImpl extends ServiceImpl<QuartzBaseMapper, QuartzBase> implements QuartzBaseService {
 
@@ -16,4 +18,18 @@ public class QuartzBaseServiceImpl extends ServiceImpl<QuartzBaseMapper, QuartzB
         lambdaQueryWrapper.eq(QuartzBase::getExecuteClass,executeClass);
         return this.getOne(lambdaQueryWrapper);
     }
+
+    @Override
+    public QuartzBase findByCode(String code) {
+        LambdaQueryWrapper<QuartzBase> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(QuartzBase::getCode,code);
+        return this.getOne(lambdaQueryWrapper);
+    }
+
+    @Override
+    public List<QuartzBase> findByIncode(String inCode) {
+        LambdaQueryWrapper<QuartzBase> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(QuartzBase::getInCode,inCode);
+        return this.list(lambdaQueryWrapper);
+    }
 }

+ 31 - 0
in-cloud/src/main/java/com/jiayue/insu/incloud/service/impl/QuartzServiceImpl.java

@@ -4,12 +4,19 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.jiayue.insu.incloud.entity.Quartz;
 import com.jiayue.insu.incloud.mapper.QuartzMapper;
+import com.jiayue.insu.incloud.quartz.ScheduledTask;
 import com.jiayue.insu.incloud.service.QuartzService;
+import org.quartz.SchedulerException;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.text.ParseException;
+
 @Service
 public class QuartzServiceImpl extends ServiceImpl<QuartzMapper, Quartz> implements QuartzService {
 
+    @Autowired
+    private ScheduledTask scheduledTask;
 
     @Override
     public Quartz findByJobName(String jobName) {
@@ -17,4 +24,28 @@ public class QuartzServiceImpl extends ServiceImpl<QuartzMapper, Quartz> impleme
         lambdaQueryWrapper.eq(Quartz::getJobName,jobName);
         return this.getOne(lambdaQueryWrapper);
     }
+
+    @Override
+    public boolean saveQuartz(Quartz quartz) throws SchedulerException, ClassNotFoundException, ParseException {
+        this.save(quartz);
+        if(!quartz.getJobState().equals("stop")){
+            scheduledTask.deleteJob(quartz.getJobName());
+            Class c = Class.forName(quartz.getExecuteClass());
+            scheduledTask.scheduleJob(c,quartz.getJobName(),quartz.getStartTime(),quartz.getCronExpression(),null);
+        }
+        return Boolean.TRUE;
+    }
+
+    @Override
+    public boolean updateQuartz(Quartz quartz) throws SchedulerException, ClassNotFoundException, ParseException {
+        this.updateQuartz(quartz);
+        if(!quartz.getJobState().equals("stop")){
+            scheduledTask.deleteJob(quartz.getJobName());
+            Class c = Class.forName(quartz.getExecuteClass());
+            scheduledTask.scheduleJob(c,quartz.getJobName(),quartz.getStartTime(),quartz.getCronExpression(),null);
+        }else{
+            scheduledTask.deleteJob(quartz.getJobName());
+        }
+        return Boolean.TRUE;
+    }
 }