Sfoglia il codice sorgente

工作流+自定义表单

姚斌 1 anno fa
parent
commit
0303300ca9
27 ha cambiato i file con 459726 aggiunte e 8293 eliminazioni
  1. 1 1
      .idea/compiler.xml
  2. 21 1
      .idea/jarRepositories.xml
  3. 18 5
      itdmServer/jeecg-boot-base-core/src/main/java/org/jeecg/common/api/vo/Result.java
  4. 12 0
      itdmServer/jeecg-module-system/jeecg-system-start/pom.xml
  5. 2 1
      itdmServer/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/JeecgSystemApplication.java
  6. 11 4
      itdmServer/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml
  7. 5 0
      itdmServer/module-ACTIVITI/pom.xml
  8. 1 1
      itdmServer/module-ACTIVITI/src/main/java/org/jeecg/common/config/ActivitiConfig.java
  9. 127 0
      itdmServer/module-ACTIVITI/src/main/java/org/jeecg/common/utils/ActivitiTracingChart.java
  10. 195 0
      itdmServer/module-ACTIVITI/src/main/java/org/jeecg/common/utils/AjaxResult.java
  11. 29 6
      itdmServer/module-ACTIVITI/src/main/java/org/jeecg/modules/activiti/controller/ReModelController.java
  12. 1 2
      itdmServer/module-ACTIVITI/src/main/java/org/jeecg/modules/activiti/controller/ReProcdefController.java
  13. 314 5
      itdmServer/module-ACTIVITI/src/main/java/org/jeecg/modules/activiti/controller/ServiceController.java
  14. 47 0
      itdmServer/module-ACTIVITI/src/main/java/org/jeecg/modules/activiti/model/entity/EntityUtil.java
  15. 142 0
      itdmServer/module-ACTIVITI/src/main/java/org/jeecg/modules/activiti/model/entity/FlowInfo.java
  16. 154 0
      itdmServer/module-ACTIVITI/src/main/java/org/jeecg/modules/activiti/model/entity/TaskInfo.java
  17. 176 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/customform/controller/CustomFormController.java
  18. 65 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/customform/entity/CustomForm.java
  19. 17 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/customform/mapper/CustomFormMapper.java
  20. 5 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/customform/mapper/xml/CustomFormMapper.xml
  21. 14 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/customform/service/ICustomFormService.java
  22. 20 0
      itdmServer/module-iTDM/src/main/java/org/jeecg/modules/customform/service/impl/CustomFormServiceImpl.java
  23. 458349 1
      logs/error-log.html
  24. 0 6115
      logs/jeecgboot-2023-05-19.0.html
  25. 0 860
      logs/jeecgboot-2023-05-19.0.log
  26. 0 1155
      logs/jeecgboot-2023-05-20.0.html
  27. 0 136
      logs/jeecgboot-2023-05-20.0.log

+ 1 - 1
.idea/compiler.xml

@@ -53,4 +53,4 @@
       <module name="module-iTDM" options="-parameters" />
     </option>
   </component>
-</project>
+</project>

+ 21 - 1
.idea/jarRepositories.xml

@@ -2,6 +2,21 @@
 <project version="4">
   <component name="RemoteRepositoriesConfiguration">
     <remote-repository>
+      <option name="id" value="jeecg" />
+      <option name="name" value="jeecg Repository" />
+      <option name="url" value="https://maven.jeecg.org/nexus/content/repositories/jeecg" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="aliyun" />
+      <option name="name" value="aliyun Repository" />
+      <option name="url" value="https://maven.aliyun.com/repository/public" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="https://repo.maven.apache.org/maven2" />
+    </remote-repository>
+    <remote-repository>
       <option name="id" value="aliyun" />
       <option name="name" value="aliyun Repository" />
       <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public" />
@@ -31,5 +46,10 @@
       <option name="name" value="Central Repository" />
       <option name="url" value="http://maven.aliyun.com/nexus/content/groups/public" />
     </remote-repository>
+    <remote-repository>
+      <option name="id" value="jeecg-snapshots" />
+      <option name="name" value="jeecg-snapshots Repository" />
+      <option name="url" value="https://oss.sonatype.org/content/repositories/snapshots" />
+    </remote-repository>
   </component>
-</project>
+</project>

+ 18 - 5
itdmServer/jeecg-boot-base-core/src/main/java/org/jeecg/common/api/vo/Result.java

