Gizmo 2 лет назад
Родитель
Сommit
a0bff975f6
56 измененных файлов с 3089 добавлено и 75 удалено
  1. 2 2
      src/main/java/com/warewms/common/utils/_JFCodeGenerator.java
  2. 3 3
      src/main/java/com/warewms/common/utils/_JFinalGenerator.java
  3. 32 4
      src/main/java/com/warewms/config/ActiveRecordConfig.java
  4. 142 0
      src/main/java/com/warewms/controller/ScheduleJobController.java
  5. 12 0
      src/main/java/com/warewms/dao/AccountsUsersDao.java
  6. 12 0
      src/main/java/com/warewms/dao/BindManageDao.java
  7. 12 0
      src/main/java/com/warewms/dao/BindPhoneDao.java
  8. 12 0
      src/main/java/com/warewms/dao/RtDeviceAlarmFlagDao.java
  9. 12 0
      src/main/java/com/warewms/dao/ScheduleJobDao.java
  10. 12 0
      src/main/java/com/warewms/dao/ScheduleJobLogDao.java
  11. 79 0
      src/main/java/com/warewms/job/config/ScheduleConfig.java
  12. 110 0
      src/main/java/com/warewms/job/task/WareWmsTask.java
  13. 94 0
      src/main/java/com/warewms/job/utils/ScheduleJob.java
  14. 62 0
      src/main/java/com/warewms/job/utils/ScheduleRunnable.java
  15. 164 0
      src/main/java/com/warewms/job/utils/ScheduleUtils.java
  16. 11 0
      src/main/java/com/warewms/model/AccountsUsers.java
  17. 11 0
      src/main/java/com/warewms/model/BindManage.java
  18. 11 0
      src/main/java/com/warewms/model/BindPhone.java
  19. 11 0
      src/main/java/com/warewms/model/RtDeviceAlarmFlag.java
  20. 16 0
      src/main/java/com/warewms/model/ScheduleJob.java
  21. 11 0
      src/main/java/com/warewms/model/ScheduleJobLog.java
  22. 7 5
      src/main/java/com/warewms/model/_MappingKit.java
  23. 52 0
      src/main/java/com/warewms/model/base/BaseAccountsUsers.java
  24. 44 0
      src/main/java/com/warewms/model/base/BaseBindManage.java
  25. 52 0
      src/main/java/com/warewms/model/base/BaseBindPhone.java
  26. 20 20
      src/main/java/com/warewms/model/base/BaseMessage.java
  27. 92 0
      src/main/java/com/warewms/model/base/BaseRtDeviceAlarmFlag.java
  28. 76 0
      src/main/java/com/warewms/model/base/BaseScheduleJob.java
  29. 84 0
      src/main/java/com/warewms/model/base/BaseScheduleJobLog.java
  30. 6 0
      src/main/java/com/warewms/service/AccountsUsersService.java
  31. 6 0
      src/main/java/com/warewms/service/BindManageService.java
  32. 6 0
      src/main/java/com/warewms/service/BindPhoneService.java
  33. 10 0
      src/main/java/com/warewms/service/HeXunDataService.java
  34. 6 0
      src/main/java/com/warewms/service/RtDeviceAlarmFlagService.java
  35. 6 0
      src/main/java/com/warewms/service/ScheduleJobLogService.java
  36. 46 0
      src/main/java/com/warewms/service/ScheduleJobService.java
  37. 10 0
      src/main/java/com/warewms/service/impl/AccountsUsersServiceImpl.java
  38. 10 0
      src/main/java/com/warewms/service/impl/BindManageServiceImpl.java
  39. 10 0
      src/main/java/com/warewms/service/impl/BindPhoneServiceImpl.java
  40. 12 0
      src/main/java/com/warewms/service/impl/HeXunDataServiceImpl.java
  41. 10 0
      src/main/java/com/warewms/service/impl/RtDeviceAlarmFlagServiceImpl.java
  42. 10 0
      src/main/java/com/warewms/service/impl/ScheduleJobLogServiceImpl.java
  43. 142 0
      src/main/java/com/warewms/service/impl/ScheduleJobServiceImpl.java
  44. 126 0
      src/main/java/com/warewms/utils/Constant.java
  45. 32 32
      src/main/resources/application-dev.yml
  46. 3 0
      src/main/resources/application.yml
  47. 1305 0
      target/classes/META-INF/spring-configuration-metadata.json
  48. 71 8
      target/classes/application-dev.yml
  49. 4 1
      target/classes/application.yml
  50. BIN
      target/classes/com/warewms/common/utils/_JFCodeGenerator.class
  51. BIN
      target/classes/com/warewms/common/utils/_JFinalGenerator.class
  52. BIN
      target/classes/com/warewms/common/utils/_MetaBuilder.class
  53. BIN
      target/classes/com/warewms/config/ActiveRecordConfig.class
  54. BIN
      target/classes/com/warewms/datasources/DataSourceNames.class
  55. BIN
      target/classes/com/warewms/datasources/DynamicDataSourceConfig.class
  56. BIN
      target/classes/com/warewms/model/_MappingKit.class

+ 2 - 2
src/main/java/com/warewms/common/utils/_JFCodeGenerator.java

