From 364b5bda41c7c5b11b78cbad23ad0fa346923afb Mon Sep 17 00:00:00 2001
From: unknown <2975965946@qq.com>
Date: Tue, 29 Apr 2025 22:44:23 +0800
Subject: [PATCH] src
---
src/wcp-quartz/pom.xml | 88 ++++
.../com/farm/quartz/adapter/StartSysTask.java | 206 ++++++++
.../quartz/dao/FarmQzSchedulerDaoInter.java | 73 +++
.../farm/quartz/dao/FarmQzTaskDaoInter.java | 69 +++
.../quartz/dao/FarmQzTriggerDaoInter.java | 69 +++
.../quartz/dao/impl/FarmQzSchedulerDao.java | 175 +++++++
.../farm/quartz/dao/impl/FarmQzTaskDao.java | 160 +++++++
.../quartz/dao/impl/FarmQzTriggerDao.java | 148 ++++++
.../farm/quartz/domain/FarmQzScheduler.java | 215 +++++++++
.../com/farm/quartz/domain/FarmQzTask.java | 230 +++++++++
.../com/farm/quartz/domain/FarmQzTrigger.java | 200 ++++++++
.../quartz/job/impl/CommandRuningJob.java | 94 ++++
.../server/DemoJobExecutionContext.java | 164 +++++++
.../server/FarmQzSchedulerManagerInter.java | 184 ++++++++
.../com/farm/quartz/server/QuartzInter.java | 67 +++
.../impl/FarmQzSchedulerManagerImpl.java | 441 ++++++++++++++++++
.../farm/quartz/server/impl/QuartzImpl.java | 75 +++
.../ActionFarmQzSchedulerQuery.java | 327 +++++++++++++
.../web/controller/ActionFarmQzTaskQuery.java | 217 +++++++++
.../controller/ActionFarmQzTriggerQuery.java | 286 ++++++++++++
.../src/main/resources/quartz.properties | 3 +
src/wcp-tag/pom.xml | 92 ++++
.../com/farm/doc/tag/AuditIsShowForUser.java | 76 +++
.../farm/doc/tag/DefaultIndexPageTaget.java | 87 ++++
.../com/farm/doc/tag/DelIsShowForUser.java | 54 +++
.../java/com/farm/doc/tag/DocContent.java | 97 ++++
.../java/com/farm/doc/tag/DocDescribe.java | 108 +++++
.../java/com/farm/doc/tag/DocGroupOption.java | 145 ++++++
.../main/java/com/farm/doc/tag/ImgUrl.java | 86 ++++
.../com/farm/doc/tag/NoDelIsShowForUser.java | 223 +++++++++
.../com/farm/doc/tag/NoReadIsShowForUser.java | 260 +++++++++++
.../farm/doc/tag/NoWriteIsShowForUser.java | 268 +++++++++++
.../com/farm/doc/tag/ReadIsShowForUser.java | 285 +++++++++++
.../com/farm/doc/tag/WriteIsShowForUser.java | 285 +++++++++++
.../main/java/com/farm/doc/tag/farmdoc.tld | 216 +++++++++
.../java/com/farm/wda/tag/DocWebViewUrl.java | 268 +++++++++++
.../main/java/com/farm/wda/tag/IsSupport.java | 330 +++++++++++++
.../main/java/com/farm/wda/tag/RmiServer.java | 264 +++++++++++
.../src/main/java/com/farm/wda/tag/wda.tld | 237 ++++++++++
.../com/farm/web/tag/AuthorityForUser.java | 236 ++++++++++
.../java/com/farm/web/tag/BasePathTaget.java | 257 ++++++++++
.../com/farm/web/tag/DictionaryHandle.java | 104 +++++
.../farm/web/tag/DictionaryOptionTaget.java | 93 ++++
.../farm/web/tag/ParameterEqualsTaget.java | 105 +++++
.../java/com/farm/web/tag/ParameterTaget.java | 91 ++++
.../web/tag/RunDictionaryByConstantKey.java | 127 +++++
.../com/farm/web/tag/RunDictionaryByKey.java | 88 ++++
.../com/farm/web/tag/RunDictionaryByStr.java | 115 +++++
.../java/com/farm/web/tag/TimeFormat.java | 87 ++++
.../main/java/com/farm/web/tag/UrlEncode.java | 71 +++
.../main/java/com/farm/web/tag/platForm.tld | 256 ++++++++++
51 files changed, 8502 insertions(+)
create mode 100644 src/wcp-quartz/pom.xml
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/adapter/StartSysTask.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/dao/FarmQzSchedulerDaoInter.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/dao/FarmQzTaskDaoInter.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/dao/FarmQzTriggerDaoInter.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/dao/impl/FarmQzSchedulerDao.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/dao/impl/FarmQzTaskDao.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/dao/impl/FarmQzTriggerDao.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/domain/FarmQzScheduler.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/domain/FarmQzTask.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/domain/FarmQzTrigger.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/job/impl/CommandRuningJob.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/server/DemoJobExecutionContext.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/server/FarmQzSchedulerManagerInter.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/server/QuartzInter.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/server/impl/FarmQzSchedulerManagerImpl.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/server/impl/QuartzImpl.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/web/controller/ActionFarmQzSchedulerQuery.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/web/controller/ActionFarmQzTaskQuery.java
create mode 100644 src/wcp-quartz/src/main/java/com/farm/quartz/web/controller/ActionFarmQzTriggerQuery.java
create mode 100644 src/wcp-quartz/src/main/resources/quartz.properties
create mode 100644 src/wcp-tag/pom.xml
create mode 100644 src/wcp-tag/src/main/java/com/farm/doc/tag/AuditIsShowForUser.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/doc/tag/DefaultIndexPageTaget.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/doc/tag/DelIsShowForUser.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/doc/tag/DocContent.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/doc/tag/DocDescribe.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/doc/tag/DocGroupOption.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/doc/tag/ImgUrl.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/doc/tag/NoDelIsShowForUser.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/doc/tag/NoReadIsShowForUser.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/doc/tag/NoWriteIsShowForUser.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/doc/tag/ReadIsShowForUser.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/doc/tag/WriteIsShowForUser.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/doc/tag/farmdoc.tld
create mode 100644 src/wcp-tag/src/main/java/com/farm/wda/tag/DocWebViewUrl.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/wda/tag/IsSupport.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/wda/tag/RmiServer.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/wda/tag/wda.tld
create mode 100644 src/wcp-tag/src/main/java/com/farm/web/tag/AuthorityForUser.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/web/tag/BasePathTaget.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/web/tag/DictionaryHandle.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/web/tag/DictionaryOptionTaget.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/web/tag/ParameterEqualsTaget.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/web/tag/ParameterTaget.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/web/tag/RunDictionaryByConstantKey.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/web/tag/RunDictionaryByKey.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/web/tag/RunDictionaryByStr.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/web/tag/TimeFormat.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/web/tag/UrlEncode.java
create mode 100644 src/wcp-tag/src/main/java/com/farm/web/tag/platForm.tld
diff --git a/src/wcp-quartz/pom.xml b/src/wcp-quartz/pom.xml
new file mode 100644
index 0000000..2efb2a3
--- /dev/null
+++ b/src/wcp-quartz/pom.xml
@@ -0,0 +1,88 @@
+
+
+
+
+ 4.0.0
+
+ com.farm
+
+ wcp-quartz
+
+ ${wcp.version}
+
+
+
+ 3.2.0
+
+ UTF-8
+
+ UTF-8
+
+ UTF-8
+
+
+
+
+
+ com.farm
+ farm-core
+ ${wcp.version}
+
+
+
+ javax.servlet.jsp
+ jsp-api
+
+
+
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
+ org.quartz-scheduler
+ quartz
+ 2.2.1
+
+
+
+
+
+
+
+
+ maven-compiler-plugin
+
+
+
+ 1.8
+
+ 1.8
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 2.1
+
+
+
+
+
+
+ true
+
+ true
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/adapter/StartSysTask.java b/src/wcp-quartz/src/main/java/com/farm/quartz/adapter/StartSysTask.java
new file mode 100644
index 0000000..65cf828
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/adapter/StartSysTask.java
@@ -0,0 +1,206 @@
+// 声明该类所在的包
+package com.farm.quartz.adapter;
+
+// 导入 ServletContext 类,用于表示 Servlet 上下文,可获取应用程序的相关信息
+import javax.servlet.ServletContext;
+
+// 导入 Apache Log4j 的 Logger 类,用于记录日志
+import org.apache.log4j.Logger;
+
+// 导入农场任务调度管理接口,用于管理任务调度相关操作
+import com.farm.quartz.server.FarmQzSchedulerManagerInter;
+// 导入 Spring 工具类,用于从 Spring 容器中获取 Bean
+import com.farm.util.spring.BeanFactory;
+// 导入 Servlet 初始化任务接口,该类需要实现此接口中的方法
+import com.farm.web.task.ServletInitJobInter;
+
+// 定义 StartSysTask 类,实现 ServletInitJobInter 接口,用于在 Servlet 初始化时执行任务
+public class StartSysTask implements ServletInitJobInter {
+ // 定义一个静态的 Logger 对象,用于记录日志,日志记录器关联到 StartSysTask 类
+ private static final Logger log = Logger.getLogger(StartSysTask.class);
+
+ // 重写接口中的 execute 方法,在 Servlet 初始化时执行
+ @Override
+ public void execute(ServletContext context) {
+ // 从 Spring 容器中获取名为 "farmQzSchedulerManagerImpl" 的 Bean,并将其强制转换为 FarmQzSchedulerManagerInter 类型
+ FarmQzSchedulerManagerInter aloneIMP = (FarmQzSchedulerManagerInter) BeanFactory
+ .getBean("farmQzSchedulerManagerImpl");
+ try {
+ // 调用任务调度管理接口的 start 方法,启动任务调度
+ aloneIMP.start();
+ // 记录日志,提示任务调度已启动
+ log.info("started '任务调度'");
+ } catch (Exception e) {
+ // 如果启动过程中出现异常,记录错误日志
+ log.error(e);
+ }
+ }
+}
+// 声明该类所在的包
+package jdk.javadoc.internal.api;
+
+// 导入所需的 Java 标准库类
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+// 导入 Java 编译器工具相关的类
+import javax.tools.DocumentationTool.DocumentationTask;
+import javax.tools.JavaFileObject;
+
+// 导入 Java 编译器内部工具相关的类
+import com.sun.tools.javac.main.Option;
+import com.sun.tools.javac.util.ClientCodeException;
+import com.sun.tools.javac.util.Context;
+import com.sun.tools.javac.util.Options;
+import jdk.javadoc.internal.tool.Start;
+
+/**
+ * 提供对 JDK 文档工具 javadoc 特定功能的访问。
+ */
+public class JavadocTaskImpl implements DocumentationTask {
+ // 用于标记该任务是否已经被使用过,使用 AtomicBoolean 保证线程安全
+ private final AtomicBoolean used = new AtomicBoolean();
+
+ // 存储编译上下文信息
+ private final Context context;
+ // 存储文档生成器的类对象
+ private final Class> docletClass;
+ // 存储传递给 javadoc 的选项
+ private final Iterable options;
+ // 存储要处理的 Java 文件对象
+ private final Iterable extends JavaFileObject> fileObjects;
+ // 存储当前使用的语言环境
+ private Locale locale;
+ // 存储要添加的模块名称列表
+ private final List addModules = new ArrayList<>();
+
+ /**
+ * 构造函数,初始化 Javadoc 任务的相关属性。
+ *
+ * @param context 编译上下文
+ * @param docletClass 文档生成器的类对象
+ * @param options 传递给 javadoc 的选项
+ * @param fileObjects 要处理的 Java 文件对象
+ */
+ public JavadocTaskImpl(Context context,
+ Class> docletClass,
+ Iterable options,
+ Iterable extends JavaFileObject> fileObjects)
+ {
+ // 初始化编译上下文
+ this.context = context;
+ // 初始化文档生成器的类对象
+ this.docletClass = docletClass;
+
+ // 如果选项为空,则使用空集合,否则检查选项中是否有 null 值
+ this.options = (options == null) ? Set.of()
+ : nullCheck(options);
+ // 如果文件对象为空,则使用空集合,否则检查文件对象中是否有 null 值
+ this.fileObjects = (fileObjects == null) ? Set.of()
+ : nullCheck(fileObjects);
+ // 设置默认语言环境
+ setLocale(Locale.getDefault());
+ }
+
+ /**
+ * 设置任务使用的语言环境。
+ *
+ * @param locale 要设置的语言环境
+ * @throws IllegalStateException 如果任务已经被使用过
+ */
+ @Override
+ public void setLocale(Locale locale) {
+ // 如果任务已经被使用过,抛出异常
+ if (used.get()) {
+ throw new IllegalStateException();
+ }
+ // 设置语言环境
+ this.locale = locale;
+ }
+
+ /**
+ * 添加要处理的模块名称。
+ *
+ * @param moduleNames 要添加的模块名称的可迭代对象
+ * @throws IllegalStateException 如果任务已经被使用过
+ */
+ @Override
+ public void addModules(Iterable moduleNames) {
+ // 检查模块名称中是否有 null 值
+ nullCheck(moduleNames);
+ // 如果任务已经被使用过,抛出异常
+ if (used.get()) {
+ throw new IllegalStateException();
+ }
+ // 遍历模块名称并添加到列表中
+ for (String name : moduleNames) {
+ addModules.add(name);
+ }
+ }
+
+ /**
+ * 执行 Javadoc 任务。
+ *
+ * @return 如果任务成功执行返回 true,否则返回 false
+ * @throws IllegalStateException 如果多次调用该方法
+ */
+ @Override
+ public Boolean call() {
+ // 如果任务已经被使用过,抛出异常
+ if (used.getAndSet(true)) {
+ throw new IllegalStateException("multiple calls to method 'call'");
+ }
+ // 初始化编译上下文
+ initContext();
+ // 创建 Start 对象来启动 Javadoc 任务
+ Start jdoc = new Start(context);
+ try {
+ // 调用 begin 方法开始生成文档
+ return jdoc.begin(docletClass, options, fileObjects);
+ } catch (ClientCodeException e) {
+ // 捕获客户端代码异常并抛出运行时异常
+ throw new RuntimeException(e.getCause());
+ }
+ }
+
+ /**
+ * 初始化编译上下文。
+ */
+ private void initContext() {
+ // 设置编译器的默认语言环境
+ context.put(Locale.class, locale);
+ // 如果有要添加的模块
+ if (!addModules.isEmpty()) {
+ // 将模块名称用逗号连接成字符串
+ String names = String.join(",", addModules);
+ // 获取编译选项实例
+ Options opts = Options.instance(context);
+ // 获取之前设置的添加模块选项
+ String prev = opts.get(Option.ADD_MODULES);
+ // 如果之前没有设置过,使用新的模块名称,否则将新的模块名称追加到之前的后面
+ opts.put(Option.ADD_MODULES, (prev == null) ? names : prev + "," + names);
+ }
+ }
+
+ /**
+ * 检查可迭代对象中的元素是否有 null 值。
+ *
+ * @param items 要检查的可迭代对象
+ * @param 可迭代对象中元素的类型
+ * @return 检查后的可迭代对象
+ * @throws NullPointerException 如果可迭代对象中有 null 值
+ */
+ private static Iterable nullCheck(Iterable items) {
+ // 遍历可迭代对象中的元素
+ for (T item : items) {
+ // 如果元素为 null,抛出空指针异常
+ if (item == null)
+ throw new NullPointerException();
+ }
+ // 返回检查后的可迭代对象
+ return items;
+ }
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/dao/FarmQzSchedulerDaoInter.java b/src/wcp-quartz/src/main/java/com/farm/quartz/dao/FarmQzSchedulerDaoInter.java
new file mode 100644
index 0000000..36343a8
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/dao/FarmQzSchedulerDaoInter.java
@@ -0,0 +1,73 @@
+package com.farm.quartz.dao;
+
+import com.farm.quartz.domain.FarmQzScheduler;
+import org.hibernate.Session;
+import com.farm.core.sql.query.DBRule;
+import com.farm.core.sql.query.DataQuery;
+import com.farm.core.sql.result.DataResult;
+import java.util.List;
+import java.util.Map;
+
+/**计划任务管理
+ * @author MAC_wd
+ *
+ */
+public interface FarmQzSchedulerDaoInter {
+ /** 删除一个实体
+ * @param entity 实体
+ */
+ public void deleteEntity(FarmQzScheduler entity) ;
+ /** 由id获得一个实体
+ * @param id
+ * @return
+ */
+ public FarmQzScheduler getEntity(String id) ;
+ /** 插入一条数据
+ * @param entity
+ */
+ public FarmQzScheduler insertEntity(FarmQzScheduler entity);
+ /** 获得记录数量
+ * @return
+ */
+ public int getAllListNum();
+ /**修改一个记录
+ * @param entity
+ */
+ public void editEntity(FarmQzScheduler entity);
+ /**获得一个session
+ */
+ public Session getSession();
+ /**执行一条查询语句
+ */
+ public DataResult runSqlQuery(DataQuery query);
+ /**
+ * 条件删除实体,依据对象字段值(一般不建议使用该方法)
+ *
+ * @param rules
+ * 删除条件
+ */
+ public void deleteEntitys(List rules);
+
+ /**
+ * 条件查询实体,依据对象字段值,当rules为空时查询全部(一般不建议使用该方法)
+ *
+ * @param rules
+ * 查询条件
+ * @return
+ */
+ public List selectEntitys(List rules);
+
+ /**
+ * 条件修改实体,依据对象字段值(一般不建议使用该方法)
+ *
+ * @param values
+ * 被修改的键值对
+ * @param rules
+ * 修改条件
+ */
+ public void updataEntitys(Map values, List rules);
+ /**
+ * 获得所有需要自动启动的计划任务
+ */
+ public List getAutoSchedulers();
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/dao/FarmQzTaskDaoInter.java b/src/wcp-quartz/src/main/java/com/farm/quartz/dao/FarmQzTaskDaoInter.java
new file mode 100644
index 0000000..b6070a7
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/dao/FarmQzTaskDaoInter.java
@@ -0,0 +1,69 @@
+package com.farm.quartz.dao;
+
+import com.farm.quartz.domain.FarmQzTask;
+import org.hibernate.Session;
+import com.farm.core.sql.query.DBRule;
+import com.farm.core.sql.query.DataQuery;
+import com.farm.core.sql.result.DataResult;
+import java.util.List;
+import java.util.Map;
+
+/**任务定义
+ * @author MAC_wd
+ *
+ */
+public interface FarmQzTaskDaoInter {
+ /** 删除一个实体
+ * @param entity 实体
+ */
+ public void deleteEntity(FarmQzTask entity) ;
+ /** 由id获得一个实体
+ * @param id
+ * @return
+ */
+ public FarmQzTask getEntity(String id) ;
+ /** 插入一条数据
+ * @param entity
+ */
+ public FarmQzTask insertEntity(FarmQzTask entity);
+ /** 获得记录数量
+ * @return
+ */
+ public int getAllListNum();
+ /**修改一个记录
+ * @param entity
+ */
+ public void editEntity(FarmQzTask entity);
+ /**获得一个session
+ */
+ public Session getSession();
+ /**执行一条查询语句
+ */
+ public DataResult runSqlQuery(DataQuery query);
+ /**
+ * 条件删除实体,依据对象字段值(一般不建议使用该方法)
+ *
+ * @param rules
+ * 删除条件
+ */
+ public void deleteEntitys(List rules);
+
+ /**
+ * 条件查询实体,依据对象字段值,当rules为空时查询全部(一般不建议使用该方法)
+ *
+ * @param rules
+ * 查询条件
+ * @return
+ */
+ public List selectEntitys(List rules);
+
+ /**
+ * 条件修改实体,依据对象字段值(一般不建议使用该方法)
+ *
+ * @param values
+ * 被修改的键值对
+ * @param rules
+ * 修改条件
+ */
+ public void updataEntitys(Map values, List rules);
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/dao/FarmQzTriggerDaoInter.java b/src/wcp-quartz/src/main/java/com/farm/quartz/dao/FarmQzTriggerDaoInter.java
new file mode 100644
index 0000000..e0f2367
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/dao/FarmQzTriggerDaoInter.java
@@ -0,0 +1,69 @@
+package com.farm.quartz.dao;
+
+import com.farm.quartz.domain.FarmQzTrigger;
+import org.hibernate.Session;
+import com.farm.core.sql.query.DBRule;
+import com.farm.core.sql.query.DataQuery;
+import com.farm.core.sql.result.DataResult;
+import java.util.List;
+import java.util.Map;
+
+/**触发器定义
+ * @author MAC_wd
+ *
+ */
+public interface FarmQzTriggerDaoInter {
+ /** 删除一个实体
+ * @param entity 实体
+ */
+ public void deleteEntity(FarmQzTrigger entity) ;
+ /** 由id获得一个实体
+ * @param id
+ * @return
+ */
+ public FarmQzTrigger getEntity(String id) ;
+ /** 插入一条数据
+ * @param entity
+ */
+ public FarmQzTrigger insertEntity(FarmQzTrigger entity);
+ /** 获得记录数量
+ * @return
+ */
+ public int getAllListNum();
+ /**修改一个记录
+ * @param entity
+ */
+ public void editEntity(FarmQzTrigger entity);
+ /**获得一个session
+ */
+ public Session getSession();
+ /**执行一条查询语句
+ */
+ public DataResult runSqlQuery(DataQuery query);
+ /**
+ * 条件删除实体,依据对象字段值(一般不建议使用该方法)
+ *
+ * @param rules
+ * 删除条件
+ */
+ public void deleteEntitys(List rules);
+
+ /**
+ * 条件查询实体,依据对象字段值,当rules为空时查询全部(一般不建议使用该方法)
+ *
+ * @param rules
+ * 查询条件
+ * @return
+ */
+ public List selectEntitys(List rules);
+
+ /**
+ * 条件修改实体,依据对象字段值(一般不建议使用该方法)
+ *
+ * @param values
+ * 被修改的键值对
+ * @param rules
+ * 修改条件
+ */
+ public void updataEntitys(Map values, List rules);
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/dao/impl/FarmQzSchedulerDao.java b/src/wcp-quartz/src/main/java/com/farm/quartz/dao/impl/FarmQzSchedulerDao.java
new file mode 100644
index 0000000..9b74de5
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/dao/impl/FarmQzSchedulerDao.java
@@ -0,0 +1,175 @@
+// 声明该类所在的包
+package com.farm.quartz.dao.impl;
+
+// 导入 BigInteger 类,用于处理大整数,通常用于数据库查询中获取计数值
+import java.math.BigInteger;
+
+// 导入 Hibernate 的 Query 类,用于执行 HQL(Hibernate Query Language)查询
+import org.hibernate.Query;
+// 导入 Hibernate 的 SQLQuery 类,用于执行原生 SQL 查询
+import org.hibernate.SQLQuery;
+// 导入 Hibernate 的 Session 类,代表与数据库的一次会话,用于执行数据库操作
+import org.hibernate.Session;
+// 导入 Hibernate 的 SessionFactory 类,用于创建 Session 对象
+import org.hibernate.SessionFactory;
+// 导入 Spring 的 Repository 注解,用于将该类标记为数据访问层组件
+import org.springframework.stereotype.Repository;
+
+// 导入农场任务调度数据访问接口,该类需要实现此接口中的方法
+import com.farm.quartz.dao.FarmQzSchedulerDaoInter;
+// 导入农场任务调度实体类,代表数据库中的任务调度表记录
+import com.farm.quartz.domain.FarmQzScheduler;
+// 导入数据库规则类,用于定义数据库查询或操作的规则
+import com.farm.core.sql.query.DBRule;
+// 导入数据查询类,用于构建和执行数据库查询
+import com.farm.core.sql.query.DataQuery;
+// 导入数据结果类,用于处理查询返回的结果
+import com.farm.core.sql.result.DataResult;
+// 导入 Hibernate SQL 工具类,该类继承自该工具类
+import com.farm.core.sql.utils.HibernateSQLTools;
+
+// 导入 List 接口,用于定义列表类型的变量
+import java.util.List;
+// 导入 Map 接口,用于定义映射类型的变量
+import java.util.Map;
+
+// 导入资源注入注解,用于将 Spring 容器中的 Bean 注入到该类的成员变量中
+import javax.annotation.Resource;
+
+/**
+ * 计划任务管理
+ *
+ * @author MAC_wd
+ */
+// 使用 @Repository 注解将该类标记为 Spring 数据访问层组件
+@Repository
+// 定义 FarmQzSchedulerDao 类,继承自 HibernateSQLTools 并实现 FarmQzSchedulerDaoInter 接口
+public class FarmQzSchedulerDao extends HibernateSQLTools
+ implements FarmQzSchedulerDaoInter {
+ // 使用 @Resource 注解注入 SessionFactory 类型的 Bean,名称为 "sessionFactory"
+ @Resource(name = "sessionFactory")
+ private SessionFactory sessionFatory;
+
+ // 删除任务调度实体的方法
+ public void deleteEntity(FarmQzScheduler entity) {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 调用 Session 的 delete 方法删除实体
+ session.delete(entity);
+ }
+
+ // 获取所有任务调度记录数量的方法
+ public int getAllListNum() {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 创建一个原生 SQL 查询,查询 farm_qz_scheduler 表的记录数量
+ SQLQuery sqlquery = session
+ .createSQLQuery("select count(*) from farm_qz_scheduler");
+ // 执行查询并获取结果列表,取第一个元素并转换为 BigInteger 类型
+ BigInteger num = (BigInteger) sqlquery.list().get(0);
+ // 将 BigInteger 类型的结果转换为 int 类型并返回
+ return num.intValue();
+ }
+
+ // 根据 ID 获取任务调度实体的方法
+ public FarmQzScheduler getEntity(String id) {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 调用 Session 的 get 方法,根据 ID 和实体类类型获取实体对象并返回
+ return (FarmQzScheduler) session.get(FarmQzScheduler.class, id);
+ }
+
+ // 插入任务调度实体的方法
+ public FarmQzScheduler insertEntity(FarmQzScheduler entity) {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 调用 Session 的 save 方法保存实体
+ session.save(entity);
+ // 返回保存后的实体
+ return entity;
+ }
+
+ // 编辑任务调度实体的方法
+ public void editEntity(FarmQzScheduler entity) {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 调用 Session 的 update 方法更新实体
+ session.update(entity);
+ }
+
+ // 重写获取 Session 对象的方法
+ @Override
+ public Session getSession() {
+ // 从 SessionFactory 中获取当前的 Session 对象并返回
+ return sessionFatory.getCurrentSession();
+ }
+
+ // 运行 SQL 查询的方法
+ public DataResult runSqlQuery(DataQuery query) {
+ try {
+ // 调用 DataQuery 的 search 方法,传入当前 Session 对象执行查询,并返回查询结果
+ return query.search(sessionFatory.getCurrentSession());
+ } catch (Exception e) {
+ // 如果查询过程中出现异常,返回 null
+ return null;
+ }
+ }
+
+ // 根据规则删除实体的方法
+ @Override
+ public void deleteEntitys(List rules) {
+ // 调用父类的 deleteSqlFromFunction 方法,传入当前 Session 对象和规则列表执行删除操作
+ deleteSqlFromFunction(sessionFatory.getCurrentSession(), rules);
+ }
+
+ // 根据规则查询实体列表的方法
+ @Override
+ public List selectEntitys(List rules) {
+ // 调用父类的 selectSqlFromFunction 方法,传入当前 Session 对象和规则列表执行查询,并返回查询结果列表
+ return selectSqlFromFunction(sessionFatory.getCurrentSession(), rules);
+ }
+
+ // 根据规则更新实体的方法
+ @Override
+ public void updataEntitys(Map values, List rules) {
+ // 调用父类的 updataSqlFromFunction 方法,传入当前 Session 对象、更新值映射和规则列表执行更新操作
+ updataSqlFromFunction(sessionFatory.getCurrentSession(), values, rules);
+ }
+
+ // 获取 SessionFactory 对象的方法
+ public SessionFactory getSessionFatory() {
+ return sessionFatory;
+ }
+
+ // 设置 SessionFactory 对象的方法
+ public void setSessionFatory(SessionFactory sessionFatory) {
+ this.sessionFatory = sessionFatory;
+ }
+
+ // 获取自动调度任务列表的方法
+ @SuppressWarnings("unchecked")
+ @Override
+ public List getAutoSchedulers() {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 创建一个 HQL 查询,查询 AUTOIS 字段为 "1" 的任务调度实体
+ Query query = session
+ .createQuery("from FarmQzScheduler where AUTOIS=?");
+ // 设置查询参数,将第一个参数设置为 "1"
+ query.setString(0, "1");
+ // 执行查询并返回结果列表
+ return query.list();
+ }
+
+ // 重写获取 SessionFactory 对象的方法,供父类使用
+ @Override
+ protected SessionFactory getSessionFactory() {
+ return sessionFatory;
+ }
+
+ // 重写获取实体类类型的方法,供父类使用
+ @Override
+ protected Class> getTypeClass() {
+ return FarmQzScheduler.class;
+ }
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/dao/impl/FarmQzTaskDao.java b/src/wcp-quartz/src/main/java/com/farm/quartz/dao/impl/FarmQzTaskDao.java
new file mode 100644
index 0000000..83536dd
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/dao/impl/FarmQzTaskDao.java
@@ -0,0 +1,160 @@
+// 声明该类所属的包
+package com.farm.quartz.dao.impl;
+
+// 导入 BigInteger 类,用于处理大整数,通常在数据库查询中用于存储和操作计数结果
+import java.math.BigInteger;
+
+// 导入 Hibernate 的 SQLQuery 类,用于执行原生 SQL 查询语句
+import org.hibernate.SQLQuery;
+// 导入 Hibernate 的 Session 类,代表与数据库的一次会话,可用于执行数据库操作
+import org.hibernate.Session;
+// 导入 Hibernate 的 SessionFactory 类,用于创建和管理 Session 对象
+import org.hibernate.SessionFactory;
+// 导入 Spring 的 Repository 注解,将该类标记为数据访问层组件,由 Spring 进行管理
+import org.springframework.stereotype.Repository;
+
+// 导入农场任务调度任务数据访问接口,该类需要实现此接口中的方法
+import com.farm.quartz.dao.FarmQzTaskDaoInter;
+// 导入农场任务调度器实体类,虽在本类未直接使用,但可能与相关业务逻辑有潜在关联
+import com.farm.quartz.domain.FarmQzScheduler;
+// 导入农场任务调度任务实体类,代表数据库中任务相关的数据记录
+import com.farm.quartz.domain.FarmQzTask;
+// 导入数据库规则类,用于定义数据库查询或操作的规则条件
+import com.farm.core.sql.query.DBRule;
+// 导入数据查询类,用于构建和执行数据库查询操作
+import com.farm.core.sql.query.DataQuery;
+// 导入数据结果类,用于存储和处理数据库查询返回的结果
+import com.farm.core.sql.result.DataResult;
+// 导入 Hibernate SQL 工具类,该类继承自该工具类,可使用其提供的数据库操作方法
+import com.farm.core.sql.utils.HibernateSQLTools;
+
+// 导入 List 接口,用于定义列表类型的变量,存储多个元素
+import java.util.List;
+// 导入 Map 接口,用于定义键值对映射类型的变量
+import java.util.Map;
+
+// 导入资源注入注解,用于将 Spring 容器中的 Bean 注入到该类的成员变量中
+import javax.annotation.Resource;
+
+/**
+ * 任务定义
+ *
+ * @author MAC_wd
+ */
+// 使用 @Repository 注解将该类标记为 Spring 数据访问层组件
+@Repository
+// 定义 FarmQzTaskDao 类,继承自 HibernateSQLTools 并实现 FarmQzTaskDaoInter 接口
+public class FarmQzTaskDao extends HibernateSQLTools implements
+ FarmQzTaskDaoInter {
+ // 使用 @Resource 注解注入 SessionFactory 类型的 Bean,名称为 "sessionFactory"
+ @Resource(name = "sessionFactory")
+ private SessionFactory sessionFatory;
+
+ // 删除任务实体的方法
+ public void deleteEntity(FarmQzTask entity) {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 调用 Session 的 delete 方法,从数据库中删除该任务实体
+ session.delete(entity);
+ }
+
+ // 获取所有任务记录数量的方法
+ public int getAllListNum() {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 创建一个原生 SQL 查询,查询 farm_qz_task 表中的记录数量
+ SQLQuery sqlquery = session
+ .createSQLQuery("select count(*) from farm_qz_task");
+ // 执行查询并获取结果列表,取第一个元素并将其转换为 BigInteger 类型
+ BigInteger num = (BigInteger) sqlquery.list().get(0);
+ // 将 BigInteger 类型的结果转换为 int 类型并返回
+ return num.intValue();
+ }
+
+ // 根据任务 ID 获取任务实体的方法
+ public FarmQzTask getEntity(String id) {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 调用 Session 的 get 方法,根据任务 ID 和任务实体类类型获取对应的任务实体对象
+ return (FarmQzTask) session.get(FarmQzTask.class, id);
+ }
+
+ // 插入新任务实体的方法
+ public FarmQzTask insertEntity(FarmQzTask entity) {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 调用 Session 的 save 方法,将新的任务实体保存到数据库中
+ session.save(entity);
+ // 返回保存后的任务实体
+ return entity;
+ }
+
+ // 编辑任务实体的方法
+ public void editEntity(FarmQzTask entity) {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 调用 Session 的 update 方法,更新数据库中该任务实体的信息
+ session.update(entity);
+ }
+
+ // 重写获取 Session 对象的方法
+ @Override
+ public Session getSession() {
+ // 从 SessionFactory 中获取当前的 Session 对象并返回
+ return sessionFatory.getCurrentSession();
+ }
+
+ // 执行 SQL 查询的方法
+ public DataResult runSqlQuery(DataQuery query) {
+ try {
+ // 调用 DataQuery 的 search 方法,传入当前的 Session 对象执行查询操作,并返回查询结果
+ return query.search(sessionFatory.getCurrentSession());
+ } catch (Exception e) {
+ // 如果查询过程中出现异常,返回 null
+ return null;
+ }
+ }
+
+ // 根据规则删除多个任务实体的方法
+ @Override
+ public void deleteEntitys(List rules) {
+ // 调用父类的 deleteSqlFromFunction 方法,传入当前的 Session 对象和规则列表,执行删除操作
+ deleteSqlFromFunction(sessionFatory.getCurrentSession(), rules);
+ }
+
+ // 根据规则查询多个任务实体的方法
+ @Override
+ public List selectEntitys(List rules) {
+ // 调用父类的 selectSqlFromFunction 方法,传入当前的 Session 对象和规则列表,执行查询操作并返回查询结果列表
+ return selectSqlFromFunction(sessionFatory.getCurrentSession(), rules);
+ }
+
+ // 根据规则更新多个任务实体的方法
+ @Override
+ public void updataEntitys(Map values, List rules) {
+ // 调用父类的 updataSqlFromFunction 方法,传入当前的 Session 对象、更新值映射和规则列表,执行更新操作
+ updataSqlFromFunction(sessionFatory.getCurrentSession(), values, rules);
+ }
+
+ // 获取 SessionFactory 对象的方法
+ public SessionFactory getSessionFatory() {
+ return sessionFatory;
+ }
+
+ // 设置 SessionFactory 对象的方法
+ public void setSessionFatory(SessionFactory sessionFatory) {
+ this.sessionFatory = sessionFatory;
+ }
+
+ // 重写获取 SessionFactory 对象的方法,供父类相关方法使用
+ @Override
+ protected SessionFactory getSessionFactory() {
+ return sessionFatory;
+ }
+
+ // 重写获取实体类类型的方法,供父类相关方法使用
+ @Override
+ protected Class> getTypeClass() {
+ return FarmQzTask.class;
+ }
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/dao/impl/FarmQzTriggerDao.java b/src/wcp-quartz/src/main/java/com/farm/quartz/dao/impl/FarmQzTriggerDao.java
new file mode 100644
index 0000000..9833584
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/dao/impl/FarmQzTriggerDao.java
@@ -0,0 +1,148 @@
+// 声明该类所在的包
+package com.farm.quartz.dao.impl;
+
+// 导入 BigInteger 类,用于处理大整数,这里主要用于接收数据库中 count(*) 函数返回的结果
+import java.math.BigInteger;
+
+// 导入 Hibernate 的 SQLQuery 类,用于执行原生 SQL 查询
+import org.hibernate.SQLQuery;
+// 导入 Hibernate 的 Session 类,它代表与数据库的一次会话,可进行数据库操作
+import org.hibernate.Session;
+// 导入 Hibernate 的 SessionFactory 类,用于创建和管理 Session 对象
+import org.hibernate.SessionFactory;
+// 导入 Spring 的 Repository 注解,将该类标记为数据访问层组件,便于 Spring 管理
+import org.springframework.stereotype.Repository;
+
+// 导入触发器数据访问接口,该类需要实现此接口中的方法
+import com.farm.quartz.dao.FarmQzTriggerDaoInter;
+// 导入触发器实体类,代表数据库中触发器相关的数据记录
+import com.farm.quartz.domain.FarmQzTrigger;
+// 导入数据库规则类,用于定义数据库查询或操作的规则条件
+import com.farm.core.sql.query.DBRule;
+// 导入数据查询类,用于构建和执行数据库查询
+import com.farm.core.sql.query.DataQuery;
+// 导入数据结果类,用于处理数据库查询返回的结果
+import com.farm.core.sql.result.DataResult;
+// 导入 Hibernate SQL 工具类,该类继承自该工具类,可复用其数据库操作相关方法
+import com.farm.core.sql.utils.HibernateSQLTools;
+
+// 导入 List 接口,用于定义存储多个元素的列表
+import java.util.List;
+// 导入 Map 接口,用于定义键值对映射
+import java.util.Map;
+
+// 导入资源注入注解,用于将 Spring 容器中的 Bean 注入到该类的成员变量中
+import javax.annotation.Resource;
+
+/**
+ * 触发器定义
+ *
+ * @author MAC_wd
+ */
+// 使用 @Repository 注解将该类标记为 Spring 数据访问层组件
+@Repository
+// 定义 FarmQzTriggerDao 类,继承自 HibernateSQLTools 并实现 FarmQzTriggerDaoInter 接口
+public class FarmQzTriggerDao extends HibernateSQLTools
+ implements FarmQzTriggerDaoInter {
+ // 使用 @Resource 注解注入 SessionFactory 类型的 Bean,名称为 "sessionFactory"
+ @Resource(name = "sessionFactory")
+ private SessionFactory sessionFatory;
+
+ // 删除触发器实体的方法
+ public void deleteEntity(FarmQzTrigger entity) {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 调用 Session 的 delete 方法,将该触发器实体从数据库中删除
+ session.delete(entity);
+ }
+
+ // 获取所有触发器记录数量的方法
+ public int getAllListNum() {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 创建一个原生 SQL 查询,用于统计 farm_qz_trigger 表中的记录数量
+ SQLQuery sqlquery = session
+ .createSQLQuery("select count(*) from farm_qz_trigger");
+ // 执行查询并获取结果列表,取第一个元素并将其转换为 BigInteger 类型
+ BigInteger num = (BigInteger) sqlquery.list().get(0);
+ // 将 BigInteger 类型的结果转换为 int 类型并返回
+ return num.intValue();
+ }
+
+ // 根据触发器 ID 获取触发器实体的方法
+ public FarmQzTrigger getEntity(String id) {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 调用 Session 的 get 方法,根据触发器 ID 和触发器实体类类型获取对应的触发器实体对象
+ return (FarmQzTrigger) session.get(FarmQzTrigger.class, id);
+ }
+
+ // 插入新触发器实体的方法
+ public FarmQzTrigger insertEntity(FarmQzTrigger entity) {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 调用 Session 的 save 方法,将新的触发器实体保存到数据库中
+ session.save(entity);
+ // 返回保存后的触发器实体
+ return entity;
+ }
+
+ // 编辑触发器实体的方法
+ public void editEntity(FarmQzTrigger entity) {
+ // 从 SessionFactory 中获取当前的 Session 对象
+ Session session = sessionFatory.getCurrentSession();
+ // 调用 Session 的 update 方法,更新数据库中该触发器实体的信息
+ session.update(entity);
+ }
+
+ // 重写获取 Session 对象的方法
+ @Override
+ public Session getSession() {
+ // 从 SessionFactory 中获取当前的 Session 对象并返回
+ return sessionFatory.getCurrentSession();
+ }
+
+ // 执行 SQL 查询的方法
+ public DataResult runSqlQuery(DataQuery query) {
+ try {
+ // 调用 DataQuery 的 search 方法,传入当前的 Session 对象执行查询操作,并返回查询结果
+ return query.search(sessionFatory.getCurrentSession());
+ } catch (Exception e) {
+ // 如果查询过程中出现异常,返回 null
+ return null;
+ }
+ }
+
+ // 根据规则删除多个触发器实体的方法
+ @Override
+ public void deleteEntitys(List rules) {
+ // 调用父类的 deleteSqlFromFunction 方法,传入当前的 Session 对象和规则列表,执行删除操作
+ deleteSqlFromFunction(sessionFatory.getCurrentSession(), rules);
+ }
+
+ // 根据规则查询多个触发器实体的方法
+ @Override
+ public List selectEntitys(List rules) {
+ // 调用父类的 selectSqlFromFunction 方法,传入当前的 Session 对象和规则列表,执行查询操作并返回查询结果列表
+ return selectSqlFromFunction(sessionFatory.getCurrentSession(), rules);
+ }
+
+ // 根据规则更新多个触发器实体的方法
+ @Override
+ public void updataEntitys(Map values, List rules) {
+ // 调用父类的 updataSqlFromFunction 方法,传入当前的 Session 对象、更新值映射和规则列表,执行更新操作
+ updataSqlFromFunction(sessionFatory.getCurrentSession(), values, rules);
+ }
+
+ // 重写获取 SessionFactory 对象的方法,供父类相关方法使用
+ @Override
+ protected SessionFactory getSessionFactory() {
+ return sessionFatory;
+ }
+
+ // 重写获取实体类类型的方法,供父类相关方法使用
+ @Override
+ protected Class> getTypeClass() {
+ return FarmQzTrigger.class;
+ }
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/domain/FarmQzScheduler.java b/src/wcp-quartz/src/main/java/com/farm/quartz/domain/FarmQzScheduler.java
new file mode 100644
index 0000000..561cf34
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/domain/FarmQzScheduler.java
@@ -0,0 +1,215 @@
+// 声明该类所属的包
+package com.farm.quartz.domain;
+
+// 导入 JPA 用于映射数据库列的注解
+import javax.persistence.Column;
+// 导入 JPA 用于将类标记为实体类的注解
+import javax.persistence.Entity;
+// 导入 JPA 用于指定主键生成方式的注解
+import javax.persistence.GeneratedValue;
+// 导入 JPA 用于标记主键字段的注解
+import javax.persistence.Id;
+// 导入 JPA 用于指定实体对应的数据库表名的注解
+import javax.persistence.Table;
+
+// 导入 Hibernate 自定义主键生成器的注解
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * FarmQzScheduler 实体类。由 MyEclipse Persistence Tools 工具生成。
+ */
+// 使用 @Entity 注解将该类标记为 JPA 实体类,并指定实体名称
+@Entity(name = "FarmQzScheduler")
+// 使用 @Table 注解指定该实体对应的数据库表名
+@Table(name = "farm_qz_scheduler")
+// 让该类实现 Serializable 接口,以便对象可以被序列化和反序列化
+public class FarmQzScheduler implements java.io.Serializable {
+ // 定义类的静态常量 serialVersionUID,用于序列化版本控制,确保在反序列化时类的结构兼容性,这里设置为 1
+ private static final long serialVersionUID = 1L;
+
+ // 使用 @Id 注解标记该字段为主键
+ @Id
+ // 定义一个名为 "systemUUID" 的主键生成器,采用 "uuid" 策略生成 UUID 作为主键值
+ @GenericGenerator(name = "systemUUID", strategy = "uuid")
+ // 指定使用 "systemUUID" 生成器来生成主键值
+ @GeneratedValue(generator = "systemUUID")
+ // 映射数据库中的 "ID" 列,指定列的长度为 32,允许插入、更新操作,且该列不能为空
+ @Column(name = "ID", length = 32, insertable = true, updatable = true, nullable = false)
+ // 声明一个字符串类型的成员变量 id,用于存储实体的唯一标识符
+ private String id;
+
+ // 映射数据库中的 "TRIGGERID" 列,指定列的长度为 32,该列不能为空
+ @Column(name = "TRIGGERID", length = 32, nullable = false)
+ // 声明一个字符串类型的成员变量 triggerid,用于存储关联的触发器 ID
+ private String triggerid;
+
+ // 映射数据库中的 "TASKID" 列,指定列的长度为 32,该列不能为空
+ @Column(name = "TASKID", length = 32, nullable = false)
+ // 声明一个字符串类型的成员变量 taskid,用于存储关联的任务 ID
+ private String taskid;
+
+ // 映射数据库中的 "PCONTENT" 列,指定列的长度为 128
+ @Column(name = "PCONTENT", length = 128)
+ // 声明一个字符串类型的成员变量 pcontent,可能用于存储调度相关的内容
+ private String pcontent;
+
+ // 映射数据库中的 "EUSER" 列,指定列的长度为 32,该列不能为空
+ @Column(name = "EUSER", length = 32, nullable = false)
+ // 声明一个字符串类型的成员变量 euser,可能用于存储编辑用户信息
+ private String euser;
+
+ // 映射数据库中的 "PSTATE" 列,指定列的长度为 2,该列不能为空
+ @Column(name = "PSTATE", length = 2, nullable = false)
+ // 声明一个字符串类型的成员变量 pstate,可能用于存储调度状态
+ private String pstate;
+
+ // 映射数据库中的 "AUTOIS" 列,指定列的长度为 2,该列不能为空
+ @Column(name = "AUTOIS", length = 2, nullable = false)
+ // 声明一个字符串类型的成员变量 autois,可能用于存储是否自动调度的标识
+ private String autois;
+
+ // 映射数据库中的 "CTIME" 列,指定列的长度为 16,该列不能为空
+ @Column(name = "CTIME", length = 16, nullable = false)
+ // 声明一个字符串类型的成员变量 ctime,用于存储创建时间
+ private String ctime;
+
+ // 映射数据库中的 "ETIME" 列,指定列的长度为 16,该列不能为空
+ @Column(name = "ETIME", length = 16, nullable = false)
+ // 声明一个字符串类型的成员变量 etime,用于存储编辑时间
+ private String etime;
+
+ // 映射数据库中的 "CUSERNAME" 列,指定列的长度为 64,该列不能为空
+ @Column(name = "CUSERNAME", length = 64, nullable = false)
+ // 声明一个字符串类型的成员变量 cusername,用于存储创建用户的名称
+ private String cusername;
+
+ // 映射数据库中的 "EUSERNAME" 列,指定列的长度为 64,该列不能为空
+ @Column(name = "EUSERNAME", length = 64, nullable = false)
+ // 声明一个字符串类型的成员变量 eusername,用于存储编辑用户的名称
+ private String eusername;
+
+ // 映射数据库中的 "CUSER" 列,指定列的长度为 32,该列不能为空
+ @Column(name = "CUSER", length = 32, nullable = false)
+ // 声明一个字符串类型的成员变量 cuser,用于存储创建用户的 ID
+ private String cuser;
+
+ // 获取关联的触发器 ID 的方法
+ public String getTriggerid() {
+ return this.triggerid;
+ }
+
+ // 设置关联的触发器 ID 的方法
+ public void setTriggerid(String triggerid) {
+ this.triggerid = triggerid;
+ }
+
+ // 获取关联的任务 ID 的方法
+ public String getTaskid() {
+ return this.taskid;
+ }
+
+ // 设置关联的任务 ID 的方法
+ public void setTaskid(String taskid) {
+ this.taskid = taskid;
+ }
+
+ // 获取调度相关内容的方法
+ public String getPcontent() {
+ return this.pcontent;
+ }
+
+ // 设置调度相关内容的方法
+ public void setPcontent(String pcontent) {
+ this.pcontent = pcontent;
+ }
+
+ // 获取编辑用户信息的方法
+ public String getEuser() {
+ return this.euser;
+ }
+
+ // 设置编辑用户信息的方法
+ public void setEuser(String euser) {
+ this.euser = euser;
+ }
+
+ // 获取调度状态的方法
+ public String getPstate() {
+ return this.pstate;
+ }
+
+ // 设置调度状态的方法
+ public void setPstate(String pstate) {
+ this.pstate = pstate;
+ }
+
+ // 获取是否自动调度标识的方法
+ public String getAutois() {
+ return this.autois;
+ }
+
+ // 设置是否自动调度标识的方法
+ public void setAutois(String autois) {
+ this.autois = autois;
+ }
+
+ // 获取创建时间的方法
+ public String getCtime() {
+ return this.ctime;
+ }
+
+ // 设置创建时间的方法
+ public void setCtime(String ctime) {
+ this.ctime = ctime;
+ }
+
+ // 获取编辑时间的方法
+ public String getEtime() {
+ return this.etime;
+ }
+
+ // 设置编辑时间的方法
+ public void setEtime(String etime) {
+ this.etime = etime;
+ }
+
+ // 获取创建用户名称的方法
+ public String getCusername() {
+ return this.cusername;
+ }
+
+ // 设置创建用户名称的方法
+ public void setCusername(String cusername) {
+ this.cusername = cusername;
+ }
+
+ // 获取编辑用户名称的方法
+ public String getEusername() {
+ return this.eusername;
+ }
+
+ // 设置编辑用户名称的方法
+ public void setEusername(String eusername) {
+ this.eusername = eusername;
+ }
+
+ // 获取创建用户 ID 的方法
+ public String getCuser() {
+ return this.cuser;
+ }
+
+ // 设置创建用户 ID 的方法
+ public void setCuser(String cuser) {
+ this.cuser = cuser;
+ }
+
+ // 获取实体唯一标识符的方法
+ public String getId() {
+ return this.id;
+ }
+
+ // 设置实体唯一标识符的方法
+ public void setId(String id) {
+ this.id = id;
+ }
+}}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/domain/FarmQzTask.java b/src/wcp-quartz/src/main/java/com/farm/quartz/domain/FarmQzTask.java
new file mode 100644
index 0000000..b3fac0b
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/domain/FarmQzTask.java
@@ -0,0 +1,230 @@
+// 声明该类所在的包
+package com.farm.quartz.domain;
+
+// 导入 JPA 中用于映射数据库列的注解
+import javax.persistence.Column;
+// 导入 JPA 中用于将类标记为实体类的注解
+import javax.persistence.Entity;
+// 导入 JPA 中用于指定主键生成策略的注解
+import javax.persistence.GeneratedValue;
+// 导入 JPA 中用于标记主键字段的注解
+import javax.persistence.Id;
+// 导入 JPA 中用于指定实体对应的数据库表名的注解
+import javax.persistence.Table;
+
+// 导入 Hibernate 提供的自定义主键生成器注解
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * FarmQzTask 实体类。该类由 MyEclipse Persistence Tools 工具生成,用于映射数据库中的 farm_qz_task 表。
+ */
+// 使用 @Entity 注解将该类标记为 JPA 实体类,并指定实体名称为 "FarmQzTask"
+@Entity(name = "FarmQzTask")
+// 使用 @Table 注解指定该实体对应的数据库表名为 "farm_qz_task"
+@Table(name = "farm_qz_task")
+// 实现 Serializable 接口,表明该类的对象可以被序列化和反序列化,方便在网络传输或持久化存储时使用
+public class FarmQzTask implements java.io.Serializable {
+ // 定义序列化版本号,确保在序列化和反序列化过程中类的版本一致性
+ private static final long serialVersionUID = 1L;
+
+ // 使用 @Id 注解标记该字段为主键
+ @Id
+ // 定义一个名为 "systemUUID" 的自定义主键生成器,使用 "uuid" 策略生成 UUID 作为主键值
+ @GenericGenerator(name = "systemUUID", strategy = "uuid")
+ // 指定使用上面定义的 "systemUUID" 生成器来生成主键值
+ @GeneratedValue(generator = "systemUUID")
+ // 使用 @Column 注解将该字段映射到数据库表的 "ID" 列,指定列的长度为 32,允许插入和更新操作,且该列不能为空
+ @Column(name = "ID", length = 32, insertable = true, updatable = true, nullable = false)
+ // 声明一个字符串类型的成员变量 id,用于存储该实体的唯一标识符
+ private String id;
+
+ // 将该字段映射到数据库表的 "JOBKEY" 列,指定列的长度为 128,且该列不能为空
+ @Column(name = "JOBKEY", length = 128, nullable = false)
+ // 声明一个字符串类型的成员变量 jobkey,可能用于标识任务的关键信息
+ private String jobkey;
+
+ // 将该字段映射到数据库表的 "JOBPARAS" 列,指定列的长度为 1024
+ @Column(name = "JOBPARAS", length = 1024)
+ // 声明一个字符串类型的成员变量 jobparas,可能用于存储任务的参数信息
+ private String jobparas;
+
+ // 将该字段映射到数据库表的 "NAME" 列,指定列的长度为 128,且该列不能为空
+ @Column(name = "NAME", length = 128, nullable = false)
+ // 声明一个字符串类型的成员变量 name,用于存储任务的名称
+ private String name;
+
+ // 将该字段映射到数据库表的 "JOBCLASS" 列,指定列的长度为 128,且该列不能为空
+ @Column(name = "JOBCLASS", length = 128, nullable = false)
+ // 声明一个字符串类型的成员变量 jobclass,可能用于存储任务对应的类名
+ private String jobclass;
+
+ // 将该字段映射到数据库表的 "CUSERNAME" 列,指定列的长度为 64,且该列不能为空
+ @Column(name = "CUSERNAME", length = 64, nullable = false)
+ // 声明一个字符串类型的成员变量 cusername,用于存储创建任务的用户名称
+ private String cusername;
+
+ // 将该字段映射到数据库表的 "CUSER" 列,指定列的长度为 32,且该列不能为空
+ @Column(name = "CUSER", length = 32, nullable = false)
+ // 声明一个字符串类型的成员变量 cuser,用于存储创建任务的用户 ID
+ private String cuser;
+
+ // 将该字段映射到数据库表的 "EUSERNAME" 列,指定列的长度为 64,且该列不能为空
+ @Column(name = "EUSERNAME", length = 64, nullable = false)
+ // 声明一个字符串类型的成员变量 eusername,用于存储编辑任务的用户名称
+ private String eusername;
+
+ // 将该字段映射到数据库表的 "EUSER" 列,指定列的长度为 32,且该列不能为空
+ @Column(name = "EUSER", length = 32, nullable = false)
+ // 声明一个字符串类型的成员变量 euser,用于存储编辑任务的用户 ID
+ private String euser;
+
+ // 将该字段映射到数据库表的 "PSTATE" 列,指定列的长度为 2,且该列不能为空
+ @Column(name = "PSTATE", length = 2, nullable = false)
+ // 声明一个字符串类型的成员变量 pstate,可能用于存储任务的状态信息
+ private String pstate;
+
+ // 将该字段映射到数据库表的 "PCONTENT" 列,指定列的长度为 128
+ @Column(name = "PCONTENT", length = 128)
+ // 声明一个字符串类型的成员变量 pcontent,可能用于存储任务的相关描述内容
+ private String pcontent;
+
+ // 将该字段映射到数据库表的 "CTIME" 列,指定列的长度为 16,且该列不能为空
+ @Column(name = "CTIME", length = 16, nullable = false)
+ // 声明一个字符串类型的成员变量 ctime,用于存储任务的创建时间
+ private String ctime;
+
+ // 将该字段映射到数据库表的 "ETIME" 列,指定列的长度为 16,且该列不能为空
+ @Column(name = "ETIME", length = 16, nullable = false)
+ // 声明一个字符串类型的成员变量 etime,用于存储任务的编辑时间
+ private String etime;
+
+ // 获取任务关键信息的方法
+ public String getJobkey() {
+ return this.jobkey;
+ }
+
+ // 设置任务关键信息的方法
+ public void setJobkey(String jobkey) {
+ this.jobkey = jobkey;
+ }
+
+ // 获取任务参数信息的方法
+ public String getJobparas() {
+ return this.jobparas;
+ }
+
+ // 设置任务参数信息的方法
+ public void setJobparas(String jobparas) {
+ this.jobparas = jobparas;
+ }
+
+ // 获取任务名称的方法
+ public String getName() {
+ return this.name;
+ }
+
+ // 设置任务名称的方法
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ // 获取任务对应类名的方法
+ public String getJobclass() {
+ return this.jobclass;
+ }
+
+ // 设置任务对应类名的方法
+ public void setJobclass(String jobclass) {
+ this.jobclass = jobclass;
+ }
+
+ // 获取创建任务的用户名称的方法
+ public String getCusername() {
+ return this.cusername;
+ }
+
+ // 设置创建任务的用户名称的方法
+ public void setCusername(String cusername) {
+ this.cusername = cusername;
+ }
+
+ // 获取创建任务的用户 ID 的方法
+ public String getCuser() {
+ return this.cuser;
+ }
+
+ // 设置创建任务的用户 ID 的方法
+ public void setCuser(String cuser) {
+ this.cuser = cuser;
+ }
+
+ // 获取编辑任务的用户名称的方法
+ public String getEusername() {
+ return this.eusername;
+ }
+
+ // 设置编辑任务的用户名称的方法
+ public void setEusername(String eusername) {
+ this.eusername = eusername;
+ }
+
+ // 获取编辑任务的用户 ID 的方法
+ public String getEuser() {
+ return this.euser;
+ }
+
+ // 设置编辑任务的用户 ID 的方法
+ public void setEuser(String euser) {
+ this.euser = euser;
+ }
+
+ // 获取任务状态信息的方法
+ public String getPstate() {
+ return this.pstate;
+ }
+
+ // 设置任务状态信息的方法
+ public void setPstate(String pstate) {
+ this.pstate = pstate;
+ }
+
+ // 获取任务相关描述内容的方法
+ public String getPcontent() {
+ return this.pcontent;
+ }
+
+ // 设置任务相关描述内容的方法
+ public void setPcontent(String pcontent) {
+ this.pcontent = pcontent;
+ }
+
+ // 获取任务创建时间的方法
+ public String getCtime() {
+ return this.ctime;
+ }
+
+ // 设置任务创建时间的方法
+ public void setCtime(String ctime) {
+ this.ctime = ctime;
+ }
+
+ // 获取任务编辑时间的方法
+ public String getEtime() {
+ return this.etime;
+ }
+
+ // 设置任务编辑时间的方法
+ public void setEtime(String etime) {
+ this.etime = etime;
+ }
+
+ // 获取任务唯一标识符的方法
+ public String getId() {
+ return this.id;
+ }
+
+ // 设置任务唯一标识符的方法
+ public void setId(String id) {
+ this.id = id;
+ }
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/domain/FarmQzTrigger.java b/src/wcp-quartz/src/main/java/com/farm/quartz/domain/FarmQzTrigger.java
new file mode 100644
index 0000000..373fdf4
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/domain/FarmQzTrigger.java
@@ -0,0 +1,200 @@
+// 声明该类所属的包
+package com.farm.quartz.domain;
+
+// 导入 JPA 用于映射数据库列的注解
+import javax.persistence.Column;
+// 导入 JPA 用于将类标记为实体类的注解
+import javax.persistence.Entity;
+// 导入 JPA 用于指定主键生成方式的注解
+import javax.persistence.GeneratedValue;
+// 导入 JPA 用于标记主键字段的注解
+import javax.persistence.Id;
+// 导入 JPA 用于指定实体对应的数据库表名的注解
+import javax.persistence.Table;
+
+// 导入 Hibernate 自定义主键生成器的注解
+import org.hibernate.annotations.GenericGenerator;
+
+/**
+ * FarmQzTrigger 实体类。由 MyEclipse Persistence Tools 工具生成
+ */
+// 使用 @Entity 注解将该类标记为 JPA 实体类,并指定实体名称
+@Entity(name = "FarmQzTrigger")
+// 使用 @Table 注解指定该实体对应的数据库表名
+@Table(name = "farm_qz_trigger")
+// 让该类实现 Serializable 接口,以便对象可以被序列化和反序列化
+public class FarmQzTrigger implements java.io.Serializable {
+ // 定义类的静态常量 serialVersionUID,用于序列化版本控制,确保在反序列化时类的结构兼容性,这里设置为 1
+ private static final long serialVersionUID = 1L;
+
+ // 使用 @Id 注解标记该字段为主键
+ @Id
+ // 定义一个名为 "systemUUID" 的主键生成器,采用 "uuid" 策略生成 UUID 作为主键值
+ @GenericGenerator(name = "systemUUID", strategy = "uuid")
+ // 指定使用 "systemUUID" 生成器来生成主键值
+ @GeneratedValue(generator = "systemUUID")
+ // 映射数据库中的 "ID" 列,指定列的长度为 32,允许插入、更新操作,且该列不能为空
+ @Column(name = "ID", length = 32, insertable = true, updatable = true, nullable = false)
+ // 声明一个字符串类型的成员变量 id,用于存储实体的唯一标识符
+ private String id;
+
+ // 映射数据库中的 "NAME" 列,指定列的长度为 128,该列不能为空
+ @Column(name = "NAME", length = 128, nullable = false)
+ // 声明一个字符串类型的成员变量 name,用于存储触发器的名称
+ private String name;
+
+ // 映射数据库中的 "DESCRIPT" 列,指定列的长度为 128,该列不能为空
+ @Column(name = "DESCRIPT", length = 128, nullable = false)
+ // 声明一个字符串类型的成员变量 descript,用于存储触发器的描述信息
+ private String descript;
+
+ // 映射数据库中的 "CTIME" 列,指定列的长度为 16,该列不能为空
+ @Column(name = "CTIME", length = 16, nullable = false)
+ // 声明一个字符串类型的成员变量 ctime,用于存储创建时间
+ private String ctime;
+
+ // 映射数据库中的 "ETIME" 列,指定列的长度为 16,该列不能为空
+ @Column(name = "ETIME", length = 16, nullable = false)
+ // 声明一个字符串类型的成员变量 etime,用于存储编辑时间
+ private String etime;
+
+ // 映射数据库中的 "CUSERNAME" 列,指定列的长度为 64,该列不能为空
+ @Column(name = "CUSERNAME", length = 64, nullable = false)
+ // 声明一个字符串类型的成员变量 cusername,用于存储创建用户的名称
+ private String cusername;
+
+ // 映射数据库中的 "CUSER" 列,指定列的长度为 32,该列不能为空
+ @Column(name = "CUSER", length = 32, nullable = false)
+ // 声明一个字符串类型的成员变量 cuser,用于存储创建用户的 ID
+ private String cuser;
+
+ // 映射数据库中的 "EUSERNAME" 列,指定列的长度为 64,该列不能为空
+ @Column(name = "EUSERNAME", length = 64, nullable = false)
+ // 声明一个字符串类型的成员变量 eusername,用于存储编辑用户的名称
+ private String eusername;
+
+ // 映射数据库中的 "EUSER" 列,指定列的长度为 32,该列不能为空
+ @Column(name = "EUSER", length = 32, nullable = false)
+ // 声明一个字符串类型的成员变量 euser,用于存储编辑用户的 ID
+ private String euser;
+
+ // 映射数据库中的 "PCONTENT" 列,指定列的长度为 128
+ @Column(name = "PCONTENT", length = 128)
+ // 声明一个字符串类型的成员变量 pcontent,可能用于存储触发器的相关内容
+ private String pcontent;
+
+ // 映射数据库中的 "PSTATE" 列,指定列的长度为 2,该列不能为空
+ @Column(name = "PSTATE", length = 2, nullable = false)
+ // 声明一个字符串类型的成员变量 pstate,可能用于存储触发器的状态
+ private String pstate;
+
+ // 获取触发器名称的方法
+ public String getName() {
+ return this.name;
+ }
+
+ // 设置触发器名称的方法
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ // 获取触发器描述信息的方法
+ public String getDescript() {
+ return this.descript;
+ }
+
+ // 设置触发器描述信息的方法
+ public void setDescript(String descript) {
+ this.descript = descript;
+ }
+
+ // 获取创建时间的方法
+ public String getCtime() {
+ return this.ctime;
+ }
+
+ // 设置创建时间的方法
+ public void setCtime(String ctime) {
+ this.ctime = ctime;
+ }
+
+ // 获取编辑时间的方法
+ public String getEtime() {
+ return this.etime;
+ }
+
+ // 设置编辑时间的方法
+ public void setEtime(String etime) {
+ this.etime = etime;
+ }
+
+ // 获取创建用户名称的方法
+ public String getCusername() {
+ return this.cusername;
+ }
+
+ // 设置创建用户名称的方法
+ public void setCusername(String cusername) {
+ this.cusername = cusername;
+ }
+
+ // 获取创建用户 ID 的方法
+ public String getCuser() {
+ return this.cuser;
+ }
+
+ // 设置创建用户 ID 的方法
+ public void setCuser(String cuser) {
+ this.cuser = cuser;
+ }
+
+ // 获取编辑用户名称的方法
+ public String getEusername() {
+ return this.eusername;
+ }
+
+ // 设置编辑用户名称的方法
+ public void setEusername(String eusername) {
+ this.eusername = eusername;
+ }
+
+ // 获取编辑用户 ID 的方法
+ public String getEuser() {
+ return this.euser;
+ }
+
+ // 设置编辑用户 ID 的方法
+ public void setEuser(String euser) {
+ this.euser = euser;
+ }
+
+ // 获取触发器相关内容的方法
+ public String getPcontent() {
+ return this.pcontent;
+ }
+
+ // 设置触发器相关内容的方法
+ public void setPcontent(String pcontent) {
+ this.pcontent = pcontent;
+ }
+
+ // 获取触发器状态的方法
+ public String getPstate() {
+ return this.pstate;
+ }
+
+ // 设置触发器状态的方法
+ public void setPstate(String pstate) {
+ this.pstate = pstate;
+ }
+
+ // 获取实体唯一标识符的方法
+ public String getId() {
+ return this.id;
+ }
+
+ // 设置实体唯一标识符的方法
+ public void setId(String id) {
+ this.id = id;
+ }
+}}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/job/impl/CommandRuningJob.java b/src/wcp-quartz/src/main/java/com/farm/quartz/job/impl/CommandRuningJob.java
new file mode 100644
index 0000000..5aa30c0
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/job/impl/CommandRuningJob.java
@@ -0,0 +1,94 @@
+// 声明该类所属的包
+package com.farm.quartz.job.impl;
+
+// 导入用于读取缓冲字符流的类
+import java.io.BufferedReader;
+// 导入用于处理输入输出异常的类
+import java.io.IOException;
+// 导入表示输入流的类
+import java.io.InputStream;
+// 导入用于将字节流转换为字符流的类
+import java.io.InputStreamReader;
+
+// 导入 Apache Log4j 的 Logger 类,用于记录日志
+import org.apache.log4j.Logger;
+// 导入 Quartz 框架中的 Job 接口,该类需要实现此接口
+import org.quartz.Job;
+// 导入 Quartz 框架中用于传递作业执行上下文信息的类
+import org.quartz.JobExecutionContext;
+// 导入 Quartz 框架中用于表示作业执行异常的类
+import org.quartz.JobExecutionException;
+
+// 导入自定义的工具类,可能包含一些通用的工具方法
+import com.farm.core.FarmUtils;
+
+// 定义 CommandRuningJob 类,实现 Job 接口,用于执行命令行任务
+public class CommandRuningJob implements Job {
+ // 定义一个静态的 Logger 对象,用于记录日志,日志记录器关联到 CommandRuningJob 类
+ private static final Logger log = Logger.getLogger(CommandRuningJob.class);
+
+ // 重写 Job 接口中的 execute 方法,在作业执行时调用
+ @SuppressWarnings("static-access")
+ @Override
+ public void execute(JobExecutionContext arg0) throws JobExecutionException {
+ // 从作业执行上下文的合并作业数据映射中获取键为 "PARA" 的值,并转换为字符串
+ String commandStr = arg0.getMergedJobDataMap().get("PARA").toString();
+ // 使用 FarmUtils 工具类的方法检查命令字符串是否为空字符串
+ if (FarmUtils.getValidUtils().isEmptyString(commandStr)) {
+ // 如果命令字符串为空,抛出运行时异常
+ throw new RuntimeException("空命令行参数");
+ }
+ // 初始化输入流对象,用于获取命令执行的输出
+ InputStream stderr = null;
+ // 初始化输入流读取器对象,用于将字节流转换为字符流
+ InputStreamReader isr = null;
+ // 初始化缓冲字符读取器对象,用于读取字符流
+ BufferedReader br = null;
+ try {
+ // 去除命令字符串两端的空格
+ String cmd = commandStr.trim();
+ // 记录日志,打印要执行的命令行
+ log.info("执行命令行:" + cmd);
+ // 获取当前运行时系统
+ Runtime rt = Runtime.getRuntime();
+ // 执行命令,返回一个表示该命令进程的 Process 对象
+ Process proc = rt.exec(cmd);
+ // 获取命令执行的输入流(通常是标准输出或标准错误输出)
+ stderr = proc.getInputStream();
+ // 将输入流包装为输入流读取器
+ isr = new InputStreamReader(stderr);
+ // 将输入流读取器包装为缓冲字符读取器
+ br = new BufferedReader(isr);
+ // 定义变量用于存储读取的每一行内容
+ String line = null;
+ // 定义字符串缓冲区,用于存储读取的所有行内容
+ StringBuffer lineBuffer = new StringBuffer();
+ // 循环读取命令执行结果的每一行,直到读取到 null(表示文件结束)
+ while ((line = br.readLine()) != null) {
+ // 将读取到的行添加到字符串缓冲区
+ lineBuffer.append(line);
+ // 记录日志,打印读取到的每一行内容
+ log.info(line);
+ }
+ } catch (Exception t) {
+ // 如果在执行过程中发生异常,记录异常信息和异常消息
+ log.error(t + t.getMessage());
+ // 抛出运行时异常,将异常传递给上层调用者
+ throw new RuntimeException(t);
+ } finally {
+ try {
+ // 关闭输入流
+ stderr.close();
+ // 关闭输入流读取器
+ isr.close();
+ // 关闭缓冲字符读取器
+ br.close();
+ } catch (IOException e) {
+ // 如果在关闭流的过程中发生 I/O 异常,记录异常信息和异常消息
+ log.error(e + e.getMessage());
+ // 抛出运行时异常,将异常传递给上层调用者
+ throw new RuntimeException(e);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/server/DemoJobExecutionContext.java b/src/wcp-quartz/src/main/java/com/farm/quartz/server/DemoJobExecutionContext.java
new file mode 100644
index 0000000..b27697e
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/server/DemoJobExecutionContext.java
@@ -0,0 +1,164 @@
+// 声明该类所属的包
+package com.farm.quartz.server;
+
+// 导入表示日期的类,用于处理时间相关操作
+import java.util.Date;
+
+// 导入 Quartz 框架中的 Calendar 接口,用于处理日历相关功能
+import org.quartz.Calendar;
+// 导入 Quartz 框架中的 Job 接口,代表一个可执行的作业
+import org.quartz.Job;
+// 导入 Quartz 框架中用于存储作业数据的类
+import org.quartz.JobDataMap;
+// 导入 Quartz 框架中用于描述作业详细信息的类
+import org.quartz.JobDetail;
+// 导入 Quartz 框架中用于传递作业执行上下文信息的类
+import org.quartz.JobExecutionContext;
+// 导入 Quartz 框架中用于调度作业的类
+import org.quartz.Scheduler;
+// 导入 Quartz 框架中用于触发作业执行的类
+import org.quartz.Trigger;
+// 导入 Quartz 框架中用于标识触发器的类
+import org.quartz.TriggerKey;
+
+// 定义 DemoJobExecutionContext 类,实现 JobExecutionContext 接口,用于自定义作业执行上下文
+public class DemoJobExecutionContext implements JobExecutionContext {
+ // 定义一个 JobDataMap 类型的成员变量,用于存储作业数据
+ private JobDataMap dataMap;
+
+ // 构造函数,接受一个 JobDataMap 类型的参数,并将其赋值给成员变量 dataMap
+ public DemoJobExecutionContext(JobDataMap data) {
+ dataMap = data;
+ }
+
+ // 重写从作业执行上下文中获取指定键对应值的方法,这里直接返回 null
+ @Override
+ public Object get(Object arg0) {
+ return null;
+ }
+
+ // 重写获取与作业相关的日历对象的方法,目前是待实现状态(TODO),返回 null
+ @Override
+ public Calendar getCalendar() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // 重写获取触发实例 ID 的方法,目前是待实现状态(TODO),返回 null
+ @Override
+ public String getFireInstanceId() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // 重写获取作业触发时间的方法,目前是待实现状态(TODO),返回 null
+ @Override
+ public Date getFireTime() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // 重写获取作业详细信息的方法,目前是待实现状态(TODO),返回 null
+ @Override
+ public JobDetail getJobDetail() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // 重写获取作业实例的方法,目前是待实现状态(TODO),返回 null
+ @Override
+ public Job getJobInstance() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // 重写获取作业运行时间的方法,目前是待实现状态(TODO),返回 0
+ @Override
+ public long getJobRunTime() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ // 重写获取合并后的作业数据映射的方法,返回成员变量 dataMap
+ @Override
+ public JobDataMap getMergedJobDataMap() {
+ return dataMap;
+ }
+
+ // 重写获取作业下一次触发时间的方法,目前是待实现状态(TODO),返回 null
+ @Override
+ public Date getNextFireTime() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // 重写获取作业上一次触发时间的方法,目前是待实现状态(TODO),返回 null
+ @Override
+ public Date getPreviousFireTime() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // 重写获取恢复中的触发器键的方法,目前是待实现状态(TODO),如果状态不正确会抛出 IllegalStateException 异常,返回 null
+ @Override
+ public TriggerKey getRecoveringTriggerKey() throws IllegalStateException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // 重写获取作业重新触发次数的方法,目前是待实现状态(TODO),返回 0
+ @Override
+ public int getRefireCount() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ // 重写获取作业执行结果的方法,目前是待实现状态(TODO),返回 null
+ @Override
+ public Object getResult() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // 重写获取作业计划触发时间的方法,目前是待实现状态(TODO),返回 null
+ @Override
+ public Date getScheduledFireTime() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // 重写获取调度器的方法,目前是待实现状态(TODO),返回 null
+ @Override
+ public Scheduler getScheduler() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // 重写获取触发器的方法,目前是待实现状态(TODO),返回 null
+ @Override
+ public Trigger getTrigger() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ // 重写判断作业是否正在恢复的方法,目前是待实现状态(TODO),返回 false
+ @Override
+ public boolean isRecovering() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ // 重写向作业执行上下文中放入键值对的方法,目前是待实现状态(TODO)
+ @Override
+ public void put(Object arg0, Object arg1) {
+ // TODO Auto-generated method stub
+
+ }
+
+ // 重写设置作业执行结果的方法,目前是待实现状态(TODO)
+ @Override
+ public void setResult(Object arg0) {
+ // TODO Auto-generated method stub
+
+ }
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/server/FarmQzSchedulerManagerInter.java b/src/wcp-quartz/src/main/java/com/farm/quartz/server/FarmQzSchedulerManagerInter.java
new file mode 100644
index 0000000..4e2dec3
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/server/FarmQzSchedulerManagerInter.java
@@ -0,0 +1,184 @@
+package com.farm.quartz.server;
+
+import java.text.ParseException;
+
+import org.quartz.SchedulerException;
+
+import com.farm.quartz.domain.FarmQzScheduler;
+import com.farm.quartz.domain.FarmQzTask;
+import com.farm.quartz.domain.FarmQzTrigger;
+import com.farm.core.auth.domain.LoginUser;
+import com.farm.core.sql.query.DataQuery;
+
+/**
+ * 计划任务管理
+ *
+ * @author MAC_wd
+ *
+ */
+public interface FarmQzSchedulerManagerInter {
+ /**
+ *新增实体
+ *
+ * @param entity
+ */
+ public FarmQzScheduler insertSchedulerEntity(FarmQzScheduler entity,
+ LoginUser user);
+
+ /**
+ * 启动一个任务
+ *
+ * @param SchedulerId
+ * @throws ClassNotFoundException
+ * 类class无法解析
+ * @throws ParseException
+ * 计划字符串脚本无法解析
+ * @throws SchedulerException
+ */
+ public void startTask(String SchedulerId) throws ClassNotFoundException,
+ ParseException, SchedulerException;
+
+ /**
+ * 停止一个任务
+ *
+ * @param SchedulerId
+ * @throws SchedulerException
+ */
+ public void stopTask(String SchedulerId) throws SchedulerException;
+
+ /**
+ * 启动调度引擎
+ *
+ * @throws ParseException
+ * @throws ClassNotFoundException
+ */
+ public void start() throws SchedulerException, ParseException,
+ ClassNotFoundException;
+
+ /**
+ *修改实体
+ *
+ * @param entity
+ */
+ public FarmQzScheduler editSchedulerEntity(FarmQzScheduler entity,
+ LoginUser user);
+
+ /**
+ *删除实体
+ *
+ * @param entity
+ */
+ public void deleteSchedulerEntity(String entity, LoginUser user);
+
+ /**
+ *获得实体
+ *
+ * @param id
+ * @return
+ */
+ public FarmQzScheduler getSchedulerEntity(String id);
+
+ /**
+ * 创建一个基本查询用来查询当前实体
+ *
+ * @param query
+ * 传入的查询条件封装
+ * @return
+ */
+ public DataQuery createSchedulerSimpleQuery(DataQuery query);
+
+ /**
+ * 判断一个任务计划是否启动
+ *
+ * @param SchedulerId
+ * @return
+ * @throws SchedulerException
+ */
+ public boolean isRunningFindScheduler(String SchedulerId)
+ throws SchedulerException;
+
+ /**
+ *新增触发器定义实体
+ *
+ * @param entity
+ */
+ public FarmQzTrigger insertTriggerEntity(FarmQzTrigger entity,
+ LoginUser user);
+
+ /**
+ *修改触发器定义实体
+ *
+ * @param entity
+ */
+ public FarmQzTrigger editTriggerEntity(FarmQzTrigger entity, LoginUser user);
+
+ /**
+ *删除触发器定义实体
+ *
+ * @param entity
+ */
+ public void deleteTriggerEntity(String entity, LoginUser user);
+
+ /**
+ *获得触发器定义实体
+ *
+ * @param id
+ * @return
+ */
+ public FarmQzTrigger getTriggerEntity(String id);
+
+ /**
+ * 创建一个基本查询用来查询当前触发器定义实体
+ *
+ * @param query
+ * 传入的查询条件封装
+ * @return
+ */
+ public DataQuery createTriggerSimpleQuery(DataQuery query);
+
+ /**
+ *新增任务定义实体
+ *
+ * @param entity
+ */
+ public FarmQzTask insertTaskEntity(FarmQzTask entity, LoginUser user);
+
+ /**
+ *修改任务定义实体
+ *
+ * @param entity
+ */
+ public FarmQzTask editTaskEntity(FarmQzTask entity, LoginUser user);
+
+ /**
+ *删除任务定义实体
+ *
+ * @param entity
+ */
+ public void deleteTaskEntity(String entity, LoginUser user);
+
+ /**
+ *获得任务定义实体
+ *
+ * @param id
+ * @return
+ */
+ public FarmQzTask getTaskEntity(String id);
+
+ /**
+ * 创建一个基本查询用来查询当前任务定义实体
+ *
+ * @param query
+ * 传入的查询条件封装
+ * @return
+ */
+ public DataQuery createTaskSimpleQuery(DataQuery query);
+
+ /**
+ * 由一个实例获得任务对象
+ *
+ * @param schedulerId
+ * @return
+ */
+ public FarmQzTask getTaskBySchedulerId(String schedulerId);
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/server/QuartzInter.java b/src/wcp-quartz/src/main/java/com/farm/quartz/server/QuartzInter.java
new file mode 100644
index 0000000..01830d5
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/server/QuartzInter.java
@@ -0,0 +1,67 @@
+// 声明该类所在的包,此包名为 com.farm.quartz.server
+package com.farm.quartz.server;
+
+// 导入 java.text 包中的 ParseException 类,该类用于处理日期解析时可能出现的异常
+import java.text.ParseException;
+
+// 导入 org.quartz 包中的 JobDetail 类,JobDetail 用于定义一个具体的作业实例
+import org.quartz.JobDetail;
+// 导入 org.quartz 包中的 JobKey 类,JobKey 是作业的唯一标识符
+import org.quartz.JobKey;
+// 导入 org.quartz 包中的 Trigger 类,Trigger 用于定义作业的执行时间和触发规则
+import org.quartz.Trigger;
+
+// 导入自定义的 com.farm.quartz.domain 包中的 FarmQzScheduler 类,该类可能代表调度器的相关信息
+import com.farm.quartz.domain.FarmQzScheduler;
+// 导入自定义的 com.farm.quartz.domain 包中的 FarmQzTask 类,该类可能代表任务的相关信息
+import com.farm.quartz.domain.FarmQzTask;
+// 导入自定义的 com.farm.quartz.domain 包中的 FarmQzTrigger 类,该类可能代表触发器的相关信息
+import com.farm.quartz.domain.FarmQzTrigger;
+
+/**
+ * queatz的转化接口
+ *
+ * @author Administrator
+ *
+ */
+// 定义一个名为 QuartzInter 的接口,此接口提供了一些与 Quartz 调度器相关的转换方法
+public interface QuartzInter {
+ /**
+ * 根据调度器节点和任务信息获取 JobDetail 对象
+ *
+ * @param node 调度器节点信息,类型为 FarmQzScheduler
+ * @param task 任务信息,类型为 FarmQzTask
+ * @return 返回一个 JobDetail 对象,代表一个具体的作业实例
+ * @throws ClassNotFoundException 如果在加载作业类时找不到对应的类,抛出此异常
+ */
+ public JobDetail getJobDetail(FarmQzScheduler node,FarmQzTask task) throws ClassNotFoundException;
+
+ /**
+ * 根据调度器 ID 和任务信息获取 JobDetail 对象
+ *
+ * @param schedulerId 调度器的 ID,类型为 String
+ * @param task 任务信息,类型为 FarmQzTask
+ * @return 返回一个 JobDetail 对象,代表一个具体的作业实例
+ * @throws ClassNotFoundException 如果在加载作业类时找不到对应的类,抛出此异常
+ */
+ public JobDetail getJobDetail(String schedulerId,FarmQzTask task) throws ClassNotFoundException;
+
+ /**
+ * 根据调度器节点和触发器信息获取 Trigger 对象
+ *
+ * @param node 调度器节点信息,类型为 FarmQzScheduler
+ * @param trigger 触发器信息,类型为 FarmQzTrigger
+ * @return 返回一个 Trigger 对象,用于定义作业的执行时间和触发规则
+ * @throws ParseException 如果在解析触发器的时间表达式时出现错误,抛出此异常
+ */
+ public Trigger getTrigger(FarmQzScheduler node,FarmQzTrigger trigger) throws ParseException;
+
+ /**
+ * 根据调度器节点和任务信息获取 JobKey 对象
+ *
+ * @param node 调度器节点信息,类型为 FarmQzScheduler
+ * @param task 任务信息,类型为 FarmQzTask
+ * @return 返回一个 JobKey 对象,作为作业的唯一标识符
+ */
+ public JobKey getJobKey(FarmQzScheduler node,FarmQzTask task);
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/server/impl/FarmQzSchedulerManagerImpl.java b/src/wcp-quartz/src/main/java/com/farm/quartz/server/impl/FarmQzSchedulerManagerImpl.java
new file mode 100644
index 0000000..685f129
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/server/impl/FarmQzSchedulerManagerImpl.java
@@ -0,0 +1,441 @@
+// 声明该类所属的包
+package com.farm.quartz.server.impl;
+
+// 导入处理日期解析异常的类
+import java.text.ParseException;
+
+// 导入 Spring 的资源注入注解,用于将 Spring 容器中的 Bean 注入到该类的成员变量中
+import javax.annotation.Resource;
+
+// 导入自定义的登录用户实体类,用于表示登录用户的信息
+import com.farm.core.auth.domain.LoginUser;
+// 导入自定义的时间工具类,用于处理时间和日期相关的操作
+import com.farm.core.time.TimeTool;
+
+// 导入 Apache Log4j 的 Logger 类,用于记录日志
+import org.apache.log4j.Logger;
+// 导入 Quartz 框架中的 Job 接口,代表一个可执行的作业
+import org.quartz.Job;
+// 导入 Quartz 框架中的 JobDetail 类,用于描述一个作业的详细信息
+import org.quartz.JobDetail;
+// 导入 Quartz 框架中的 Scheduler 类,用于调度作业的执行
+import org.quartz.Scheduler;
+// 导入 Quartz 框架中的 SchedulerException 类,用于表示调度器相关的异常
+import org.quartz.SchedulerException;
+// 导入 Quartz 框架中的 Trigger 类,用于触发作业的执行
+import org.quartz.Trigger;
+// 导入 Quartz 框架中的标准调度器工厂类,用于获取默认的调度器实例
+import org.quartz.impl.StdSchedulerFactory;
+// 导入 Spring 的 Service 注解,将该类标记为服务层组件,由 Spring 进行管理
+import org.springframework.stereotype.Service;
+// 导入 Spring 的事务管理注解,用于声明方法的事务属性
+import org.springframework.transaction.annotation.Transactional;
+
+// 导入自定义的调度器数据访问接口,用于与数据库中的调度器信息进行交互
+import com.farm.quartz.dao.FarmQzSchedulerDaoInter;
+// 导入自定义的任务数据访问接口,用于与数据库中的任务信息进行交互
+import com.farm.quartz.dao.FarmQzTaskDaoInter;
+// 导入自定义的触发器数据访问接口,用于与数据库中的触发器信息进行交互
+import com.farm.quartz.dao.FarmQzTriggerDaoInter;
+// 导入自定义的调度器实体类,代表数据库中的调度器记录
+import com.farm.quartz.domain.FarmQzScheduler;
+// 导入自定义的任务实体类,代表数据库中的任务记录
+import com.farm.quartz.domain.FarmQzTask;
+// 导入自定义的触发器实体类,代表数据库中的触发器记录
+import com.farm.quartz.domain.FarmQzTrigger;
+// 导入自定义的调度器管理接口,该类需要实现此接口中的方法
+import com.farm.quartz.server.FarmQzSchedulerManagerInter;
+// 导入自定义的数据查询类,用于构建和执行数据库查询操作
+import com.farm.core.sql.query.DataQuery;
+
+/**
+ * 计划任务管理
+ *
+ * @author MAC_wd
+ */
+// 使用 @Service 注解将该类标记为 Spring 服务层组件
+@Service
+// 定义 FarmQzSchedulerManagerImpl 类,实现 FarmQzSchedulerManagerInter 接口
+public class FarmQzSchedulerManagerImpl implements FarmQzSchedulerManagerInter {
+ // 使用 @Resource 注解注入 FarmQzSchedulerDaoInter 类型的 Bean
+ @Resource
+ private FarmQzSchedulerDaoInter farmQzSchedulerDao;
+ // 使用 @Resource 注解注入 FarmQzTaskDaoInter 类型的 Bean
+ @Resource
+ private FarmQzTaskDaoInter farmQzTaskDao;
+ // 使用 @Resource 注解注入 FarmQzTriggerDaoInter 类型的 Bean
+ @Resource
+ private FarmQzTriggerDaoInter farmQzTriggerDao;
+
+ // 定义一个静态的 Logger 对象,用于记录日志,日志记录器关联到 FarmQzSchedulerManagerImpl 类
+ private static final Logger log = Logger
+ .getLogger(FarmQzSchedulerManagerImpl.class);
+
+ // 定义一个静态的 Scheduler 对象,用于调度作业的执行
+ private static Scheduler scheduler = null;
+
+ // 重写启动调度器的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public void start() throws SchedulerException, ParseException,
+ ClassNotFoundException {
+ // 如果调度器对象为空,则通过标准调度器工厂获取默认的调度器实例
+ if (scheduler == null) {
+ scheduler = StdSchedulerFactory.getDefaultScheduler();
+ }
+ // 启动调度器
+ scheduler.start();
+ // 遍历所有自动调度的调度器记录
+ for (FarmQzScheduler node : farmQzSchedulerDao.getAutoSchedulers()) {
+ // 根据调度器记录中的任务 ID 获取对应的任务实体
+ FarmQzTask task = getTaskEntity(node.getTaskid());
+ // 根据调度器记录中的触发器 ID 获取对应的触发器实体
+ FarmQzTrigger trigger = getTriggerEntity(node.getTriggerid());
+ // 通过 QuartzImpl 类的实例获取作业详细信息
+ JobDetail job = new QuartzImpl().getJobDetail(node, task);
+ // 通过 QuartzImpl 类的实例获取触发器对象
+ Trigger qtrigger = new QuartzImpl().getTrigger(node, trigger);
+ // 将作业和触发器注册到调度器中,安排作业执行
+ scheduler.scheduleJob(job, qtrigger);
+ }
+ }
+
+ // 重写检查指定调度器是否正在运行的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public boolean isRunningFindScheduler(String SchedulerId)
+ throws SchedulerException {
+ // 根据调度器 ID 获取对应的调度器实体
+ FarmQzScheduler node = getSchedulerEntity(SchedulerId);
+ // 根据调度器实体中的任务 ID 获取对应的任务实体
+ FarmQzTask task = getTaskEntity(node.getTaskid());
+ // 通过调度器检查指定作业是否存在,如果不存在则返回 false,否则返回 true
+ if (scheduler.getJobDetail(new QuartzImpl().getJobKey(node, task)) == null) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ // 重写启动指定任务的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public void startTask(String SchedulerId) throws ClassNotFoundException,
+ ParseException, SchedulerException {
+ // 根据调度器 ID 获取对应的调度器实体
+ FarmQzScheduler node = getSchedulerEntity(SchedulerId);
+ // 根据调度器实体中的任务 ID 获取对应的任务实体
+ FarmQzTask task = getTaskEntity(node.getTaskid());
+ // 根据调度器实体中的触发器 ID 获取对应的触发器实体
+ FarmQzTrigger trigger = getTriggerEntity(node.getTriggerid());
+ // 通过 QuartzImpl 类的实例获取作业详细信息
+ JobDetail job = new QuartzImpl().getJobDetail(node, task);
+ // 通过 QuartzImpl 类的实例获取触发器对象
+ Trigger qtrigger = new QuartzImpl().getTrigger(node, trigger);
+ // 将作业和触发器注册到调度器中,安排作业执行
+ scheduler.scheduleJob(job, qtrigger);
+ }
+
+ // 重写停止指定任务的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public void stopTask(String SchedulerId) throws SchedulerException {
+ // 根据调度器 ID 获取对应的调度器实体
+ FarmQzScheduler node = getSchedulerEntity(SchedulerId);
+ // 根据调度器实体中的任务 ID 获取对应的任务实体
+ FarmQzTask task = getTaskEntity(node.getTaskid());
+ // 通过调度器删除指定的作业
+ scheduler.deleteJob(new QuartzImpl().getJobKey(node, task));
+ }
+
+ // 重写插入调度器实体的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public FarmQzScheduler insertSchedulerEntity(FarmQzScheduler entity,
+ LoginUser user) {
+ // 设置调度器实体的创建用户 ID
+ entity.setCuser(user.getId());
+ // 设置调度器实体的创建时间,使用时间工具类获取当前时间
+ entity.setCtime(TimeTool.getTimeDate14());
+ // 设置调度器实体的创建用户名称
+ entity.setCusername(user.getName());
+ // 设置调度器实体的编辑用户 ID
+ entity.setEuser(user.getId());
+ // 设置调度器实体的编辑用户名称
+ entity.setEusername(user.getName());
+ // 设置调度器实体的编辑时间,使用时间工具类获取当前时间
+ entity.setEtime(TimeTool.getTimeDate14());
+ // 设置调度器实体的状态为 "1"
+ entity.setPstate("1");
+ // 将调度器实体插入到数据库中
+ entity = farmQzSchedulerDao.insertEntity(entity);
+ // 如果调度器实体的自动调度标识为 "1",则启动该任务
+ if (entity.getAutois().equals("1")) {
+ try {
+ startTask(entity.getId());
+ } catch (Exception e) {
+ // 如果启动任务时发生异常,抛出运行时异常
+ throw new RuntimeException(e);
+ }
+ }
+ // 将调度器实体再次插入到数据库中(这里可能存在重复插入的问题,可根据实际情况调整)
+ return farmQzSchedulerDao.insertEntity(entity);
+ }
+
+ // 重写编辑调度器实体的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public FarmQzScheduler editSchedulerEntity(FarmQzScheduler entity,
+ LoginUser user) {
+ // 根据调度器实体的 ID 从数据库中获取原调度器实体
+ FarmQzScheduler entity2 = farmQzSchedulerDao.getEntity(entity.getId());
+ // 设置原调度器实体的编辑用户 ID
+ entity2.setEuser(user.getId());
+ // 设置原调度器实体的编辑用户名称
+ entity2.setEusername(user.getName());
+ // 设置原调度器实体的编辑时间,使用时间工具类获取当前时间
+ entity2.setEtime(TimeTool.getTimeDate14());
+ // 设置原调度器实体的自动调度标识
+ entity2.setAutois(entity.getAutois());
+ // 设置原调度器实体的任务 ID
+ entity2.setTaskid(entity.getTaskid());
+ // 设置原调度器实体的触发器 ID
+ entity2.setTriggerid(entity.getTriggerid());
+ // 更新原调度器实体到数据库中
+ farmQzSchedulerDao.editEntity(entity2);
+ // 返回更新后的调度器实体
+ return entity2;
+ }
+
+ // 重写删除调度器实体的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public void deleteSchedulerEntity(String entity, LoginUser user) {
+ try {
+ // 停止指定的任务
+ stopTask(entity);
+ } catch (SchedulerException e) {
+ // 如果停止任务时发生异常,记录异常信息
+ log.error(e);
+ }
+ // 根据调度器 ID 从数据库中获取调度器实体并删除
+ farmQzSchedulerDao.deleteEntity(farmQzSchedulerDao.getEntity(entity));
+ }
+
+ // 重写根据 ID 获取调度器实体的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public FarmQzScheduler getSchedulerEntity(String id) {
+ // 如果 ID 为空,则返回 null
+ if (id == null) {
+ return null;
+ }
+ // 根据 ID 从数据库中获取调度器实体并返回
+ return farmQzSchedulerDao.getEntity(id);
+ }
+
+ // 重写创建调度器简单查询的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public DataQuery createSchedulerSimpleQuery(DataQuery query) {
+ // 初始化数据查询对象,指定查询的表和要查询的字段
+ DataQuery dbQuery = DataQuery
+ .init(query,
+ "FARM_QZ_SCHEDULER A LEFT JOIN FARM_QZ_TASK B ON A.TASKID=B.ID LEFT JOIN FARM_QZ_TRIGGER C ON A.TRIGGERID=C.ID",
+ "A.ID AS ID,A.AUTOIS AS AUTOIS,A.AUTOIS AS AUTOISTYPE,B.NAME AS TASKNAME,C.NAME AS CTRIGGERNAME");
+ // 返回初始化后的查询对象
+ return dbQuery;
+ }
+
+ // 重写插入任务实体的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public FarmQzTask insertTaskEntity(FarmQzTask entity, LoginUser user) {
+ // 设置任务实体的创建用户 ID
+ entity.setCuser(user.getId());
+ // 设置任务实体的创建时间,使用时间工具类获取当前时间
+ entity.setCtime(TimeTool.getTimeDate14());
+ // 设置任务实体的创建用户名称
+ entity.setCusername(user.getName());
+ // 设置任务实体的编辑用户 ID
+ entity.setEuser(user.getId());
+ // 设置任务实体的编辑用户名称
+ entity.setEusername(user.getName());
+ // 设置任务实体的编辑时间,使用时间工具类获取当前时间
+ entity.setEtime(TimeTool.getTimeDate14());
+ // 设置任务实体的状态为 "1"
+ entity.setPstate("1");
+ // 设置任务实体的作业键为 "NONE"
+ entity.setJobkey("NONE");
+ try {
+ // 遍历任务实体的作业类所实现的接口
+ for (@SuppressWarnings("rawtypes")
+ Class cla : Class.forName(entity.getJobclass().trim())
+ .getInterfaces()) {
+ // 如果作业类实现了 Job 接口,则将任务实体插入到数据库中并返回
+ if (cla.equals(Job.class)) {
+ return farmQzTaskDao.insertEntity(entity);
+ }
+ }
+ } catch (ClassNotFoundException e) {
+ // 如果在查找作业类时发生类未找到异常,抛出运行时异常
+ throw new RuntimeException("类转化异常");
+ }
+ // 如果作业类未实现 Job 接口,抛出运行时异常
+ throw new RuntimeException("类为实现Job接口");
+ }
+
+ // 重写编辑任务实体的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public FarmQzTask editTaskEntity(FarmQzTask entity, LoginUser user) {
+ // 根据任务实体的 ID 从数据库中获取原任务实体
+ FarmQzTask entity2 = farmQzTaskDao.getEntity(entity.getId());
+ // 设置原任务实体的编辑用户 ID
+ entity2.setEuser(user.getId());
+ // 设置原任务实体的编辑用户名称
+ entity2.setEusername(user.getName());
+ // 设置原任务实体的编辑时间,使用时间工具类获取当前时间
+ entity2.setEtime(TimeTool.getTimeDate14());
+ // 设置原任务实体的作业类
+ entity2.setJobclass(entity.getJobclass());
+ // 设置原任务实体的名称
+ entity2.setName(entity.getName());
+ // 设置原任务实体的作业键
+ entity2.setJobkey(entity.getJobkey());
+ // 设置原任务实体的作业参数
+ entity2.setJobparas(entity.getJobparas());
+ // 设置原任务实体的作业键为 "NONE"
+ entity2.setJobkey("NONE");
+ // 设置原任务实体的内容
+ entity2.setPcontent(entity.getPcontent());
+ try {
+ // 遍历原任务实体的作业类所实现的接口
+ for (@SuppressWarnings("rawtypes")
+ Class cla : Class.forName(entity2.getJobclass().trim())
+ .getInterfaces()) {
+ // 如果作业类实现了 Job 接口,则更新原任务实体到数据库中并返回
+ if (cla.equals(Job.class)) {
+ farmQzTaskDao.editEntity(entity2);
+ return entity2;
+ }
+ }
+ } catch (ClassNotFoundException e) {
+ // 如果在查找作业类时发生类未找到异常,抛出运行时异常
+ throw new RuntimeException("类转化异常");
+ }
+ // 如果作业类未实现 Job 接口,抛出运行时异常
+ throw new RuntimeException("类为实现Job接口");
+ }
+
+ // 重写删除任务实体的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public void deleteTaskEntity(String entity, LoginUser user) {
+ // 根据任务 ID 从数据库中获取任务实体并删除
+ farmQzTaskDao.deleteEntity(farmQzTaskDao.getEntity(entity));
+ }
+
+ // 重写根据 ID 获取任务实体的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public FarmQzTask getTaskEntity(String id) {
+ // 如果 ID 为空,则返回 null
+ if (id == null) {
+ return null;
+ }
+ // 根据 ID 从数据库中获取任务实体并返回
+ return farmQzTaskDao.getEntity(id);
+ }
+
+ // 重写创建任务简单查询的方法
+ @Override
+ public DataQuery createTaskSimpleQuery(DataQuery query) {
+ // 初始化数据查询对象,指定查询的表和要查询的字段
+ DataQuery dbQuery = DataQuery.init(query, "farm_qz_task",
+ "id,JOBCLASS,NAME,JOBKEY");
+ // 返回初始化后的查询对象
+ return dbQuery;
+ }
+
+ // 重写插入触发器实体的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public FarmQzTrigger insertTriggerEntity(FarmQzTrigger entity,
+ LoginUser user) {
+ // 设置触发器实体的创建用户 ID
+ entity.setCuser(user.getId());
+ // 设置触发器实体的创建时间,使用时间工具类获取当前时间
+ entity.setCtime(TimeTool.getTimeDate14());
+ // 设置触发器实体的创建用户名称
+ entity.setCusername(user.getName());
+ // 设置触发器实体的编辑用户 ID
+ entity.setEuser(user.getId());
+ // 设置触发器实体的编辑用户名称
+ entity.setEusername(user.getName());
+ // 设置触发器实体的编辑时间,使用时间工具类获取当前时间
+ entity.setEtime(TimeTool.getTimeDate14());
+ // 设置触发器实体的状态为 "1"
+ entity.setPstate("1");
+ // 将触发器实体插入到数据库中并返回
+ return farmQzTriggerDao.insertEntity(entity);
+ }
+
+ // 重写编辑触发器实体的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public FarmQzTrigger editTriggerEntity(FarmQzTrigger entity, LoginUser user) {
+ // 根据触发器实体的 ID 从数据库中获取原触发器实体
+ FarmQzTrigger entity2 = farmQzTriggerDao.getEntity(entity.getId());
+ // 设置原触发器实体的内容
+ entity2.setPcontent(entity.getPcontent());
+ // 设置原触发器实体的描述
+ entity2.setDescript(entity.getDescript());
+ // 设置原触发器实体的名称
+ entity2.setName(entity.getName());
+ // 更新原触发器实体到数据库中
+ farmQzTriggerDao.editEntity(entity2);
+ // 返回更新后的触发器实体
+ return entity2;
+ }
+
+ // 重写删除触发器实体的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public void deleteTriggerEntity(String entity, LoginUser user) {
+ // 根据触发器 ID 从数据库中获取触发器实体并删除
+ farmQzTriggerDao.deleteEntity(farmQzTriggerDao.getEntity(entity));
+ }
+
+ // 重写根据 ID 获取触发器实体的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public FarmQzTrigger getTriggerEntity(String id) {
+ // 如果 ID 为空,则返回 null
+ if (id == null) {
+ return null;
+ }
+ // 根据 ID 从数据库中获取触发器实体并返回
+ return farmQzTriggerDao.getEntity(id);
+ }
+
+ // 重写创建触发器简单查询的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public DataQuery createTriggerSimpleQuery(DataQuery query) {
+ // 初始化数据查询对象,指定查询的表和要查询的字段
+ DataQuery dbQuery = DataQuery.init(query, "farm_qz_trigger",
+ "id,PCONTENT,DESCRIPT,NAME");
+ // 返回初始化后的查询对象
+ return dbQuery;
+ }
+
+ // 重写根据调度器 ID 获取任务实体的方法,该方法在事务管理下执行
+ @Override
+ @Transactional
+ public FarmQzTask getTaskBySchedulerId(String schedulerId) {
+ // 根据调度器 ID 从数据库中获取调度器实体,再从调度器实体中获取任务 ID,最后根据任务 ID 获取任务实体并返回
+ return farmQzTaskDao.getEntity(farmQzSchedulerDao
+ .getEntity(schedulerId).getTaskid());
+ }
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/server/impl/QuartzImpl.java b/src/wcp-quartz/src/main/java/com/farm/quartz/server/impl/QuartzImpl.java
new file mode 100644
index 0000000..2af3c3c
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/server/impl/QuartzImpl.java
@@ -0,0 +1,75 @@
+// 声明该类所属的包
+package com.farm.quartz.server.impl;
+
+// 导入 Quartz 框架中用于构建 Job 的静态方法,方便创建 Job 实例
+import static org.quartz.JobBuilder.newJob;
+
+// 导入处理日期解析异常的类
+import java.text.ParseException;
+
+// 导入 Quartz 框架中用于存储作业数据的类
+import org.quartz.JobDataMap;
+// 导入 Quartz 框架中用于描述作业详细信息的类
+import org.quartz.JobDetail;
+// 导入 Quartz 框架中用于标识作业的类
+import org.quartz.JobKey;
+// 导入 Quartz 框架中用于触发作业执行的类
+import org.quartz.Trigger;
+// 导入 Quartz 框架中具体的 Cron 触发器实现类
+import org.quartz.impl.triggers.CronTriggerImpl;
+
+// 导入自定义的调度器实体类,代表数据库中的调度器记录
+import com.farm.quartz.domain.FarmQzScheduler;
+// 导入自定义的任务实体类,代表数据库中的任务记录
+import com.farm.quartz.domain.FarmQzTask;
+// 导入自定义的触发器实体类,代表数据库中的触发器记录
+import com.farm.quartz.domain.FarmQzTrigger;
+// 导入自定义的 Quartz 相关接口,该类需要实现此接口中的方法
+import com.farm.quartz.server.QuartzInter;
+
+// 定义 QuartzImpl 类,实现 QuartzInter 接口,用于处理与 Quartz 相关的具体操作
+public class QuartzImpl implements QuartzInter {
+
+ // 重写获取作业详细信息的方法,通过调用另一个重载方法来实现
+ @Override
+ public JobDetail getJobDetail(FarmQzScheduler node, FarmQzTask task)
+ throws ClassNotFoundException {
+ return getJobDetail(node.getId(), task);
+ }
+
+ // 重写获取触发器的方法,使用 @SuppressWarnings 注解抑制 "deprecation" 警告(可能是因为使用了过时的方法或类)
+ @SuppressWarnings("deprecation")
+ @Override
+ public Trigger getTrigger(FarmQzScheduler node, FarmQzTrigger trigger)
+ throws ParseException {
+ // 创建一个 Cron 触发器实例,设置触发器的名称(由调度器 ID 和触发器 ID 拼接而成)、所属组(这里为 null)和描述信息
+ Trigger qtrigger = new CronTriggerImpl(node.getId() + trigger.getId(),
+ null, trigger.getDescript().trim());
+ // 返回创建好的触发器实例
+ return qtrigger;
+ }
+
+ // 重写获取作业键的方法,根据调度器 ID 和任务 ID 拼接生成作业键
+ @Override
+ public JobKey getJobKey(FarmQzScheduler node, FarmQzTask task) {
+ return new JobKey(node.getId() + task.getId());
+ }
+
+ // 重写获取作业详细信息的方法,根据调度器 ID 和任务实体来创建作业详细信息
+ @SuppressWarnings("unchecked")
+ @Override
+ public JobDetail getJobDetail(String schedulerId, FarmQzTask task)
+ throws ClassNotFoundException {
+ // 根据任务实体中的作业类名,通过反射获取对应的 Class 对象
+ Class cla = Class.forName(task.getJobclass().trim());
+ // 创建一个作业数据映射对象,用于存储作业相关的数据
+ JobDataMap dataMap = new JobDataMap();
+ // 将任务实体中的作业参数放入作业数据映射中,键为 "PARA"
+ dataMap.put("PARA", task.getJobparas());
+ // 使用 JobBuilder 创建一个作业详细信息对象,设置作业的类、身份标识(由调度器 ID 和任务 ID 拼接而成)以及作业数据
+ JobDetail job = newJob(cla).withIdentity(schedulerId + task.getId())
+ .setJobData(dataMap).build();
+ // 返回创建好的作业详细信息对象
+ return job;
+ }
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/web/controller/ActionFarmQzSchedulerQuery.java b/src/wcp-quartz/src/main/java/com/farm/quartz/web/controller/ActionFarmQzSchedulerQuery.java
new file mode 100644
index 0000000..e5e2b76
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/web/controller/ActionFarmQzSchedulerQuery.java
@@ -0,0 +1,327 @@
+// 声明该类所在的包,用于组织和管理代码,包名为 com.farm.quartz.web.controller
+package com.farm.quartz.web.controller;
+
+// 导入自定义的 com.farm.quartz.domain 包中的 FarmQzScheduler 类,可能代表调度器相关实体
+import com.farm.quartz.domain.FarmQzScheduler;
+// 导入自定义的 com.farm.quartz.domain 包中的 FarmQzTask 类,可能代表任务相关实体
+import com.farm.quartz.domain.FarmQzTask;
+// 导入自定义的 com.farm.quartz.server 包中的 DemoJobExecutionContext 类,可能用于作业执行上下文
+import com.farm.quartz.server.DemoJobExecutionContext;
+// 导入自定义的 com.farm.quartz.server 包中的 FarmQzSchedulerManagerInter 接口,可能用于调度器管理
+import com.farm.quartz.server.FarmQzSchedulerManagerInter;
+// 导入自定义的 com.farm.quartz.server.impl 包中的 QuartzImpl 类,可能是 Quartz 相关操作的实现类
+import com.farm.quartz.server.impl.QuartzImpl;
+// 导入自定义的 com.farm.web 包中的 WebUtils 类,可能包含一些 Web 相关的工具方法
+import com.farm.web.WebUtils;
+// 导入自定义的 com.farm.web.easyui 包中的 EasyUiUtils 类,可能用于处理 EasyUI 相关的操作
+import com.farm.web.easyui.EasyUiUtils;
+
+// 导入 Java 标准库中的 HashMap 类,用于创建键值对集合
+import java.util.HashMap;
+// 导入 Java 标准库中的 Map 接口,用于表示键值对的集合
+import java.util.Map;
+
+// 导入 Spring 框架中的资源注入注解,用于自动装配依赖
+import javax.annotation.Resource;
+// 导入 Servlet 相关的 HttpServletRequest 类,用于处理 HTTP 请求
+import javax.servlet.http.HttpServletRequest;
+// 导入 Servlet 相关的 HttpSession 类,用于管理会话
+import javax.servlet.http.HttpSession;
+
+// 导入 Apache Log4j 中的 Logger 类,用于记录日志
+import org.apache.log4j.Logger;
+// 导入 Quartz 框架中的 Job 接口,定义作业的执行逻辑
+import org.quartz.Job;
+// 导入 Quartz 框架中的 JobDetail 类,用于定义作业的详细信息
+import org.quartz.JobDetail;
+// 导入 Quartz 框架中的 JobExecutionContext 接口,用于在作业执行时提供上下文信息
+import org.quartz.JobExecutionContext;
+// 导入 Quartz 框架中的 Scheduler 接口,用于管理调度器
+import org.quartz.Scheduler;
+// 导入 Quartz 框架中的 JobExecutionContextImpl 类,是 JobExecutionContext 的实现类
+import org.quartz.impl.JobExecutionContextImpl;
+
+// 导入 Spring 框架中的 Controller 注解,将该类标记为一个控制器
+import org.springframework.stereotype.Controller;
+// 导入 Spring 框架中的 RequestMapping 注解,用于映射 URL 到控制器的方法
+import org.springframework.web.bind.annotation.RequestMapping;
+// 导入 Spring 框架中的 ResponseBody 注解,将方法的返回值直接写入 HTTP 响应体
+import org.springframework.web.bind.annotation.ResponseBody;
+// 导入 Spring 框架中的 ModelAndView 类,用于封装模型数据和视图信息
+import org.springframework.web.servlet.ModelAndView;
+
+// 导入自定义的 com.farm.core.page 包中的 OperateType 枚举,可能用于表示操作类型
+import com.farm.core.page.OperateType;
+// 导入自定义的 com.farm.core.page 包中的 RequestMode 类,可能用于封装请求模式相关信息
+import com.farm.core.page.RequestMode;
+// 导入自定义的 com.farm.core.page 包中的 ViewMode 类,可能用于封装视图模式相关信息
+import com.farm.core.page.ViewMode;
+// 导入自定义的 com.farm.core.sql.query 包中的 DBSort 类,可能用于数据库排序相关操作
+import com.farm.core.sql.query.DBSort;
+// 导入自定义的 com.farm.core.sql.query 包中的 DataQuery 类,可能用于构建数据库查询
+import com.farm.core.sql.query.DataQuery;
+// 导入自定义的 com.farm.core.sql.result 包中的 DataResult 类,可能用于存储数据库查询结果
+import com.farm.core.sql.result.DataResult;
+
+/**
+ * 计划任务管理
+ *
+ * @author autoCode
+ *
+ */
+// 使用 RequestMapping 注解,为该控制器类的所有方法设置基础 URL 路径前缀为 "/qzScheduler"
+@RequestMapping("/qzScheduler")
+// 使用 Controller 注解,将该类标记为一个 Spring MVC 控制器
+@Controller
+// 定义一个名为 ActionFarmQzSchedulerQuery 的控制器类,继承自 WebUtils 类
+public class ActionFarmQzSchedulerQuery extends WebUtils {
+ // 定义一个静态的 Logger 对象,用于记录该类的日志信息,日志记录器的名称为当前类的全限定名
+ private static final Logger log = Logger.getLogger(ActionFarmQzSchedulerQuery.class);
+ // 使用 Resource 注解,自动装配 FarmQzSchedulerManagerInter 接口的实现类实例
+ @Resource
+ FarmQzSchedulerManagerInter farmQzSchedulerManagerImpl;
+
+ // 使用 RequestMapping 注解,将 "/query" 路径映射到该方法,用于处理查询请求
+ @RequestMapping("/query")
+ // 使用 ResponseBody 注解,将方法的返回值直接写入 HTTP 响应体
+ @ResponseBody
+ // 定义一个名为 queryall 的方法,用于查询所有调度器信息
+ public Map queryall(DataQuery query, HttpServletRequest request) {
+ // 调用 EasyUiUtils 的 formatGridQuery 方法,根据请求格式化查询参数
+ query = EasyUiUtils.formatGridQuery(request, query);
+ try {
+ // 调用 farmQzSchedulerManagerImpl 的 createSchedulerSimpleQuery 方法,创建一个简单的调度器查询
+ query = farmQzSchedulerManagerImpl.createSchedulerSimpleQuery(query);
+ // 执行查询,并将查询结果的 "AUTOIS" 字段的值进行字典转换,1 转换为 "自动",0 转换为 "手动"
+ DataResult result = query.search().runDictionary("1:自动,0:手动", "AUTOIS");
+ // 遍历查询结果列表
+ for (Map node : result.getResultList()) {
+ try {
+ // 调用 farmQzSchedulerManagerImpl 的 isRunningFindScheduler 方法,判断调度器是否正在运行,并将结果存入 "RUN" 字段
+ node.put("RUN", farmQzSchedulerManagerImpl.isRunningFindScheduler(node.get("ID").toString()));
+ // 将 "RUN" 字段的值存入 "RUNTYPE" 字段
+ node.put("RUNTYPE", node.get("RUN"));
+ } catch (Exception e) {
+ // 如果出现异常,记录错误日志
+ log.error(e);
+ }
+ }
+ // 将查询结果的 "RUN" 字段的值进行字典转换,true 转换为 "是",false 转换为 "否"
+ result.runDictionary("true:是,false:否", "RUN");
+ // 将格式化后的查询结果封装到 ViewMode 中,并返回包含结果的 Map 对象
+ return ViewMode.getInstance().putAttrs(EasyUiUtils.formatGridData(result)).returnObjMode();
+ } catch (Exception e) {
+ // 如果出现异常,记录错误日志
+ log.error(e.getMessage());
+ // 将错误信息封装到 ViewMode 中,并返回包含错误信息的 Map 对象
+ return ViewMode.getInstance().setError(e.getMessage()).returnObjMode();
+ }
+ }
+
+ // 使用 RequestMapping 注解,将 "/chooseTask" 路径映射到该方法,用于选择任务页面
+ @RequestMapping("/chooseTask")
+ // 定义一个名为 chooseTask 的方法,返回一个 ModelAndView 对象,用于跳转到选择任务的页面
+ public ModelAndView chooseTask(HttpSession session) {
+ return ViewMode.getInstance().returnModelAndView("quartz/pFarmQzTaskGrid");
+ }
+
+ // 使用 RequestMapping 注解,将 "/chooseTrigger" 路径映射到该方法,用于选择触发器页面
+ @RequestMapping("/chooseTrigger")
+ // 定义一个名为 chooseTrigger 的方法,返回一个 ModelAndView 对象,用于跳转到选择触发器的页面
+ public ModelAndView chooseTrigger(HttpSession session) {
+ return ViewMode.getInstance().returnModelAndView("quartz/pFarmQzTriggerGrid");
+ }
+
+ // 使用 RequestMapping 注解,将 "/list" 路径映射到该方法,用于显示调度器列表页面
+ @RequestMapping("/list")
+ // 定义一个名为 list 的方法,返回一个 ModelAndView 对象,用于跳转到调度器列表页面
+ public ModelAndView list(HttpSession session) {
+ return ViewMode.getInstance().returnModelAndView("quartz/pFarmQzSchedulerLayout");
+ }
+
+ /**
+ * start
+ *
+ * @return
+ */
+ // 使用 RequestMapping 注解,将 "/start" 路径映射到该方法,用于启动调度器任务
+ @RequestMapping("/start")
+ // 使用 ResponseBody 注解,将方法的返回值直接写入 HTTP 响应体
+ @ResponseBody
+ // 定义一个名为 start 的方法,用于启动指定 ID 的调度器任务
+ public Map start(String ids, HttpSession session) {
+ try {
+ // 解析传入的 ID 字符串,得到 ID 数组
+ for (String id : parseIds(ids)) {
+ // 调用 farmQzSchedulerManagerImpl 的 startTask 方法,启动指定 ID 的任务
+ farmQzSchedulerManagerImpl.startTask(id);
+ }
+ // 将成功信息封装到 ViewMode 中,并返回包含成功信息的 Map 对象
+ return ViewMode.getInstance().returnObjMode();
+ } catch (Exception e) {
+ // 如果出现异常,记录错误日志
+ log.error(e.getMessage());
+ // 将错误信息封装到 ViewMode 中,并返回包含错误信息的 Map 对象
+ return ViewMode.getInstance().setError(e.getMessage()).returnObjMode();
+ }
+ }
+
+ /**
+ * stop
+ *
+ * @return
+ */
+ // 使用 RequestMapping 注解,将 "/stop" 路径映射到该方法,用于停止调度器任务
+ @RequestMapping("/stop")
+ // 使用 ResponseBody 注解,将方法的返回值直接写入 HTTP 响应体
+ @ResponseBody
+ // 定义一个名为 stop 的方法,用于停止指定 ID 的调度器任务
+ public Map stop(String ids, HttpSession session) {
+ try {
+ // 解析传入的 ID 字符串,得到 ID 数组
+ for (String id : parseIds(ids)) {
+ // 调用 farmQzSchedulerManagerImpl 的 stopTask 方法,停止指定 ID 的任务
+ farmQzSchedulerManagerImpl.stopTask(id);
+ }
+ // 将成功信息封装到 ViewMode 中,并返回包含成功信息的 Map 对象
+ return ViewMode.getInstance().returnObjMode();
+ } catch (Exception e) {
+ // 如果出现异常,记录错误日志
+ log.error(e.getMessage());
+ // 将错误信息封装到 ViewMode 中,并返回包含错误信息的 Map 对象
+ return ViewMode.getInstance().setError(e.getMessage()).returnObjMode();
+ }
+ }
+
+ /**
+ * runOnec
+ *
+ * @return
+ */
+ // 使用 RequestMapping 注解,将 "/runOnec" 路径映射到该方法,用于一次性运行调度器任务
+ @RequestMapping("/runOnec")
+ // 使用 ResponseBody 注解,将方法的返回值直接写入 HTTP 响应体
+ @ResponseBody
+ // 定义一个名为 runOnec 的方法,用于一次性运行指定 ID 的调度器任务
+ public Map runOnec(String ids, HttpSession session) {
+ try {
+ // 记录成功运行的任务数量
+ int successNum = 0;
+ // 解析传入的 ID 字符串,得到 ID 数组
+ for (String id : parseIds(ids)) {
+ try {
+ // 调用 farmQzSchedulerManagerImpl 的 getTaskBySchedulerId 方法,获取指定调度器 ID 对应的任务
+ FarmQzTask task = farmQzSchedulerManagerImpl.getTaskBySchedulerId(id);
+ // 调用 QuartzImpl 的 getJobDetail 方法,获取任务对应的 JobDetail 对象
+ JobDetail jobDet = new QuartzImpl().getJobDetail("none", task);
+ // 通过反射创建任务对应的 Job 实例
+ Job job = (Job) Class.forName(jobDet.getJobClass().getName()).newInstance();
+ // 创建一个自定义的作业执行上下文对象
+ JobExecutionContext jobContext = new DemoJobExecutionContext(jobDet.getJobDataMap());
+ // 执行作业
+ job.execute(jobContext);
+ // 成功运行的任务数量加 1
+ successNum++;
+ } catch (Exception e) {
+ // 如果出现异常,记录错误日志
+ log.error(e.toString());
+ }
+ }
+ // 将执行结果信息封装到 ViewMode 中,并返回包含结果信息的 Map 对象
+ return ViewMode.getInstance().putAttr("INFO", parseIds(ids).size() + "条任务被执行,其中" + successNum + "条成功").returnObjMode();
+ } catch (Exception e) {
+ // 如果出现异常,记录错误日志
+ log.error(e.getMessage());
+ // 将错误信息封装到 ViewMode 中,并返回包含错误信息的 Map 对象
+ return ViewMode.getInstance().setError(e.getMessage()).returnObjMode();
+ }
+ }
+
+ /**
+ * 提交新增数据
+ *
+ * @return
+ */
+ // 使用 RequestMapping 注解,将 "/addSubmit" 路径映射到该方法,用于提交新增调度器数据
+ @RequestMapping("/addSubmit")
+ // 使用 ResponseBody 注解,将方法的返回值直接写入 HTTP 响应体
+ @ResponseBody
+ // 定义一个名为 addSubmit 的方法,用于提交新增的调度器实体数据
+ public Map addSubmit(FarmQzScheduler entity, HttpSession session) {
+ try {
+ // 调用 farmQzSchedulerManagerImpl 的 insertSchedulerEntity 方法,插入新的调度器实体
+ entity = farmQzSchedulerManagerImpl.insertSchedulerEntity(entity, getCurrentUser(session));
+ // 将插入后的实体封装到 ViewMode 中,并返回包含实体信息的 Map 对象
+ return ViewMode.getInstance().putAttr("entity", entity).returnObjMode();
+ } catch (Exception e) {
+ // 如果出现异常,记录错误日志
+ log.error(e.getMessage());
+ // 将错误信息封装到 ViewMode 中,并返回包含错误信息的 Map 对象
+ return ViewMode.getInstance().setError(e.getMessage()).returnObjMode();
+ }
+ }
+
+ /**
+ * 提交修改数据
+ *
+ * @return
+ */
+ // 使用 RequestMapping 注解,将 "/editSubmit" 路径映射到该方法,用于提交修改调度器数据
+ @RequestMapping("/editSubmit")
+ // 使用 ResponseBody 注解,将方法的返回值直接写入 HTTP 响应体
+ @ResponseBody
+ // 定义一个名为 editSubmit 的方法,用于提交修改后的调度器实体数据
+ public Map editSubmit(FarmQzScheduler entity, HttpSession session) {
+ try {
+ // 调用 farmQzSchedulerManagerImpl 的 editSchedulerEntity 方法,修改调度器实体
+ entity = farmQzSchedulerManagerImpl.editSchedulerEntity(entity, getCurrentUser(session));
+ // 将操作类型设置为添加(可能是为了统一视图处理逻辑),并将修改后的实体封装到 ViewMode 中,返回包含实体信息的 Map 对象
+ return ViewMode.getInstance().setOperate(OperateType.ADD).putAttr("entity", entity).returnObjMode();
+ } catch (Exception e) {
+ // 打印异常堆栈信息
+ e.printStackTrace();
+ // 记录错误日志
+ log.error(e.getMessage());
+ // 将操作类型设置为添加,并将错误信息封装到 ViewMode 中,返回包含错误信息的 Map 对象
+ return ViewMode.getInstance().setOperate(OperateType.ADD).setError(e.getMessage()).returnObjMode();
+ }
+ }
+
+ /**
+ * 删除数据
+ *
+ * @return
+ */
+ // 使用 RequestMapping 注解,将 "/del" 路径映射到该方法,用于删除调度器数据
+ @RequestMapping("/del")
+ // 使用 ResponseBody 注解,将方法的返回值直接写入 HTTP 响应体
+ @ResponseBody
+ // 定义一个名为 delSubmit 的方法,用于删除指定 ID 的调度器实体
+ public Map delSubmit(String ids, HttpSession session) {
+ try {
+ // 解析传入的 ID 字符串,得到 ID 数组
+ for (String id : parseIds(ids)) {
+ // 调用 farmQzSchedulerManagerImpl 的 deleteSchedulerEntity 方法,删除指定 ID 的调度器实体
+ farmQzSchedulerManagerImpl.deleteSchedulerEntity(id, getCurrentUser(session));
+ }
+ // 将成功信息封装到 ViewMode 中,并返回包含成功信息的 Map 对象
+ return ViewMode.getInstance().returnObjMode();
+ } catch (Exception e) {
+ // 如果出现异常,记录错误日志
+ log.error(e.getMessage());
+ // 将错误信息封装到 ViewMode 中,并返回包含错误信息的 Map 对象
+ return ViewMode.getInstance().setError(e.getMessage()).returnObjMode();
+ }
+ }
+
+ /**
+ * 显示详细信息(修改或浏览时)
+ *
+ * @return
+ */
+ // 使用 RequestMapping 注解,将 "/form" 路径映射到该方法,用于显示调度器的详细信息页面(新增、修改、浏览)
+ @RequestMapping("/form")
+ // 定义一个名为 view 的方法,返回一个 ModelAndView 对象,用于显示调度器的详细信息页面
+ public ModelAndView view(RequestMode pageset, String ids) {
+ try {
+ // 根据请求模式的操作类型进行
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/web/controller/ActionFarmQzTaskQuery.java b/src/wcp-quartz/src/main/java/com/farm/quartz/web/controller/ActionFarmQzTaskQuery.java
new file mode 100644
index 0000000..b31eee4
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/web/controller/ActionFarmQzTaskQuery.java
@@ -0,0 +1,217 @@
+// 声明该类所在的包,这里是 com.farm.quartz.web.controller,用于组织相关的 Web 控制器类
+package com.farm.quartz.web.controller;
+
+// 导入自定义的 FarmQzTask 类,该类可能代表定时任务的实体,包含任务的相关属性
+import com.farm.quartz.domain.FarmQzTask;
+// 导入自定义的 FarmQzSchedulerManagerInter 接口,该接口可能定义了与调度器和任务管理相关的方法
+import com.farm.quartz.server.FarmQzSchedulerManagerInter;
+// 导入 EasyUiUtils 类,这个类可能包含了一些用于处理 EasyUI 相关操作的工具方法,比如格式化数据等
+import com.farm.web.easyui.EasyUiUtils;
+
+// 导入 Java 的 Map 接口,用于存储键值对数据,这里主要用于返回处理结果
+import java.util.Map;
+
+// 导入 Spring 的 Resource 注解,用于自动装配依赖的 Bean
+import javax.annotation.Resource;
+// 导入 Servlet 的 HttpServletRequest 类,用于获取 HTTP 请求的相关信息
+import javax.servlet.http.HttpServletRequest;
+// 导入 Servlet 的 HttpSession 类,用于管理用户会话信息
+import javax.servlet.http.HttpSession;
+
+// 导入 Apache Log4j 的 Logger 类,用于记录日志信息,方便调试和监控
+import org.apache.log4j.Logger;
+// 导入 Spring 的 Controller 注解,将该类标记为一个 Spring MVC 控制器
+import org.springframework.stereotype.Controller;
+// 导入 Spring 的 RequestMapping 注解,用于映射请求的 URL 到相应的处理方法
+import org.springframework.web.bind.annotation.RequestMapping;
+// 导入 Spring 的 ResponseBody 注解,将方法的返回值直接作为 HTTP 响应的内容返回
+import org.springframework.web.bind.annotation.ResponseBody;
+// 导入 Spring 的 ModelAndView 类,用于封装模型数据和视图信息,返回给客户端
+import org.springframework.web.servlet.ModelAndView;
+
+// 导入自定义的 OperateType 枚举,用于表示操作类型,如新增、修改、删除等
+import com.farm.core.page.OperateType;
+// 导入自定义的 RequestMode 类,用于封装请求的模式信息,如操作类型等
+import com.farm.core.page.RequestMode;
+// 导入自定义的 ViewMode 类,用于封装视图的模式信息,方便构建返回的视图数据
+import com.farm.core.page.ViewMode;
+// 导入自定义的 DBSort 类,用于数据库查询的排序操作
+import com.farm.core.sql.query.DBSort;
+// 导入自定义的 DataQuery 类,用于构建和执行数据库查询
+import com.farm.core.sql.query.DataQuery;
+// 导入自定义的 DataResult 类,用于存储数据库查询的结果
+import com.farm.core.sql.result.DataResult;
+// 导入自定义的 WebUtils 类,可能包含一些通用的 Web 操作工具方法
+import com.farm.web.WebUtils;
+
+/**
+ * 任务定义
+ *
+ * @author autoCode
+ *
+ */
+// 使用 RequestMapping 注解,为该控制器的所有处理方法设置基础的 URL 前缀为 "/qzTask"
+@RequestMapping("/qzTask")
+// 使用 Controller 注解,将该类标记为 Spring MVC 控制器
+@Controller
+// 定义 ActionFarmQzTaskQuery 类,继承自 WebUtils 类,具备 Web 操作的通用能力
+public class ActionFarmQzTaskQuery extends WebUtils {
+ // 创建一个静态的 Logger 对象,用于记录该类的日志信息,日志记录器的名称为该类的全限定名
+ private static final Logger log = Logger.getLogger(ActionFarmQzTaskQuery.class);
+ // 使用 Resource 注解,自动装配 FarmQzSchedulerManagerInter 接口的实现类实例
+ @Resource
+ FarmQzSchedulerManagerInter farmQzSchedulerManagerImpl;
+
+ /**
+ * 查询结果集合
+ *
+ * @return
+ */
+ // 使用 RequestMapping 注解,将 "/query" 路径的请求映射到该方法
+ @RequestMapping("/query")
+ // 使用 ResponseBody 注解,将方法的返回值直接作为 HTTP 响应内容返回
+ @ResponseBody
+ // 定义 queryall 方法,用于处理任务查询请求,接收 DataQuery 对象和 HttpServletRequest 对象作为参数
+ public Map queryall(DataQuery query, HttpServletRequest request) {
+ // 调用 EasyUiUtils 的 formatGridQuery 方法,根据请求信息格式化查询对象
+ query = EasyUiUtils.formatGridQuery(request, query);
+ try {
+ // 调用 farmQzSchedulerManagerImpl 的 createTaskSimpleQuery 方法创建简单的任务查询对象,并按照 "CTIME" 字段降序排序
+ query = farmQzSchedulerManagerImpl.createTaskSimpleQuery(query).addSort(new DBSort("CTIME", "desc"));
+ // 执行查询操作,将查询结果存储在 DataResult 对象中
+ DataResult result = query.search();
+ // 使用 ViewMode 封装查询结果,将格式化后的结果数据添加到视图模式中,并返回包含结果的 Map 对象
+ return ViewMode.getInstance().putAttrs(EasyUiUtils.formatGridData(result)).returnObjMode();
+ } catch (Exception e) {
+ // 若查询过程中出现异常,记录异常信息到日志
+ log.error(e.getMessage());
+ // 使用 ViewMode 封装错误信息,返回包含错误信息的 Map 对象
+ return ViewMode.getInstance().setError(e.getMessage()).returnObjMode();
+ }
+ }
+
+ /**
+ * 提交修改数据
+ *
+ * @return
+ */
+ // 使用 RequestMapping 注解,将 "/edit" 路径的请求映射到该方法
+ @RequestMapping("/edit")
+ // 使用 ResponseBody 注解,将方法的返回值直接作为 HTTP 响应内容返回
+ @ResponseBody
+ // 定义 editSubmit 方法,用于处理任务修改提交请求,接收 FarmQzTask 对象和 HttpSession 对象作为参数
+ public Map editSubmit(FarmQzTask entity, HttpSession session) {
+ try {
+ // 调用 farmQzSchedulerManagerImpl 的 editTaskEntity 方法,根据当前用户信息修改任务实体
+ entity = farmQzSchedulerManagerImpl.editTaskEntity(entity, getCurrentUser(session));
+ // 使用 ViewMode 封装操作类型为新增(这里可能是为了统一视图处理逻辑),并将修改后的任务实体添加到视图模式中,返回包含实体的 Map 对象
+ return ViewMode.getInstance().setOperate(OperateType.ADD).putAttr("entity", entity).returnObjMode();
+ } catch (Exception e) {
+ // 若修改过程中出现异常,打印异常堆栈信息
+ e.printStackTrace();
+ // 记录异常信息到日志
+ log.error(e.getMessage());
+ // 使用 ViewMode 封装操作类型为新增和错误信息,返回包含错误信息的 Map 对象
+ return ViewMode.getInstance().setOperate(OperateType.ADD).setError(e.getMessage()).returnObjMode();
+ }
+ }
+
+ /**
+ * 提交新增数据
+ *
+ * @return
+ */
+ // 使用 RequestMapping 注解,将 "/add" 路径的请求映射到该方法
+ @RequestMapping("/add")
+ // 使用 ResponseBody 注解,将方法的返回值直接作为 HTTP 响应内容返回
+ @ResponseBody
+ // 定义 addSubmit 方法,用于处理任务新增提交请求,接收 FarmQzTask 对象和 HttpSession 对象作为参数
+ public Map addSubmit(FarmQzTask entity, HttpSession session) {
+ try {
+ // 调用 farmQzSchedulerManagerImpl 的 insertTaskEntity 方法,根据当前用户信息插入新的任务实体
+ entity = farmQzSchedulerManagerImpl.insertTaskEntity(entity, getCurrentUser(session));
+ // 使用 ViewMode 封装新增的任务实体,返回包含实体的 Map 对象
+ return ViewMode.getInstance().putAttr("entity", entity).returnObjMode();
+ } catch (Exception e) {
+ // 若新增过程中出现异常,记录异常信息到日志
+ log.error(e.getMessage());
+ // 使用 ViewMode 封装错误信息,返回包含错误信息的 Map 对象
+ return ViewMode.getInstance().setError(e.getMessage()).returnObjMode();
+ }
+ }
+
+ /**
+ * 删除数据
+ *
+ * @return
+ */
+ // 使用 RequestMapping 注解,将 "/del" 路径的请求映射到该方法
+ @RequestMapping("/del")
+ // 使用 ResponseBody 注解,将方法的返回值直接作为 HTTP 响应内容返回
+ @ResponseBody
+ // 定义 delSubmit 方法,用于处理任务删除请求,接收任务 ID 字符串和 HttpSession 对象作为参数
+ public Map delSubmit(String ids, HttpSession session) {
+ try {
+ // 解析传入的任务 ID 字符串,将其分割为多个 ID
+ for (String id : parseIds(ids)) {
+ // 调用 farmQzSchedulerManagerImpl 的 deleteTaskEntity 方法,根据当前用户信息删除指定 ID 的任务实体
+ farmQzSchedulerManagerImpl.deleteTaskEntity(id, getCurrentUser(session));
+ }
+ // 使用 ViewMode 返回操作成功的 Map 对象
+ return ViewMode.getInstance().returnObjMode();
+ } catch (Exception e) {
+ // 若删除过程中出现异常,记录异常信息到日志
+ log.error(e.getMessage());
+ // 使用 ViewMode 封装错误信息,返回包含错误信息的 Map 对象
+ return ViewMode.getInstance().setError(e.getMessage()).returnObjMode();
+ }
+ }
+
+ /**
+ * 跳转
+ *
+ * @return
+ */
+ // 使用 RequestMapping 注解,将 "/list" 路径的请求映射到该方法
+ @RequestMapping("/list")
+ // 定义 index 方法,用于处理页面跳转请求,接收 HttpSession 对象作为参数
+ public ModelAndView index(HttpSession session) {
+ // 使用 ViewMode 返回指定视图名称的 ModelAndView 对象,跳转到任务列表页面
+ return ViewMode.getInstance().returnModelAndView("quartz/pFarmQzTaskLayout");
+ }
+
+ /**
+ * 显示详细信息(修改或浏览时)
+ *
+ * @return
+ */
+ // 使用 RequestMapping 注解,将 "/form" 路径的请求映射到该方法
+ @RequestMapping("/form")
+ // 定义 view 方法,用于处理任务详细信息显示请求,接收 RequestMode 对象和任务 ID 字符串作为参数
+ public ModelAndView view(RequestMode pageset, String ids) {
+ try {
+ // 根据请求模式的操作类型进行不同处理
+ switch (pageset.getOperateType()) {
+ case (1): { // 新增操作
+ // 使用 ViewMode 封装请求模式信息,返回指定视图名称的 ModelAndView 对象,跳转到任务新增页面
+ return ViewMode.getInstance().putAttr("pageset", pageset).returnModelAndView("quartz/pFarmQzTaskEntity");
+ }
+ case (0): { // 展示操作
+ // 使用 ViewMode 封装请求模式信息和任务实体信息,返回指定视图名称的 ModelAndView 对象,跳转到任务展示页面
+ return ViewMode.getInstance().putAttr("pageset", pageset).putAttr("entity", farmQzSchedulerManagerImpl.getTaskEntity(ids)).returnModelAndView("quartz/pFarmQzTaskEntity");
+ }
+ case (2): { // 修改操作
+ // 使用 ViewMode 封装请求模式信息和任务实体信息,返回指定视图名称的 ModelAndView 对象,跳转到任务修改页面
+ return ViewMode.getInstance().putAttr("pageset", pageset).putAttr("entity", farmQzSchedulerManagerImpl.getTaskEntity(ids)).returnModelAndView("quartz/pFarmQzTaskEntity");
+ }
+ default:
+ break;
+ }
+ } catch (Exception e) {
+ // 若处理过程中出现异常,使用 ViewMode 封装错误信息,返回指定视图名称的 ModelAndView 对象,跳转到错误页面
+ return ViewMode.getInstance().setError(e + e.getMessage()).returnModelAndView("quartz/pFarmQzTaskEntity");
+ }
+ // 默认返回指定视图名称的 ModelAndView 对象,跳转到任务详细信息页面
+ return ViewMode.getInstance().returnModelAndView("quartz/pFarmQzTaskEntity");
+ }
+}
\ No newline at end of file
diff --git a/src/wcp-quartz/src/main/java/com/farm/quartz/web/controller/ActionFarmQzTriggerQuery.java b/src/wcp-quartz/src/main/java/com/farm/quartz/web/controller/ActionFarmQzTriggerQuery.java
new file mode 100644
index 0000000..b8411cc
--- /dev/null
+++ b/src/wcp-quartz/src/main/java/com/farm/quartz/web/controller/ActionFarmQzTriggerQuery.java
@@ -0,0 +1,286 @@
+package com.farm.quartz.web.controller;
+
+import com.farm.quartz.domain.FarmQzTrigger;
+import com.farm.quartz.server.FarmQzSchedulerManagerInter;
+import com.farm.web.easyui.EasyUiUtils;
+
+import java.util.Map;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.servlet.ModelAndView;
+
+import com.farm.core.page.OperateType;
+import com.farm.core.page.RequestMode;
+import com.farm.core.page.ViewMode;
+import com.farm.core.sql.query.DataQuery;
+import com.farm.core.sql.result.DataResult;
+import com.farm.web.WebUtils;
+
+/**
+ * 触发器定义
+ *
+ * @author autoCode
+ *
+ */
+@RequestMapping("/qzTrigger")
+@Controller
+public class ActionFarmQzTriggerQuery extends WebUtils {
+ private static final Logger log = Logger
+ .getLogger(ActionFarmQzTriggerQuery.class);
+ @Resource
+ FarmQzSchedulerManagerInter farmQzSchedulerManagerImpl;
+
+ // /**
+ // * 查询结果集合
+ // *
+ // * @return
+ // */
+ // public String queryall() {
+ // try {
+ // query = EasyUiUtils.formatGridQuery(getRequest(), query);
+ // DataResult result = aloneIMP.createTriggerSimpleQuery(query)
+ // .search();
+ // jsonResult = EasyUiUtils.formatGridData(result);
+ // } catch (Exception e) {
+ // throw new RuntimeException(e);
+ // }
+ // return SUCCESS;
+ // }
+
+ /**
+ * 查询结果集合
+ *
+ * @return
+ */
+ @RequestMapping("/query")
+ @ResponseBody
+ public Map queryall(DataQuery query,
+ HttpServletRequest request) {
+ query = EasyUiUtils.formatGridQuery(request, query);
+ try {
+ query = farmQzSchedulerManagerImpl.createTriggerSimpleQuery(query);
+ DataResult result = query.search();
+ return ViewMode.getInstance()
+ .putAttrs(EasyUiUtils.formatGridData(result))
+ .returnObjMode();
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ return ViewMode.getInstance().setError(e.getMessage())
+ .returnObjMode();
+ }
+ }
+
+ // /**
+ // * 提交修改数据
+ // *
+ // * @return
+ // */
+ // public String editSubmit() {
+ // try {
+ // entity = aloneIMP.editTriggerEntity(entity, getCurrentUser());
+ // pageset = new PageSet(PageType.UPDATE, CommitType.TRUE);
+ // } catch (Exception e) {
+ // pageset = PageSet.initPageSet(pageset, PageType.UPDATE,
+ // CommitType.FALSE, e);
+ // }
+ // return SUCCESS;
+ // }
+
+ /**
+ * 提交修改数据
+ *
+ * @return
+ */
+ @RequestMapping("/edit")
+ @ResponseBody
+ public Map editSubmit(FarmQzTrigger entity,
+ HttpSession session) {
+ try {
+ entity = farmQzSchedulerManagerImpl.editTriggerEntity(entity,
+ getCurrentUser(session));
+ return ViewMode.getInstance().setOperate(OperateType.ADD)
+ .putAttr("entity", entity).returnObjMode();
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.error(e.getMessage());
+ return ViewMode.getInstance().setOperate(OperateType.ADD)
+ .setError(e.getMessage()).returnObjMode();
+ }
+ }
+
+ // /**
+ // * 提交新增数据
+ // *
+ // * @return
+ // */
+ // public String addSubmit() {
+ // try {
+ // entity = aloneIMP.insertTriggerEntity(entity, getCurrentUser());
+ // pageset = new PageSet(PageType.ADD, CommitType.TRUE);
+ // } catch (Exception e) {
+ // pageset = PageSet.initPageSet(pageset, PageType.ADD,
+ // CommitType.FALSE, e);
+ // }
+ // return SUCCESS;
+ // }
+
+ /**
+ * 提交新增数据
+ *
+ * @return
+ */
+ @RequestMapping("/add")
+ @ResponseBody
+ public Map addSubmit(FarmQzTrigger entity,
+ HttpSession session) {
+ try {
+ entity = farmQzSchedulerManagerImpl.insertTriggerEntity(entity,
+ getCurrentUser(session));
+ return ViewMode.getInstance().putAttr("entity", entity)
+ .returnObjMode();
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ return ViewMode.getInstance().setError(e.getMessage())
+ .returnObjMode();
+ }
+ }
+
+ /**
+ * 删除数据
+ *
+ * @return
+ */
+ @RequestMapping("/del")
+ @ResponseBody
+ public Map delSubmit(String ids, HttpSession session) {
+ try {
+ for (String id : parseIds(ids)) {
+ farmQzSchedulerManagerImpl.deleteTriggerEntity(id,
+ getCurrentUser(session));
+ }
+ return ViewMode.getInstance().returnObjMode();
+ } catch (Exception e) {
+ log.error(e.getMessage());
+ return ViewMode.getInstance().setError(e.getMessage())
+ .returnObjMode();
+ }
+ }
+
+ // /**
+ // * 删除数据
+ // *
+ // * @return
+ // */
+ // public String delSubmit() {
+ // try {
+ // for (String id : parseIds(ids)) {
+ // aloneIMP.deleteTriggerEntity(id, getCurrentUser());
+ // }
+ // pageset = new PageSet(PageType.ADD, CommitType.TRUE);
+ // } catch (Exception e) {
+ // pageset = PageSet.initPageSet(pageset, PageType.DEL,
+ // CommitType.FALSE, e);
+ // }
+ // return SUCCESS;
+ // }
+
+ // /**
+ // * 跳转
+ // *
+ // * @return
+ // */
+ // public String forSend() {
+ // return SUCCESS;
+ // }
+ /**
+ * 跳转
+ *
+ * @return
+ */
+ @RequestMapping("/list")
+ public ModelAndView index(HttpSession session) {
+ return ViewMode.getInstance().returnModelAndView(
+ "quartz/pFarmQzTriggerLayout");
+ }
+
+ /**
+ * 显示详细信息(修改或浏览时)
+ *
+ * @return
+ */
+ @RequestMapping("/form")
+ public ModelAndView view(RequestMode pageset, String ids) {
+ try {
+ switch (pageset.getOperateType()) {
+ case (1): {// 新增
+ return ViewMode.getInstance().putAttr("pageset", pageset)
+ .returnModelAndView("quartz/pFarmQzTriggerEntity");
+ }
+ case (0): {// 展示
+ return ViewMode
+ .getInstance()
+ .putAttr("pageset", pageset)
+ .putAttr(
+ "entity",
+ farmQzSchedulerManagerImpl
+ .getTriggerEntity(ids))
+ .returnModelAndView("quartz/pFarmQzTriggerEntity");
+ }
+ case (2): {// 修改
+ return ViewMode
+ .getInstance()
+ .putAttr("pageset", pageset)
+ .putAttr(
+ "entity",
+ farmQzSchedulerManagerImpl
+ .getTriggerEntity(ids))
+ .returnModelAndView("quartz/pFarmQzTriggerEntity");
+ }
+ default:
+ break;
+ }
+ } catch (Exception e) {
+ return ViewMode.getInstance().setError(e + e.getMessage())
+ .returnModelAndView("parameter/pFarmQzTriggerEntity");
+ }
+ return ViewMode.getInstance().returnModelAndView(
+ "parameter/pFarmQzTriggerEntity");
+ }
+
+ // /**
+ // * 显示详细信息(修改或浏览时)
+ // *
+ // * @return
+ // */
+ // public String view() {
+ // try {
+ // switch (pageset.getPageType()) {
+ // case (1): {// 新增
+ // return SUCCESS;
+ // }
+ // case (0): {// 展示
+ // entity = aloneIMP.getTriggerEntity(ids);
+ // return SUCCESS;
+ // }
+ // case (2): {// 修改
+ // entity = aloneIMP.getTriggerEntity(ids);
+ // return SUCCESS;
+ // }
+ // default:
+ // break;
+ // }
+ // } catch (Exception e) {
+ // pageset = PageSet.initPageSet(pageset, PageType.OTHER,
+ // CommitType.FALSE, e);
+ // }
+ // return SUCCESS;
+ // }
+
+}
diff --git a/src/wcp-quartz/src/main/resources/quartz.properties b/src/wcp-quartz/src/main/resources/quartz.properties
new file mode 100644
index 0000000..461553f
--- /dev/null
+++ b/src/wcp-quartz/src/main/resources/quartz.properties
@@ -0,0 +1,3 @@
+org.quartz.scheduler.instanceName = MyScheduler
+org.quartz.threadPool.threadCount = 3
+org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
\ No newline at end of file
diff --git a/src/wcp-tag/pom.xml b/src/wcp-tag/pom.xml
new file mode 100644
index 0000000..1a23848
--- /dev/null
+++ b/src/wcp-tag/pom.xml
@@ -0,0 +1,92 @@
+
+
+
+ 4.0.0
+
+
+ com.farm
+
+
+ wcp-tag
+
+
+ ${wcp.version}
+
+
+ jsp标签库
+
+
+
+
+ 3.2.0
+
+
+
+ UTF-8
+
+
+ UTF-8
+
+
+
+ UTF-8
+
+
+
+
+
+
+ com.farm
+ farm-core
+ ${wcp.version}
+
+
+
+
+ com.farm
+ wcp-authority
+ ${wcp.version}
+
+
+
+
+ com.farm
+ wcp-parameter
+ ${wcp.version}
+
+
+
+
+ com.farm
+ wcp-doc
+ ${wcp.version}
+
+
+
+
+ com.farm
+ wda-api
+ 1.2.2
+
+
+
+
+
+
+
+
+
+ maven-compiler-plugin
+
+
+
+ 1.8
+
+ 1.8
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/wcp-tag/src/main/java/com/farm/doc/tag/AuditIsShowForUser.java b/src/wcp-tag/src/main/java/com/farm/doc/tag/AuditIsShowForUser.java
new file mode 100644
index 0000000..dac7618
--- /dev/null
+++ b/src/wcp-tag/src/main/java/com/farm/doc/tag/AuditIsShowForUser.java
@@ -0,0 +1,76 @@
+// 声明该类所在的包为 com.farm.doc.tag,用于组织相关的标签类
+package com.farm.doc.tag;
+
+// 导入 Servlet 相关的 HttpServletRequest 类,用于获取 HTTP 请求的相关信息
+import javax.servlet.http.HttpServletRequest;
+// 导入 JSP 相关的 JspException 类,用于处理 JSP 标签操作中可能抛出的异常
+import javax.servlet.jsp.JspException;
+// 导入 JSP 相关的 TagSupport 类,这是一个基础类,用于创建自定义标签
+import javax.servlet.jsp.tagext.TagSupport;
+
+// 导入自定义的 com.farm.core.auth.domain 包中的 LoginUser 类,可能代表登录用户的实体
+import com.farm.core.auth.domain.LoginUser;
+// 导入自定义的 com.farm.doc.server 包中的 FarmDocManagerInter 接口,可能用于文档管理相关操作
+import com.farm.doc.server.FarmDocManagerInter;
+// 导入自定义的 com.farm.doc.server 包中的 FarmDocOperateRightInter 接口,可能用于文档操作权限相关操作
+import com.farm.doc.server.FarmDocOperateRightInter;
+// 导入自定义的 com.farm.util.spring 包中的 BeanFactory 类,可能用于获取 Spring 容器中的 Bean
+import com.farm.util.spring.BeanFactory;
+// 导入自定义的 com.farm.web.constant 包中的 FarmConstant 类,可能包含一些与项目相关的常量
+import com.farm.web.constant.FarmConstant;
+
+/**
+ * 用户是否有该文档的审核权限
+ *
+ * @author wangdong
+ *
+ */
+// 定义 AuditIsShowForUser 类,继承自 TagSupport 类,用于创建一个自定义的 JSP 标签
+public class AuditIsShowForUser extends TagSupport {
+ // 定义一个私有属性 docId,用于存储文档的 ID
+ private String docId;
+ /**
+ * 序列化版本号,用于在反序列化时验证版本一致性
+ */
+ private static final long serialVersionUID = 1L;
+ // 通过 BeanFactory 从 Spring 容器中获取 FarmDocOperateRightInter 接口的实现类实例,并赋值给 aloneIMP 常量
+ private final static FarmDocOperateRightInter aloneIMP = (FarmDocOperateRightInter) BeanFactory.getBean("farmDocOperateRightImpl");
+ // 通过 BeanFactory 从 Spring 容器中获取 FarmDocManagerInter 接口的实现类实例,并赋值给 docIMP 常量
+ private final static FarmDocManagerInter docIMP = (FarmDocManagerInter) BeanFactory.getBean("farmDocManagerImpl");
+
+ // 重写 doEndTag 方法,该方法在标签结束时调用
+ @Override
+ public int doEndTag() throws JspException {
+ // 返回 EVAL_PAGE,表示继续处理页面的其余部分
+ return EVAL_PAGE;
+ }
+
+ // 重写 doStartTag 方法,该方法在标签开始时调用
+ @SuppressWarnings("deprecation")
+ @Override
+ public int doStartTag() throws JspException {
+ // 从 pageContext 中获取 HttpServletRequest 对象,用于获取请求相关信息
+ HttpServletRequest request = (HttpServletRequest) super.pageContext.getRequest();
+ // 从请求的会话中获取名为 FarmConstant.SESSION_USEROBJ 的属性,即当前登录用户对象
+ LoginUser user = (LoginUser) request.getSession().getAttribute(FarmConstant.SESSION_USEROBJ);
+ // EVAL_BODY_INCLUDE 表示执行自定义标签的标签体;
+ // 返回 SKIP_BODY 则忽略自定义标签的标签体,直接解释执行自定义标签的结果标记。
+ // 调用 aloneIMP 的 isAudit 方法,判断当前用户是否有指定文档的审核权限
+ if (aloneIMP.isAudit(user, docIMP.getDoc(docId).getDoc())) {
+ // 如果有审核权限,返回 EVAL_BODY_INCLUDE,执行标签体内容
+ return EVAL_BODY_INCLUDE;
+ }
+ // 如果没有审核权限,返回 SKIP_BODY,跳过标签体内容
+ return SKIP_BODY;
+ }
+
+ // 定义 docId 属性的 getter 方法,用于获取 docId 的值
+ public String getDocId() {
+ return docId;
+ }
+
+ // 定义 docId 属性的 setter 方法,用于设置 docId 的值
+ public void setDocId(String docId) {
+ this.docId = docId;
+ }
+}
\ No newline at end of file
diff --git a/src/wcp-tag/src/main/java/com/farm/doc/tag/DefaultIndexPageTaget.java b/src/wcp-tag/src/main/java/com/farm/doc/tag/DefaultIndexPageTaget.java
new file mode 100644
index 0000000..dda13b1
--- /dev/null
+++ b/src/wcp-tag/src/main/java/com/farm/doc/tag/DefaultIndexPageTaget.java
@@ -0,0 +1,87 @@
+// 声明该类所在的包
+package com.farm.doc.tag;
+
+// 导入处理输入输出异常的类
+import java.io.IOException;
+
+// 导入 JSP 相关的异常类
+import javax.servlet.jsp.JspException;
+// 导入 JSP 输出流类
+import javax.servlet.jsp.JspWriter;
+// 导入 JSP 标签支持类
+import javax.servlet.jsp.tagext.TagSupport;
+
+// 导入 Log4j 日志记录器类
+import org.apache.log4j.Logger;
+
+// 导入自定义的参数服务类
+import com.farm.parameter.FarmParameterService;
+
+/**
+ * 自定义的 JSP 标签类,用于获取并输出系统默认的首页路径
+ */
+public class DefaultIndexPageTaget extends TagSupport {
+
+ /**
+ * 序列化版本号,用于确保序列化和反序列化的兼容性
+ */
+ private static final long serialVersionUID = 1L;
+ // 创建一个日志记录器,用于记录该类相关的日志信息
+ static final Logger log = Logger.getLogger(DefaultIndexPageTaget.class);
+
+ /**
+ * 处理标签结束时的逻辑
+ *
+ * @return 表示标签处理完成后页面继续执行的状态码
+ * @throws JspException 如果在处理标签时发生 JSP 相关的异常
+ */
+ @Override
+ public int doEndTag() throws JspException {
+ // 这里暂时没有具体的逻辑,可根据需求后续添加
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
+ /**
+ * 处理标签开始时的逻辑
+ *
+ * @return 表示标签处理完成后页面继续执行的状态码
+ * @throws JspException 如果在处理标签时发生 JSP 相关的异常
+ */
+ @Override
+ public int doStartTag() throws JspException {
+ // 调用 getDefaultIndexPage 方法获取系统默认的首页路径
+ String Path = getDefaultIndexPage();
+ // 从当前页面上下文获取 JSP 输出流
+ JspWriter jspw = this.pageContext.getOut();
+ try {
+ // 将获取到的首页路径输出到 JSP 页面
+ jspw.print(Path);
+ } catch (IOException e) {
+ // 如果输出过程中发生 IO 异常,使用日志记录器记录异常信息
+ log.error(e.getMessage());
+ }
+ return 0;
+ }
+
+ /**
+ * 获得系统默认登录页面
+ *
+ * @return 系统默认登录页面的路径
+ */
+ public static String getDefaultIndexPage() {
+ // 从参数服务中获取系统是否开源的配置信息
+ String isOpen = FarmParameterService.getInstance().getParameter("config.sys.opensource");
+ // 从参数服务中获取系统默认首页的配置信息
+ String Path = FarmParameterService.getInstance().getParameter("config.index.defaultpage");
+ // 判断系统是否开源
+ if (isOpen.equals("true")) {
+ // 如果系统开源,将首页路径设置为指定的开源页面路径
+ Path = "websearch/PubHome.html";
+ } else {
+ // 如果系统不开源,保持从配置中获取的首页路径
+ Path = FarmParameterService.getInstance().getParameter("config.index.defaultpage");
+ }
+ return Path;
+ }
+}
diff --git a/src/wcp-tag/src/main/java/com/farm/doc/tag/DelIsShowForUser.java b/src/wcp-tag/src/main/java/com/farm/doc/tag/DelIsShowForUser.java
new file mode 100644
index 0000000..0aead98
--- /dev/null
+++ b/src/wcp-tag/src/main/java/com/farm/doc/tag/DelIsShowForUser.java
@@ -0,0 +1,54 @@
+package com.farm.doc.tag;
+
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.jsp.JspException;
+import javax.servlet.jsp.tagext.TagSupport;
+
+import com.farm.core.auth.domain.LoginUser;
+import com.farm.doc.server.FarmDocManagerInter;
+import com.farm.doc.server.FarmDocOperateRightInter;
+import com.farm.util.spring.BeanFactory;
+import com.farm.web.constant.FarmConstant;
+
+public class DelIsShowForUser extends TagSupport {
+ private String docId;
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
+ private final static FarmDocOperateRightInter aloneIMP = (FarmDocOperateRightInter) BeanFactory
+ .getBean("farmDocOperateRightImpl");
+ private final static FarmDocManagerInter docIMP = (FarmDocManagerInter) BeanFactory
+ .getBean("farmDocManagerImpl");
+
+ @Override
+ public int doEndTag() throws JspException {
+ return EVAL_PAGE;
+ }
+
+ @SuppressWarnings("deprecation")
+ @Override
+ public int doStartTag() throws JspException {
+ HttpServletRequest request = (HttpServletRequest) super.pageContext
+ .getRequest();
+ LoginUser user = (LoginUser) request.getSession().getAttribute(
+ FarmConstant.SESSION_USEROBJ);
+ // EVAL_BODY_INCLUDE
+ // 则执行自定义标签的标签体;
+ // 返回SKIP_BODY则忽略自定义标签的标签体,直接解释执行自定义标签的结果标记。
+ if (aloneIMP.isDel(user, docIMP.getDoc(docId).getDoc())) {
+ return EVAL_BODY_INCLUDE;
+ }
+ return SKIP_BODY;
+ }
+
+ public String getDocId() {
+ return docId;
+ }
+
+ public void setDocId(String docId) {
+ this.docId = docId;
+ }
+
+}
diff --git a/src/wcp-tag/src/main/java/com/farm/doc/tag/DocContent.java b/src/wcp-tag/src/main/java/com/farm/doc/tag/DocContent.java
new file mode 100644
index 0000000..3b87bec
--- /dev/null
+++ b/src/wcp-tag/src/main/java/com/farm/doc/tag/DocContent.java
@@ -0,0 +1,97 @@
+// 声明该类所在的包
+package com.farm.doc.tag;
+
+// 导入用于处理输入输出异常的类
+import java.io.IOException;
+
+// 导入 JSP 相关的异常类
+import javax.servlet.jsp.JspException;
+// 导入 JSP 输出流类
+import javax.servlet.jsp.JspWriter;
+// 导入 JSP 标签支持类
+import javax.servlet.jsp.tagext.TagSupport;
+
+// 导入文档完整信息的实体类
+import com.farm.doc.domain.ex.DocEntire;
+// 导入文档管理的接口类
+import com.farm.doc.server.FarmDocManagerInter;
+// 导入 Spring 工具类,用于获取 Bean 对象
+import com.farm.util.spring.BeanFactory;
+
+/**
+ * 自定义 JSP 标签类,用于获取并输出指定文档的内容
+ */
+public class DocContent extends TagSupport {
+
+ /**
+ * 文档的 ID,用于指定要获取的文档
+ */
+ private String id;
+
+ /**
+ * 通过 Spring 的 BeanFactory 获取文档管理的实现类实例,使用单例模式
+ */
+ private final static FarmDocManagerInter aloneIMP = (FarmDocManagerInter) BeanFactory
+ .getBean("farmDocManagerImpl");
+
+ /**
+ * 序列化版本号,用于确保序列化和反序列化的兼容性
+ */
+ private static final long serialVersionUID = 1895493540131375513L;
+
+ /**
+ * 处理标签结束时的逻辑
+ *
+ * @return 表示标签处理完成后页面继续执行的状态码
+ * @throws JspException 如果在处理标签时发生 JSP 相关的异常
+ */
+ @SuppressWarnings("deprecation")
+ @Override
+ public int doEndTag() throws JspException {
+ // 从当前页面上下文获取 JSP 输出流
+ JspWriter jspw = this.pageContext.getOut();
+ try {
+ // 根据文档 ID 获取文档的完整信息
+ DocEntire doc = aloneIMP.getDoc(id);
+ // 将文档的文本内容输出到 JSP 页面,拼接 text1、text2 和 text3 的内容
+ jspw.println(doc.getTexts().getText1()
+ + (doc.getTexts().getText2() != null ? doc.getTexts().getText2() : "")
+ + (doc.getTexts().getText3() != null ? doc.getTexts().getText3() : ""));
+ } catch (IOException e) {
+ // 如果输出过程中发生 IO 异常,打印异常堆栈信息
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return 0;
+ }
+
+ /**
+ * 处理标签开始时的逻辑
+ *
+ * @return 表示标签处理完成后页面继续执行的状态码
+ * @throws JspException 如果在处理标签时发生 JSP 相关的异常
+ */
+ @Override
+ public int doStartTag() throws JspException {
+ // 这里暂时没有具体的逻辑,可根据需求后续添加
+ return 0;
+ }
+
+ /**
+ * 获取文档的 ID
+ *
+ * @return 文档的 ID
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * 设置文档的 ID
+ *
+ * @param id 要设置的文档 ID
+ */
+ public void setId(String id) {
+ this.id = id;
+ }
+}
diff --git a/src/wcp-tag/src/main/java/com/farm/doc/tag/DocDescribe.java b/src/wcp-tag/src/main/java/com/farm/doc/tag/DocDescribe.java
new file mode 100644
index 0000000..f160cf1
--- /dev/null
+++ b/src/wcp-tag/src/main/java/com/farm/doc/tag/DocDescribe.java
@@ -0,0 +1,108 @@
+// 声明该类所在的包
+package com.farm.doc.tag;
+
+// 导入处理输入输出异常的类,用于处理 JSP 输出时可能出现的异常
+import java.io.IOException;
+
+// 导入 JSP 异常类,用于处理 JSP 标签处理过程中可能出现的异常
+import javax.servlet.jsp.JspException;
+// 导入 JSP 输出流类,用于向 JSP 页面输出内容
+import javax.servlet.jsp.JspWriter;
+// 导入 JSP 标签支持类,是自定义 JSP 标签的基础类
+import javax.servlet.jsp.tagext.TagSupport;
+
+/**
+ * 自定义 JSP 标签类,用于对文档描述文本进行处理和输出
+ * 可限制文本显示的最大长度,超过部分用省略号替代
+ */
+public class DocDescribe extends TagSupport {
+ /**
+ * 文档描述文本
+ */
+ private String text;
+ /**
+ * 文本显示的最大长度
+ */
+ private int maxnum;
+ /**
+ * 序列化版本号,用于在序列化和反序列化对象时保证版本的兼容性
+ */
+ private static final long serialVersionUID = 1895493540131375513L;
+
+ /**
+ * 处理标签结束时的逻辑
+ *
+ * @return 表示标签处理完成后页面继续执行的状态码,0 表示继续处理页面剩余部分
+ * @throws JspException 如果在处理标签时发生 JSP 相关的异常
+ */
+ @Override
+ public int doEndTag() throws JspException {
+ // 从当前页面上下文获取 JSP 输出流,用于向页面输出内容
+ JspWriter jspw = this.pageContext.getOut();
+ try {
+ // 检查文本是否不为空且去除首尾空格后长度大于 0
+ if (text != null && text.trim().length() > 0) {
+ // 判断文本去除首尾空格后的长度是否超过最大显示长度
+ if (text.trim().length() > maxnum) {
+ // 若超过,截取前 maxnum 个字符并添加省略号后输出
+ jspw.println(text.substring(0, maxnum) + "...");
+ } else {
+ // 若未超过,直接输出文本
+ jspw.println(text);
+ }
+ }
+ } catch (IOException e) {
+ // 若输出过程中发生输入输出异常,打印异常堆栈信息
+ e.printStackTrace();
+ }
+ return 0;
+ }
+
+ /**
+ * 处理标签开始时的逻辑
+ *
+ * @return 表示标签处理完成后页面继续执行的状态码,0 表示继续处理页面剩余部分
+ * @throws JspException 如果在处理标签时发生 JSP 相关的异常
+ */
+ @Override
+ public int doStartTag() throws JspException {
+ // 此标签在开始时不进行特殊处理,直接返回 0 继续页面处理
+ return 0;
+ }
+
+ /**
+ * 获取文档描述文本
+ *
+ * @return 文档描述文本
+ */
+ public String getText() {
+ return text;
+ }
+
+ /**
+ * 设置文档描述文本
+ *
+ * @param text 要设置的文档描述文本
+ */
+ public void setText(String text) {
+ this.text = text;
+ }
+
+ /**
+ * 获取文本显示的最大长度
+ *
+ * @return 文本显示的最大长度
+ */
+ public int getMaxnum() {
+ return maxnum;
+ }
+
+ /**
+ * 设置文本显示的最大长度
+ *
+ * @param maxnum 要设置的文本显示最大长度
+ */
+ public void setMaxnum(int maxnum) {
+ this.maxnum = maxnum;
+ }
+}
\ No newline at end of file
diff --git a/src/wcp-tag/src/main/java/com/farm/doc/tag/DocGroupOption.java b/src/wcp-tag/src/main/java/com/farm/doc/tag/DocGroupOption.java
new file mode 100644
index 0000000..52f4e14
--- /dev/null
+++ b/src/wcp-tag/src/main/java/com/farm/doc/tag/DocGroupOption.java
@@ -0,0 +1,145 @@
+// 声明该类所在的包
+package com.farm.doc.tag;
+
+// 导入处理输入输出异常的类
+import java.io.IOException;
+// 导入迭代器接口,用于遍历集合
+import java.util.Iterator;
+// 导入列表接口
+import java.util.List;
+// 导入映射接口
+import java.util.Map;
+
+// 导入 HTTP 请求类
+import javax.servlet.http.HttpServletRequest;
+// 导入 JSP 异常类
+import javax.servlet.jsp.JspException;
+// 导入 JSP 输出流类
+import javax.servlet.jsp.JspWriter;
+// 导入 JSP 标签支持类
+import javax.servlet.jsp.tagext.TagSupport;
+
+// 导入 Log4j 日志记录器类
+import org.apache.log4j.Logger;
+
+// 导入登录用户实体类
+import com.farm.core.auth.domain.LoginUser;
+// 导入文档组管理接口
+import com.farm.doc.server.FarmDocgroupManagerInter;
+// 导入 Spring 工具类,用于获取 Bean 对象
+import com.farm.util.spring.BeanFactory;
+// 导入农场系统的常量类
+import com.farm.web.constant.FarmConstant;
+
+/**
+ * 自定义 JSP 标签类,用于生成文档组的 HTML 选项列表
+ */
+public class DocGroupOption extends TagSupport {
+ /**
+ * 环绕在文档组名称前的字符串
+ */
+ private String aroundS;
+ /**
+ * 环绕在文档组名称后的字符串
+ */
+ private String aroundE;
+ /**
+ * 序列化版本号,用于确保序列化和反序列化的兼容性
+ */
+ private static final long serialVersionUID = 1895493540131375513L;
+ /**
+ * 通过 Spring 的 BeanFactory 获取文档组管理的实现类实例,使用单例模式
+ */
+ private final static FarmDocgroupManagerInter docGroupIMP = (FarmDocgroupManagerInter) BeanFactory
+ .getBean("farmDocgroupManagerImpl");
+ /**
+ * 创建一个日志记录器,用于记录该类相关的日志信息
+ */
+ private static final Logger log = Logger.getLogger(DocGroupOption.class);
+
+ /**
+ * 处理标签结束时的逻辑
+ *
+ * @return 表示标签处理完成后页面继续执行的状态码
+ * @throws JspException 如果在处理标签时发生 JSP 相关的异常
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public int doEndTag() throws JspException {
+ // 从当前页面上下文获取 HTTP 请求对象
+ HttpServletRequest request = (HttpServletRequest) super.pageContext
+ .getRequest();
+ // 从会话中获取当前登录用户的信息
+ LoginUser user = (LoginUser) request.getSession().getAttribute(
+ FarmConstant.SESSION_USEROBJ);
+ // 根据用户 ID 获取用户可编辑的文档组列表
+ List