@@ -37,18 +37,23 @@ public class Result<T> implements Serializable {
 	 */
 	@ApiModelProperty(value = "返回代码")
 	private Integer code = 0;
-	
+
 	/**
 	 * 返回数据对象 data
 	 */
 	@ApiModelProperty(value = "返回数据对象")
 	private T result;
-	
+
 	/**
 	 * 时间戳
 	 */
 	@ApiModelProperty(value = "时间戳")
 	private long timestamp = System.currentTimeMillis();
+	/**
+	 * 返回数据总数
+	 */
+	@ApiModelProperty(value = "总数")
+	private Integer total;
 
 	public Result() {
 	}
@@ -62,7 +67,7 @@ public class Result<T> implements Serializable {
 		this.code = code;
 		this.message = message;
 	}
-	
+
 	public Result<T> success(String message) {
 		this.message = message;
 		this.code = CommonConstant.SC_OK_200;
@@ -148,7 +153,7 @@ public class Result<T> implements Serializable {
 	public static<T> Result<T> error(String msg) {
 		return error(CommonConstant.SC_INTERNAL_SERVER_ERROR_500, msg);
 	}
-	
+
 	public static<T> Result<T> error(int code, String msg) {
 		Result<T> r = new Result<T>();
 		r.setCode(code);
@@ -173,5 +178,13 @@ public class Result<T> implements Serializable {
 
 	@JsonIgnore
 	private String onlTable;
+	public static<T> Result<T> OKK(T data,Integer size) {
+		Result<T> r = new Result<T>();
+		r.setSuccess(true);
+		r.setCode(CommonConstant.SC_OK_200);
+		r.setResult(data);
+		r.setTotal(size);
+		return r;
+	}
 
-}
+}

+ 12 - 0
itdmServer/jeecg-module-system/jeecg-system-start/pom.xml

@@ -29,6 +29,18 @@
             <artifactId>module-ACTIVITI</artifactId>
             <version>${jeecgboot.version}</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.activiti</groupId>
+            <artifactId>activiti-spring-boot-starter-basic</artifactId>
+            <version>6.0.0</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.mybatis</groupId>
+                    <artifactId>mybatis</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
     </dependencies>
 
     <build>

+ 2 - 1
itdmServer/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/JeecgSystemApplication.java

@@ -1,6 +1,7 @@
 package org.jeecg;
 
 import lombok.extern.slf4j.Slf4j;
+import org.activiti.spring.boot.SecurityAutoConfiguration;
 import org.jeecg.common.util.oConvertUtils;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -19,7 +20,7 @@ import java.net.UnknownHostException;
 */
 @EnableScheduling // 开启定时任务
 @Slf4j
-@SpringBootApplication
+@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})
 //@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class})
 public class JeecgSystemApplication extends SpringBootServletInitializer {
 

+ 11 - 4
itdmServer/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml

@@ -1,5 +1,5 @@
 server:
-  port: 8080
+  port: 8081
   tomcat:
     max-swallow-size: -1
   error:
@@ -71,6 +71,13 @@ spring:
     open-in-view: false
   aop:
     proxy-target-class: true
+  # 工作流
+  activiti:
+    check-process-definitions: false
+    #启用作业执行器
+    async-executor-activate: false
+    #启用异步执行器
+    job-executor-activate: false
   #配置freemarker
   freemarker:
     # 设置模板后缀名
@@ -143,10 +150,10 @@ spring:
           #driver-class-name: com.mysql.cj.jdbc.Driver
   #redis 配置
   redis:
-    database: 0
-    host: 119.3.255.154
+    database: 10
+    host: 121.36.94.59
     port: 6379
-    password: Mysql123+-
+    password:  MAESYbh1
 #mybatis plus 设置
 mybatis-plus:
   mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml

+ 5 - 0
itdmServer/module-ACTIVITI/pom.xml

@@ -70,6 +70,11 @@
             <groupId>org.jeecgframework.boot</groupId>
             <artifactId>jeecg-system-local-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.13.1</version>
+        </dependency>
     </dependencies>
     <build>
         <resources>

+ 1 - 1
itdmServer/module-ACTIVITI/src/main/java/org/jeecg/common/config/ActivitiConfig.java

@@ -23,7 +23,7 @@ import java.io.IOException;
  * @author yao
  * @date 2019/06/13
  */
-@Configuration
+//@Configuration
 public class ActivitiConfig {
 
     @Autowired

+ 127 - 0
itdmServer/module-ACTIVITI/src/main/java/org/jeecg/common/utils/ActivitiTracingChart.java

@@ -0,0 +1,127 @@
+package org.jeecg.common.utils;
+
+import org.activiti.bpmn.model.BpmnModel;
+import org.activiti.bpmn.model.FlowNode;
+import org.activiti.bpmn.model.SequenceFlow;
+import org.activiti.engine.HistoryService;
+import org.activiti.engine.ProcessEngineConfiguration;
+import org.activiti.engine.RepositoryService;
+import org.activiti.engine.history.HistoricActivityInstance;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.image.ProcessDiagramGenerator;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 流程追踪图
+ */
+@Component
+public class ActivitiTracingChart {
+
+    private static final Logger logger = LoggerFactory.getLogger(ActivitiTracingChart.class);
+
+
+    @Resource
+    private HistoryService historyService;
+
+    @Resource
+    private RepositoryService repositoryService;
+
+    @Resource
+    private ProcessEngineConfiguration processEngineConfiguration;
+
+    /**
+     * 生成流程追踪图
+     *
+     * @param processInstanceId 流程实例id
+     * @param outputStream      输出流
+     */
+    public void generateFlowChart(String processInstanceId, OutputStream outputStream) {
+        try {
+            if (StringUtils.isEmpty(processInstanceId)) {
+                logger.error("processInstanceId is null");
+                return;
+            }
+            // 获取历史流程实例
+            HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId)
+                .singleResult();
+            // 获取流程中已经执行的节点
+            List<HistoricActivityInstance> historicActivityInstances = historyService.createHistoricActivityInstanceQuery()
+                .processInstanceId(processInstanceId)
+                .orderByHistoricActivityInstanceStartTime().asc().list();
+            // 高亮已经执行流程节点ID集合
+            List<String> highLightedActivitiIds = new ArrayList<>();
+            for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) {
+                highLightedActivitiIds.add(historicActivityInstance.getActivityId());
+            }
+
+            ProcessDiagramGenerator processDiagramGenerator = processEngineConfiguration.getProcessDiagramGenerator();
+
+            BpmnModel bpmnModel = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId());
+            // 高亮流程已发生流转的线id集合
+            List<String> highLightedFlowIds = getHighLightedFlows(bpmnModel, historicActivityInstances);
+
+            // 使用默认配置获得流程图表生成器,并生成追踪图片字符流
+            InputStream imageStream = processDiagramGenerator
+                .generateDiagram(bpmnModel, "png", highLightedActivitiIds, highLightedFlowIds, "宋体", "微软雅黑", "黑体", null, 2.0);
+
+            // 输出图片内容
+            byte[] b = new byte[1024];
+            int len;
+            while ((len = imageStream.read(b, 0, 1024)) != -1) {
+                outputStream.write(b, 0, len);
+            }
+        } catch (Exception e) {
+            logger.error("processInstanceId" + processInstanceId + "生成流程图失败,原因:" + e.getMessage(), e);
+        }
+    }
+
+
+    /**
+     * 获取已经流转的线
+     *
+     * @param bpmnModel                 流程图模板
+     * @param historicActivityInstances 历史实例
+     */
+    private List<String> getHighLightedFlows(BpmnModel bpmnModel, List<HistoricActivityInstance> historicActivityInstances) {
+        // 高亮流程已发生流转的线id集合
+        List<String> highLightedFlowIds = new ArrayList<>();
+        // 已完成的活动节点
+        List<FlowNode> historicActivityNodes = new ArrayList<>();
+
+        for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) {
+            FlowNode flowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(historicActivityInstance.getActivityId(), true);
+            historicActivityNodes.add(flowNode);
+        }
+
+        FlowNode currentFlowNode;
+        FlowNode targetFlowNode;
+        // 遍历已完成的活动实例,从每个实例的outgoingFlows中找到已执行的
+        for (HistoricActivityInstance currentActivityInstance : historicActivityInstances) {
+            // 获得当前活动对应的节点信息及outgoingFlows信息
+            currentFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(currentActivityInstance.getActivityId(), true);
+            List<SequenceFlow> sequenceFlows = currentFlowNode.getOutgoingFlows();
+
+            // 通过outgoingFlows能够在历史活动中找到且目标节点和当前节点执行顺序相邻
+            for (SequenceFlow sequenceFlow : sequenceFlows) {
+                targetFlowNode = (FlowNode) bpmnModel.getMainProcess().getFlowElement(sequenceFlow.getTargetRef(), true);
+                if (historicActivityNodes.contains(targetFlowNode)) {
+                    int target = historicActivityNodes.indexOf(targetFlowNode);
+                    int current = historicActivityNodes.indexOf(currentFlowNode);
+                    if (target - current == 1) {
+                        highLightedFlowIds.add(sequenceFlow.getId());
+                    }
+                }
+            }
+        }
+        return highLightedFlowIds;
+    }
+}

+ 195 - 0
itdmServer/module-ACTIVITI/src/main/java/org/jeecg/common/utils/AjaxResult.java

@@ -0,0 +1,195 @@
+package org.jeecg.common.utils;
+
+import java.util.HashMap;
+
+/**
+ * 操作消息提醒
+ *
+ * @author ruoyi
+ */
+public class AjaxResult extends HashMap<String, Object>
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 状态码 */
+    public static final String CODE_TAG = "code";
+
+    /** 返回内容 */
+    public static final String MSG_TAG = "msg";
+
+    /** 数据对象 */
+    public static final String DATA_TAG = "data";
+
+    /**
+     * 状态类型
+     */
+    public enum Type
+    {
+        /** 成功 */
+        SUCCESS(0),
+        /** 警告 */
+        WARN(301),
+        /** 错误 */
+        ERROR(500);
+        private final int value;
+
+        Type(int value)
+        {
+            this.value = value;
+        }
+
+        public int value()
+        {
+            return this.value;
+        }
+    }
+
+    /**
+     * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
+     */
+    public AjaxResult()
+    {
+    }
+
+    /**
+     * 初始化一个新创建的 AjaxResult 对象
+     *
+     * @param type 状态类型
+     * @param msg 返回内容
+     */
+    public AjaxResult(Type type, String msg)
+    {
+        super.put(CODE_TAG, type.value);
+        super.put(MSG_TAG, msg);
+    }
+
+    /**
+     * 初始化一个新创建的 AjaxResult 对象
+     *
+     * @param type 状态类型
+     * @param msg 返回内容
+     * @param data 数据对象
+     */
+    public AjaxResult(Type type, String msg, Object data)
+    {
+        super.put(CODE_TAG, type.value);
+        super.put(MSG_TAG, msg);
+        if (StringUtils.isNotNull(data))
+        {
+            super.put(DATA_TAG, data);
+        }
+    }
+
+    /**
+     * 方便链式调用
+     *
+     * @param key 键
+     * @param value 值
+     * @return 数据对象
+     */
+    @Override
+    public AjaxResult put(String key, Object value)
+    {
+        super.put(key, value);
+        return this;
+    }
+
+    /**
+     * 返回成功消息
+     *
+     * @return 成功消息
+     */
+    public static AjaxResult success()
+    {
+        return AjaxResult.success("操作成功");
+    }
+
+    /**
+     * 返回成功数据
+     *
+     * @return 成功消息
+     */
+    public static AjaxResult success(Object data)
+    {
+        return AjaxResult.success("操作成功", data);
+    }
+
+    /**
+     * 返回成功消息
+     *
+     * @param msg 返回内容
+     * @return 成功消息
+     */
+    public static AjaxResult success(String msg)
+    {
+        return AjaxResult.success(msg, null);
+    }
+
+    /**
+     * 返回成功消息
+     *
+     * @param msg 返回内容
+     * @param data 数据对象
+     * @return 成功消息
+     */
+    public static AjaxResult success(String msg, Object data)
+    {
+        return new AjaxResult(Type.SUCCESS, msg, data);
+    }
+
+    /**
+     * 返回警告消息
+     *
+     * @param msg 返回内容
+     * @return 警告消息
+     */
+    public static AjaxResult warn(String msg)
+    {
+        return AjaxResult.warn(msg, null);
+    }
+
+    /**
+     * 返回警告消息
+     *
+     * @param msg 返回内容
+     * @param data 数据对象
+     * @return 警告消息
+     */
+    public static AjaxResult warn(String msg, Object data)
+    {
+        return new AjaxResult(Type.WARN, msg, data);
+    }
+
+    /**
+     * 返回错误消息
+     *
+     * @return
+     */
+    public static AjaxResult error()
+    {
+        return AjaxResult.error("操作失败");
+    }
+
+    /**
+     * 返回错误消息
+     *
+     * @param msg 返回内容
+     * @return 警告消息
+     */
+    public static AjaxResult error(String msg)
+    {
+        return AjaxResult.error(msg, null);
+    }
+
+    /**
+     * 返回错误消息
+     *
+     * @param msg 返回内容
+     * @param data 数据对象
+     * @return 警告消息
+     */
+    public static AjaxResult error(String msg, Object data)
+    {
+        return new AjaxResult(Type.ERROR, msg, data);
+    }
+}