@@ -405,8 +405,8 @@ public class _JFCodeGenerator {
     public void generate(){
         DataSource dataSource = _JFinalGenerator.getDataSource();
 
-        _MetaBuilder metaBuilder = new _MetaBuilder(dataSource);
-//        MyMetaBuilder metaBuilder = new MyMetaBuilder(dataSource);
+//        _MetaBuilder metaBuilder = new _MetaBuilder(dataSource);
+        MyMetaBuilder metaBuilder = new MyMetaBuilder(dataSource);
         metaBuilder.setDialect(new MysqlDialect());
         metaBuilder.addExcludedTable(_JFinalGenerator.excludedTable);
         List<TableMeta> tableMetas = metaBuilder.build();

+ 3 - 3
src/main/java/com/warewms/common/utils/_JFinalGenerator.java

@@ -13,7 +13,7 @@ import javax.sql.DataSource;
  */
 public class _JFinalGenerator {
 
-    final static String DB_NAME = "x521_2";
+    final static String DB_NAME = "warewms_message";
     final static String DB_USER_NAME = "root";
     final static String DB_USER_PWD = "wyt312gizmo";
     final static String PK_NAME = "warewms"; //项目包名称
@@ -60,8 +60,8 @@ public class _JFinalGenerator {
 		Generator gernerator = new Generator(getDataSource(), baseModelPackageName, baseModelOutputDir, modelPackageName, modelOutputDir);
 
 		//生成特定表
-		_MetaBuilder metaBuilder = new _MetaBuilder(getDataSource());
-//		MetaBuilder metaBuilder = new MetaBuilder(getDataSource());
+//		_MetaBuilder metaBuilder = new _MetaBuilder(getDataSource());
+		MetaBuilder metaBuilder = new MetaBuilder(getDataSource());
 
 		metaBuilder.addExcludedTable(excludedTable);
 

+ 32 - 4
src/main/java/com/warewms/config/ActiveRecordConfig.java

@@ -3,7 +3,7 @@ package com.warewms.config;
 import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
 import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
 import com.jfinal.template.source.ClassPathSourceFactory;
-import com.warewms.model._MappingKit;
+import com.warewms.model.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Component;
@@ -37,13 +37,41 @@ public class ActiveRecordConfig {
         return arp;
     }
 
-    @Bean(initMethod="start", destroyMethod="stop",name = "msSqlRecord")
-    public ActiveRecordPlugin initMsSql() {
+    @Bean(initMethod="start", destroyMethod="stop",name = "activeRecordPlugin")
+    public ActiveRecordPlugin init01() {
         ActiveRecordPlugin arp = new ActiveRecordPlugin(dsSecond);
         arp.getEngine().setSourceFactory(new ClassPathSourceFactory());
         arp.setShowSql(false);
         arp.setDialect(new MysqlDialect());
-//        arp.addMapping("T_SHKD_CUSTOMER", TShkdCustomer.class);
+        arp.addMapping("rt_user", RtUser.class);
+        return arp;
+    }
+
+    @Bean(initMethod="start", destroyMethod="stop",name = "activeRecordPlugin")
+    public ActiveRecordPlugin init02() {
+        ActiveRecordPlugin arp = new ActiveRecordPlugin(dsThird);
+        arp.getEngine().setSourceFactory(new ClassPathSourceFactory());
+        arp.setShowSql(false);
+        arp.setDialect(new MysqlDialect());
+        arp.addMapping("rt_robot_info", RtRobotInfo.class);
+        arp.addMapping("rt_device", RtDevice.class);
+        arp.addMapping("rt_device_alarm", RtDeviceAlarm.class);
+        arp.addMapping("rt_device_data_inf", RtDeviceDataInf.class);
+        arp.addMapping("rt_device_data_ins", RtDeviceDataIns.class);
+        return arp;
+    }
+
+    @Bean(initMethod="start", destroyMethod="stop",name = "activeRecordPlugin")
+    public ActiveRecordPlugin init03() {
+        ActiveRecordPlugin arp = new ActiveRecordPlugin(dsFourth);
+        arp.getEngine().setSourceFactory(new ClassPathSourceFactory());
+        arp.setShowSql(false);
+        arp.setDialect(new MysqlDialect());
+        arp.addMapping("rt_robot_info", RtRobotInfo.class);
+        arp.addMapping("rt_device", RtDevice.class);
+        arp.addMapping("rt_device_alarm", RtDeviceAlarm.class);
+        arp.addMapping("rt_device_data_inf", RtDeviceDataInf.class);
+        arp.addMapping("rt_device_data_ins", RtDeviceDataIns.class);
         return arp;
     }
 }

+ 142 - 0
src/main/java/com/warewms/controller/ScheduleJobController.java

@@ -0,0 +1,142 @@
+/**
+ * Copyright 2018
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.warewms.controller;
+
+import com.warewms.common.annotation.SysLog;
+import com.warewms.common.utils.PageUtils;
+import com.warewms.common.utils.R;
+import com.warewms.common.validator.ValidatorUtils;
+import com.warewms.model.ScheduleJob;
+import com.warewms.service.ScheduleJobService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+ * 定时任务
+ *
+ * @author Mark sunlightcs@gmail.com
+ * @since 1.2.0 2016-11-28
+ */
+@RestController
+@RequestMapping("/sys/schedule")
+public class ScheduleJobController {
+
+	@Autowired
+	private ScheduleJobService scheduleJobService;
+
+    /**
+     * 定时任务列表
+     */
+    @GetMapping("/list")
+    @RequiresPermissions("sys:schedule:list")
+    public R list(@RequestParam Map<String, Object> params){
+        PageUtils page = scheduleJobService.queryPage(params);
+
+        return R.ok().put("page", page);
+    }
+
+    /**
+     * 定时任务信息
+     */
+    @GetMapping("/info/{jobId}")
+    @RequiresPermissions("sys:schedule:info")
+    public R info(@PathVariable("jobId") Long jobId){
+        ScheduleJob schedule = scheduleJobService.findById(jobId);
+
+        return R.ok().put("schedule", schedule);
+    }
+
+    /**
+     * 保存定时任务
+     */
+    @SysLog("保存定时任务")
+    @PostMapping("/save")
+    @RequiresPermissions("sys:schedule:save")
+    public R save(@RequestBody ScheduleJob scheduleJob){
+        ValidatorUtils.validateEntity(scheduleJob);
+
+        scheduleJobService.save(scheduleJob);
+
+        return R.ok();
+    }
+
+    /**
+     * 修改定时任务
+     */
+    @SysLog("修改定时任务")
+    @PostMapping("/update")
+    @RequiresPermissions("sys:schedule:update")
+    public R update(@RequestBody ScheduleJob scheduleJob){
+        ValidatorUtils.validateEntity(scheduleJob);
+
+        scheduleJobService.update(scheduleJob);
+
+        return R.ok();
+    }
+
+    /**
+     * 删除定时任务
+     */
+    @SysLog("删除定时任务")
+    @PostMapping("/delete")
+    @RequiresPermissions("sys:schedule:delete")
+    public R delete(@RequestBody Long[] jobIds){
+        scheduleJobService.deleteBatch(jobIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 立即执行任务
+     */
+    @SysLog("立即执行任务")
+    @PostMapping("/run")
+    @RequiresPermissions("sys:schedule:run")
+    public R run(@RequestBody Long[] jobIds){
+        scheduleJobService.run(jobIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 暂停定时任务
+     */
+    @SysLog("暂停定时任务")
+    @PostMapping("/pause")
+    @RequiresPermissions("sys:schedule:pause")
+    public R pause(@RequestBody Long[] jobIds){
+        scheduleJobService.pause(jobIds);
+
+        return R.ok();
+    }
+
+    /**
+     * 恢复定时任务
+     */
+    @SysLog("恢复定时任务")
+    @PostMapping("/resume")
+    @RequiresPermissions("sys:schedule:resume")
+    public R resume(@RequestBody Long[] jobIds){
+        scheduleJobService.resume(jobIds);
+
+        return R.ok();
+    }
+
+}

+ 12 - 0
src/main/java/com/warewms/dao/AccountsUsersDao.java

@@ -0,0 +1,12 @@
+package com.warewms.dao;
+
+import com.warewms.dao.BaseDao;
+import com.warewms.model.AccountsUsers;
+import org.springframework.stereotype.Component;
+
+@Component
+public class AccountsUsersDao extends BaseDao<AccountsUsers> {
+    public AccountsUsersDao() {
+        super(AccountsUsers.class);
+    }
+}

+ 12 - 0
src/main/java/com/warewms/dao/BindManageDao.java

@@ -0,0 +1,12 @@
+package com.warewms.dao;
+
+import com.warewms.dao.BaseDao;
+import com.warewms.model.BindManage;
+import org.springframework.stereotype.Component;
+
+@Component
+public class BindManageDao extends BaseDao<BindManage> {
+    public BindManageDao() {
+        super(BindManage.class);
+    }
+}

+ 12 - 0
src/main/java/com/warewms/dao/BindPhoneDao.java

@@ -0,0 +1,12 @@
+package com.warewms.dao;
+
+import com.warewms.dao.BaseDao;
+import com.warewms.model.BindPhone;
+import org.springframework.stereotype.Component;
+
+@Component
+public class BindPhoneDao extends BaseDao<BindPhone> {
+    public BindPhoneDao() {
+        super(BindPhone.class);
+    }
+}

+ 12 - 0
src/main/java/com/warewms/dao/RtDeviceAlarmFlagDao.java

@@ -0,0 +1,12 @@
+package com.warewms.dao;
+
+import com.warewms.dao.BaseDao;
+import com.warewms.model.RtDeviceAlarmFlag;
+import org.springframework.stereotype.Component;
+
+@Component
+public class RtDeviceAlarmFlagDao extends BaseDao<RtDeviceAlarmFlag> {
+    public RtDeviceAlarmFlagDao() {
+        super(RtDeviceAlarmFlag.class);
+    }
+}

+ 12 - 0
src/main/java/com/warewms/dao/ScheduleJobDao.java

@@ -0,0 +1,12 @@
+package com.warewms.dao;
+
+import com.warewms.dao.BaseDao;
+import com.warewms.model.ScheduleJob;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ScheduleJobDao extends BaseDao<ScheduleJob> {
+    public ScheduleJobDao() {
+        super(ScheduleJob.class);
+    }
+}

+ 12 - 0
src/main/java/com/warewms/dao/ScheduleJobLogDao.java

@@ -0,0 +1,12 @@
+package com.warewms.dao;
+
+import com.warewms.dao.BaseDao;
+import com.warewms.model.ScheduleJobLog;
+import org.springframework.stereotype.Component;
+
+@Component
+public class ScheduleJobLogDao extends BaseDao<ScheduleJobLog> {
+    public ScheduleJobLogDao() {
+        super(ScheduleJobLog.class);
+    }
+}

+ 79 - 0
src/main/java/com/warewms/job/config/ScheduleConfig.java

@@ -0,0 +1,79 @@
+/**
+ * Copyright 2018
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.warewms.job.config;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.quartz.SchedulerFactoryBean;
+
+import javax.sql.DataSource;
+import java.util.Properties;
+
+/**
+ * 定时任务配置
+ *
+ * @author Mark sunlightcs@gmail.com
+ * @since 2.0.0 2017-04-20
+ */
+@Configuration
+public class ScheduleConfig {
+
+    @Value("${schedule.open}")
+    Boolean scheduleOpen;
+
+    @Bean
+    public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) {
+        SchedulerFactoryBean factory = new SchedulerFactoryBean();
+        factory.setDataSource(dataSource);
+
+        //quartz参数
+        Properties prop = new Properties();
+        prop.put("org.quartz.scheduler.instanceName", "SdbScheduler");
+        prop.put("org.quartz.scheduler.instanceId", "AUTO");
+        //线程池配置
+        prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
+        prop.put("org.quartz.threadPool.threadCount", "20");
+        prop.put("org.quartz.threadPool.threadPriority", "5");
+        //JobStore配置
+        prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
+        //集群配置
+        prop.put("org.quartz.jobStore.isClustered", "true");
+        prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000");
+        prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1");
+
+        prop.put("org.quartz.jobStore.misfireThreshold", "12000");
+        prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
+        prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");
+
+        //PostgreSQL数据库,需要打开此注释
+        //prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.PostgreSQLDelegate");
+
+        factory.setQuartzProperties(prop);
+
+        factory.setSchedulerName("SdbScheduler");
+        //延时启动
+        factory.setStartupDelay(30);
+        factory.setApplicationContextSchedulerContextKey("applicationContextKey");
+        //可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
+        factory.setOverwriteExistingJobs(true);
+        //设置自动启动,默认为true
+        factory.setAutoStartup(scheduleOpen);
+
+        return factory;
+    }
+}

+ 110 - 0
src/main/java/com/warewms/job/task/WareWmsTask.java

@@ -0,0 +1,110 @@
+package com.warewms.job.task;
+
+import com.jfinal.plugin.activerecord.Db;
+import com.warewms.common.annotation.JFinalTx;
+import com.warewms.common.utils.HttpRequest;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * WMS定时任务
+ *
+ * testTask为spring bean的名称
+ *
+ * @author Mark sunlightcs@gmail.com
+ * @since 1.2.0 2016-11-28
+ */
+@Slf4j
+@Component("wareWmsTask")
+public class WareWmsTask {
+
+
+//
+//    /**
+//     * 检验WMS企业信息证照信息是否过期
+//     */
+//    public void checkEnterpriseDateValidation() {
+//        try {
+//            HttpRequest.postData("kayeeApiConfig.getUrl()");
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
+//
+//    /**
+//     * 刷新提醒数据
+//     */
+//    public void requestRemind() {
+//        try {
+//            HttpRequest.postData("http://47.100.226.205:8080/remindController.do?remind");
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
+//
+//    /**
+//     * 统计用户绩效
+//     */
+//    public void requestUserStatisticsPerformance() {
+//        try {
+//            HttpRequest.postData("http://47.100.226.205:8080/userStatisticsPerformanceController.do?performanceStatistics");
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//        }
+//    }
+//
+    /**
+     * 清除定时任务日志
+     */
+    public void exec(){
+        log.info("Schedule...................");
+    }
+//
+//    /**
+//     * 初始化库位状态
+//     */
+//    public void initLocationStatus(){
+//
+//        log.info("开始初始化库位状态------------->>>>");
+//        String sql = Db.getSql("location.initLocationStatus");
+//        Db.update(sql);
+//        log.info("初始化库位状态完成-------------<<<<");
+//    }
+//
+//    /**
+//     * 库存备份、库存量监测
+//     */
+//    public void invBackup() {
+//
+//        log.info("↓↓↓↓↓↓↓↓↓↓↓↓↓库存备份、库存量监测↓↓↓↓↓↓↓↓↓↓↓↓↓");
+//        try {
+//
+//            invLotBackupService.backup();
+//            invLotLocIdBackupService.backup();
+//
+//            commonService.inventoryDetection();
+//        } catch (Exception e) {
+//
+//            e.printStackTrace();
+//        }
+//    }
+//
+//    /**
+//     * !!!!!!数据归档 !!!!!!
+//     * 不了解业务请不要随意动
+//     */
+//    @JFinalTx
+//    public void dataArchive() {
+//
+//        log.info("↓↓↓↓↓↓↓↓↓↓↓↓↓归档↓↓↓↓↓↓↓↓↓↓↓↓↓");
+//        try {
+//
+//            commonService.dataArchive();
+//        } catch (Exception e) {
+//
+//            log.error("数据定时归档操作失败:》》》》》》》》》》》》》》》》》》》》》》》》" + e.getMessage());
+//            throw new RuntimeException(e);
+//        }
+//    }
+}

+ 94 - 0
src/main/java/com/warewms/job/utils/ScheduleJob.java

@@ -0,0 +1,94 @@
+/**
+ * Copyright 2018
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.warewms.job.utils;
+
+import com.warewms.common.utils.SpringContextUtils;
+import com.warewms.model.ScheduleJobLog;
+import com.warewms.service.ScheduleJobLogService;
+import org.apache.commons.lang.StringUtils;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.quartz.QuartzJobBean;
+
+import java.util.Date;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+
+
+/**
+ * 定时任务
+ *
+ * @author Mark sunlightcs@gmail.com
+ * @since 1.2.0 2016-11-28
+ */
+public class ScheduleJob extends QuartzJobBean {
+	private Logger logger = LoggerFactory.getLogger(getClass());
+	private ExecutorService service = Executors.newSingleThreadExecutor(); 
+	
+    @Override
+    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
+        com.warewms.model.ScheduleJob scheduleJob = (com.warewms.model.ScheduleJob) context.getMergedJobDataMap()
+        		.get(com.warewms.model.ScheduleJob.JOB_PARAM_KEY);
+        
+        //获取spring bean
+        ScheduleJobLogService scheduleJobLogService = (ScheduleJobLogService) SpringContextUtils.getBean("scheduleJobLogService");
+        
+        //数据库保存执行记录
+        ScheduleJobLog log = new ScheduleJobLog();
+        log.setJobId(scheduleJob.getJobId());
+        log.setBeanName(scheduleJob.getBeanName());
+        log.setMethodName(scheduleJob.getMethodName());
+        log.setParams(scheduleJob.getParams());
+        log.setCreateTime(new Date());
+        
+        //任务开始时间
+        long startTime = System.currentTimeMillis();
+        
+        try {
+            //执行任务
+//        	logger.info("任务准备执行,任务ID:" + scheduleJob.getJobId());
+            ScheduleRunnable task = new ScheduleRunnable(scheduleJob.getBeanName(),
+            		scheduleJob.getMethodName(), scheduleJob.getParams());
+            Future<?> future = service.submit(task);
+            
+			future.get();
+			
+			//任务执行总时长
+			long times = System.currentTimeMillis() - startTime;
+			log.setTimes((int)times);
+			//任务状态    0:成功    1:失败
+			log.setStatus(0);
+			
+//			logger.info("任务执行完毕,任务ID:" + scheduleJob.getJobId() + "  总共耗时:" + times + "毫秒");
+		} catch (Exception e) {
+			logger.error("任务执行失败,任务ID:" + scheduleJob.getJobId(), e);
+			
+			//任务执行总时长
+			long times = System.currentTimeMillis() - startTime;
+			log.setTimes((int)times);
+			
+			//任务状态    0:成功    1:失败
+			log.setStatus(1);
+			log.setError(StringUtils.substring(e.toString(), 0, 2000));
+		}finally {
+			log.save();
+		}
+    }
+}

+ 62 - 0
src/main/java/com/warewms/job/utils/ScheduleRunnable.java

@@ -0,0 +1,62 @@
+/**
+ * Copyright 2018
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.warewms.job.utils;
+
+import com.warewms.common.exception.RRException;
+import com.warewms.common.utils.SpringContextUtils;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.util.ReflectionUtils;
+
+import java.lang.reflect.Method;
+
+/**
+ * 执行定时任务
+ *
+ * @author Mark sunlightcs@gmail.com
+ * @since 1.2.0 2016-11-28
+ */
+public class ScheduleRunnable implements Runnable {
+	private Object target;
+	private Method method;
+	private String params;
+	
+	public ScheduleRunnable(String beanName, String methodName, String params) throws NoSuchMethodException, SecurityException {
+		this.target = SpringContextUtils.getBean(beanName);
+		this.params = params;
+		
+		if(StringUtils.isNotBlank(params)){
+			this.method = target.getClass().getDeclaredMethod(methodName, String.class);
+		}else{
+			this.method = target.getClass().getDeclaredMethod(methodName);
+		}
+	}
+
+	@Override
+	public void run() {
+		try {
+			ReflectionUtils.makeAccessible(method);
+			if(StringUtils.isNotBlank(params)){
+				method.invoke(target, params);
+			}else{
+				method.invoke(target);
+			}
+		}catch (Exception e) {
+			throw new RRException("执行定时任务失败", e);
+		}
+	}
+
+}

+ 164 - 0
src/main/java/com/warewms/job/utils/ScheduleUtils.java

@@ -0,0 +1,164 @@
+/**
+ * Copyright 2018
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.warewms.job.utils;
+
+import com.warewms.common.exception.RRException;
+import com.warewms.utils.Constant;
+import org.quartz.*;
+
+/**
+ * 定时任务工具类
+ *
+ * @author Mark sunlightcs@gmail.com
+ * @since 1.2.0 2016-11-28
+ */
+public class ScheduleUtils {
+    private final static String JOB_NAME = "TASK_";
+
+    /**
+     * 获取触发器key
+     */
+    public static TriggerKey getTriggerKey(Long jobId) {
+        return TriggerKey.triggerKey(JOB_NAME + jobId);
+    }
+
+    /**
+     * 获取jobKey
+     */
+    public static JobKey getJobKey(Long jobId) {
+        return JobKey.jobKey(JOB_NAME + jobId);
+    }
+
+    /**
+     * 获取表达式触发器
+     */
+    public static CronTrigger getCronTrigger(Scheduler scheduler, Long jobId) {
+        try {
+            return (CronTrigger) scheduler.getTrigger(getTriggerKey(jobId));
+        } catch (SchedulerException e) {
+            throw new RRException("获取定时任务CronTrigger出现异常", e);
+        }
+    }
+
+    /**
+     * 创建定时任务
+     */
+    public static void createScheduleJob(Scheduler scheduler, com.warewms.model.ScheduleJob scheduleJob) {
+        try {
+        	//构建job信息
+            JobDetail jobDetail = JobBuilder.newJob(ScheduleJob.class).withIdentity(getJobKey(scheduleJob.getJobId())).build();
+
+            //表达式调度构建器
+            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression())
+            		.withMisfireHandlingInstructionDoNothing();
+
+            //按新的cronExpression表达式构建一个新的trigger
+            CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(scheduleJob.getJobId())).withSchedule(scheduleBuilder).build();
+
+            //放入参数,运行时的方法可以获取
+            jobDetail.getJobDataMap().put(com.warewms.model.ScheduleJob.JOB_PARAM_KEY, scheduleJob);
+
+            scheduler.scheduleJob(jobDetail, trigger);
+
+            //暂停任务
+            if(scheduleJob.getStatus() == Constant.ScheduleStatus.PAUSE.getValue()){
+            	pauseJob(scheduler, scheduleJob.getJobId());
+            }
+        } catch (SchedulerException e) {
+            throw new RRException("创建定时任务失败", e);
+        }
+    }
+
+    /**
+     * 更新定时任务
+     */
+    public static void updateScheduleJob(Scheduler scheduler, com.warewms.model.ScheduleJob scheduleJob) {
+        try {
+            TriggerKey triggerKey = getTriggerKey(scheduleJob.getJobId());
+
+            //表达式调度构建器
+            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression())
+            		.withMisfireHandlingInstructionDoNothing();
+
+            CronTrigger trigger = getCronTrigger(scheduler, scheduleJob.getJobId());
+
+            //按新的cronExpression表达式重新构建trigger
+            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
+
+            //参数
+            trigger.getJobDataMap().put(com.warewms.model.ScheduleJob.JOB_PARAM_KEY, scheduleJob);
+
+            scheduler.rescheduleJob(triggerKey, trigger);
+
+            //暂停任务
+            if(scheduleJob.getStatus() == Constant.ScheduleStatus.PAUSE.getValue()){
+            	pauseJob(scheduler, scheduleJob.getJobId());
+            }
+
+        } catch (SchedulerException e) {
+            throw new RRException("更新定时任务失败", e);
+        }
+    }
+
+    /**
+     * 立即执行任务
+     */
+    public static void run(Scheduler scheduler, com.warewms.model.ScheduleJob scheduleJob) {
+        try {
+        	//参数
+        	JobDataMap dataMap = new JobDataMap();
+        	dataMap.put(com.warewms.model.ScheduleJob.JOB_PARAM_KEY, scheduleJob);
+        	
+            scheduler.triggerJob(getJobKey(scheduleJob.getJobId()), dataMap);
+        } catch (SchedulerException e) {
+            throw new RRException("立即执行定时任务失败", e);
+        }
+    }
+
+    /**
+     * 暂停任务
+     */
+    public static void pauseJob(Scheduler scheduler, Long jobId) {
+        try {
+            scheduler.pauseJob(getJobKey(jobId));
+        } catch (SchedulerException e) {
+            throw new RRException("暂停定时任务失败", e);
+        }
+    }
+
+    /**
+     * 恢复任务
+     */
+    public static void resumeJob(Scheduler scheduler, Long jobId) {
+        try {
+            scheduler.resumeJob(getJobKey(jobId));
+        } catch (SchedulerException e) {
+            throw new RRException("暂停定时任务失败", e);
+        }
+    }
+
+    /**
+     * 删除定时任务
+     */
+    public static void deleteScheduleJob(Scheduler scheduler, Long jobId) {
+        try {
+            scheduler.deleteJob(getJobKey(jobId));
+        } catch (SchedulerException e) {
+            throw new RRException("删除定时任务失败", e);
+        }
+    }
+}

+ 11 - 0
src/main/java/com/warewms/model/AccountsUsers.java

@@ -0,0 +1,11 @@
+package com.warewms.model;
+
+import com.warewms.model.base.BaseAccountsUsers;
+
+/**
+ * Generated by JFinal.
+ */
+@SuppressWarnings("serial")
+public class AccountsUsers extends BaseAccountsUsers<AccountsUsers> {
+	public static final AccountsUsers dao = new AccountsUsers().dao();
+}

+ 11 - 0
src/main/java/com/warewms/model/BindManage.java

@@ -0,0 +1,11 @@
+package com.warewms.model;
+
+import com.warewms.model.base.BaseBindManage;
+
+/**
+ * Generated by JFinal.
+ */
+@SuppressWarnings("serial")
+public class BindManage extends BaseBindManage<BindManage> {
+	public static final BindManage dao = new BindManage().dao();
+}

+ 11 - 0
src/main/java/com/warewms/model/BindPhone.java

@@ -0,0 +1,11 @@
+package com.warewms.model;
+
+import com.warewms.model.base.BaseBindPhone;
+
+/**
+ * Generated by JFinal.
+ */
+@SuppressWarnings("serial")
+public class BindPhone extends BaseBindPhone<BindPhone> {
+	public static final BindPhone dao = new BindPhone().dao();
+}

+ 11 - 0
src/main/java/com/warewms/model/RtDeviceAlarmFlag.java

@@ -0,0 +1,11 @@
+package com.warewms.model;
+
+import com.warewms.model.base.BaseRtDeviceAlarmFlag;
+
+/**
+ * Generated by JFinal.
+ */
+@SuppressWarnings("serial")
+public class RtDeviceAlarmFlag extends BaseRtDeviceAlarmFlag<RtDeviceAlarmFlag> {
+	public static final RtDeviceAlarmFlag dao = new RtDeviceAlarmFlag().dao();
+}

+ 16 - 0
src/main/java/com/warewms/model/ScheduleJob.java

@@ -0,0 +1,16 @@
+package com.warewms.model;
+
+import com.warewms.model.base.BaseScheduleJob;
+
+/**
+ * Generated by JFinal.
+ */
+@SuppressWarnings("serial")
+public class ScheduleJob extends BaseScheduleJob<ScheduleJob> {
+	public static final ScheduleJob dao = new ScheduleJob().dao();
+
+	/**
+	 * 任务调度参数key
+	 */
+	public static final String JOB_PARAM_KEY = "JOB_PARAM_KEY";
+}

+ 11 - 0
src/main/java/com/warewms/model/ScheduleJobLog.java

@@ -0,0 +1,11 @@
+package com.warewms.model;
+
+import com.warewms.model.base.BaseScheduleJobLog;
+
+/**
+ * Generated by JFinal.
+ */
+@SuppressWarnings("serial")
+public class ScheduleJobLog extends BaseScheduleJobLog<ScheduleJobLog> {
+	public static final ScheduleJobLog dao = new ScheduleJobLog().dao();
+}

+ 7 - 5
src/main/java/com/warewms/model/_MappingKit.java

@@ -16,11 +16,13 @@ import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
 public class _MappingKit {
 	
 	public static void mapping(ActiveRecordPlugin arp) {
-		arp.addMapping("rt_device_alarm", "alarm_id", RtDeviceAlarm.class);
-		// Composite Primary Key order: device_tag,data_date
-		arp.addMapping("rt_device_data_inf", "device_tag,data_date", RtDeviceDataInf.class);
-		// Composite Primary Key order: device_tag,data_date
-		arp.addMapping("rt_device_data_ins", "device_tag,data_date", RtDeviceDataIns.class);
+		arp.addMapping("accounts_users", "UserID", AccountsUsers.class);
+		arp.addMapping("bind_manage", "MANAGE_ID", BindManage.class);
+		arp.addMapping("bind_phone", "MANAGE_ID", BindPhone.class);
+		arp.addMapping("message", "message_id", Message.class);
+		arp.addMapping("rt_device_alarm_flag", "alarm_id", RtDeviceAlarmFlag.class);
+		arp.addMapping("schedule_job", "job_id", ScheduleJob.class);
+		arp.addMapping("schedule_job_log", "log_id", ScheduleJobLog.class);
 	}
 }
 

+ 52 - 0
src/main/java/com/warewms/model/base/BaseAccountsUsers.java

@@ -0,0 +1,52 @@
+package com.warewms.model.base;
+
+import com.jfinal.plugin.activerecord.Model;
+import com.jfinal.plugin.activerecord.IBean;
+
+/**
+ * Generated by JFinal, do not modify this file.
+ */
+@SuppressWarnings("serial")
+public abstract class BaseAccountsUsers<M extends BaseAccountsUsers<M>> extends Model<M> implements IBean {
+
+	public void setUserID(java.lang.Integer UserID) {
+		set("UserID", UserID);
+	}
+	
+	public java.lang.Integer getUserID() {
+		return getInt("UserID");
+	}
+
+	public void setUserName(java.lang.String UserName) {
+		set("UserName", UserName);
+	}
+	
+	public java.lang.String getUserName() {
+		return getStr("UserName");
+	}
+
+	public void setPassword(java.lang.String Password) {
+		set("Password", Password);
+	}
+	
+	public java.lang.String getPassword() {
+		return getStr("Password");
+	}
+
+	public void setNickName(java.lang.String NickName) {
+		set("NickName", NickName);
+	}
+	
+	public java.lang.String getNickName() {
+		return getStr("NickName");
+	}
+
+	public void setPhone(java.lang.String Phone) {
+		set("Phone", Phone);
+	}
+	
+	public java.lang.String getPhone() {
+		return getStr("Phone");
+	}
+
+}

+ 44 - 0
src/main/java/com/warewms/model/base/BaseBindManage.java

@@ -0,0 +1,44 @@
+package com.warewms.model.base;
+
+import com.jfinal.plugin.activerecord.Model;
+import com.jfinal.plugin.activerecord.IBean;
+
+/**
+ * Generated by JFinal, do not modify this file.
+ */
+@SuppressWarnings("serial")
+public abstract class BaseBindManage<M extends BaseBindManage<M>> extends Model<M> implements IBean {
+
+	public void setManageId(java.lang.Integer manageId) {
+		set("MANAGE_ID", manageId);
+	}
+	
+	public java.lang.Integer getManageId() {
+		return getInt("MANAGE_ID");
+	}
+
+	public void setManageName(java.lang.String manageName) {
+		set("MANAGE_NAME", manageName);
+	}
+	
+	public java.lang.String getManageName() {
+		return getStr("MANAGE_NAME");
+	}
+
+	public void setFlagEnable(java.lang.Integer flagEnable) {
+		set("FLAG_ENABLE", flagEnable);
+	}
+	
+	public java.lang.Integer getFlagEnable() {
+		return getInt("FLAG_ENABLE");
+	}
+
+	public void setUpdateTime(java.util.Date updateTime) {
+		set("UPDATE_TIME", updateTime);
+	}
+	
+	public java.util.Date getUpdateTime() {
+		return get("UPDATE_TIME");
+	}
+
+}

+ 52 - 0
src/main/java/com/warewms/model/base/BaseBindPhone.java

@@ -0,0 +1,52 @@
+package com.warewms.model.base;
+
+import com.jfinal.plugin.activerecord.Model;
+import com.jfinal.plugin.activerecord.IBean;
+
+/**
+ * Generated by JFinal, do not modify this file.
+ */
+@SuppressWarnings("serial")
+public abstract class BaseBindPhone<M extends BaseBindPhone<M>> extends Model<M> implements IBean {
+
+	public void setManageId(java.lang.Integer manageId) {
+		set("MANAGE_ID", manageId);
+	}
+	
+	public java.lang.Integer getManageId() {
+		return getInt("MANAGE_ID");
+	}
+
+	public void setPHONE(java.lang.String PHONE) {
+		set("PHONE", PHONE);
+	}
+	
+	public java.lang.String getPHONE() {
+		return getStr("PHONE");
+	}
+
+	public void setFlagEnable(java.lang.Integer flagEnable) {
+		set("FLAG_ENABLE", flagEnable);
+	}
+	
+	public java.lang.Integer getFlagEnable() {
+		return getInt("FLAG_ENABLE");
+	}
+
+	public void setCreateBy(java.math.BigDecimal createBy) {
+		set("CREATE_BY", createBy);
+	}
+	
+	public java.math.BigDecimal getCreateBy() {
+		return get("CREATE_BY");
+	}
+
+	public void setCreateTime(java.util.Date createTime) {
+		set("CREATE_TIME", createTime);
+	}
+	
+	public java.util.Date getCreateTime() {
+		return get("CREATE_TIME");
+	}
+
+}

+ 20 - 20
src/main/java/com/warewms/model/base/BaseMessage.java

@@ -1,7 +1,7 @@
 package com.warewms.model.base;
 
-import com.jfinal.plugin.activerecord.IBean;
 import com.jfinal.plugin.activerecord.Model;
+import com.jfinal.plugin.activerecord.IBean;
 
 /**
  * Generated by JFinal, do not modify this file.
@@ -9,59 +9,59 @@ import com.jfinal.plugin.activerecord.Model;
 @SuppressWarnings("serial")
 public abstract class BaseMessage<M extends BaseMessage<M>> extends Model<M> implements IBean {
 
-	public void setMessageId(Integer messageId) {
+	public void setMessageId(java.lang.Integer messageId) {
 		set("message_id", messageId);
 	}
-
-	public Integer getMessageId() {
+	
+	public java.lang.Integer getMessageId() {
 		return getInt("message_id");
 	}
 
-	public void setPhone(String phone) {
+	public void setPhone(java.lang.String phone) {
 		set("phone", phone);
 	}
-
-	public String getPhone() {
+	
+	public java.lang.String getPhone() {
 		return getStr("phone");
 	}
 
-	public void setMsg(String msg) {
+	public void setMsg(java.lang.String msg) {
 		set("msg", msg);
 	}
-
-	public String getMsg() {
+	
+	public java.lang.String getMsg() {
 		return getStr("msg");
 	}
 
-	public void setMsg1(String msg1) {
+	public void setMsg1(java.lang.String msg1) {
 		set("msg1", msg1);
 	}
-
-	public String getMsg1() {
+	
+	public java.lang.String getMsg1() {
 		return getStr("msg1");
 	}
 
-	public void setMsg2(String msg2) {
+	public void setMsg2(java.lang.String msg2) {
 		set("msg2", msg2);
 	}
-
-	public String getMsg2() {
+	
+	public java.lang.String getMsg2() {
 		return getStr("msg2");
 	}
 
 	public void setMsgDate(java.util.Date msgDate) {
 		set("msg_date", msgDate);
 	}
-
+	
 	public java.util.Date getMsgDate() {
 		return get("msg_date");
 	}
 
-	public void setMsgFlag(Integer msgFlag) {
+	public void setMsgFlag(java.lang.Integer msgFlag) {
 		set("msg_flag", msgFlag);
 	}
-
-	public Integer getMsgFlag() {
+	
+	public java.lang.Integer getMsgFlag() {
 		return getInt("msg_flag");
 	}
 

+ 92 - 0
src/main/java/com/warewms/model/base/BaseRtDeviceAlarmFlag.java

@@ -0,0 +1,92 @@
+package com.warewms.model.base;
+
+import com.jfinal.plugin.activerecord.Model;
+import com.jfinal.plugin.activerecord.IBean;
+
+/**
+ * Generated by JFinal, do not modify this file.
+ */
+@SuppressWarnings("serial")
+public abstract class BaseRtDeviceAlarmFlag<M extends BaseRtDeviceAlarmFlag<M>> extends Model<M> implements IBean {
+
+	public void setAlarmId(java.lang.Integer alarmId) {
+		set("alarm_id", alarmId);
+	}
+	
+	public java.lang.Integer getAlarmId() {
+		return getInt("alarm_id");
+	}
+
+	public void setDeviceTag(java.lang.Integer deviceTag) {
+		set("device_tag", deviceTag);
+	}
+	
+	public java.lang.Integer getDeviceTag() {
+		return getInt("device_tag");
+	}
+
+	public void setTaskId(java.lang.Integer taskId) {
+		set("task_id", taskId);
+	}
+	
+	public java.lang.Integer getTaskId() {
+		return getInt("task_id");
+	}
+
+	public void setTaskDate(java.util.Date taskDate) {
+		set("task_date", taskDate);
+	}
+	
+	public java.util.Date getTaskDate() {
+		return get("task_date");
+	}
+
+	public void setAlarmDate(java.util.Date alarmDate) {
+		set("alarm_date", alarmDate);
+	}
+	
+	public java.util.Date getAlarmDate() {
+		return get("alarm_date");
+	}
+
+	public void setAlarmValue(java.math.BigDecimal alarmValue) {
+		set("alarm_value", alarmValue);
+	}
+	
+	public java.math.BigDecimal getAlarmValue() {
+		return get("alarm_value");
+	}
+
+	public void setLimitValue(java.math.BigDecimal limitValue) {
+		set("limit_value", limitValue);
+	}
+	
+	public java.math.BigDecimal getLimitValue() {
+		return get("limit_value");
+	}
+
+	public void setDataUnit(java.lang.String dataUnit) {
+		set("data_unit", dataUnit);
+	}
+	
+	public java.lang.String getDataUnit() {
+		return getStr("data_unit");
+	}
+
+	public void setAlarmLevel(java.lang.Boolean alarmLevel) {
+		set("alarm_level", alarmLevel);
+	}
+	
+	public java.lang.Boolean getAlarmLevel() {
+		return get("alarm_level");
+	}
+
+	public void setFlagDeal(java.lang.Integer flagDeal) {
+		set("Flag_deal", flagDeal);
+	}
+	
+	public java.lang.Integer getFlagDeal() {
+		return getInt("Flag_deal");
+	}
+
+}

+ 76 - 0
src/main/java/com/warewms/model/base/BaseScheduleJob.java

@@ -0,0 +1,76 @@
+package com.warewms.model.base;
+
+import com.jfinal.plugin.activerecord.Model;
+import com.jfinal.plugin.activerecord.IBean;
+
+/**
+ * Generated by JFinal, do not modify this file.
+ */
+@SuppressWarnings("serial")
+public abstract class BaseScheduleJob<M extends BaseScheduleJob<M>> extends Model<M> implements IBean {
+
+	public void setJobId(java.lang.Long jobId) {
+		set("job_id", jobId);
+	}
+	
+	public java.lang.Long getJobId() {
+		return getLong("job_id");
+	}
+
+	public void setBeanName(java.lang.String beanName) {
+		set("bean_name", beanName);
+	}
+	
+	public java.lang.String getBeanName() {
+		return getStr("bean_name");
+	}
+
+	public void setMethodName(java.lang.String methodName) {
+		set("method_name", methodName);
+	}
+	
+	public java.lang.String getMethodName() {
+		return getStr("method_name");
+	}
+
+	public void setParams(java.lang.String params) {
+		set("params", params);
+	}
+	
+	public java.lang.String getParams() {
+		return getStr("params");
+	}
+
+	public void setCronExpression(java.lang.String cronExpression) {
+		set("cron_expression", cronExpression);
+	}
+	
+	public java.lang.String getCronExpression() {
+		return getStr("cron_expression");
+	}
+
+	public void setStatus(java.lang.Integer status) {
+		set("status", status);
+	}
+	
+	public java.lang.Integer getStatus() {
+		return getInt("status");
+	}
+
+	public void setRemark(java.lang.String remark) {
+		set("remark", remark);
+	}
+	
+	public java.lang.String getRemark() {
+		return getStr("remark");
+	}
+
+	public void setCreateTime(java.util.Date createTime) {
+		set("create_time", createTime);
+	}
+	
+	public java.util.Date getCreateTime() {
+		return get("create_time");
+	}
+
+}

+ 84 - 0
src/main/java/com/warewms/model/base/BaseScheduleJobLog.java

@@ -0,0 +1,84 @@
+package com.warewms.model.base;
+
+import com.jfinal.plugin.activerecord.Model;
+import com.jfinal.plugin.activerecord.IBean;
+
+/**
+ * Generated by JFinal, do not modify this file.
+ */
+@SuppressWarnings("serial")
+public abstract class BaseScheduleJobLog<M extends BaseScheduleJobLog<M>> extends Model<M> implements IBean {
+
+	public void setLogId(java.lang.Long logId) {
+		set("log_id", logId);
+	}
+	
+	public java.lang.Long getLogId() {
+		return getLong("log_id");
+	}
+
+	public void setJobId(java.lang.Long jobId) {
+		set("job_id", jobId);
+	}
+	
+	public java.lang.Long getJobId() {
+		return getLong("job_id");
+	}
+
+	public void setBeanName(java.lang.String beanName) {
+		set("bean_name", beanName);
+	}
+	
+	public java.lang.String getBeanName() {
+		return getStr("bean_name");
+	}
+
+	public void setMethodName(java.lang.String methodName) {
+		set("method_name", methodName);
+	}
+	
+	public java.lang.String getMethodName() {
+		return getStr("method_name");
+	}
+
+	public void setParams(java.lang.String params) {
+		set("params", params);
+	}
+	
+	public java.lang.String getParams() {
+		return getStr("params");
+	}
+
+	public void setStatus(java.lang.Integer status) {
+		set("status", status);
+	}
+	
+	public java.lang.Integer getStatus() {
+		return getInt("status");
+	}
+
+	public void setError(java.lang.String error) {
+		set("error", error);
+	}
+	
+	public java.lang.String getError() {
+		return getStr("error");
+	}
+
+	public void setTimes(java.lang.Integer times) {
+		set("times", times);
+	}
+	
+	public java.lang.Integer getTimes() {
+		return getInt("times");
+	}
+
+	public void setCreateTime(java.util.Date createTime) {
+		set("create_time", createTime);
+	}
+	
+	public java.util.Date getCreateTime() {
+		return get("create_time");
+	}
+
+}

+ 6 - 0
src/main/java/com/warewms/service/AccountsUsersService.java

@@ -0,0 +1,6 @@
+package com.warewms.service;
+
+import com.warewms.model.AccountsUsers;
+
+public interface AccountsUsersService extends BaseService<AccountsUsers> {
+}

+ 6 - 0
src/main/java/com/warewms/service/BindManageService.java

@@ -0,0 +1,6 @@
+package com.warewms.service;
+
+import com.warewms.model.BindManage;
+
+public interface BindManageService extends BaseService<BindManage> {
+}

+ 6 - 0
src/main/java/com/warewms/service/BindPhoneService.java

@@ -0,0 +1,6 @@
+package com.warewms.service;
+
+import com.warewms.model.BindPhone;
+
+public interface BindPhoneService extends BaseService<BindPhone> {
+}

+ 10 - 0
src/main/java/com/warewms/service/HeXunDataService.java

@@ -0,0 +1,10 @@
+package com.warewms.service;
+
+/**
+ * PackageName:com.warewms.service
+ * Description:
+ * Author:Gizmo
+ * Date:2022/9/30
+ */
+public interface HeXunDataService {
+}

+ 6 - 0
src/main/java/com/warewms/service/RtDeviceAlarmFlagService.java

@@ -0,0 +1,6 @@
+package com.warewms.service;
+
+import com.warewms.model.RtDeviceAlarmFlag;
+
+public interface RtDeviceAlarmFlagService extends BaseService<RtDeviceAlarmFlag> {
+}

+ 6 - 0
src/main/java/com/warewms/service/ScheduleJobLogService.java

@@ -0,0 +1,6 @@
+package com.warewms.service;
+
+import com.warewms.model.ScheduleJobLog;
+
+public interface ScheduleJobLogService extends BaseService<ScheduleJobLog> {
+}

+ 46 - 0
src/main/java/com/warewms/service/ScheduleJobService.java

@@ -0,0 +1,46 @@
+package com.warewms.service;
+
+import com.warewms.common.utils.PageUtils;
+import com.warewms.model.ScheduleJob;
+
+import java.util.Map;
+
+public interface ScheduleJobService extends BaseService<ScheduleJob> {
+
+    PageUtils queryPage(Map<String, Object> params);
+
+    /**
+     * 保存定时任务
+     */
+    void save(ScheduleJob scheduleJob);
+
+    /**
+     * 更新定时任务
+     */
+    boolean update(ScheduleJob scheduleJob);
+
+    /**
+     * 批量删除定时任务
+     */
+    void deleteBatch(Long[] jobIds);
+
+    /**
+     * 批量更新定时任务状态
+     */
+    int updateBatch(Long[] jobIds, int status);
+
+    /**
+     * 立即执行
+     */
+    void run(Long[] jobIds);
+
+    /**
+     * 暂停运行
+     */
+    void pause(Long[] jobIds);
+
+    /**
+     * 恢复运行
+     */
+    void resume(Long[] jobIds);
+}

+ 10 - 0
src/main/java/com/warewms/service/impl/AccountsUsersServiceImpl.java

@@ -0,0 +1,10 @@
+package com.warewms.service.impl;
+
+import com.warewms.dao.AccountsUsersDao;
+import com.warewms.model.AccountsUsers;
+import com.warewms.service.AccountsUsersService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AccountsUsersServiceImpl extends BaseServiceImpl<AccountsUsersDao, AccountsUsers> implements AccountsUsersService {
+}

+ 10 - 0
src/main/java/com/warewms/service/impl/BindManageServiceImpl.java

@@ -0,0 +1,10 @@
+package com.warewms.service.impl;
+
+import com.warewms.dao.BindManageDao;
+import com.warewms.model.BindManage;
+import com.warewms.service.BindManageService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class BindManageServiceImpl extends BaseServiceImpl<BindManageDao, BindManage> implements BindManageService {
+}

+ 10 - 0
src/main/java/com/warewms/service/impl/BindPhoneServiceImpl.java

@@ -0,0 +1,10 @@
+package com.warewms.service.impl;
+
+import com.warewms.dao.BindPhoneDao;
+import com.warewms.model.BindPhone;
+import com.warewms.service.BindPhoneService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class BindPhoneServiceImpl extends BaseServiceImpl<BindPhoneDao, BindPhone> implements BindPhoneService {
+}

+ 12 - 0
src/main/java/com/warewms/service/impl/HeXunDataServiceImpl.java

@@ -0,0 +1,12 @@
+package com.warewms.service.impl;
+
+import com.warewms.service.HeXunDataService;
+
+/**
+ * PackageName:com.warewms.service.impl
+ * Description:
+ * Author:Gizmo
+ * Date:2022/9/30
+ */
+public class HeXunDataServiceImpl implements HeXunDataService {
+}

+ 10 - 0
src/main/java/com/warewms/service/impl/RtDeviceAlarmFlagServiceImpl.java

@@ -0,0 +1,10 @@
+package com.warewms.service.impl;
+
+import com.warewms.dao.RtDeviceAlarmFlagDao;
+import com.warewms.model.RtDeviceAlarmFlag;
+import com.warewms.service.RtDeviceAlarmFlagService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class RtDeviceAlarmFlagServiceImpl extends BaseServiceImpl<RtDeviceAlarmFlagDao, RtDeviceAlarmFlag> implements RtDeviceAlarmFlagService {
+}

+ 10 - 0
src/main/java/com/warewms/service/impl/ScheduleJobLogServiceImpl.java

@@ -0,0 +1,10 @@
+package com.warewms.service.impl;
+
+import com.warewms.dao.ScheduleJobLogDao;
+import com.warewms.model.ScheduleJobLog;
+import com.warewms.service.ScheduleJobLogService;
+import org.springframework.stereotype.Service;
+
+@Service("scheduleJobLogService")
+public class ScheduleJobLogServiceImpl extends BaseServiceImpl<ScheduleJobLogDao, ScheduleJobLog> implements ScheduleJobLogService {
+}

+ 142 - 0
src/main/java/com/warewms/service/impl/ScheduleJobServiceImpl.java

@@ -0,0 +1,142 @@
+package com.warewms.service.impl;
+
+import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
+import com.jfinal.plugin.activerecord.Db;
+import com.jfinal.plugin.activerecord.Page;
+import com.warewms.common.annotation.JFinalTx;
+import com.warewms.common.entity.Filter;
+import com.warewms.common.utils.PageUtils;
+import com.warewms.common.utils.Query;
+import com.warewms.dao.ScheduleJobDao;
+import com.warewms.job.utils.ScheduleUtils;
+import com.warewms.model.ScheduleJob;
+import com.warewms.service.ScheduleJobService;
+import com.warewms.utils.Constant;
+import org.apache.commons.lang.StringUtils;
+import org.quartz.CronTrigger;
+import org.quartz.Scheduler;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+import java.util.*;
+
+@Service
+public class ScheduleJobServiceImpl extends BaseServiceImpl<ScheduleJobDao, ScheduleJob> implements ScheduleJobService {
+
+    @Autowired
+    private Scheduler scheduler;
+
+    @Autowired
+    ActiveRecordPlugin activeRecordPlugin;
+
+    /**
+     * 项目启动时,初始化定时器
+     */
+    @PostConstruct
+    public void init(){
+        List<ScheduleJob> scheduleJobList = this.findAll();
+        for(ScheduleJob scheduleJob : scheduleJobList){
+            CronTrigger cronTrigger = ScheduleUtils.getCronTrigger(scheduler, scheduleJob.getJobId());
+            //如果不存在,则创建
+            if(cronTrigger == null) {
+                ScheduleUtils.createScheduleJob(scheduler, scheduleJob);
+            }else {
+                ScheduleUtils.updateScheduleJob(scheduler, scheduleJob);
+            }
+        }
+    }
+
+    @Override
+    public PageUtils queryPage(Map<String, Object> params) {
+        String beanName = (String)params.get("beanName");
+
+        List<Filter> filters = new ArrayList<>();
+        if(!StringUtils.isBlank(beanName)) {
+            Filter filter = new Filter();
+            filter.setProperty("bean_name");
+            filter.setOperator(Filter.Operator.like);
+            filter.setValue(beanName);
+            filters.add(filter);
+        }
+
+        Query<ScheduleJob> query = new Query<ScheduleJob>(params);
+        Page<ScheduleJob> pr = this.paginate(query.getCurrPage(), query.getLimit(), filters, query.getOrder());
+
+        return new PageUtils(pr);
+    }
+
+
+    @Override
+    @JFinalTx
+    public void save(ScheduleJob scheduleJob) {
+        scheduleJob.setCreateTime(new Date());
+        scheduleJob.setStatus(Constant.ScheduleStatus.NORMAL.getValue());
+        scheduleJob.save();
+
+        ScheduleUtils.createScheduleJob(scheduler, scheduleJob);
+    }
+
+    @Override
+    @JFinalTx
+    public boolean update(ScheduleJob scheduleJob) {
+        ScheduleUtils.updateScheduleJob(scheduler, scheduleJob);
+        return scheduleJob.update();
+    }
+
+    @Override
+    @JFinalTx
+    public void deleteBatch(Long[] jobIds) {
+        for(Long jobId : jobIds){
+            ScheduleUtils.deleteScheduleJob(scheduler, jobId);
+        }
+
+        //删除数据
+        this.dao.deleteBatch(jobIds);
+    }
+
+    @Override
+    public int updateBatch(Long[] jobIds, int status){
+        Map<String, Object> map = new HashMap<>();
+        map.put("list", jobIds);
+        map.put("status", status);
+        List<ScheduleJob> scheduleJobList = new ArrayList<>();
+        for (Long jobId : jobIds) {
+            ScheduleJob scheduleJob = new ScheduleJob();
+            scheduleJob.setJobId(jobId);
+            scheduleJob.setStatus(status);
+            scheduleJobList.add(scheduleJob);
+        }
+
+        Db.batchUpdate(scheduleJobList, scheduleJobList.size());
+        return 1;
+    }
+
+    @Override
+    @JFinalTx
+    public void run(Long[] jobIds) {
+        for(Long jobId : jobIds){
+            ScheduleUtils.run(scheduler, this.findById(jobId));
+        }
+    }
+
+    @Override
+    @JFinalTx
+    public void pause(Long[] jobIds) {
+        for(Long jobId : jobIds){
+            ScheduleUtils.pauseJob(scheduler, jobId);
+        }
+
+        updateBatch(jobIds, Constant.ScheduleStatus.PAUSE.getValue());
+    }
+
+    @Override
+    @JFinalTx
+    public void resume(Long[] jobIds) {
+        for(Long jobId : jobIds){
+            ScheduleUtils.resumeJob(scheduler, jobId);
+        }
+
+        updateBatch(jobIds, Constant.ScheduleStatus.NORMAL.getValue());
+    }
+}

+ 126 - 0
src/main/java/com/warewms/utils/Constant.java

@@ -0,0 +1,126 @@
+package com.warewms.utils;
+
+/**
+ * 常量
+ *
+ * @author chenshun
+ * @email sunlightcs@gmail.com
+ * @date 2016年11月15日 下午1:23:52
+ */
+public class Constant {
+	/** 超级管理员ID */
+	public static final int SUPER_ADMIN = 1;
+
+
+    //  codeid
+    public static final String CODE_CATALOG_SENDCOMPANY = "EXP_CO"; //发运公司
+
+	/**
+	 * 菜单类型
+	 *
+	 * @author chenshun
+	 * @email sunlightcs@gmail.com
+	 * @date 2016年11月15日 下午1:24:29
+	 */
+    public enum MenuType {
+        /**
+         * 目录
+         */
+    	CATALOG(0),
+        /**
+         * 菜单
+         */
+        MENU(1),
+        /**
+         * 按钮
+         */
+        BUTTON(2);
+
+        private int value;
+
+        MenuType(int value) {
+            this.value = value;
+        }
+
+        public int getValue() {
+            return value;
+        }
+    }
+
+    /**
+     * 定时任务状态
+     *
+     * @author chenshun
+     * @email sunlightcs@gmail.com
+     * @date 2016年12月3日 上午12:07:22
+     */
+    public enum ScheduleStatus {
+        /**
+         * 正常
+         */
+    	NORMAL(0),
+        /**
+         * 暂停
+         */
+    	PAUSE(1);
+
+        private int value;
+
+        ScheduleStatus(int value) {
+            this.value = value;
+        }
+
+        public int getValue() {
+            return value;
+        }
+    }
+
+    /**
+     * 云服务商
+     */
+    public enum CloudService {
+        /**
+         * 七牛云
+         */
+        QINIU(1),
+        /**
+         * 阿里云
+         */
+        ALIYUN(2),
+        /**
+         * 腾讯云
+         */
+        QCLOUD(3);
+
+        private int value;
+
+        CloudService(int value) {
+            this.value = value;
+        }
+
+        public int getValue() {
+            return value;
+        }
+    }
+
+    /**
+     * 是否上架
+     */
+    public enum Marketable {
+        /**
+         * 下架
+         */
+        OBTAINED(0),
+        /**
+         * 上架
+         */
+        SHELF(1);
+
+        private int value;
+
+        Marketable(int value) {this.value = value; }
+
+        public int getValue() {return value;}
+    }
+
+}

+ 32 - 32
src/main/resources/application-dev.yml

@@ -99,38 +99,38 @@ spring:
           wall:
             config:
               multi-statement-allow: true
-        fourth:  #数据源4
-          url: jdbc:log4jdbc:mysql://localhost:3306/x521_1?allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
-          username: root
-          password: wyt312gizmo
-          initial-size: 10
-          max-active: 50
-          min-idle: 1
-          max-wait: 60000
-          pool-prepared-statements: true
-          max-pool-prepared-statement-per-connection-size: 20
-          time-between-eviction-runs-millis: 60000
-          min-evictable-idle-time-millis: 300000
-          validation-query: SELECT 1 FROM DUAL
-          test-while-idle: true
-          test-on-borrow: false
-          test-on-return: false
-          removeAbandonedTimeout: 1800
-          removeAbandoned: false
-          #removeAbandonedTimeoutMillis: 300000
-          stat-view-servlet:
-            enabled: true
-            url-pattern: /druid/*
-            #login-username: admin
-            #login-password: admin
-          filter:
-            stat:
-              log-slow-sql: true
-              slow-sql-millis: 1000
-              merge-sql: true
-            wall:
-              config:
-                multi-statement-allow: true
+      fourth:  #数据源4
+        url: jdbc:log4jdbc:mysql://localhost:3306/x521_1?allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+        username: root
+        password: wyt312gizmo
+        initial-size: 10
+        max-active: 50
+        min-idle: 1
+        max-wait: 60000
+        pool-prepared-statements: true
+        max-pool-prepared-statement-per-connection-size: 20
+        time-between-eviction-runs-millis: 60000
+        min-evictable-idle-time-millis: 300000
+        validation-query: SELECT 1 FROM DUAL
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+        removeAbandonedTimeout: 1800
+        removeAbandoned: false
+        #removeAbandonedTimeoutMillis: 300000
+        stat-view-servlet:
+          enabled: true
+          url-pattern: /druid/*
+          #login-username: admin
+          #login-password: admin
+        filter:
+          stat:
+            log-slow-sql: true
+            slow-sql-millis: 1000
+            merge-sql: true
+          wall:
+            config:
+              multi-statement-allow: true
 
 logging:
   config: classpath:logback-spring-test.xml

+ 3 - 0
src/main/resources/application.yml

@@ -36,4 +36,7 @@ spring:
   resources:
     add-mappings: false
 
+schedule:
+  open: true
+
 

Разница между файлами не показана из-за своего большого размера
+ 1305 - 0
target/classes/META-INF/spring-configuration-metadata.json


+ 71 - 8
target/classes/application-dev.yml

@@ -36,19 +36,82 @@ spring:
             config:
               multi-statement-allow: true
       second:  #数据源2
-        driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver
-        url: jdbc:sqlserver://172.27.16.3:1433;DatabaseName=SOADB
-        username: agv
-        password: agv
-        initial-size: 1
-        max-active: 10
-        min-idle: 10
+        url: jdbc:log4jdbc:mysql://localhost:3306/x521?allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+        username: root
+        password: wyt312gizmo
+        initial-size: 10
+        max-active: 50
+        min-idle: 1
+        max-wait: 60000
+        pool-prepared-statements: true
+        max-pool-prepared-statement-per-connection-size: 20
+        time-between-eviction-runs-millis: 60000
+        min-evictable-idle-time-millis: 300000
+        validation-query: SELECT 1 FROM DUAL
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+        removeAbandonedTimeout: 1800
+        removeAbandoned: false
+        #removeAbandonedTimeoutMillis: 300000
+        stat-view-servlet:
+          enabled: true
+          url-pattern: /druid/*
+          #login-username: admin
+          #login-password: admin
+        filter:
+          stat:
+            log-slow-sql: true
+            slow-sql-millis: 1000
+            merge-sql: true
+          wall:
+            config:
+              multi-statement-allow: true
+      third:  #数据源3
+        url: jdbc:log4jdbc:mysql://localhost:3306/x521_2?allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+        username: root
+        password: wyt312gizmo
+        initial-size: 10
+        max-active: 50
+        min-idle: 1
         max-wait: 60000
         pool-prepared-statements: true
         max-pool-prepared-statement-per-connection-size: 20
         time-between-eviction-runs-millis: 60000
         min-evictable-idle-time-millis: 300000
-        validation-query: SELECT getdate()
+        validation-query: SELECT 1 FROM DUAL
+        test-while-idle: true
+        test-on-borrow: false
+        test-on-return: false
+        removeAbandonedTimeout: 1800
+        removeAbandoned: false
+        #removeAbandonedTimeoutMillis: 300000
+        stat-view-servlet:
+          enabled: true
+          url-pattern: /druid/*
+          #login-username: admin
+          #login-password: admin
+        filter:
+          stat:
+            log-slow-sql: true
+            slow-sql-millis: 1000
+            merge-sql: true
+          wall:
+            config:
+              multi-statement-allow: true
+      fourth:  #数据源4
+        url: jdbc:log4jdbc:mysql://localhost:3306/x521_1?allowMultiQueries=true&useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
+        username: root
+        password: wyt312gizmo
+        initial-size: 10
+        max-active: 50
+        min-idle: 1
+        max-wait: 60000
+        pool-prepared-statements: true
+        max-pool-prepared-statement-per-connection-size: 20
+        time-between-eviction-runs-millis: 60000
+        min-evictable-idle-time-millis: 300000
+        validation-query: SELECT 1 FROM DUAL
         test-while-idle: true
         test-on-borrow: false
         test-on-return: false

+ 4 - 1
target/classes/application.yml

@@ -13,7 +13,7 @@ server:
 info:
   name: 'jnmc'
   version: '1.0.0'
-  date: '2022-06-08T06:02:39Z'
+  date: '20220930-0102'
   description: 'jnmc-notification-program'
 
 spring:
@@ -36,4 +36,7 @@ spring:
   resources:
     add-mappings: false
 
+schedule:
+  open: true
+
 

BIN
target/classes/com/warewms/common/utils/_JFCodeGenerator.class


BIN
target/classes/com/warewms/common/utils/_JFinalGenerator.class


BIN
target/classes/com/warewms/common/utils/_MetaBuilder.class


BIN
target/classes/com/warewms/config/ActiveRecordConfig.class


BIN
target/classes/com/warewms/datasources/DataSourceNames.class


BIN
target/classes/com/warewms/datasources/DynamicDataSourceConfig.class


BIN
target/classes/com/warewms/model/_MappingKit.class