From 46cae986fe8f025e5b140ba715f2abc900c1c969 Mon Sep 17 00:00:00 2001
From: wsm <2746563060@侵权。>
Date: Wed, 6 May 2026 08:31:13 +0800
Subject: [PATCH 1/8] =?UTF-8?q?xiSpeak=E5=8F=8D=E9=A6=88=E8=A1=A8=E5=90=8E?=
=?UTF-8?q?=E7=AB=AF=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/org/jeecg/Main.java | 17 ++
.../feedback/BgXiSpeakFeedbackController.java | 168 ++++++++++++++++++
.../bg/xispeak/entity/BgXiSpeakFeedback.java | 84 +++++++++
.../mapper/BgXiSpeakFeedbackMapper.java | 16 ++
.../service/IBgXiSpeakFeedbackService.java | 14 ++
.../impl/BgXiSpeakFeedbackServiceImpl.java | 19 ++
6 files changed, 318 insertions(+)
create mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/Main.java
create mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/feedback/BgXiSpeakFeedbackController.java
create mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/entity/BgXiSpeakFeedback.java
create mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/mapper/BgXiSpeakFeedbackMapper.java
create mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/IBgXiSpeakFeedbackService.java
create mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakFeedbackServiceImpl.java
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/Main.java b/jeecg-module-supervision/src/main/java/org/jeecg/Main.java
new file mode 100644
index 0000000..28f7a57
--- /dev/null
+++ b/jeecg-module-supervision/src/main/java/org/jeecg/Main.java
@@ -0,0 +1,17 @@
+package org.jeecg;
+
+//TIP 要运行代码,请按 或
+// 点击装订区域中的 图标。
+public class Main {
+ public static void main(String[] args) {
+ //TIP 当文本光标位于高亮显示的文本处时按
+ // 查看 IntelliJ IDEA 建议如何修正。
+ System.out.printf("Hello and welcome!");
+
+ for (int i = 1; i <= 5; i++) {
+ //TIP 按 开始调试代码。我们已经设置了一个 断点
+ // 但您始终可以通过按 添加更多断点。
+ System.out.println("i = " + i);
+ }
+ }
+}
\ No newline at end of file
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/feedback/BgXiSpeakFeedbackController.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/feedback/BgXiSpeakFeedbackController.java
new file mode 100644
index 0000000..0492c00
--- /dev/null
+++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/feedback/BgXiSpeakFeedbackController.java
@@ -0,0 +1,168 @@
+package org.jeecg.modules.bg.xispeak.controller.feedback;
+
+import java.util.Arrays;
+import java.util.List;
+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 org.jeecg.modules.bg.xispeak.entity.BgXiSpeakFeedback;
+import org.jeecg.modules.bg.xispeak.service.IBgXiSpeakFeedbackService;
+
+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.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.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Operation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+
+/**
+ * @Description: 习总书记重要讲话反馈表
+ * @Author: jeecg-boot
+ * @Date: 2026-04-28
+ * @Version: V1.0
+ */
+@Tag(name="习总书记重要讲话反馈表")
+@RestController
+@RequestMapping("/bg/xispeak/bgXiSpeak")
+@Slf4j
+public class BgXiSpeakFeedbackController extends JeecgController {
+ @Autowired
+ private IBgXiSpeakFeedbackService bgXiSpeakFeedbackService;
+
+ /**
+ * 分页列表查询
+ *
+ * @param bgXiSpeakFeedback
+ * @param pageNo
+ * @param pageSize
+ * @param req
+ * @return
+ */
+ @Operation(summary="习总书记重要讲话反馈表-分页列表查询")
+ @GetMapping(value = "/listBgXiSpeakFeedbackByMainId")
+ public Result> queryPageList(BgXiSpeakFeedback bgXiSpeakFeedback,
+ @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+ @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+ HttpServletRequest req) {
+ QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(bgXiSpeakFeedback, req.getParameterMap());
+ Page page = new Page(pageNo, pageSize);
+ IPage pageList = bgXiSpeakFeedbackService.page(page, queryWrapper);
+ return Result.OK(pageList);
+ }
+
+ /**
+ * 添加
+ *
+ * @param bgXiSpeakFeedback
+ * @return
+ */
+ @AutoLog(value = "习总书记重要讲话反馈表-添加")
+ @Operation(summary="习总书记重要讲话反馈表-添加")
+ @PostMapping(value = "/addBgXiSpeakFeedback")
+ public Result add(@RequestBody BgXiSpeakFeedback bgXiSpeakFeedback) {
+ bgXiSpeakFeedbackService.save(bgXiSpeakFeedback);
+ return Result.OK("添加成功!");
+ }
+
+ /**
+ * 编辑
+ *
+ * @param bgXiSpeakFeedback
+ * @return
+ */
+ @AutoLog(value = "习总书记重要讲话反馈表-编辑")
+ @Operation(summary="习总书记重要讲话反馈表-编辑")
+ @PostMapping(value = "/editBgXiSpeakFeedback")
+ public Result edit(@RequestBody BgXiSpeakFeedback bgXiSpeakFeedback) {
+ bgXiSpeakFeedbackService.updateById(bgXiSpeakFeedback);
+ return Result.OK("编辑成功!");
+ }
+
+ /**
+ * 通过id删除
+ *
+ * @param id
+ * @return
+ */
+ @AutoLog(value = "习总书记重要讲话反馈表-通过id删除")
+ @Operation(summary="习总书记重要讲话反馈表-通过id删除")
+ @DeleteMapping(value = "/deleteBgXiSpeakFeedback")
+ public Result delete(@RequestParam(name="id",required=true) String id) {
+ bgXiSpeakFeedbackService.removeById(id);
+ return Result.OK("删除成功!");
+ }
+
+ /**
+ * 批量删除
+ *
+ * @param ids
+ * @return
+ */
+ @AutoLog(value = "习总书记重要讲话反馈表-批量删除")
+ @Operation(summary="习总书记重要讲话反馈表-批量删除")
+ @DeleteMapping(value = "/deleteBatchBgXiSpeakFeedback")
+ public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+ this.bgXiSpeakFeedbackService.removeByIds(Arrays.asList(ids.split(",")));
+ return Result.OK("批量删除成功!");
+ }
+
+ /**
+ * 通过id查询
+ *
+ * @param id
+ * @return
+ */
+ @Operation(summary="习总书记重要讲话反馈表-通过id查询")
+ @GetMapping(value = "/queryBgXiSpeakFeedbackById")
+ public Result queryById(@RequestParam(name="id",required=true) String id) {
+ BgXiSpeakFeedback bgXiSpeakFeedback = bgXiSpeakFeedbackService.getById(id);
+ if(bgXiSpeakFeedback==null) {
+ return Result.error("未找到对应数据");
+ }
+ return Result.OK(bgXiSpeakFeedback);
+ }
+
+ /**
+ * 导出excel
+ *
+ * @param request
+ * @param bgXiSpeakFeedback
+ */
+ @RequestMapping(value = "/exportBgXiSpeakFeedback")
+ public ModelAndView exportXls(HttpServletRequest request, BgXiSpeakFeedback bgXiSpeakFeedback) {
+ return super.exportXls(request, bgXiSpeakFeedback, BgXiSpeakFeedback.class, "习总书记重要讲话反馈表");
+ }
+
+ /**
+ * 通过excel导入数据
+ *
+ * @param request
+ * @param response
+ * @return
+ */
+ @RequestMapping(value = "/importBgXiSpeakFeedback", method = RequestMethod.POST)
+ public Result> importExcel(HttpServletRequest request, HttpServletResponse response, @PathVariable("mainId") String mainId) {
+ return super.importExcel(request, response, BgXiSpeakFeedback.class);
+ }
+
+}
\ No newline at end of file
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/entity/BgXiSpeakFeedback.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/entity/BgXiSpeakFeedback.java
new file mode 100644
index 0000000..2fe8368
--- /dev/null
+++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/entity/BgXiSpeakFeedback.java
@@ -0,0 +1,84 @@
+package org.jeecg.modules.bg.xispeak.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import io.swagger.v3.oas.annotations.media.Schema;
+
+/**
+ * @Description: 习总书记重要讲话反馈表
+ * @Author: jeecg-boot
+ * @Date: 2026-04-28
+ * @Version: V1.0
+ */
+@Data
+@TableName("bg_xi_speak_feedback")
+@Schema(description="习总书记重要讲话反馈表")
+public class BgXiSpeakFeedback implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**主键*/
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "主键")
+ private java.lang.String id;
+ /**创建人*/
+ @Schema(description = "创建人")
+ private java.lang.String createBy;
+ /**创建日期*/
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ @Schema(description = "创建日期")
+ private java.util.Date createTime;
+ /**更新人*/
+ @Schema(description = "更新人")
+ private java.lang.String updateBy;
+ /**更新日期*/
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ @Schema(description = "更新日期")
+ private java.util.Date updateTime;
+ /**所属部门*/
+ @Schema(description = "所属部门")
+ private java.lang.String sysOrgCode;
+ /**反馈部门id*/
+ @Excel(name = "反馈部门id", width = 15)
+ @Schema(description = "反馈部门id")
+ private java.lang.String responDeptid;
+ /**反馈部门名称*/
+ @Excel(name = "反馈部门名称", width = 15)
+ @Schema(description = "反馈部门名称")
+ private java.lang.String responDeptname;
+ /**反馈人id*/
+ @Excel(name = "反馈人id", width = 15)
+ @Schema(description = "反馈人id")
+ private java.lang.String responPersonid;
+ /**反馈人姓名*/
+ @Excel(name = "反馈人姓名", width = 15)
+ @Schema(description = "反馈人姓名")
+ private java.lang.String responPersonname;
+ /**反馈时间*/
+ @Excel(name = "反馈时间", width = 15, format = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+ @Schema(description = "反馈时间")
+ private java.util.Date responTime;
+ /**落实情况*/
+ @Excel(name = "落实情况", width = 15)
+ @Schema(description = "落实情况")
+ private java.lang.String implStatus;
+ /**完成状态*/
+ @Excel(name = "完成状态", width = 15)
+ @Schema(description = "完成状态")
+ private java.lang.String completionStatus;
+ /**外键*/
+ @Excel(name = "外键", width = 15)
+ @Schema(description = "外键")
+ private java.lang.String mainId;
+}
\ No newline at end of file
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/mapper/BgXiSpeakFeedbackMapper.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/mapper/BgXiSpeakFeedbackMapper.java
new file mode 100644
index 0000000..93d2b74
--- /dev/null
+++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/mapper/BgXiSpeakFeedbackMapper.java
@@ -0,0 +1,16 @@
+package org.jeecg.modules.bg.xispeak.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.jeecg.modules.bg.xispeak.entity.BgXiSpeakFeedback;
+
+/**
+ * @Description: 习总书记重要讲话反馈表
+ * @Author: jeecg-boot
+ * @Date: 2026-04-28
+ * @Version: V1.0
+ */
+@Mapper
+public interface BgXiSpeakFeedbackMapper extends BaseMapper {
+
+}
\ No newline at end of file
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/IBgXiSpeakFeedbackService.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/IBgXiSpeakFeedbackService.java
new file mode 100644
index 0000000..3861ba1
--- /dev/null
+++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/IBgXiSpeakFeedbackService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.bg.xispeak.service;
+
+import org.jeecg.modules.bg.xispeak.entity.BgXiSpeakFeedback;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 习总书记重要讲话反馈表
+ * @Author: jeecg-boot
+ * @Date: 2026-04-28
+ * @Version: V1.0
+ */
+public interface IBgXiSpeakFeedbackService extends IService {
+
+}
\ No newline at end of file
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakFeedbackServiceImpl.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakFeedbackServiceImpl.java
new file mode 100644
index 0000000..d68a1e7
--- /dev/null
+++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/service/impl/BgXiSpeakFeedbackServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.bg.xispeak.service.impl;
+
+import org.jeecg.modules.bg.xispeak.entity.BgXiSpeakFeedback;
+import org.jeecg.modules.bg.xispeak.mapper.BgXiSpeakFeedbackMapper;
+import org.jeecg.modules.bg.xispeak.service.IBgXiSpeakFeedbackService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 习总书记重要讲话反馈表
+ * @Author: jeecg-boot
+ * @Date: 2026-04-28
+ * @Version: V1.0
+ */
+@Service
+public class BgXiSpeakFeedbackServiceImpl extends ServiceImpl implements IBgXiSpeakFeedbackService {
+
+}
\ No newline at end of file
From 97d61af6c24e80962bf9e57eeec6f19f553dae37 Mon Sep 17 00:00:00 2001
From: wsm <2746563060@侵权。>
Date: Wed, 6 May 2026 08:32:25 +0800
Subject: [PATCH 2/8] =?UTF-8?q?xiSpeak-flow=E6=A8=A1=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
jeecg-boot-module/jeecg-module-flow/pom.xml | 41 ++++++
.../src/main/java/org/jeecg/Main.java | 17 +++
.../java/org/jeecg/xispeak/XiSpeakConfig.java | 33 +++++
.../java/org/jeecg/xispeak/XiSpeakFlow.java | 129 ++++++++++++++++++
.../listener/AfterSDWApproveHqListener.java | 118 ++++++++++++++++
.../src/main/resources/application-flow.yml | 8 ++
6 files changed, 346 insertions(+)
create mode 100644 jeecg-boot-module/jeecg-module-flow/pom.xml
create mode 100644 jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/Main.java
create mode 100644 jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakConfig.java
create mode 100644 jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakFlow.java
create mode 100644 jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/listener/AfterSDWApproveHqListener.java
create mode 100644 jeecg-boot-module/jeecg-module-flow/src/main/resources/application-flow.yml
diff --git a/jeecg-boot-module/jeecg-module-flow/pom.xml b/jeecg-boot-module/jeecg-module-flow/pom.xml
new file mode 100644
index 0000000..608b87b
--- /dev/null
+++ b/jeecg-boot-module/jeecg-module-flow/pom.xml
@@ -0,0 +1,41 @@
+
+
+ 4.0.0
+
+ jeecg-boot-module
+ org.jeecgframework.boot
+ ${jeecgProjectVersion}
+
+
+ jeecg-module-flow
+
+
+ 21
+ 21
+ UTF-8
+
+
+
+
+ org.jeecgframework.boot
+ jeecg-boot-base-core
+
+
+ org.jeecgframework.boot
+ jeecg-system-local-api
+
+
+ org.jeecgframework.boot
+ jeecg-boot-module-bpm-flowable
+ 3.8.0
+ compile
+
+
+ org.jeecgframework.boot
+ jeecg-system-biz
+
+
+
+
\ No newline at end of file
diff --git a/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/Main.java b/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/Main.java
new file mode 100644
index 0000000..28f7a57
--- /dev/null
+++ b/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/Main.java
@@ -0,0 +1,17 @@
+package org.jeecg;
+
+//TIP 要运行代码,请按 或
+// 点击装订区域中的 图标。
+public class Main {
+ public static void main(String[] args) {
+ //TIP 当文本光标位于高亮显示的文本处时按
+ // 查看 IntelliJ IDEA 建议如何修正。
+ System.out.printf("Hello and welcome!");
+
+ for (int i = 1; i <= 5; i++) {
+ //TIP 按 开始调试代码。我们已经设置了一个 断点
+ // 但您始终可以通过按 添加更多断点。
+ System.out.println("i = " + i);
+ }
+ }
+}
\ No newline at end of file
diff --git a/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakConfig.java b/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakConfig.java
new file mode 100644
index 0000000..d9369ef
--- /dev/null
+++ b/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakConfig.java
@@ -0,0 +1,33 @@
+package org.jeecg.xispeak;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "flow-biz")
+public class XiSpeakConfig {
+ /**
+ * 对应 yml 中的 xi-speak 节点
+ * Spring 会自动将中划线命名映射为驼峰命名
+ */
+ private XiSpeakProperties xiSpeak;
+
+
+ @Data
+ public static class XiSpeakProperties {
+ /** 对应 bg-dept-id */
+ private String bgDeptId;
+ /** 对应 ld-role-id */
+ private String ldRoleId;
+ /** 对应 need-sdw-approve-code */
+ private String needSdwApproveCode;
+ /** 对应 json-data-key */
+ private String jsonDataKey;
+ /** 对应 impl-dept-key */
+ private String implDeptKey;
+ /** 对应impl-dept-collection-used*/
+ private String implDeptCollectionUsedKey;
+ }
+}
diff --git a/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakFlow.java b/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakFlow.java
new file mode 100644
index 0000000..dd147da
--- /dev/null
+++ b/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/XiSpeakFlow.java
@@ -0,0 +1,129 @@
+package org.jeecg.xispeak;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.util.StringUtils;
+import org.flowable.engine.RuntimeService;
+import org.jeecg.common.system.api.ISysBaseAPI;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Component("xiSpeakFlow")
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+public class XiSpeakFlow {
+
+ private final XiSpeakConfig xiSpeakConfig;
+ private final ISysBaseAPI iSysBaseAPI;
+ private final RuntimeService runtimeService;
+
+ public List getBgDeptLdUserIdList() {
+ // 1. 安全获取配置,防止 NPE
+ XiSpeakConfig.XiSpeakProperties props = xiSpeakConfig.getXiSpeak();
+ if (props == null || !StringUtils.hasText(props.getBgDeptId())) {
+ log.error("流程配置缺失: [flow-biz.xi-speak.bg-dept-id] 未在 YAML 中定义");
+ return Collections.emptyList();
+ }
+
+ // 2. 调用接口获取数据
+ log.info("正在查询部门: {} 下的角色: {} 的用户列表", props.getBgDeptId(), props.getLdRoleId());
+ List userList = iSysBaseAPI.getUsersListByDeptIdAndRoleIdLocalApi(
+ props.getBgDeptId(),
+ props.getLdRoleId()
+ );
+ log.info("查询到的用户为: {}", userList);
+ return userList;
+ }
+
+ public Integer getNeedSdwApproval(Object jsonData) {
+ XiSpeakConfig.XiSpeakProperties props = xiSpeakConfig.getXiSpeak();
+ if (jsonData == null || org.apache.commons.lang.StringUtils.isBlank(props.getNeedSdwApproveCode())) {
+ return 0;
+ }
+ String codeName = props.getNeedSdwApproveCode();
+ if (org.apache.commons.lang.StringUtils.isBlank(codeName)) return 0;
+ try {
+ JSONObject data;
+ if (jsonData instanceof JSONObject) {
+ data = (JSONObject) jsonData;
+ } else if (jsonData instanceof String) {
+ if (org.apache.commons.lang.StringUtils.isBlank((String) jsonData)) {
+ return 0;
+ }
+ data = JSONObject.parseObject((String) jsonData);
+ } else {
+ data = JSONObject.parseObject(JSONObject.toJSONString(jsonData));
+ }
+ log.info("needSdwApproval结果为{}", data.getInteger(codeName));
+ return data == null ? 0 : data.getInteger(codeName);
+ } catch (Exception e) {
+ log.warn("getJsondata parse failed, codeName={}, jsonData={}", codeName, jsonData, e);
+ return 0;
+ }
+ }
+
+ public List getImplDeptLdsList(String deptId) {
+ return iSysBaseAPI.getUsersListByDeptIdAndRoleIdLocalApi(deptId, xiSpeakConfig.getXiSpeak().getLdRoleId());
+ }
+
+ public int getListSize(String jsonData){
+ if (org.apache.commons.lang3.StringUtils.isEmpty(jsonData)) {
+ return 0;
+ }
+ return Math.toIntExact(Arrays.stream(jsonData.split(","))
+ .map(String::trim)
+ .filter(org.apache.commons.lang3.StringUtils::isNotEmpty)
+ .count());
+ }
+
+// List getImplDeptWorker(String JG_LOCAL_PROCESS_ID,String deptId){
+// runtimeService.get
+// }
+
+ public Integer getImplDeptNums(String jsonData) {
+ String codeName = xiSpeakConfig.getXiSpeak().getImplDeptKey();
+ if (jsonData == null || org.apache.commons.lang.StringUtils.isEmpty(codeName)) {
+ return 0;
+ }
+
+ // 1. 统一转成 JSONObject
+ JSONObject json;
+ json = JSON.parseObject((String) jsonData);
+
+ if (json == null || !json.containsKey(codeName)) {
+ return 0;
+ }
+
+ // 2. 获取原始对象进行兼容性处理
+ Object value = json.get(codeName);
+ if (value == null) {
+ return 0;
+ }
+
+ List resultList = new ArrayList<>();
+
+ if (value instanceof Collection) {
+ // 情况 A: 本身就是集合/JSON数组
+ resultList.addAll(json.getJSONArray(codeName).toJavaList(String.class));
+ } else if (value instanceof String) {
+ // 情况 B: 是逗号分隔的字符串 "ID1,ID2,ID3"
+ String str = (String) value;
+ if (org.apache.commons.lang.StringUtils.isNotEmpty(str)) {
+ // 使用 split 拆分,并过滤掉空格和空字符串
+ String[] split = str.split(",");
+ for (String s : split) {
+ if (org.apache.commons.lang.StringUtils.isNotEmpty(s.trim())) {
+ resultList.add(s.trim());
+ }
+ }
+ }
+ }
+
+ return resultList.size();
+ }
+}
diff --git a/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/listener/AfterSDWApproveHqListener.java b/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/listener/AfterSDWApproveHqListener.java
new file mode 100644
index 0000000..9d13a44
--- /dev/null
+++ b/jeecg-boot-module/jeecg-module-flow/src/main/java/org/jeecg/xispeak/listener/AfterSDWApproveHqListener.java
@@ -0,0 +1,118 @@
+package org.jeecg.modules.extbpm.listener.execution;
+
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.extbpm.process.common.expression.FlowNodeExpression;
+import lombok.RequiredArgsConstructor;
+import org.flowable.engine.RuntimeService;
+import org.flowable.engine.delegate.DelegateExecution;
+import org.flowable.engine.delegate.ExecutionListener;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.extbpm.process.common.WorkFlowGlobals;
+import org.jeecg.xispeak.XiSpeakConfig;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Component("AfterSDWApproveHqListener")
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+public class AfterSDWApproveHqListener implements ExecutionListener {
+
+ private static final long serialVersionUID = 1L;
+
+ private final FlowNodeExpression flowNodeExpression;
+ @Autowired
+ private RuntimeService runtimeService;
+
+ private final XiSpeakConfig xiSpeakConfig;
+
+ @Override
+ public void notify(DelegateExecution execution) {
+
+ XiSpeakConfig.XiSpeakProperties props = xiSpeakConfig.getXiSpeak();
+ //RuntimeService runtimeService = SpringContextUtils.getBean(RuntimeService.class);
+ String mainProcessId = (String)execution.getProcessInstanceId();
+ String url = (String)execution.getVariable(WorkFlowGlobals.BPM_FORM_CONTENT_URL);
+
+ // 打印主流程里所有的变量名,看看有没有 json_data
+ Map variables = runtimeService.getVariables(execution.getRootProcessInstanceId());
+ log.info("主流程中的所有变量名: " + variables.keySet());
+
+// 打印当前执行流的所有变量名
+ log.info("当前执行流的所有变量名: " + execution.getVariables().keySet());
+
+ String bizTitle = (String)runtimeService.getVariable(mainProcessId,WorkFlowGlobals.BPM_BIZ_TITLE);
+
+ if(org.apache.commons.lang.StringUtil.isEmpty(url)) {
+ url = (String)runtimeService.getVariable(mainProcessId,WorkFlowGlobals.BPM_FORM_CONTENT_URL);
+ String mobileUrl = (String)runtimeService.getVariable(mainProcessId,WorkFlowGlobals.BPM_FORM_CONTENT_URL_MOBILE);
+ execution.setVariable(WorkFlowGlobals.BPM_FORM_CONTENT_URL, url);
+ execution.setVariable(WorkFlowGlobals.BPM_FORM_CONTENT_URL_MOBILE, mobileUrl);
+ }
+
+ // 1. 获取主流程中的 json_data 对象(可能是 String 或 JSONObject)
+ Object jsonDataObj = (String)runtimeService.getVariable(mainProcessId,props.getJsonDataKey());
+
+ if (oConvertUtils.isNotEmpty(jsonDataObj)) {
+ String json_data = jsonDataObj.toString();
+ try {
+ // 2. 调用表达式解析工具获取特定字段的字符串内容
+ String jsonStr = flowNodeExpression.getJsondatastring(json_data, props.getImplDeptKey());
+
+ // 3. 只有当字段存在且内容不为空时,才进行解析
+ if (oConvertUtils.isNotEmpty(jsonStr)) {
+ List deptIds = Arrays.stream(jsonStr.split(","))
+ .map(String::trim) // 去掉可能存在的空格
+ .filter(s -> !s.isEmpty()) // 过滤掉空字符串
+ .collect(Collectors.toList());
+
+ if (deptIds != null && !deptIds.isEmpty()) {
+ // 4. 将提取出的 List 存入子流程变量(供多实例 Collection 使用)
+ execution.setVariable( props.getImplDeptKey(), deptIds);
+ log.info("子流程变量 deptIdList 注入成功: " + deptIds);
+ }
+ }
+ } catch (Exception e) {
+ log.error("解析 JSON 字段 pending_depts_id 失败: ", e);
+ }
+ }
+
+ //获取主表数据id
+ String businessKey = (String)runtimeService.getVariable(mainProcessId, WorkFlowGlobals.BPM_DATA_ID);
+ //获取主表的设计表单数据ID
+ String BPM_DES_DATA_ID = oConvertUtils.getString(runtimeService.getVariable(mainProcessId, WorkFlowGlobals.BPM_DES_DATA_ID));
+
+ //获取主表表名
+ String tableName = (String)runtimeService.getVariable(mainProcessId,WorkFlowGlobals.BPM_FORM_KEY);
+ execution.setVariable(WorkFlowGlobals.BPM_FORM_KEY, tableName);
+
+ //--update--begin------author:scott-----date:20210512-----for:出差借款子流程,加载表单数据为空问题---------
+ //log.info("----------传入子流程的数据ID--------------: "+execution.getVariable(WorkFlowGlobals.DATA_ID));
+ if(oConvertUtils.isNotEmpty(execution.getVariable(WorkFlowGlobals.DATA_ID))){
+ execution.setVariable(WorkFlowGlobals.BPM_DATA_ID, execution.getVariable(WorkFlowGlobals.DATA_ID));
+ //如果是设计器表单,则还需要设置设计表单数据ID
+ if(oConvertUtils.isNotEmpty(BPM_DES_DATA_ID)){
+ execution.setVariable(WorkFlowGlobals.BPM_DES_DATA_ID, execution.getVariable(WorkFlowGlobals.DATA_ID));
+ }
+ }else{
+ //未传入id值,则获取主表数据id给子流程【online表单需要】
+ execution.setVariable(WorkFlowGlobals.BPM_DATA_ID, businessKey);
+ //如果是设计器表单,则还需要设置设计表单数据ID
+ if(oConvertUtils.isNotEmpty(BPM_DES_DATA_ID)){
+ execution.setVariable(WorkFlowGlobals.BPM_DES_DATA_ID, BPM_DES_DATA_ID);
+ }
+ }
+ //--update--end------author:scott-----date:20210512-----for:出差借款子流程,加载表单数据为空问题---------
+
+ //子流程实例set业务号和主流程保持一致
+ runtimeService.updateBusinessKey(execution.getProcessInstanceId(), businessKey);
+ }
+
+
+
+
+}
diff --git a/jeecg-boot-module/jeecg-module-flow/src/main/resources/application-flow.yml b/jeecg-boot-module/jeecg-module-flow/src/main/resources/application-flow.yml
new file mode 100644
index 0000000..0feb5e8
--- /dev/null
+++ b/jeecg-boot-module/jeecg-module-flow/src/main/resources/application-flow.yml
@@ -0,0 +1,8 @@
+flow-biz:
+ xi-speak:
+ bg-dept-id: "2044677604785229826"
+ ld-role-id: "2044680793306591234"
+ need-sdw-approve-code: "needSdwApproval"
+ json-data-key: "json_data"
+ impl-dept-key: "implDept"
+ impl-dept-collection-used-key: "impl_dept_id"
From 2deaf52ddf73d3d3f9818574d9e49e40899edd8e Mon Sep 17 00:00:00 2001
From: wsm <2746563060@侵权。>
Date: Wed, 6 May 2026 08:33:56 +0800
Subject: [PATCH 3/8] =?UTF-8?q?=E6=96=B0=E5=8A=A0=E7=9B=91=E5=90=AC?=
=?UTF-8?q?=E5=99=A8=E4=BB=A5=E5=8F=8A=E6=B5=81=E7=A8=8B=E8=A1=A8=E8=BE=BE?=
=?UTF-8?q?=E5=BC=8F=E5=87=BD=E6=95=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../EmbeddedSubProcessHqStartListener.java | 117 ++++++++++++++
.../SubProcessSelectUserListener.java | 61 +++++++
.../process/common/WorkFlowGlobals.java | 6 +
.../common/expression/FlowNodeExpression.java | 153 +++++++++++++++++-
4 files changed, 336 insertions(+), 1 deletion(-)
create mode 100644 jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/execution/EmbeddedSubProcessHqStartListener.java
create mode 100644 jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/execution/SubProcessSelectUserListener.java
diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/execution/EmbeddedSubProcessHqStartListener.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/execution/EmbeddedSubProcessHqStartListener.java
new file mode 100644
index 0000000..8027061
--- /dev/null
+++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/execution/EmbeddedSubProcessHqStartListener.java
@@ -0,0 +1,117 @@
+package org.jeecg.modules.extbpm.listener.execution;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtil;
+import org.jeecg.modules.extbpm.process.common.expression.FlowNodeExpression;
+import com.alibaba.fastjson.JSON;
+import lombok.RequiredArgsConstructor;
+import org.flowable.engine.RuntimeService;
+import org.flowable.engine.delegate.DelegateExecution;
+import org.flowable.engine.delegate.ExecutionListener;
+import org.jeecg.common.util.SpringContextUtils;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.extbpm.process.common.WorkFlowGlobals;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Component("embeddedSubProcessHqStartListener")
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+public class EmbeddedSubProcessHqStartListener implements ExecutionListener {
+
+ private static final long serialVersionUID = 1L;
+
+ private final FlowNodeExpression flowNodeExpression;
+ @Autowired
+ private RuntimeService runtimeService;
+
+ @Override
+ public void notify(DelegateExecution execution) {
+
+ //RuntimeService runtimeService = SpringContextUtils.getBean(RuntimeService.class);
+ String mainProcessId = (String)execution.getProcessInstanceId();
+ String url = (String)execution.getVariable(WorkFlowGlobals.BPM_FORM_CONTENT_URL);
+
+ // 打印主流程里所有的变量名,看看有没有 json_data
+ Map variables = runtimeService.getVariables(execution.getRootProcessInstanceId());
+ log.info("主流程中的所有变量名: " + variables.keySet());
+
+// 打印当前执行流的所有变量名
+ log.info("当前执行流的所有变量名: " + execution.getVariables().keySet());
+
+ String bizTitle = (String)runtimeService.getVariable(mainProcessId,WorkFlowGlobals.BPM_BIZ_TITLE);
+
+ if(org.apache.commons.lang.StringUtil.isEmpty(url)) {
+ url = (String)runtimeService.getVariable(mainProcessId,WorkFlowGlobals.BPM_FORM_CONTENT_URL);
+ String mobileUrl = (String)runtimeService.getVariable(mainProcessId,WorkFlowGlobals.BPM_FORM_CONTENT_URL_MOBILE);
+ execution.setVariable(WorkFlowGlobals.BPM_FORM_CONTENT_URL, url);
+ execution.setVariable(WorkFlowGlobals.BPM_FORM_CONTENT_URL_MOBILE, mobileUrl);
+ }
+
+ // 1. 获取主流程中的 json_data 对象(可能是 String 或 JSONObject)
+ Object jsonDataObj = (String)runtimeService.getVariable(mainProcessId,"json_data");
+
+ if (oConvertUtils.isNotEmpty(jsonDataObj)) {
+ String json_data = jsonDataObj.toString();
+ try {
+ // 2. 调用表达式解析工具获取特定字段的字符串内容
+ String jsonStr = flowNodeExpression.getJsondatastring(json_data, "implDept");
+
+ // 3. 只有当字段存在且内容不为空时,才进行解析
+ if (oConvertUtils.isNotEmpty(jsonStr)) {
+ List deptIds = Arrays.stream(jsonStr.split(","))
+ .map(String::trim) // 去掉可能存在的空格
+ .filter(s -> !s.isEmpty()) // 过滤掉空字符串
+ .collect(Collectors.toList());
+
+ if (deptIds != null && !deptIds.isEmpty()) {
+ // 4. 将提取出的 List 存入子流程变量(供多实例 Collection 使用)
+ execution.setVariable("pending_depts_id", deptIds);
+ log.info("子流程变量 deptIdList 注入成功: " + deptIds);
+ }
+ }
+ } catch (Exception e) {
+ log.error("解析 JSON 字段 pending_depts_id 失败: ", e);
+ }
+ }
+
+ //获取主表数据id
+ String businessKey = (String)runtimeService.getVariable(mainProcessId, WorkFlowGlobals.BPM_DATA_ID);
+ //获取主表的设计表单数据ID
+ String BPM_DES_DATA_ID = oConvertUtils.getString(runtimeService.getVariable(mainProcessId, WorkFlowGlobals.BPM_DES_DATA_ID));
+
+ //获取主表表名
+ String tableName = (String)runtimeService.getVariable(mainProcessId,WorkFlowGlobals.BPM_FORM_KEY);
+ execution.setVariable(WorkFlowGlobals.BPM_FORM_KEY, tableName);
+
+ //--update--begin------author:scott-----date:20210512-----for:出差借款子流程,加载表单数据为空问题---------
+ //log.info("----------传入子流程的数据ID--------------: "+execution.getVariable(WorkFlowGlobals.DATA_ID));
+ if(oConvertUtils.isNotEmpty(execution.getVariable(WorkFlowGlobals.DATA_ID))){
+ execution.setVariable(WorkFlowGlobals.BPM_DATA_ID, execution.getVariable(WorkFlowGlobals.DATA_ID));
+ //如果是设计器表单,则还需要设置设计表单数据ID
+ if(oConvertUtils.isNotEmpty(BPM_DES_DATA_ID)){
+ execution.setVariable(WorkFlowGlobals.BPM_DES_DATA_ID, execution.getVariable(WorkFlowGlobals.DATA_ID));
+ }
+ }else{
+ //未传入id值,则获取主表数据id给子流程【online表单需要】
+ execution.setVariable(WorkFlowGlobals.BPM_DATA_ID, businessKey);
+ //如果是设计器表单,则还需要设置设计表单数据ID
+ if(oConvertUtils.isNotEmpty(BPM_DES_DATA_ID)){
+ execution.setVariable(WorkFlowGlobals.BPM_DES_DATA_ID, BPM_DES_DATA_ID);
+ }
+ }
+ //--update--end------author:scott-----date:20210512-----for:出差借款子流程,加载表单数据为空问题---------
+
+ //子流程实例set业务号和主流程保持一致
+ runtimeService.updateBusinessKey(execution.getProcessInstanceId(), businessKey);
+ }
+
+
+
+
+}
diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/execution/SubProcessSelectUserListener.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/execution/SubProcessSelectUserListener.java
new file mode 100644
index 0000000..7a57642
--- /dev/null
+++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/execution/SubProcessSelectUserListener.java
@@ -0,0 +1,61 @@
+package org.jeecg.modules.extbpm.listener.execution;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.flowable.engine.RuntimeService;
+import org.flowable.engine.delegate.DelegateExecution;
+import org.flowable.engine.delegate.ExecutionListener;
+import org.jeecg.modules.extbpm.process.common.WorkFlowGlobals;
+import org.jeecg.modules.extbpm.process.common.expression.FlowNodeExpression;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Component("subProcessSelectUserListener")
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+public class SubProcessSelectUserListener implements ExecutionListener {
+
+ private final FlowNodeExpression flowNodeExpression;
+
+ @Autowired
+ private RuntimeService runtimeService;
+
+ @Override
+ public void notify(DelegateExecution execution) {
+
+ String mainProcessId = (String) execution.getProcessInstanceId();
+ String url = (String)execution.getVariable(WorkFlowGlobals.BPM_FORM_CONTENT_URL);
+
+ // 打印主流程里所有的变量名,看看有没有 json_data
+ Map variables = runtimeService.getVariables(execution.getRootProcessInstanceId());
+ log.info("主流程中的所有变量名: " + variables.keySet());
+
+ // 打印当前执行流的所有变量名
+ log.info("当前执行流的所有变量名: " + execution.getVariables().keySet());
+
+ // 1. 获取原生组件选中的处理人 (假设 Key 为 assigneeUserIdList)
+ Object selectedValue = execution.getVariable("assigneeUserIdList");
+
+ List list = new ArrayList<>();
+ if (selectedValue instanceof String) {
+ // 如果是逗号分隔的字符串,拆分
+ list = Arrays.asList(((String) selectedValue).split(","));
+ } else if (selectedValue instanceof List) {
+ list = (List) selectedValue;
+ }
+
+ // 2. 如果没选人,给个默认值防止报错,或者抛出业务异常
+ if (list.isEmpty()) {
+ throw new RuntimeException("请选择下一步处理人!");
+ }
+
+ // 3. 关键:将这个 List 存入局部变量,供下一节点的 Multi-instance 读取
+ // 使用 setVariableLocal 确保并行子流程互不干扰
+ execution.setVariableLocal("internal_collection", list);
+ }
+}
diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/WorkFlowGlobals.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/WorkFlowGlobals.java
index 5c01be9..ca0ec91 100644
--- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/WorkFlowGlobals.java
+++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/WorkFlowGlobals.java
@@ -201,4 +201,10 @@ public final class WorkFlowGlobals {
* 流程信号启动类型:按钮触发
*/
public static String START_BUTTON_EVENT = "buttonEvent";
+
+ /**
+ * 用于加载json_data字段的键名
+ */
+ public static String JSON_DATA = "json_data";
+ public static String PENDING_DEPTS_ID = "pending_depts_id";
}
diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java
index 7eeb5ee..39dcde2 100644
--- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java
+++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java
@@ -1,6 +1,7 @@
package org.jeecg.modules.extbpm.process.common.expression;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -75,6 +76,144 @@ public class FlowNodeExpression {
}
}
+ /**
+ * 根据字段名称在json_data内查询对应list或set的长度
+ * ${flowNodeExpression.getJsonDataSizeByCodeName(json_data,"pending_depts_id")}
+ *
+ * @param jsonData
+ * @param codeName
+ * @return
+ */
+ public Integer getJsonDataSizeByCodeNameStr(Object jsonData, String codeName){
+ if (jsonData == null || StringUtils.isEmpty(codeName)) {
+ return 0;
+ }
+
+ // 1. 统一转成 JSONObject
+ JSONObject json;
+ if (jsonData instanceof String) {
+ json = JSON.parseObject((String) jsonData);
+ } else if (jsonData instanceof JSONObject) {
+ json = (JSONObject) jsonData;
+ } else {
+ return 0;
+ }
+
+ if (json == null || !json.containsKey(codeName)) {
+ return 0;
+ }
+
+ // 2. 获取原始对象进行兼容性处理
+ Object value = json.get(codeName);
+ if (value == null) {
+ return 0;
+ }
+
+ List resultList = new ArrayList<>();
+
+ if (value instanceof Collection) {
+ // 情况 A: 本身就是集合/JSON数组
+ resultList.addAll(json.getJSONArray(codeName).toJavaList(String.class));
+ } else if (value instanceof String) {
+ // 情况 B: 是逗号分隔的字符串 "ID1,ID2,ID3"
+ String str = (String) value;
+ if (StringUtils.isNotEmpty(str)) {
+ // 使用 split 拆分,并过滤掉空格和空字符串
+ String[] split = str.split(",");
+ for (String s : split) {
+ if (StringUtils.isNotEmpty(s.trim())) {
+ resultList.add(s.trim());
+ }
+ }
+ }
+ }
+
+ return resultList.size();
+ }
+
+ /**
+ * 根据字段名称在json_data内查询对应list或set的长度
+ * ${flowNodeExpression.getJsonDataSizeByCodeName(json_data,"pending_depts_id")}
+ *
+ * @param jsonData
+ * @param codeName
+ * @return
+ */
+ public Integer getJsonDataSizeByCodeNameObj(Object jsonData, String codeName){
+ if (jsonData == null || StringUtils.isEmpty(codeName)) {
+ return 0;
+ }
+
+ // 1. 统一转成 JSONObject
+ JSONObject json;
+ if (jsonData instanceof String) {
+ json = JSON.parseObject((String) jsonData);
+ } else if (jsonData instanceof JSONObject) {
+ json = (JSONObject) jsonData;
+ } else {
+ return 0;
+ }
+
+ if (json == null || !json.containsKey(codeName)) {
+ return 0;
+ }
+
+ // 2. 获取原始对象进行兼容性处理
+ Object value = json.get(codeName);
+ if (value == null) {
+ return 0;
+ }
+
+ List resultList = new ArrayList<>();
+
+ if (value instanceof Collection) {
+ // 情况 A: 本身就是集合/JSON数组
+ resultList.addAll(json.getJSONArray(codeName).toJavaList(String.class));
+ } else if (value instanceof String) {
+ // 情况 B: 是逗号分隔的字符串 "ID1,ID2,ID3"
+ String str = (String) value;
+ if (StringUtils.isNotEmpty(str)) {
+ // 使用 split 拆分,并过滤掉空格和空字符串
+ String[] split = str.split(",");
+ for (String s : split) {
+ if (StringUtils.isNotEmpty(s.trim())) {
+ resultList.add(s.trim());
+ }
+ }
+ }
+ }
+
+ return resultList.size();
+ }
+
+ /**
+ * 优雅地从 JSON 对象中提取 List
+ */
+ private List getListFromJsonByCodeName(JSONObject json, String key) {
+ if (json == null || !json.containsKey(key)) {
+ return Collections.emptyList();
+ }
+ Object value = json.get(key);
+ if (value == null) {
+ return Collections.emptyList();
+ }
+
+ // 如果本身就是 JSONArray(Collection 子类)
+ if (value instanceof Collection) {
+ return ((JSONArray) value).toJavaList(String.class);
+ }
+
+ // 如果是逗号分隔的字符串
+ if (value instanceof String && StringUtils.isNotBlank((String) value)) {
+ return Arrays.stream(((String) value).split(","))
+ .map(String::trim)
+ .filter(StringUtils::isNotBlank)
+ .collect(Collectors.toList());
+ }
+
+ return Collections.emptyList();
+ }
+
/**
* 根据字段名称取json_data查询对应业务表单的数据
* ${flowNodeExpression.getJsondatastring(jsonData,'supDeptleaderid')}
@@ -84,7 +223,19 @@ public class FlowNodeExpression {
* @return roleId
*/
public List getUsersListByJson(Object jsonData, String deptKeyName, String roleId) {
- return ISysBaseAPI.getUsersListByJsonLocalAPI(jsonData,deptKeyName,roleId);
+ return ISysBaseAPI.getUsersListByJsonLocalAPI(jsonData, deptKeyName, roleId);
+ }
+
+ /**
+ * 根据部门id角色id获取用户列表
+ * ${flowNodeExpression.getUsersListByDeptIdAndRoleId(deptId,roleId)}
+ *
+ * @param deptId
+ * @param roleId
+ * @return roleId
+ */
+ public List getUsersListByDeptIdAndRoleId(String deptId, String roleId) {
+ return sysbase.getUsersListByDeptIdAndRoleIdLocalApi(deptId, roleId);
}
/**
From edc15cafa73631225146e1a73afbc393894380a4 Mon Sep 17 00:00:00 2001
From: wsm <2746563060@侵权。>
Date: Wed, 6 May 2026 08:37:42 +0800
Subject: [PATCH 4/8] =?UTF-8?q?user=E6=9F=A5=E8=AF=A2=E9=80=82=E9=85=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../system/controller/SysUserController.java | 4 ++--
.../system/service/ISysUserService.java | 2 +-
.../system/service/impl/SysBaseApiImpl.java | 18 ++++++++++++++++--
.../service/impl/SysUserServiceImpl.java | 4 ++--
4 files changed, 21 insertions(+), 7 deletions(-)
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
index 78e66cb..62eb120 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
@@ -545,10 +545,10 @@ public class SysUserController {
*/
@RequestMapping(value = "/queryUserByDeptAndROle", method = RequestMethod.GET)
@Operation(summary = "根据角色ID,部门ID以及用户密级查询当前用户列表", description = "原生用户查询逻辑加上密级筛选以及角色筛选") // 2. 接口描述
- public Result> queryUserByDeptAndROle(DeptRoleVO deptRoleVO
+ public Result> queryUserByDeptAndROle(DeptRoleVO deptRoleVO
) {
try {
- List sysUserList = sysUserService.queryUserByDeptAndROle(
+ List sysUserList = sysUserService.queryUserByDeptAndROle(
deptRoleVO.getDeptId(),
deptRoleVO.getRoleId(),
deptRoleVO.getSecretLevel()
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
index 5e1b815..bdc0ca4 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -495,5 +495,5 @@ public interface ISysUserService extends IService {
*/
void updatePasswordNotBindPhone(String oldPassword, String password, String username);
- List queryUserByDeptAndROle(@NotBlank(message = "deptId不为空") String deptId, @NotBlank(message = "角色id不为空") String roleId, @NotBlank(message = "secretLevel不为空") Integer secretLevel);
+ List queryUserByDeptAndROle(@NotBlank(message = "deptId不为空") String deptId, @NotBlank(message = "角色id不为空") String roleId, @NotBlank(message = "secretLevel不为空") Integer secretLevel);
}
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java
index fdb6601..efe4b70 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysBaseApiImpl.java
@@ -2100,6 +2100,7 @@ public class SysBaseApiImpl implements ISysBaseAPI {
return "";
}
+ @Override
public List getUsersListByJsonLocalAPI(Object jsonData, String deptKeyName, String roleId) {
if (jsonData == null || StringUtils.isEmpty(deptKeyName) || StringUtils.isEmpty(roleId)) {
return Collections.emptyList();
@@ -2126,7 +2127,21 @@ public class SysBaseApiImpl implements ISysBaseAPI {
return Collections.emptyList();
}
- List sysUserList = sysUserService.queryUserByDeptAndROle(
+ List sysUserList = sysUserService.queryUserByDeptAndROle(
+ deptId,
+ roleId,
+ UserSecretLevel.SECRET_LEVEL_NONE
+ );
+
+ return Optional.ofNullable(sysUserList)
+ .orElse(Collections.emptyList())
+ .stream()
+ .collect(Collectors.toList());
+ }
+
+ @Override
+ public List getUsersListByDeptIdAndRoleIdLocalApi(String deptId, String roleId){
+ List sysUserList = sysUserService.queryUserByDeptAndROle(
deptId,
roleId,
UserSecretLevel.SECRET_LEVEL_NONE
@@ -2135,7 +2150,6 @@ public class SysBaseApiImpl implements ISysBaseAPI {
return Optional.ofNullable(sysUserList)
.orElse(Collections.emptyList())
.stream()
- .map(SysUser::getUsername)
.collect(Collectors.toList());
}
}
\ No newline at end of file
diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
index d7749e1..6fdd585 100644
--- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
+++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -2416,7 +2416,7 @@ public class SysUserServiceImpl extends ServiceImpl impl
}
@Override
- public List queryUserByDeptAndROle(@NotBlank(message = "deptId不为空") String deptId, @NotBlank(message = "角色id不为空") String roleId, @NotBlank(message = "secretLevel不为空") Integer secretLevel){
- return sysUserMapper.queryUserByDeptAndROle(deptId,roleId,secretLevel);
+ public List queryUserByDeptAndROle(@NotBlank(message = "deptId不为空") String deptId, @NotBlank(message = "角色id不为空") String roleId, @NotBlank(message = "secretLevel不为空") Integer secretLevel){
+ return sysUserMapper.queryUserByDeptAndROle(deptId,roleId,secretLevel).stream().map(SysUser::getUsername).collect(Collectors.toList()) ;
}
}
From 09b6c7da12210786c18131bb2ed7783fb3cdfa54 Mon Sep 17 00:00:00 2001
From: wsm <2746563060@侵权。>
Date: Wed, 6 May 2026 08:39:42 +0800
Subject: [PATCH 5/8] =?UTF-8?q?startpom=E6=96=87=E4=BB=B6=E5=A2=9E?=
=?UTF-8?q?=E5=8A=A0=E6=B5=81=E7=A8=8B=E6=A8=A1=E5=9D=97=E5=90=AF=E5=8A=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
jeecg-module-system/jeecg-system-start/pom.xml | 4 ++++
.../src/main/java/org/jeecg/JeecgSystemApplication.java | 3 +++
2 files changed, 7 insertions(+)
diff --git a/jeecg-module-system/jeecg-system-start/pom.xml b/jeecg-module-system/jeecg-system-start/pom.xml
index 6ecc217..58c1834 100644
--- a/jeecg-module-system/jeecg-system-start/pom.xml
+++ b/jeecg-module-system/jeecg-system-start/pom.xml
@@ -27,6 +27,10 @@
org.jeecgframework.boot
jeecg-module-supervision
+
+ org.jeecgframework.boot
+ jeecg-module-flow
+
diff --git a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/JeecgSystemApplication.java b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/JeecgSystemApplication.java
index 4629276..dba8ea5 100644
--- a/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/JeecgSystemApplication.java
+++ b/jeecg-module-system/jeecg-system-start/src/main/java/org/jeecg/JeecgSystemApplication.java
@@ -40,6 +40,9 @@ public class JeecgSystemApplication extends SpringBootServletInitializer {
"Swagger文档: \thttp://" + ip + ":" + port + path + "/doc.html\n" +
"----------------------------------------------------------");
+ // 检查是否有 xiSpeakFlow 这个 Bean
+ boolean exists = application.containsBean("xiSpeakFlow");
+ System.out.println("★★★ xiSpeakFlow 是否加载成功: " + exists);
}
}
\ No newline at end of file
From 123c95a9f3294bca21dcfde9a16606e9e13acce6 Mon Sep 17 00:00:00 2001
From: wsm <2746563060@侵权。>
Date: Wed, 6 May 2026 08:48:41 +0800
Subject: [PATCH 6/8] =?UTF-8?q?localapi=E5=A2=9E=E5=8A=A0=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java | 2 ++
1 file changed, 2 insertions(+)
diff --git a/jeecg-module-system/jeecg-system-api/jeecg-system-local-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java b/jeecg-module-system/jeecg-system-api/jeecg-system-local-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java
index 4215f69..d56b809 100644
--- a/jeecg-module-system/jeecg-system-api/jeecg-system-local-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java
+++ b/jeecg-module-system/jeecg-system-api/jeecg-system-local-api/src/main/java/org/jeecg/common/system/api/ISysBaseAPI.java
@@ -564,4 +564,6 @@ public interface ISysBaseAPI extends CommonAPI {
String updateBusinessId(String businessId, List deliverablesList);
List getUsersListByJsonLocalAPI(Object jsonData, String deptKeyName, String roleId);
+
+ List getUsersListByDeptIdAndRoleIdLocalApi(String deptId, String roleId);
}
From 280708e4cabdc5ac6569d2e7cc91700fb9b5061f Mon Sep 17 00:00:00 2001
From: wsm <2746563060@侵权。>
Date: Wed, 6 May 2026 08:50:19 +0800
Subject: [PATCH 7/8] =?UTF-8?q?=E7=9D=A3=E5=8A=9E=E5=A2=9E=E5=8A=A0sdw?=
=?UTF-8?q?=E5=AE=A1=E6=89=B9=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../bg/xispeak/controller/BgXiSpeakController.java | 1 +
.../org/jeecg/modules/bg/xispeak/entity/BgXiSpeak.java | 8 ++++++++
2 files changed, 9 insertions(+)
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/BgXiSpeakController.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/BgXiSpeakController.java
index 0ea5505..522c319 100644
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/BgXiSpeakController.java
+++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/controller/BgXiSpeakController.java
@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.demo.bgpartymatter.entity.BgPartymatter;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/entity/BgXiSpeak.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/entity/BgXiSpeak.java
index 9a2e4aa..511c5b8 100644
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/entity/BgXiSpeak.java
+++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/bg/xispeak/entity/BgXiSpeak.java
@@ -157,4 +157,12 @@ public class BgXiSpeak implements Serializable {
@Excel(name = "督办次数", width = 15)
@Schema(description = "督办次数")
private java.lang.Integer supervisionCount;
+ /**dw领导userId字段*/
+ @Excel(name = "领导userId字段", width = 15)
+ @Schema(description = "领导userId字段")
+ private java.lang.String sdwLeaderList;
+ /**dw领导userId字段*/
+ @Excel(name = "是否需要sdw审批", width = 15)
+ @Schema(description = "是否需要sdw审批")
+ private java.lang.Integer needSdwApproval;
}
From 4cb68be1e48842b315860ef00b256a685933f775 Mon Sep 17 00:00:00 2001
From: wsm <2746563060@侵权。>
Date: Wed, 6 May 2026 08:51:02 +0800
Subject: [PATCH 8/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9test?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../impl/BgPartymatterServiceImpl.java | 1 -
.../controller/TestMainTableController.java | 270 ------------------
.../modules/test/entity/TestMainTable.java | 65 -----
.../modules/test/entity/TestSonTable.java | 62 ----
.../test/mapper/TestMainTableMapper.java | 17 --
.../test/mapper/TestSonTableMapper.java | 31 --
.../test/mapper/xml/TestMainTableMapper.xml | 5 -
.../test/mapper/xml/TestSonTableMapper.xml | 16 --
.../test/service/ITestMainTableService.java | 48 ----
.../test/service/ITestSonTableService.java | 22 --
.../impl/TestMainTableServiceImpl.java | 83 ------
.../service/impl/TestSonTableServiceImpl.java | 27 --
.../modules/test/vo/TestMainTablePage.java | 64 -----
13 files changed, 711 deletions(-)
delete mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/test/controller/TestMainTableController.java
delete mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/test/entity/TestMainTable.java
delete mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/test/entity/TestSonTable.java
delete mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/TestMainTableMapper.java
delete mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/TestSonTableMapper.java
delete mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/xml/TestMainTableMapper.xml
delete mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/xml/TestSonTableMapper.xml
delete mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/ITestMainTableService.java
delete mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/ITestSonTableService.java
delete mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/impl/TestMainTableServiceImpl.java
delete mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/impl/TestSonTableServiceImpl.java
delete mode 100644 jeecg-module-supervision/src/main/java/org/jeecg/modules/test/vo/TestMainTablePage.java
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/demo/bgpartymatter/service/impl/BgPartymatterServiceImpl.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/demo/bgpartymatter/service/impl/BgPartymatterServiceImpl.java
index 262ed29..43c2c68 100644
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/demo/bgpartymatter/service/impl/BgPartymatterServiceImpl.java
+++ b/jeecg-module-supervision/src/main/java/org/jeecg/modules/demo/bgpartymatter/service/impl/BgPartymatterServiceImpl.java
@@ -7,7 +7,6 @@ import org.jeecg.modules.demo.bgpartymatter.entity.BgPartymatterFeedback;
import org.jeecg.modules.demo.bgpartymatter.mapper.BgPartymatterFeedbackMapper;
import org.jeecg.modules.demo.bgpartymatter.mapper.BgPartymatterMapper;
import org.jeecg.modules.demo.bgpartymatter.service.IBgPartymatterService;
-import org.jeecg.modules.test.mapper.TestSonTableMapper;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/controller/TestMainTableController.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/controller/TestMainTableController.java
deleted file mode 100644
index 5cf41b6..0000000
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/controller/TestMainTableController.java
+++ /dev/null
@@ -1,270 +0,0 @@
-package org.jeecg.modules.test.controller;
-
-import java.io.UnsupportedEncodingException;
-import java.io.IOException;
-import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-import java.util.HashMap;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-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.vo.LoginUser;
-import org.apache.shiro.SecurityUtils;
-import org.jeecg.common.api.vo.Result;
-import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.system.query.QueryRuleEnum;
-import org.jeecg.common.util.oConvertUtils;
-import org.jeecg.modules.test.entity.TestSonTable;
-import org.jeecg.modules.test.entity.TestMainTable;
-import org.jeecg.modules.test.vo.TestMainTablePage;
-import org.jeecg.modules.test.service.ITestMainTableService;
-import org.jeecg.modules.test.service.ITestSonTableService;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
-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 com.alibaba.fastjson.JSON;
-import io.swagger.v3.oas.annotations.tags.Tag;
-import io.swagger.v3.oas.annotations.Operation;
-import org.jeecg.common.aspect.annotation.AutoLog;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
-
-
- /**
- * @Description: test
- * @Author: jeecg-boot
- * @Date: 2026-04-03
- * @Version: V1.0
- */
-@Tag(name="test")
-@RestController
-@RequestMapping("/test/testMainTable")
-@Slf4j
-public class TestMainTableController {
- @Autowired
- private ITestMainTableService testMainTableService;
- @Autowired
- private ITestSonTableService testSonTableService;
-
- /**
- * 分页列表查询
- *
- * @param testMainTable
- * @param pageNo
- * @param pageSize
- * @param req
- * @return
- */
- //@AutoLog(value = "test-分页列表查询")
- @Operation(summary="test-分页列表查询")
- @GetMapping(value = "/list")
- public Result> queryPageList(TestMainTable testMainTable,
- @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
- @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
- HttpServletRequest req) {
- QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(testMainTable, req.getParameterMap());
- Page page = new Page(pageNo, pageSize);
- IPage pageList = testMainTableService.page(page, queryWrapper);
- return Result.OK(pageList);
- }
-
- /**
- * 添加
- *
- * @param testMainTablePage
- * @return
- */
- @AutoLog(value = "test-添加")
- @Operation(summary="test-添加")
- @RequiresPermissions("test:test_main_table:add")
- @PostMapping(value = "/add")
- public Result add(@RequestBody TestMainTablePage testMainTablePage) {
- TestMainTable testMainTable = new TestMainTable();
- BeanUtils.copyProperties(testMainTablePage, testMainTable);
- testMainTableService.saveMain(testMainTable, testMainTablePage.getTestSonTableList());
- return Result.OK("添加成功!");
- }
-
- /**
- * 编辑
- *
- * @param testMainTablePage
- * @return
- */
- @AutoLog(value = "test-编辑")
- @Operation(summary="test-编辑")
- @RequiresPermissions("test:test_main_table:edit")
- @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
- public Result edit(@RequestBody TestMainTablePage testMainTablePage) {
- TestMainTable testMainTable = new TestMainTable();
- BeanUtils.copyProperties(testMainTablePage, testMainTable);
- TestMainTable testMainTableEntity = testMainTableService.getById(testMainTable.getId());
- if(testMainTableEntity==null) {
- return Result.error("未找到对应数据");
- }
- testMainTableService.updateMain(testMainTable, testMainTablePage.getTestSonTableList());
- return Result.OK("编辑成功!");
- }
-
- /**
- * 通过id删除
- *
- * @param id
- * @return
- */
- @AutoLog(value = "test-通过id删除")
- @Operation(summary="test-通过id删除")
- @RequiresPermissions("test:test_main_table:delete")
- @DeleteMapping(value = "/delete")
- public Result delete(@RequestParam(name="id",required=true) String id) {
- testMainTableService.delMain(id);
- return Result.OK("删除成功!");
- }
-
- /**
- * 批量删除
- *
- * @param ids
- * @return
- */
- @AutoLog(value = "test-批量删除")
- @Operation(summary="test-批量删除")
- @RequiresPermissions("test:test_main_table:deleteBatch")
- @DeleteMapping(value = "/deleteBatch")
- public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) {
- this.testMainTableService.delBatchMain(Arrays.asList(ids.split(",")));
- return Result.OK("批量删除成功!");
- }
-
- /**
- * 通过id查询
- *
- * @param id
- * @return
- */
- //@AutoLog(value = "test-通过id查询")
- @Operation(summary="test-通过id查询")
- @GetMapping(value = "/queryById")
- public Result queryById(@RequestParam(name="id",required=true) String id) {
- TestMainTable testMainTable = testMainTableService.getById(id);
- if(testMainTable==null) {
- return Result.error("未找到对应数据");
- }
- return Result.OK(testMainTable);
-
- }
-
- /**
- * 通过id查询
- *
- * @param id
- * @return
- */
- //@AutoLog(value = "test通过主表ID查询")
- @Operation(summary="test主表ID查询")
- @GetMapping(value = "/queryTestSonTableByMainId")
- public Result> queryTestSonTableListByMainId(@RequestParam(name="id",required=true) String id) {
- List testSonTableList = testSonTableService.selectByMainId(id);
- return Result.OK(testSonTableList);
- }
-
- /**
- * 导出excel
- *
- * @param request
- * @param testMainTable
- */
- @RequiresPermissions("test:test_main_table:exportXls")
- @RequestMapping(value = "/exportXls")
- public ModelAndView exportXls(HttpServletRequest request, TestMainTable testMainTable) {
-
- // Step.1 组装查询条件查询数据
- QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(testMainTable, request.getParameterMap());
- LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-
- //配置选中数据查询条件
- String selections = request.getParameter("selections");
- if(oConvertUtils.isNotEmpty(selections)) {
- List selectionList = Arrays.asList(selections.split(","));
- queryWrapper.in("id",selectionList);
- }
- //Step.2 获取导出数据
- List testMainTableList = testMainTableService.list(queryWrapper);
-
- // Step.3 组装pageList
- List pageList = new ArrayList();
- for (TestMainTable main : testMainTableList) {
- TestMainTablePage vo = new TestMainTablePage();
- BeanUtils.copyProperties(main, vo);
- List testSonTableList = testSonTableService.selectByMainId(main.getId());
- vo.setTestSonTableList(testSonTableList);
- pageList.add(vo);
- }
-
- // Step.4 AutoPoi 导出Excel
- ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
- mv.addObject(NormalExcelConstants.FILE_NAME, "test列表");
- mv.addObject(NormalExcelConstants.CLASS, TestMainTablePage.class);
- mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("test数据", "导出人:"+sysUser.getRealname(), "test"));
- mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
- return mv;
- }
-
- /**
- * 通过excel导入数据
- *
- * @param request
- * @param response
- * @return
- */
- @RequiresPermissions("test:test_main_table:importExcel")
- @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
- public Result> importExcel(HttpServletRequest request, HttpServletResponse response) {
- MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
- Map fileMap = multipartRequest.getFileMap();
- for (Map.Entry entity : fileMap.entrySet()) {
- // 获取上传文件对象
- MultipartFile file = entity.getValue();
- ImportParams params = new ImportParams();
- params.setTitleRows(2);
- params.setHeadRows(1);
- params.setNeedSave(true);
- try {
- List list = ExcelImportUtil.importExcel(file.getInputStream(), TestMainTablePage.class, params);
- for (TestMainTablePage page : list) {
- TestMainTable po = new TestMainTable();
- BeanUtils.copyProperties(page, po);
- testMainTableService.saveMain(po, page.getTestSonTableList());
- }
- return Result.OK("文件导入成功!数据行数:" + list.size());
- } catch (Exception e) {
- log.error(e.getMessage(),e);
- return Result.error("文件导入失败:"+e.getMessage());
- } finally {
- try {
- file.getInputStream().close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- return Result.OK("文件导入失败!");
- }
-
-}
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/entity/TestMainTable.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/entity/TestMainTable.java
deleted file mode 100644
index 603e89f..0000000
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/entity/TestMainTable.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.jeecg.modules.test.entity;
-
-import java.io.Serializable;
-import java.io.UnsupportedEncodingException;
-import java.util.Date;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import org.jeecg.common.constant.ProvinceCityArea;
-import org.jeecg.common.util.SpringContextUtils;
-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.v3.oas.annotations.media.Schema;
-
-/**
- * @Description: test
- * @Author: jeecg-boot
- * @Date: 2026-04-03
- * @Version: V1.0
- */
-@Schema(description="test")
-@Data
-@TableName("test_main_table")
-public class TestMainTable implements Serializable {
- private static final long serialVersionUID = 1L;
-
- /**主键*/
- @TableId(type = IdType.ASSIGN_ID)
- @Schema(description = "主键")
- private String id;
- /**创建人*/
- @Schema(description = "创建人")
- private String createBy;
- /**创建日期*/
- @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
- @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
- @Schema(description = "创建日期")
- private Date createTime;
- /**更新人*/
- @Schema(description = "更新人")
- private String updateBy;
- /**更新日期*/
- @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
- @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
- @Schema(description = "更新日期")
- private Date updateTime;
- /**所属部门*/
- @Schema(description = "所属部门")
- private String sysOrgCode;
- /**a字段*/
- @Excel(name = "a字段", width = 15)
- @Schema(description = "a字段")
- private String fieldA;
- /**b字段*/
- @Excel(name = "b字段", width = 15)
- @Schema(description = "b字段")
- private String fieldB;
- @TableLogic(value = "0", delval = "1")
- private int delFlag = 0;
-}
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/entity/TestSonTable.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/entity/TestSonTable.java
deleted file mode 100644
index 4dd3db8..0000000
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/entity/TestSonTable.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.jeecg.modules.test.entity;
-
-import java.io.Serializable;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import org.jeecg.common.constant.ProvinceCityArea;
-import org.jeecg.common.util.SpringContextUtils;
-import lombok.Data;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
-import org.jeecgframework.poi.excel.annotation.Excel;
-import java.util.Date;
-import io.swagger.v3.oas.annotations.media.Schema;
-import java.io.UnsupportedEncodingException;
-
-/**
- * @Description: test
- * @Author: jeecg-boot
- * @Date: 2026-04-03
- * @Version: V1.0
- */
-@Schema(description="test")
-@Data
-@TableName("test_son_table")
-public class TestSonTable implements Serializable {
- private static final long serialVersionUID = 1L;
-
- /**主键*/
- @TableId(type = IdType.ASSIGN_ID)
- @Schema(description = "主键")
- private String id;
- /**创建人*/
- @Schema(description = "创建人")
- private String createBy;
- /**创建日期*/
- @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
- @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
- @Schema(description = "创建日期")
- private Date createTime;
- /**更新人*/
- @Schema(description = "更新人")
- private String updateBy;
- /**更新日期*/
- @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
- @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
- @Schema(description = "更新日期")
- private Date updateTime;
- /**所属部门*/
- @Schema(description = "所属部门")
- private String sysOrgCode;
- /**字段c*/
- @Excel(name = "字段c", width = 15)
- @Schema(description = "字段c")
- private String fieldC;
- /**主表id*/
- @Schema(description = "主表id")
- private String mainTableId;
- @TableLogic(value = "0", delval = "1")
- private int delFlag = 0;
-}
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/TestMainTableMapper.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/TestMainTableMapper.java
deleted file mode 100644
index bf1dbc7..0000000
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/TestMainTableMapper.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.jeecg.modules.test.mapper;
-
-import java.util.List;
-
-import org.apache.ibatis.annotations.Param;
-import org.jeecg.modules.test.entity.TestMainTable;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
- * @Description: test
- * @Author: jeecg-boot
- * @Date: 2026-04-03
- * @Version: V1.0
- */
-public interface TestMainTableMapper extends BaseMapper {
-
-}
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/TestSonTableMapper.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/TestSonTableMapper.java
deleted file mode 100644
index ee502e6..0000000
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/TestSonTableMapper.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.jeecg.modules.test.mapper;
-
-import java.util.List;
-import org.jeecg.modules.test.entity.TestSonTable;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Param;
-
-/**
- * @Description: test
- * @Author: jeecg-boot
- * @Date: 2026-04-03
- * @Version: V1.0
- */
-public interface TestSonTableMapper extends BaseMapper {
-
- /**
- * 通过主表id删除子表数据
- *
- * @param mainId 主表id
- * @return boolean
- */
- public boolean deleteByMainId(@Param("mainId") String mainId);
-
- /**
- * 通过主表id查询子表数据
- *
- * @param mainId 主表id
- * @return List
- */
- public List selectByMainId(@Param("mainId") String mainId);
-}
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/xml/TestMainTableMapper.xml b/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/xml/TestMainTableMapper.xml
deleted file mode 100644
index 3954740..0000000
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/xml/TestMainTableMapper.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/xml/TestSonTableMapper.xml b/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/xml/TestSonTableMapper.xml
deleted file mode 100644
index 87ca9ba..0000000
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/mapper/xml/TestSonTableMapper.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
- DELETE
- FROM test_son_table
- WHERE
- main_table_id = #{mainId}
-
-
-
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/ITestMainTableService.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/ITestMainTableService.java
deleted file mode 100644
index e84b5be..0000000
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/ITestMainTableService.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.jeecg.modules.test.service;
-
-import org.jeecg.modules.test.entity.TestSonTable;
-import org.jeecg.modules.test.entity.TestMainTable;
-import com.baomidou.mybatisplus.extension.service.IService;
-import java.io.Serializable;
-import java.util.Collection;
-import java.util.List;
-
-/**
- * @Description: test
- * @Author: jeecg-boot
- * @Date: 2026-04-03
- * @Version: V1.0
- */
-public interface ITestMainTableService extends IService {
-
- /**
- * 添加一对多
- *
- * @param testMainTable
- * @param testSonTableList
- */
- public void saveMain(TestMainTable testMainTable,List testSonTableList) ;
-
- /**
- * 修改一对多
- *
- * @param testMainTable
- * @param testSonTableList
- */
- public void updateMain(TestMainTable testMainTable,List testSonTableList);
-
- /**
- * 删除一对多
- *
- * @param id
- */
- public void delMain (String id);
-
- /**
- * 批量删除一对多
- *
- * @param idList
- */
- public void delBatchMain (Collection extends Serializable> idList);
-
-}
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/ITestSonTableService.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/ITestSonTableService.java
deleted file mode 100644
index c171ce5..0000000
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/ITestSonTableService.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.jeecg.modules.test.service;
-
-import org.jeecg.modules.test.entity.TestSonTable;
-import com.baomidou.mybatisplus.extension.service.IService;
-import java.util.List;
-
-/**
- * @Description: test
- * @Author: jeecg-boot
- * @Date: 2026-04-03
- * @Version: V1.0
- */
-public interface ITestSonTableService extends IService {
-
- /**
- * 通过主表id查询子表数据
- *
- * @param mainId 主表id
- * @return List
- */
- public List selectByMainId(String mainId);
-}
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/impl/TestMainTableServiceImpl.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/impl/TestMainTableServiceImpl.java
deleted file mode 100644
index 4b49b82..0000000
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/impl/TestMainTableServiceImpl.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.jeecg.modules.test.service.impl;
-
-import org.jeecg.common.aspect.annotation.CascadeDelete;
-import org.jeecg.common.aspect.annotation.SonTable;
-import org.jeecg.modules.test.entity.TestMainTable;
-import org.jeecg.modules.test.entity.TestSonTable;
-import org.jeecg.modules.test.mapper.TestSonTableMapper;
-import org.jeecg.modules.test.mapper.TestMainTableMapper;
-import org.jeecg.modules.test.service.ITestMainTableService;
-import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-import java.io.Serializable;
-import java.util.List;
-import java.util.Collection;
-import org.jeecg.common.aspect.annotation.AutoLog;
-
-/**
- * @Description: test
- * @Author: jeecg-boot
- * @Date: 2026-04-03
- * @Version: V1.0
- */
-@Service
-public class TestMainTableServiceImpl extends ServiceImpl implements ITestMainTableService {
-
- @Autowired
- private TestMainTableMapper testMainTableMapper;
- @Autowired
- private TestSonTableMapper testSonTableMapper;
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void saveMain(TestMainTable testMainTable, List testSonTableList) {
- testMainTableMapper.insert(testMainTable);
- if(testSonTableList!=null && testSonTableList.size()>0) {
- for(TestSonTable entity:testSonTableList) {
- //外键设置
- entity.setMainTableId(testMainTable.getId());
- testSonTableMapper.insert(entity);
- }
- }
- }
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void updateMain(TestMainTable testMainTable,List testSonTableList) {
- testMainTableMapper.updateById(testMainTable);
-
- //1.先删除子表数据
- testSonTableMapper.deleteByMainId(testMainTable.getId());
-
- //2.子表数据重新插入
- if(testSonTableList!=null && testSonTableList.size()>0) {
- for(TestSonTable entity:testSonTableList) {
- //外键设置
- entity.setMainTableId(testMainTable.getId());
- testSonTableMapper.insert(entity);
- }
- }
- }
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- @CascadeDelete(sons = {
- // 配置子表1:Mapper类 + 子表中关联主表的字段名
- @SonTable(mapper = TestSonTableMapper.class, joinColumn = "main_table_id"),
- })
- public void delMain(String id) {
- testMainTableMapper.deleteById(id);
- }
-
- @Override
- @Transactional(rollbackFor = Exception.class)
- public void delBatchMain(Collection extends Serializable> idList) {
- for(Serializable id:idList) {
- testSonTableMapper.deleteByMainId(id.toString());
- testMainTableMapper.deleteById(id);
- }
- }
-
-}
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/impl/TestSonTableServiceImpl.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/impl/TestSonTableServiceImpl.java
deleted file mode 100644
index 3bfc3c6..0000000
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/service/impl/TestSonTableServiceImpl.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.jeecg.modules.test.service.impl;
-
-import org.jeecg.modules.test.entity.TestSonTable;
-import org.jeecg.modules.test.mapper.TestSonTableMapper;
-import org.jeecg.modules.test.service.ITestSonTableService;
-import org.springframework.stereotype.Service;
-import java.util.List;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-
-/**
- * @Description: test
- * @Author: jeecg-boot
- * @Date: 2026-04-03
- * @Version: V1.0
- */
-@Service
-public class TestSonTableServiceImpl extends ServiceImpl implements ITestSonTableService {
-
- @Autowired
- private TestSonTableMapper testSonTableMapper;
-
- @Override
- public List selectByMainId(String mainId) {
- return testSonTableMapper.selectByMainId(mainId);
- }
-}
diff --git a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/vo/TestMainTablePage.java b/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/vo/TestMainTablePage.java
deleted file mode 100644
index 0e73f8f..0000000
--- a/jeecg-module-supervision/src/main/java/org/jeecg/modules/test/vo/TestMainTablePage.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.jeecg.modules.test.vo;
-
-import java.util.List;
-import org.jeecg.modules.test.entity.TestMainTable;
-import org.jeecg.modules.test.entity.TestSonTable;
-import lombok.Data;
-import org.jeecgframework.poi.excel.annotation.Excel;
-import org.jeecgframework.poi.excel.annotation.ExcelEntity;
-import org.jeecgframework.poi.excel.annotation.ExcelCollection;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
-import java.util.Date;
-import org.jeecg.common.aspect.annotation.Dict;
-import org.jeecg.common.constant.ProvinceCityArea;
-import org.jeecg.common.util.SpringContextUtils;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-
-/**
- * @Description: test
- * @Author: jeecg-boot
- * @Date: 2026-04-03
- * @Version: V1.0
- */
-@Data
-@Schema(description="test")
-public class TestMainTablePage {
-
- /**主键*/
- @Schema(description = "主键")
- private String id;
- /**创建人*/
- @Schema(description = "创建人")
- private String createBy;
- /**创建日期*/
- @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
- @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
- @Schema(description = "创建日期")
- private Date createTime;
- /**更新人*/
- @Schema(description = "更新人")
- private String updateBy;
- /**更新日期*/
- @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
- @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
- @Schema(description = "更新日期")
- private Date updateTime;
- /**所属部门*/
- @Schema(description = "所属部门")
- private String sysOrgCode;
- /**a字段*/
- @Excel(name = "a字段", width = 15)
- @Schema(description = "a字段")
- private String fieldA;
- /**b字段*/
- @Excel(name = "b字段", width = 15)
- @Schema(description = "b字段")
- private String fieldB;
-
- @ExcelCollection(name="test")
- @Schema(description = "test")
- private List testSonTableList;
-
-}