+ 29 - 6
itdmServer/module-ACTIVITI/src/main/java/org/jeecg/modules/activiti/controller/ReModelController.java

@@ -1,16 +1,25 @@
 package org.jeecg.modules.activiti.controller;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.activiti.bpmn.converter.BpmnXMLConverter;
+import org.activiti.bpmn.model.BpmnModel;
+import org.activiti.editor.language.json.converter.BpmnJsonConverter;
+import org.activiti.engine.RepositoryService;
 import org.activiti.engine.repository.Model;
+import org.apache.poi.util.IOUtils;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.activiti.model.entity.ReModelEntity;
 import org.jeecg.modules.activiti.service.ReModelService;
-import org.jeecg.common.api.vo.Result;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.util.Map;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
 
 /**
  * 模型管理
@@ -25,6 +34,10 @@ public class ReModelController {
     @Autowired
     private ReModelService actReModelService;
 
+    @Autowired
+    private RepositoryService repositoryService;
+    @Resource
+    private ObjectMapper objectMapper;
     /**
      * 分页查询
      *
@@ -78,14 +91,24 @@ public class ReModelController {
     /**
      * 导出model的xml文件
      *
-     * @param id
+     * @param modelId
      *            model标识
      * @param response
      *            响应
      */
-    @GetMapping(value = "export")
-    public void export(String id, HttpServletResponse response) {
-        actReModelService.export(id, response);
+    @GetMapping(value = "/export")
+    public void export(String modelId, HttpServletResponse response) throws IOException {
+
+        byte[] modelData = repositoryService.getModelEditorSource(modelId);
+        JsonNode jsonNode = objectMapper.readTree(modelData);
+        BpmnModel bpmnModel = (new BpmnJsonConverter()).convertToBpmnModel(jsonNode);
+        byte[] xmlBytes = (new BpmnXMLConverter()).convertToXML(bpmnModel, "UTF-8");
+        ByteArrayInputStream in = new ByteArrayInputStream(xmlBytes);
+        IOUtils.copy(in, response.getOutputStream());
+        String filename = bpmnModel.getMainProcess().getId() + ".bpmn20.xml";
+        response.setHeader("Content-Disposition","attachment;filename=" + filename);
+        response.setHeader("content-Type", "application/xml");
+        response.flushBuffer();
     }
 
     /**

+ 1 - 2
itdmServer/module-ACTIVITI/src/main/java/org/jeecg/modules/activiti/controller/ReProcdefController.java

@@ -3,9 +3,9 @@ package org.jeecg.modules.activiti.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.activiti.engine.repository.Model;
 import org.apache.commons.lang3.StringUtils;
-import org.jeecg.modules.activiti.service.ReProcdefService;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.modules.activiti.service.ReProcdefService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -13,7 +13,6 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
-import java.util.Map;
 
 /**
  * 流程管理

+ 314 - 5
itdmServer/module-ACTIVITI/src/main/java/org/jeecg/modules/activiti/controller/ServiceController.java

@@ -1,25 +1,52 @@
 package org.jeecg.modules.activiti.controller;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
+import io.swagger.annotations.ApiOperation;
+import org.activiti.bpmn.model.BpmnModel;
 import org.activiti.engine.*;
+import org.activiti.engine.history.HistoricProcessInstance;
+import org.activiti.engine.history.HistoricProcessInstanceQuery;
+import org.activiti.engine.identity.Group;
 import org.activiti.engine.identity.User;
+import org.activiti.engine.impl.identity.Authentication;
 import org.activiti.engine.repository.Model;
+import org.activiti.engine.repository.ProcessDefinition;
+import org.activiti.engine.runtime.ProcessInstance;
+import org.activiti.engine.task.Task;
+import org.activiti.engine.task.TaskQuery;
+import org.activiti.image.ProcessDiagramGenerator;
 import org.apache.batik.transcoder.TranscoderInput;
 import org.apache.batik.transcoder.TranscoderOutput;
 import org.apache.batik.transcoder.image.PNGTranscoder;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.utils.ActivitiTracingChart;
+import org.jeecg.common.utils.AjaxResult;
+import org.jeecg.modules.activiti.model.entity.EntityUtil;
+import org.jeecg.modules.activiti.model.entity.FlowInfo;
+import org.jeecg.modules.activiti.model.entity.TaskInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 模型控制
@@ -34,8 +61,20 @@ public class ServiceController {
     ObjectMapper objectMapper;
     @Autowired
     private RepositoryService repositoryService;
-
-
+    @Autowired
+    private IdentityService identityService;
+    @Autowired
+    private HistoryService historyService;
+    @Autowired
+    ProcessEngineConfiguration configuration;
+    @Autowired
+    FormService formService;
+    @Autowired
+    RuntimeService runtimeService;
+    @Autowired
+    TaskService taskService;
+    @Resource
+    private ActivitiTracingChart activitiTracingChart;
     /**
      * stencilset
      *
@@ -56,10 +95,208 @@ public class ServiceController {
         user.setEmail(sysUser.getEmail());
         user.setPassword(sysUser.getPassword());
         identityService.saveUser(user);
-        
 
+
+        return result;
+    }
+
+    /**
+     * 获取角色信息
+     * @param request
+     * @return
+     */
+    @RequestMapping(value="/act/role/getRoleList", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
+    public List<Group> getRoleList(HttpServletRequest request) {
+        List<Group> result = new ArrayList<>();
+        result = identityService.createGroupQuery().list();
         return result;
     }
+
+    /**
+     * 获取用户信息
+     * @param request
+     * @param page
+     * @param limit
+     * @param keyword
+     * @return
+     */
+    @RequestMapping(value="/act/user/actUserList/{page}/{limit}", method = RequestMethod.GET,
+            produces = "application/json;charset=utf-8")
+    public Result actUserList(HttpServletRequest request,@PathVariable("page")  int page,
+                              @PathVariable("limit")  int limit,
+                              @RequestParam String keyword) {
+        List<User> list = new ArrayList<>();
+        Integer total = 0;
+        if(null!=keyword&&!keyword.equals("")){
+           list = identityService.createNativeUserQuery().sql("select id_,rev_ ,first_,last_,email_,pwd_ FROM act_id_user where first_ like #{first_}")
+                    .parameter("first_","%"+keyword+"%").listPage((page-1)*limit, limit);
+            total= identityService.createNativeUserQuery().sql("select id_,rev_ ,first_,last_,email_,pwd_ FROM act_id_user where first_ like #{first_}")
+                    .parameter("first_","%"+keyword+"%").list().size();
+
+        }else{
+            //查询所有角色
+           list = identityService.createNativeUserQuery().sql("select id_,rev_ ,first_,last_,email_,pwd_ FROM act_id_user ").listPage((page-1)*limit,limit);
+           total= identityService.createNativeUserQuery().sql("select id_,rev_ ,first_,last_,email_,pwd_ FROM act_id_user ").list().size();
+
+
+        }
+        return Result.OKK(list,total);
+    }
+
+    /**
+     * 获取流程信息
+     * @return
+     */
+    @RequestMapping(value="/act/rep/actRepList", method = RequestMethod.GET,
+            produces = "application/json;charset=utf-8")
+    public Object actRepList() {
+        List<ProcessDefinition> processDefinitions = repositoryService.createNativeProcessDefinitionQuery()
+                .sql("SELECT * FROM act_re_procdef WHERE suspension_state_ = 1 AND deployment_id_ in (SELECT deployment_id_ FROM `act_re_model`)").list();
+        List<Map<String, Object>> mapList = EntityUtil.activitiResult(processDefinitions);
+        return Result.OK(mapList);
+    }
+
+    /**
+     * 通过模型id 查询流程图片
+     * @param pdid
+     * @param response
+     * @throws Exception
+     */
+    @ApiOperation("查看工作流图片")
+    @RequestMapping(value = "/act/showResource", method = RequestMethod.GET)
+    public void showResource(@RequestParam("pdid") String pdid,
+                             HttpServletResponse response) throws Exception {
+        System.out.println("查看工作流图片"+pdid);
+        Model model = repositoryService.createModelQuery().modelId(pdid).singleResult();
+        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(model.getDeploymentId()).singleResult();
+        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinition.getId());
+        ProcessDiagramGenerator diagramGenerator = configuration.getProcessDiagramGenerator();
+        InputStream is = diagramGenerator.generateDiagram(bpmnModel, "png",  "宋体", "宋体", "宋体",
+                configuration.getClassLoader(), 1.0);
+        ServletOutputStream output = response.getOutputStream();
+        IOUtils.copy(is, output);
+    }
+
+    /**
+     * 直接通过 流程定义id 查询流程图片
+     * @param pdid
+     * @param response
+     * @throws Exception
+     */
+    @ApiOperation("查看工作流图片")
+    @RequestMapping(value = "/act/showResourceForProc", method = RequestMethod.GET)
+    public void showResourceForProc(@RequestParam("pdid") String pdid,
+                             HttpServletResponse response) throws Exception {
+        BpmnModel bpmnModel = repositoryService.getBpmnModel(pdid);
+        ProcessDiagramGenerator diagramGenerator = configuration.getProcessDiagramGenerator();
+        InputStream is = diagramGenerator.generateDiagram(bpmnModel, "png",  "宋体", "宋体", "宋体",
+                configuration.getClassLoader(), 1.0);
+        ServletOutputStream output = response.getOutputStream();
+        IOUtils.copy(is, output);
+    }
+    /**
+     * 直接通过 流程定义id 查询流程图片
+     * @param pdid
+     * @param response
+     * @throws Exception
+     */
+    @ApiOperation("发起流程前返回自定义表单")
+    @RequestMapping(value = "/act/beforeStartProc", method = RequestMethod.GET)
+    public Result beforeStartProc(@RequestParam("pdid") String pdid,
+                                    HttpServletResponse response) throws Exception {
+        // 根据流程定义id获取启动节点的formKey,也就是获取自定义表单值,启动节点就是那个流程图的第一个圈
+        String formKey = formService.getStartFormKey(pdid);
+        // 根据任务id获取任务id的formKey,也就是获取任务节点的自定义表单值
+        //formService.getTaskFormData(taskId).getFormKey();
+        return  Result.OK("",formKey);
+    }
+    @ApiOperation("发起流程")
+    @RequestMapping(value = "/act/startProc", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
+    public Result startProc(@RequestParam("procKey") String procKey,
+                            @RequestParam("businessKey") String businessKey ,HttpServletResponse response) throws Exception {
+        // 设置申请人,将之保存在流程变量中
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        Map<String ,Object > variables = new HashMap<>();
+        //variables.put("applyuserid", user.getId());
+        variables.put("userid", user.getId());
+        variables.put("applyUser", user.getId());
+      //  String[] person ={user.getId()};
+      //  variables.put("people",Arrays.asList(person));
+        Authentication.setAuthenticatedUserId(String.valueOf(user.getId()));
+
+        runtimeService.startProcessInstanceByKeyAndTenantId(procKey,businessKey,variables,"0");
+
+        //
+       Task autoTask = taskService.createTaskQuery()
+                .processDefinitionKey(procKey)
+               .processInstanceBusinessKey(businessKey).singleResult();
+        autoTask.setOwner(user.getId());
+        taskService.saveTask(autoTask);
+
+
+//        taskService.complete(autoTask.getId());
+        return  Result.OK("请求成功");
+    }
+    @ApiOperation("查询我的待办任务列表")
+    @GetMapping("/act/mylist")
+    @ResponseBody
+    public Result mylist(@RequestParam("pageNo") int pageNo,@RequestParam("pageSize") int pageSize)
+    {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = user.getId();
+        TaskQuery condition = taskService.createTaskQuery().taskAssignee(userId);
+
+        // 过滤掉流程挂起的待办任务
+        int total = condition.active().orderByTaskCreateTime().desc().list().size();
+        List<Task> taskList = condition.active().orderByTaskCreateTime().desc().listPage((pageNo-1) * pageSize, pageSize);
+        List<TaskInfo> tasks = new ArrayList<>();
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        taskList.stream().forEach(a->{
+            ProcessInstance process = runtimeService.createProcessInstanceQuery().processInstanceId(a.getProcessInstanceId()).singleResult();
+            TaskInfo info = new TaskInfo();
+            info.setAssignee(identityService.createUserQuery().userId(a.getAssignee()).singleResult().getFirstName());
+            info.setBusinessKey(process.getBusinessKey());
+            info.setCreateTime(sdf.format(a.getCreateTime()));
+            info.setTaskName(a.getName());
+            info.setExecutionId(a.getExecutionId());
+            info.setProcessInstanceId(a.getProcessInstanceId());
+            info.setProcessName(process.getProcessDefinitionName());
+            info.setStarter(process.getStartUserId()==null?"0":identityService.createUserQuery().userId(process.getStartUserId()).singleResult().getFirstName());
+            info.setStartTime(sdf.format(process.getStartTime()));
+            info.setTaskId(a.getId());
+            String formKey = formService.getTaskFormData(a.getId()).getFormKey();
+            info.setFormKey(formKey);
+            tasks.add(info);
+        });
+        Result.OKK(tasks,total);
+        return Result.OKK(tasks,total);
+    }
+    @ApiOperation("流程图进度追踪")
+    @RequestMapping(value = {"/traceProcess/{processInstanceId}"}, method = RequestMethod.GET)
+    public void traceprocess(@PathVariable String processInstanceId, HttpServletResponse response) throws IOException {
+        activitiTracingChart.generateFlowChart(processInstanceId, response.getOutputStream());
+    }
+    @ApiOperation("办理一个用户任务")
+    @RequestMapping(value = "/completeTask/{taskId}", method = RequestMethod.POST)
+    @ResponseBody
+    public AjaxResult completeTask(@PathVariable("taskId") String taskId, @RequestBody(required=false) Map<String, Object> variables) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String username = user.getId();
+        taskService.setAssignee(taskId, username);
+        // 查出流程实例id
+        String processInstanceId = taskService.createTaskQuery().taskId(taskId).singleResult().getProcessInstanceId();
+        if (variables == null) {
+            taskService.complete(taskId);
+        } else {
+            // 添加审批意见
+            if (variables.get("comment") != null) {
+                taskService.addComment(taskId, processInstanceId, (String) variables.get("comment"));
+                variables.remove("comment");
+            }
+            taskService.complete(taskId, variables);
+        }
+        return AjaxResult.success();
+    }
     /**
      * stencilset
      *
@@ -75,6 +312,7 @@ public class ServiceController {
         }
     }
 
+
     /**
      * 模型详情
      *
@@ -97,7 +335,7 @@ public class ServiceController {
                 }
                 modelNode.put("modelId", model.getId());
                 ObjectNode editorJsonNode = (ObjectNode)objectMapper
-                    .readTree(new String(repositoryService.getModelEditorSource(model.getId()), "utf-8"));
+                        .readTree(new String(repositoryService.getModelEditorSource(model.getId()), "utf-8"));
                 modelNode.set("model", editorJsonNode);
 
             } catch (Exception e) {
@@ -146,4 +384,75 @@ public class ServiceController {
             throw new ActivitiException("Error saving model", e);
         }
     }
-}
+    @ApiOperation("查询所有流程实例列表-包含在运行和已结束")
+    @RequestMapping(value = "/listHistoryProcess", method = RequestMethod.GET)
+    @ResponseBody
+    public Result listHistoryProcess(@RequestParam(required = false) String bussinesskey, @RequestParam(required = false) String name,
+                                     @RequestParam(required = false) String processInstanceId,
+                                     Integer pageSize, Integer pageNo) {
+        int start = (pageNo - 1) * pageSize;
+        HistoricProcessInstanceQuery condition = historyService.createHistoricProcessInstanceQuery();
+        // historyService.createHistoricActivityInstanceQuery();   //历史活动
+        // historyService.createHistoricTaskInstanceQuery();       //历史任务
+        // historyService.createHistoricVariableInstanceQuery();   //历史变量
+        if (StringUtils.isNotEmpty(bussinesskey)) {
+            condition.processInstanceBusinessKey(bussinesskey);
+        }
+        if (StringUtils.isNotEmpty(name)) {
+            condition.processDefinitionName(name);
+        }
+        if (StringUtils.isNotEmpty(processInstanceId)) {
+            condition.processInstanceId(processInstanceId);
+        }
+        int total = condition.orderByProcessInstanceStartTime().desc().list().size();
+        List<HistoricProcessInstance> processList = condition.orderByProcessInstanceStartTime().desc().listPage(start, pageSize);
+        List<FlowInfo> flows = new ArrayList<>();
+        processList.stream().forEach(p -> {
+            FlowInfo info = new FlowInfo();
+            info.setProcessInstanceId(p.getId());
+            info.setBusinessKey(p.getBusinessKey());
+            info.setName(p.getProcessDefinitionName());
+            info.setStartTime(p.getStartTime());
+            info.setEndTime(p.getEndTime());
+            info.setStartUserId(p.getStartUserId());
+            if(StringUtils.isNotEmpty(p.getStartUserId()) && (!p.getStartUserId().equals("")) && (!p.getStartUserId().equals("null"))){
+                User user1 = identityService.createUserQuery().userId(p.getStartUserId()).singleResult();
+                info.setStartUserId(user1.getFirstName());
+            }
+            if (p.getEndTime() == null) {
+                info.setEnded(false);
+                // 查看当前活动任务
+                List<Task> tasks =  taskService.createTaskQuery().processInstanceId(p.getId()).list();
+                if (tasks.size() > 0) {
+                    String taskName = "";
+                    String assignee = "";
+                    for (Task t : tasks) {
+                        taskName += t.getName() + ",";
+                        assignee += t.getAssignee() + ",";
+                    }
+                    taskName = taskName.substring(0, taskName.length() -1);
+                    assignee = assignee.substring(0, assignee.length() -1);
+                    info.setCurrentTask(taskName);
+                    info.setAssignee(assignee);
+                    if(StringUtils.isNotEmpty(assignee) && !assignee.equals("") && !assignee.equals("null")){
+                        User user = identityService.createUserQuery().userId(assignee).singleResult();
+                        info.setAssignee(user.getFirstName());
+                    }
+                }
+            } else {
+                info.setEnded(true);
+            }
+            flows.add(info);
+        });
+
+        Page p = new Page();
+        p.setRecords(flows);
+        p.setTotal(total);
+        p.setSize(pageSize);
+        p.setCurrent(pageNo);
+        p.setOrders(new ArrayList<>());
+        p.setOptimizeCountSql(true);
+        p.setSearchCount(true);
+        return Result.OK(p);
+
+    }}

+ 47 - 0
itdmServer/module-ACTIVITI/src/main/java/org/jeecg/modules/activiti/model/entity/EntityUtil.java

@@ -0,0 +1,47 @@
+package org.jeecg.modules.activiti.model.entity;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: zht
+ * @Date: 2023/6/7 15:13
+ */
+public class EntityUtil {
+    public static List<Map<String, Object>> activitiResult(List<?> objs) {
+        // 用于存放多个对象的集合
+        List<Map<String, Object>> pdResult = new ArrayList<>();
+        // 遍历方法参数中的集合
+        for (Object obj : objs) {
+            // 用于封装单个对象 get 方法返回值的 Map 集合
+            Map<String, Object> pdMap = new HashMap<>();
+            // 通过反射获取该对象的方法对象数组
+            Method[] methods = obj.getClass().getMethods();
+            // 遍历方法对象数组
+            for (Method method : methods) {
+                // 获取方法名称
+                String methodName = method.getName();
+                // 判断该方法是否名称不为 null ,并且名称是以 get 开头,满足条件进入 if 中
+                if (methodName != null && methodName.startsWith("get")) {
+                    // 设置方法的访问权限
+                    method.setAccessible(true);
+                    try {
+                        // 将方法名的 get 前缀去掉,并增加 pd 前缀
+                        String pdKey = methodName.substring(3);
+                        // 将 get 方法的名称作为 Map 的 key,将返回值作为 value 进行封装
+                        pdMap.put(pdKey, method.invoke(obj, null));
+                    } catch (Exception e) {
+                        //输出异常,由于使得后台过乱,所以关掉
+//                        e.printStackTrace();
+                    }
+                }
+            }
+            // 将封装好的 Map 集合添加到 List 集合中
+            pdResult.add(pdMap);
+        }
+        return pdResult;
+    }
+}

+ 142 - 0
itdmServer/module-ACTIVITI/src/main/java/org/jeecg/modules/activiti/model/entity/FlowInfo.java

@@ -0,0 +1,142 @@
+package org.jeecg.modules.activiti.model.entity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.util.Date;
+
+/**
+ * 流程实例信息
+ */
+public class FlowInfo {
+    String processInstanceId;
+
+    String executionId;
+
+    String parentExecutionId;
+
+    String businessKey;
+
+    String name;
+
+    Boolean suspended;
+
+    Boolean ended;
+    // 是否存活
+    Boolean active;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    Date startTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    Date endTime;
+
+    String startUserId;
+    // 当前节点
+    String currentTask;
+    // 当前办理人
+    String assignee;
+
+    public String getProcessInstanceId() {
+        return processInstanceId;
+    }
+
+    public void setProcessInstanceId(String processInstanceId) {
+        this.processInstanceId = processInstanceId;
+    }
+
+    public String getBusinessKey() {
+        return businessKey;
+    }
+
+    public void setBusinessKey(String businessKey) {
+        this.businessKey = businessKey;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Boolean getSuspended() {
+        return suspended;
+    }
+
+    public void setSuspended(Boolean suspended) {
+        this.suspended = suspended;
+    }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+
+    public String getStartUserId() {
+        return startUserId;
+    }
+
+    public void setStartUserId(String startUserId) {
+        this.startUserId = startUserId;
+    }
+
+    public Boolean getEnded() {
+        return ended;
+    }
+
+    public void setEnded(Boolean ended) {
+        this.ended = ended;
+    }
+
+    public String getCurrentTask() {
+        return currentTask;
+    }
+
+    public void setCurrentTask(String currentTask) {
+        this.currentTask = currentTask;
+    }
+
+    public String getAssignee() {
+        return assignee;
+    }
+
+    public void setAssignee(String assignee) {
+        this.assignee = assignee;
+    }
+
+    public String getExecutionId() {
+        return executionId;
+    }
+
+    public void setExecutionId(String executionId) {
+        this.executionId = executionId;
+    }
+
+    public String getParentExecutionId() {
+        return parentExecutionId;
+    }
+
+    public void setParentExecutionId(String parentExecutionId) {
+        this.parentExecutionId = parentExecutionId;
+    }
+
+    public Boolean getActive() {
+        return active;
+    }
+
+    public void setActive(Boolean active) {
+        this.active = active;
+    }
+}

+ 154 - 0
itdmServer/module-ACTIVITI/src/main/java/org/jeecg/modules/activiti/model/entity/TaskInfo.java

@@ -0,0 +1,154 @@
+package org.jeecg.modules.activiti.model.entity;
+
+public class TaskInfo {
+	
+	String taskId;
+	
+	String processInstanceId;
+	
+	String executionId;
+	
+	String businessKey;
+	
+	String processName;
+	
+	String taskName;
+	
+	String starter;
+	
+	String assignee;
+	
+	String startTime;
+
+	String endTime;
+	
+	String createTime;
+
+	String formKey;
+
+	String comment;
+
+	Integer pageSize;
+
+	Integer pageNum;
+
+	public String getProcessInstanceId() {
+		return processInstanceId;
+	}
+
+	public void setProcessInstanceId(String processInstanceId) {
+		this.processInstanceId = processInstanceId;
+	}
+
+	public String getExecutionId() {
+		return executionId;
+	}
+
+	public void setExecutionId(String executionId) {
+		this.executionId = executionId;
+	}
+
+	public String getBusinessKey() {
+		return businessKey;
+	}
+
+	public void setBusinessKey(String businessKey) {
+		this.businessKey = businessKey;
+	}
+
+	public String getProcessName() {
+		return processName;
+	}
+
+	public void setProcessName(String processName) {
+		this.processName = processName;
+	}
+
+	public String getTaskName() {
+		return taskName;
+	}
+
+	public void setTaskName(String taskName) {
+		this.taskName = taskName;
+	}
+
+	public String getStarter() {
+		return starter;
+	}
+
+	public void setStarter(String starter) {
+		this.starter = starter;
+	}
+
+	public String getAssignee() {
+		return assignee;
+	}
+
+	public void setAssignee(String assignee) {
+		this.assignee = assignee;
+	}
+
+	public String getStartTime() {
+		return startTime;
+	}
+
+	public void setStartTime(String startTime) {
+		this.startTime = startTime;
+	}
+
+	public String getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(String createTime) {
+		this.createTime = createTime;
+	}
+
+	public String getTaskId() {
+		return taskId;
+	}
+
+	public void setTaskId(String taskId) {
+		this.taskId = taskId;
+	}
+
+	public String getFormKey() {
+		return formKey;
+	}
+
+	public void setFormKey(String formKey) {
+		this.formKey = formKey;
+	}
+
+	public Integer getPageSize() {
+		return pageSize;
+	}
+
+	public void setPageSize(Integer pageSize) {
+		this.pageSize = pageSize;
+	}
+
+	public Integer getPageNum() {
+		return pageNum;
+	}
+
+	public void setPageNum(Integer pageNum) {
+		this.pageNum = pageNum;
+	}
+
+	public String getComment() {
+		return comment;
+	}
+
+	public void setComment(String comment) {
+		this.comment = comment;
+	}
+
+	public String getEndTime() {
+		return endTime;
+	}
+
+	public void setEndTime(String endTime) {
+		this.endTime = endTime;
+	}
+}

+ 176 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/customform/controller/CustomFormController.java

@@ -0,0 +1,176 @@
+package org.jeecg.modules.customform.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecg.modules.customform.entity.CustomForm;
+import org.jeecg.modules.customform.service.ICustomFormService;
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+/**
+ * @Description: 自定义表单数据
+ * @Author: jeecg-boot
+ * @Date: 2023-06-21
+ * @Version: V1.0
+ */
+@Api(tags = "自定义表单数据")
+@RestController
+@RequestMapping("/customform/customForm")
+@Slf4j
+public class CustomFormController extends JeecgController<CustomForm, ICustomFormService> {
+    @Autowired
+    private ICustomFormService customFormService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param customForm
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "自定义表单数据-分页列表查询")
+    @ApiOperation(value = "自定义表单数据-分页列表查询", notes = "自定义表单数据-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<?> queryPageList(CustomForm customForm,
+                                   @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                   HttpServletRequest req) {
+//		QueryWrapper<CustomForm> queryWrapper = QueryGenerator.initQueryWrapper(customForm, req.getParameterMap());
+        QueryWrapper<CustomForm> queryWrapper = new QueryWrapper<>();
+        if (customForm.getFormstatus() != null) {
+            queryWrapper.like("formstatus", customForm.getFormstatus());
+        }
+        Page<CustomForm> page = new Page<CustomForm>(pageNo, pageSize);
+        IPage<CustomForm> pageList = customFormService.page(page, queryWrapper);
+        return Result.OK(pageList);
+    }
+
+    /**
+     * 添加
+     *
+     * @param customForm
+     * @return
+     */
+    @AutoLog(value = "自定义表单数据-添加")
+    @ApiOperation(value = "自定义表单数据-添加", notes = "自定义表单数据-添加")
+    @PostMapping(value = "/add")
+    public Result<?> add(@RequestBody CustomForm customForm) {
+        customFormService.save(customForm);
+        return Result.OK("添加成功!");
+    }
+
+    /**
+     * 编辑
+     *
+     * @param customForm
+     * @return
+     */
+    @AutoLog(value = "自定义表单数据-编辑")
+    @ApiOperation(value = "自定义表单数据-编辑", notes = "自定义表单数据-编辑")
+    @PutMapping(value = "/edit")
+    public Result<?> edit(@RequestBody CustomForm customForm) {
+        customFormService.updateById(customForm);
+        return Result.OK("编辑成功!");
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "自定义表单数据-通过id删除")
+    @ApiOperation(value = "自定义表单数据-通过id删除", notes = "自定义表单数据-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        customFormService.removeById(id);
+        return Result.OK("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "自定义表单数据-批量删除")
+    @ApiOperation(value = "自定义表单数据-批量删除", notes = "自定义表单数据-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        this.customFormService.removeByIds(Arrays.asList(ids.split(",")));
+        return Result.OK("批量删除成功!");
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "自定义表单数据-通过id查询")
+    @ApiOperation(value = "自定义表单数据-通过id查询", notes = "自定义表单数据-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<?> queryById(@RequestParam(name = "id", required = true) String id) {
+        CustomForm customForm = customFormService.getById(id);
+        if (customForm == null) {
+            return Result.error("未找到对应数据");
+        }
+        return Result.OK(customForm);
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param customForm
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, CustomForm customForm) {
+        return super.exportXls(request, customForm, CustomForm.class, "自定义表单数据");
+    }
+
+    /**
+     * 通过excel导入数据
+     *
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, CustomForm.class);
+    }
+
+}

+ 65 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/customform/entity/CustomForm.java

@@ -0,0 +1,65 @@
+package org.jeecg.modules.customform.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 自定义表单数据
+ * @Author: jeecg-boot
+ * @Date:   2023-06-21
+ * @Version: V1.0
+ */
+@Data
+@TableName("custom_form")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="custom_form对象", description="自定义表单数据")
+public class CustomForm implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**主键*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "主键")
+    private String id;
+	/**创建人*/
+    @ApiModelProperty(value = "创建人")
+    private String createBy;
+	/**创建日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建日期")
+    private Date createTime;
+	/**更新人*/
+    @ApiModelProperty(value = "更新人")
+    private String updateBy;
+	/**更新日期*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "更新日期")
+    private Date updateTime;
+	/**所属部门*/
+    @ApiModelProperty(value = "所属部门")
+    private String sysOrgCode;
+	/**表单信息*/
+	@Excel(name = "表单信息", width = 15)
+    @ApiModelProperty(value = "表单信息")
+    private String formcontent;
+	/**表单状态*/
+	@Excel(name = "表单状态", width = 15)
+    @ApiModelProperty(value = "表单状态")
+    private String formstatus;
+}

+ 17 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/customform/mapper/CustomFormMapper.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.customform.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.customform.entity.CustomForm;
+
+/**
+ * @Description: 自定义表单数据
+ * @Author: jeecg-boot
+ * @Date:   2023-06-21
+ * @Version: V1.0
+ */
+public interface CustomFormMapper extends BaseMapper<CustomForm> {
+
+}

+ 5 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/customform/mapper/xml/CustomFormMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.demo.customform.mapper.CustomFormMapper">
+
+</mapper>

+ 14 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/customform/service/ICustomFormService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.customform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.customform.entity.CustomForm;
+
+/**
+ * @Description: 自定义表单数据
+ * @Author: jeecg-boot
+ * @Date:   2023-06-21
+ * @Version: V1.0
+ */
+public interface ICustomFormService extends IService<CustomForm> {
+
+}

+ 20 - 0
itdmServer/module-iTDM/src/main/java/org/jeecg/modules/customform/service/impl/CustomFormServiceImpl.java

@@ -0,0 +1,20 @@
+package org.jeecg.modules.customform.service.impl;
+
+
+import org.jeecg.modules.customform.entity.CustomForm;
+import org.jeecg.modules.customform.mapper.CustomFormMapper;
+import org.jeecg.modules.customform.service.ICustomFormService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 自定义表单数据
+ * @Author: jeecg-boot
+ * @Date:   2023-06-21
+ * @Version: V1.0
+ */
+@Service
+public class CustomFormServiceImpl extends ServiceImpl<CustomFormMapper, CustomForm> implements ICustomFormService {
+
+}

File diff suppressed because it is too large
+ 458349 - 1
logs/error-log.html


File diff suppressed because it is too large
+ 0 - 6115
logs/jeecgboot-2023-05-19.0.html


File diff suppressed because it is too large
+ 0 - 860
logs/jeecgboot-2023-05-19.0.log


File diff suppressed because it is too large
+ 0 - 1155
logs/jeecgboot-2023-05-20.0.html


+ 0 - 136
logs/jeecgboot-2023-05-20.0.log

@@ -1,136 +0,0 @@
-2023-05-20 21:15:15.799 [background-preinit] INFO  org.hibernate.validator.internal.util.Version:21 - HV000001: Hibernate Validator 6.2.3.Final
-2023-05-20 21:15:15.819 [main] INFO  org.jeecg.JeecgSystemApplication:55 - Starting JeecgSystemApplication using Java 1.8.0_181 on DESKTOP-JR8N83R with PID 6172 (D:\opt\iTDM-server\itdmServer\jeecg-module-system\jeecg-system-start\target\classes started by 110 in D:\opt\iTDM-server\itdmServer)
-2023-05-20 21:15:15.820 [main] INFO  org.jeecg.JeecgSystemApplication:646 - The following 1 profile is active: "dev"
-2023-05-20 21:15:19.146 [main] INFO  o.s.d.r.config.RepositoryConfigurationDelegate:262 - Multiple Spring Data modules found, entering strict repository configuration mode!
-2023-05-20 21:15:19.150 [main] INFO  o.s.d.r.config.RepositoryConfigurationDelegate:132 - Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2023-05-20 21:15:19.321 [main] INFO  o.s.d.r.config.RepositoryConfigurationDelegate:201 - Finished Spring Data repository scanning in 150 ms. Found 0 Redis repository interfaces.
-2023-05-20 21:15:19.523 [main] INFO  o.j.minidao.auto.MinidaoAutoConfiguration:23 -  ******************* init miniDao config [ begin ] *********************** 
-2023-05-20 21:15:19.524 [main] INFO  o.j.minidao.auto.MinidaoAutoConfiguration:25 -  ------ minidao.base-package ------- org.jeecg.modules.jmreport.*
-2023-05-20 21:15:19.525 [main] INFO  o.j.minidao.auto.MinidaoAutoConfiguration:42 -  *******************  init miniDao config  [ end ] *********************** 
-2023-05-20 21:15:19.647 [main] INFO  o.j.minidao.factory.MiniDaoClassPathMapperScanner:48 - register minidao name is { org.jeecg.modules.jmreport.desreport.dao.JimuReportDao }
-2023-05-20 21:15:19.647 [main] INFO  o.j.minidao.factory.MiniDaoClassPathMapperScanner:48 - register minidao name is { org.jeecg.modules.jmreport.desreport.dao.JimuReportDataSourceDao }
-2023-05-20 21:15:19.648 [main] INFO  o.j.minidao.factory.MiniDaoClassPathMapperScanner:48 - register minidao name is { org.jeecg.modules.jmreport.desreport.dao.JimuReportDbDao }
-2023-05-20 21:15:19.648 [main] INFO  o.j.minidao.factory.MiniDaoClassPathMapperScanner:48 - register minidao name is { org.jeecg.modules.jmreport.desreport.dao.JimuReportDbFieldDao }
-2023-05-20 21:15:19.648 [main] INFO  o.j.minidao.factory.MiniDaoClassPathMapperScanner:48 - register minidao name is { org.jeecg.modules.jmreport.desreport.dao.JimuReportDbParamDao }
-2023-05-20 21:15:19.648 [main] INFO  o.j.minidao.factory.MiniDaoClassPathMapperScanner:48 - register minidao name is { org.jeecg.modules.jmreport.desreport.dao.JimuReportDictDao }
-2023-05-20 21:15:19.649 [main] INFO  o.j.minidao.factory.MiniDaoClassPathMapperScanner:48 - register minidao name is { org.jeecg.modules.jmreport.desreport.dao.JimuReportDictItemDao }
-2023-05-20 21:15:19.649 [main] INFO  o.j.minidao.factory.MiniDaoClassPathMapperScanner:48 - register minidao name is { org.jeecg.modules.jmreport.desreport.dao.JimuReportLinkDao }
-2023-05-20 21:15:19.649 [main] INFO  o.j.minidao.factory.MiniDaoClassPathMapperScanner:48 - register minidao name is { org.jeecg.modules.jmreport.desreport.dao.JimuReportMapDao }
-2023-05-20 21:15:19.649 [main] INFO  o.j.minidao.factory.MiniDaoClassPathMapperScanner:48 - register minidao name is { org.jeecg.modules.jmreport.desreport.dao.JimuReportShareDao }
-2023-05-20 21:15:20.179 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean '(inner bean)#3af36922#9' of type [org.jeecgframework.minidao.aop.MiniDaoHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.186 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'jimuReportShareDao' of type [org.jeecgframework.minidao.factory.MiniDaoBeanFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.187 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean '(inner bean)#3af36922#8' of type [org.jeecgframework.minidao.aop.MiniDaoHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.188 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'jimuReportMapDao' of type [org.jeecgframework.minidao.factory.MiniDaoBeanFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.190 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean '(inner bean)#3af36922#7' of type [org.jeecgframework.minidao.aop.MiniDaoHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.191 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'jimuReportLinkDao' of type [org.jeecgframework.minidao.factory.MiniDaoBeanFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.192 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean '(inner bean)#3af36922#6' of type [org.jeecgframework.minidao.aop.MiniDaoHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.193 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'jimuReportDictItemDao' of type [org.jeecgframework.minidao.factory.MiniDaoBeanFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.194 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean '(inner bean)#3af36922#5' of type [org.jeecgframework.minidao.aop.MiniDaoHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.195 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'jimuReportDictDao' of type [org.jeecgframework.minidao.factory.MiniDaoBeanFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.196 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean '(inner bean)#3af36922#4' of type [org.jeecgframework.minidao.aop.MiniDaoHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.198 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'jimuReportDbParamDao' of type [org.jeecgframework.minidao.factory.MiniDaoBeanFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.199 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean '(inner bean)#3af36922#3' of type [org.jeecgframework.minidao.aop.MiniDaoHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.200 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'jimuReportDbFieldDao' of type [org.jeecgframework.minidao.factory.MiniDaoBeanFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.202 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean '(inner bean)#3af36922#2' of type [org.jeecgframework.minidao.aop.MiniDaoHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.203 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'jimuReportDbDao' of type [org.jeecgframework.minidao.factory.MiniDaoBeanFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.205 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean '(inner bean)#3af36922#1' of type [org.jeecgframework.minidao.aop.MiniDaoHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.206 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'jimuReportDataSourceDao' of type [org.jeecgframework.minidao.factory.MiniDaoBeanFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.207 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean '(inner bean)#3af36922' of type [org.jeecgframework.minidao.aop.MiniDaoHandler] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.208 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'jimuReportDao' of type [org.jeecgframework.minidao.factory.MiniDaoBeanFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.232 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'spring.redis-org.springframework.boot.autoconfigure.data.redis.RedisProperties' of type [org.springframework.boot.autoconfigure.data.redis.RedisProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.237 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'org.springframework.boot.autoconfigure.data.redis.LettuceConnectionConfiguration' of type [org.springframework.boot.autoconfigure.data.redis.LettuceConnectionConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.269 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'org.springframework.boot.actuate.autoconfigure.metrics.redis.LettuceMetricsAutoConfiguration' of type [org.springframework.boot.actuate.autoconfigure.metrics.redis.LettuceMetricsAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.271 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusMetricsExportAutoConfiguration' of type [org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusMetricsExportAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.278 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'management.metrics.export.prometheus-org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusProperties' of type [org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.283 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'prometheusConfig' of type [org.springframework.boot.actuate.autoconfigure.metrics.export.prometheus.PrometheusPropertiesConfigAdapter] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.287 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'collectorRegistry' of type [io.prometheus.client.CollectorRegistry] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.289 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration' of type [org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.291 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'micrometerClock' of type [io.micrometer.core.instrument.Clock$1] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.366 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'prometheusMeterRegistry' of type [io.micrometer.prometheus.PrometheusMeterRegistry] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.369 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'lettuceMetrics' of type [org.springframework.boot.actuate.autoconfigure.metrics.redis.LettuceMetricsAutoConfiguration$$Lambda$438/1185631996] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.524 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'lettuceClientResources' of type [io.lettuce.core.resource.DefaultClientResources] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.644 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'redisConnectionFactory' of type [org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.651 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'jeecgBaseConfig' of type [org.jeecg.config.JeecgBaseConfig] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:20.654 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'shiroConfig' of type [org.jeecg.config.shiro.ShiroConfig$$EnhancerBySpringCGLIB$$a420c174] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:21.011 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'spring.datasource.dynamic-com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:21.020 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration' of type [com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration$$EnhancerBySpringCGLIB$$ae72ea4c] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:21.029 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'dsProcessor' of type [com.baomidou.dynamic.datasource.processor.DsHeaderProcessor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:21.080 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'shiroRealm' of type [org.jeecg.config.shiro.ShiroRealm] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:21.754 [main] INFO  org.jeecg.config.shiro.ShiroConfig:227 - ===============(1)创建缓存管理器RedisCacheManager
-2023-05-20 21:15:21.757 [main] INFO  org.jeecg.config.shiro.ShiroConfig:245 - ===============(2)创建RedisManager,连接Redis..
-2023-05-20 21:15:21.762 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'redisManager' of type [org.crazycake.shiro.RedisManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:21.772 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'securityManager' of type [org.apache.shiro.web.mgt.DefaultWebSecurityManager] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:21.805 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'authorizationAttributeSourceAdvisor' of type [org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:21.835 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'org.apache.shiro.spring.boot.autoconfigure.ShiroBeanAutoConfiguration' of type [org.apache.shiro.spring.boot.autoconfigure.ShiroBeanAutoConfiguration$$EnhancerBySpringCGLIB$$57fd572b] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:21.839 [main] INFO  o.s.c.s.PostProcessorRegistrationDelegate$BeanPostProcessorChecker:376 - Bean 'eventBus' of type [org.apache.shiro.event.support.DefaultEventBus] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
-2023-05-20 21:15:22.273 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer:108 - Tomcat initialized with port(s): 8080 (http)
-2023-05-20 21:15:22.287 [main] INFO  org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-8080"]
-2023-05-20 21:15:22.288 [main] INFO  org.apache.catalina.core.StandardService:173 - Starting service [Tomcat]
-2023-05-20 21:15:22.289 [main] INFO  org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.60]
-2023-05-20 21:15:22.479 [main] INFO  o.a.c.c.C.[Tomcat].[localhost].[/itdmServer]:173 - Initializing Spring embedded WebApplicationContext
-2023-05-20 21:15:22.479 [main] INFO  o.s.b.w.s.c.ServletWebServerApplicationContext:290 - Root WebApplicationContext: initialization completed in 6600 ms
-2023-05-20 21:15:22.699 [main] INFO  o.j.m.jmreport.config.init.JimuReportConfiguration:99 -  Init JimuReport Config [ Token Interceptor & Resource Locations ] 
-2023-05-20 21:15:29.612 [main] INFO  com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1,master} inited
-2023-05-20 21:15:29.615 [main] INFO  c.b.dynamic.datasource.DynamicRoutingDataSource:132 - dynamic-datasource - load a datasource named [master] success
-2023-05-20 21:15:29.616 [main] INFO  c.b.dynamic.datasource.DynamicRoutingDataSource:237 - dynamic-datasource initial loaded [1] datasource,primary datasource named [master]
-2023-05-20 21:15:29.817 [main] INFO  org.hibernate.jpa.internal.util.LogHelper:31 - HHH000204: Processing PersistenceUnitInfo [name: default]
-2023-05-20 21:15:29.890 [main] INFO  org.hibernate.Version:44 - HHH000412: Hibernate ORM core version 5.6.7.Final
-2023-05-20 21:15:30.069 [main] INFO  org.hibernate.annotations.common.Version:56 - HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
-2023-05-20 21:15:30.197 [main] INFO  org.hibernate.dialect.Dialect:175 - HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
-2023-05-20 21:15:30.390 [main] INFO  o.h.e.t.jta.platform.internal.JtaPlatformInitiator:52 - HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
-2023-05-20 21:15:30.401 [main] INFO  o.s.orm.jpa.LocalContainerEntityManagerFactoryBean:437 - Initialized JPA EntityManagerFactory for persistence unit 'default'
-2023-05-20 21:15:34.340 [main] INFO  org.jeecg.common.modules.redis.config.RedisConfig:56 -  --- redis config init --- 
-2023-05-20 21:15:35.996 [main] INFO  org.quartz.impl.StdSchedulerFactory:1220 - Using default implementation for ThreadExecutor
-2023-05-20 21:15:35.998 [main] INFO  org.quartz.simpl.SimpleThreadPool:268 - Job execution threads will use class loader of thread: main
-2023-05-20 21:15:36.009 [main] INFO  org.quartz.core.SchedulerSignalerImpl:61 - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
-2023-05-20 21:15:36.010 [main] INFO  org.quartz.core.QuartzScheduler:229 - Quartz Scheduler v.2.3.2 created.
-2023-05-20 21:15:36.014 [main] INFO  o.s.scheduling.quartz.LocalDataSourceJobStore:672 - Using db table-based data access locking (synchronization).
-2023-05-20 21:15:36.017 [main] INFO  o.s.scheduling.quartz.LocalDataSourceJobStore:145 - JobStoreCMT initialized.
-2023-05-20 21:15:36.018 [main] INFO  org.quartz.core.QuartzScheduler:294 - Scheduler meta-data: Quartz Scheduler (v2.3.2) 'MyScheduler' with instanceId 'DESKTOP-JR8N83R1684588535997'
-  Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
-  NOT STARTED.
-  Currently in standby mode.
-  Number of jobs executed: 0
-  Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
-  Using job-store 'org.springframework.scheduling.quartz.LocalDataSourceJobStore' - which supports persistence. and is clustered.
-
-2023-05-20 21:15:36.018 [main] INFO  org.quartz.impl.StdSchedulerFactory:1374 - Quartz scheduler 'MyScheduler' initialized from an externally provided properties instance.
-2023-05-20 21:15:36.018 [main] INFO  org.quartz.impl.StdSchedulerFactory:1378 - Quartz scheduler version: 2.3.2
-2023-05-20 21:15:36.018 [main] INFO  org.quartz.core.QuartzScheduler:2293 - JobFactory set to: org.springframework.scheduling.quartz.SpringBeanJobFactory@764d54a0
-2023-05-20 21:15:39.573 [main] INFO  o.j.modules.jmreport.config.JmReportExecutorConfig:42 -  Init JimuReport Config [ 线程池 ] 
-2023-05-20 21:15:41.433 [main] INFO  o.a.e.c.DefaultActiviti5CompatibilityHandlerFactory:38 - Activiti 5 compatibility handler implementation not found or error during instantiation : org.activiti.compatibility.DefaultActiviti5CompatibilityHandler. Activiti 5 backwards compatibility disabled.
-2023-05-20 21:15:41.999 [main] INFO  org.activiti.engine.impl.ProcessEngineImpl:87 - ProcessEngine default created
-2023-05-20 21:15:44.320 [main] INFO  o.s.b.actuate.endpoint.web.EndpointLinksResolver:58 - Exposing 2 endpoint(s) beneath base path '/actuator'
-2023-05-20 21:15:44.481 [main] INFO  org.jeecg.config.init.CodeGenerateDbConfig:46 -  Init CodeGenerate Config [ Get Db Config From application.yml ] 
-2023-05-20 21:15:45.728 [main] INFO  org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-8080"]
-2023-05-20 21:15:45.764 [main] INFO  o.s.boot.web.embedded.tomcat.TomcatWebServer:220 - Tomcat started on port(s): 8080 (http) with context path '/itdmServer'
-2023-05-20 21:15:47.855 [main] INFO  o.s.scheduling.quartz.SchedulerFactoryBean:734 - Will start Quartz Scheduler [MyScheduler] in 1 seconds
-2023-05-20 21:15:47.876 [main] INFO  org.jeecg.JeecgSystemApplication:61 - Started JeecgSystemApplication in 33.082 seconds (JVM running for 34.783)
-2023-05-20 21:15:47.886 [main] INFO  org.jeecg.config.init.CodeTemplateInitListener:30 -  Init Code Generate Template [ 检测如果是JAR启动环境,Copy模板到config目录 ] 
-2023-05-20 21:15:47.938 [main] INFO  org.jeecg.JeecgSystemApplication:35 - 
-----------------------------------------------------------
-	Application Jeecg-Boot is running! Access URLs:
-	Local: 		http://localhost:8080/itdmServer/
-	External: 	http://192.168.1.5:8080/itdmServer/
-	Swagger文档: 	http://192.168.1.5:8080/itdmServer/doc.html
-----------------------------------------------------------
-2023-05-20 21:15:48.858 [Quartz Scheduler [MyScheduler]] INFO  o.s.scheduling.quartz.SchedulerFactoryBean:750 - Starting Quartz Scheduler now, after delay of 1 seconds
-2023-05-20 21:15:49.780 [Quartz Scheduler [MyScheduler]] INFO  org.quartz.core.QuartzScheduler:547 - Scheduler MyScheduler_$_DESKTOP-JR8N83R1684588535997 started.
-2023-05-20 21:18:11.039 [http-nio-8080-exec-3] INFO  o.a.c.c.C.[Tomcat].[localhost].[/itdmServer]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet'
-2023-05-20 21:18:11.039 [http-nio-8080-exec-3] INFO  org.springframework.web.servlet.DispatcherServlet:525 - Initializing Servlet 'dispatcherServlet'
-2023-05-20 21:18:11.042 [http-nio-8080-exec-3] INFO  org.springframework.web.servlet.DispatcherServlet:547 - Completed initialization in 3 ms
-2023-05-20 21:18:11.272 [http-nio-8080-exec-1] INFO  o.jeecg.modules.system.controller.LoginController:516 - 获取验证码,Redis key = 4561f0205bd17f5203efa54f0abbfc78,checkCode = wNWg
-2023-05-20 21:18:16.134 [http-nio-8080-exec-6] INFO  o.j.c.modules.redis.writer.JeecgRedisCacheWriter:113 - redis remove key:sys:cache:encrypt:user::admin
-2023-05-20 21:18:17.750 [http-nio-8080-exec-7] INFO  o.j.c.desensitization.aspect.SensitiveDataAspect:76 - 加密操作,Aspect程序耗时:15ms
-2023-05-20 21:18:53.410 [http-nio-8080-exec-1] INFO  org.jeecg.modules.message.websocket.WebSocket:43 - 【系统 WebSocket】有新的连接,总数为:1
-2023-05-20 21:19:52.046 [SpringApplicationShutdownHook] INFO  org.quartz.core.QuartzScheduler:585 - Scheduler MyScheduler_$_DESKTOP-JR8N83R1684588535997 paused.
-2023-05-20 21:19:52.209 [SpringApplicationShutdownHook] INFO  org.jeecg.modules.message.websocket.WebSocket:52 - 【系统 WebSocket】连接断开,总数为:0
-2023-05-20 21:19:52.232 [SpringApplicationShutdownHook] INFO  o.s.scheduling.quartz.SchedulerFactoryBean:847 - Shutting down Quartz Scheduler
-2023-05-20 21:19:52.233 [SpringApplicationShutdownHook] INFO  org.quartz.core.QuartzScheduler:666 - Scheduler MyScheduler_$_DESKTOP-JR8N83R1684588535997 shutting down.
-2023-05-20 21:19:52.233 [SpringApplicationShutdownHook] INFO  org.quartz.core.QuartzScheduler:585 - Scheduler MyScheduler_$_DESKTOP-JR8N83R1684588535997 paused.
-2023-05-20 21:19:52.235 [SpringApplicationShutdownHook] INFO  org.quartz.core.QuartzScheduler:740 - Scheduler MyScheduler_$_DESKTOP-JR8N83R1684588535997 shutdown complete.
-2023-05-20 21:19:52.242 [SpringApplicationShutdownHook] INFO  o.s.orm.jpa.LocalContainerEntityManagerFactoryBean:651 - Closing JPA EntityManagerFactory for persistence unit 'default'
-2023-05-20 21:19:52.248 [SpringApplicationShutdownHook] INFO  c.b.dynamic.datasource.DynamicRoutingDataSource:217 - dynamic-datasource start closing ....
-2023-05-20 21:19:52.251 [SpringApplicationShutdownHook] INFO  com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ...
-2023-05-20 21:19:52.261 [SpringApplicationShutdownHook] INFO  com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed
-2023-05-20 21:19:52.262 [SpringApplicationShutdownHook] INFO  c.b.dynamic.datasource.DynamicRoutingDataSource:221 - dynamic-datasource all closed success,bye