From 23aec500b86ba51d7785de4704a57f006dd98d44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A6=E4=B8=9C=E6=81=92?= <1747763533@qq.com> Date: Tue, 9 Dec 2025 17:36:09 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=80=E4=BC=8D=E5=A4=8D=E5=AD=A6=E8=A1=A8?= =?UTF-8?q?=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../routine/SysDisBasicController.java | 90 ++++- .../com/srs/routine/domain/SysDisBasic.java | 24 ++ .../routine/domain/dto/SysDisBasicDao.java | 361 ++++++++++++++++++ .../srs/routine/domain/dto/SysDisMateDao.java | 126 ++++++ .../srs/routine/mapper/SysDisBasicMapper.java | 4 + .../routine/service/ISysDisBasicService.java | 6 + .../service/impl/SysDisBasicServiceImpl.java | 168 ++++++-- .../mapper/routine/SysDisBasicMapper.xml | 91 +++-- 8 files changed, 803 insertions(+), 67 deletions(-) create mode 100644 srs-routine/src/main/java/com/srs/routine/domain/dto/SysDisBasicDao.java create mode 100644 srs-routine/src/main/java/com/srs/routine/domain/dto/SysDisMateDao.java diff --git a/srs-admin/src/main/java/com/srs/web/controller/routine/SysDisBasicController.java b/srs-admin/src/main/java/com/srs/web/controller/routine/SysDisBasicController.java index 22f1ec5..24d05a7 100644 --- a/srs-admin/src/main/java/com/srs/web/controller/routine/SysDisBasicController.java +++ b/srs-admin/src/main/java/com/srs/web/controller/routine/SysDisBasicController.java @@ -1,8 +1,20 @@ package com.srs.web.controller.routine; +import java.io.IOException; +import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletResponse; + +import com.srs.common.utils.poi.ExcelExp; +import com.srs.common.utils.poi.ExcelUtilManySheet; +import com.srs.routine.domain.SysDisMate; +import com.srs.routine.domain.dto.SysDisBasicDao; +import com.srs.routine.domain.dto.SysDisMateDao; +import com.srs.teacher.domain.SysPerformance; +import com.srs.teacher.domain.SysTeacherThesis; +import com.srs.teacher.domain.dto.SysPerformanceDao; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -34,6 +46,9 @@ public class SysDisBasicController extends BaseController { @Autowired private ISysDisBasicService sysDisBasicService; + @Value("${srs.url}") + private String baseUrl; + /** * 查询退伍复学申请列表 */ @@ -54,11 +69,61 @@ public class SysDisBasicController extends BaseController { @Log(title = "退伍复学申请", businessType = BusinessType.EXPORT) @PostMapping("/export") @ApiOperation("导出退伍复学申请列表") - public void export(HttpServletResponse response, SysDisBasic sysDisBasic) - { + public void export(HttpServletResponse response, SysDisBasic sysDisBasic) throws IOException { List list = sysDisBasicService.selectSysDisBasicList(sysDisBasic); - ExcelUtil util = new ExcelUtil(SysDisBasic.class); - util.exportExcel(response, list, "退伍复学申请数据"); +// 基础材料 + List sysDisBasicDaos = new ArrayList<>(); +// 转专业 + List sysDisMateDaos = new ArrayList<>(); + +// 基础材料 + for (SysDisBasic item : list){ + SysDisBasicDao dao = new SysDisBasicDao(); + dao.setStId(item.getStId()); + dao.setStName(item.getStName()); + dao.setCollege(item.getCollege()); + dao.setSex(item.getSex()); + dao.setNations(item.getNations()); + dao.setStClass(item.getStClass()); + dao.setMajors(item.getMajors()); + dao.setGrade(item.getGrade()); + dao.setCollege(item.getCollege()); + dao.setReasons(item.getReasons()); + dao.setConversion(item.getConversion()); + + + sysDisBasicDaos.add(dao); + } + +// 转专业材料 + for(SysDisBasic item :list){ + SysDisMateDao dao1 = new SysDisMateDao(); + dao1.setStId(item.getStId()); + dao1.setStName(item.getStName()); + dao1.setCollege(item.getCollege()); + for (SysDisMate mate : item.getMaList()){ + dao1.setOldgrade(mate.getOldgrade()); + dao1.setOldmajor(mate.getOldmajor()); + dao1.setNewgrade(mate.getNewgrade()); + dao1.setNewmajor(mate.getNewmajor()); + dao1.setProof(baseUrl.substring(0,baseUrl.length()-1) + mate.getProof()); + dao1.setIdcard(baseUrl.substring(0,baseUrl.length()-1) + mate.getIdcard()); + dao1.setMaterial(baseUrl.substring(0,baseUrl.length()-1) + mate.getMaterial()); + } + sysDisMateDaos.add(dao1); + } + + ExcelExp e1 = new ExcelExp("基础材料", sysDisBasicDaos, SysDisBasicDao.class); + ExcelExp e2 = new ExcelExp("转专业材料", sysDisMateDaos, SysDisMateDao.class); + List mysheet = new ArrayList(); + mysheet.add(e1); + mysheet.add(e2); + ExcelUtilManySheet> util2 = new ExcelUtilManySheet>(mysheet); + util2.exportExcelManySheet(response, mysheet); + +// ExcelUtil util = new ExcelUtil(SysDisBasic.class); +// util.exportExcel(response, list, "退伍复学申请数据"); + } /** @@ -72,6 +137,23 @@ public class SysDisBasicController extends BaseController { return success(sysDisBasicService.selectSysDisBasicById(id)); } +// 根据学号查询信息 + @PreAuthorize("@ss.hasPermi('routine:basic:query')") + @GetMapping(value = "/name/{stName}") + public AjaxResult getStNameInfo(@PathVariable("stName") String stName) + { + return success(sysDisBasicService.selectSysDisBasicByStName(stName)); + } + +// 根据流程ID查询流程信息 +// selectSysDisBasicByProcessInstanceId + @PreAuthorize("@ss.hasPermi('routine:basic:query')") + @GetMapping(value = "/processId/{processId}") + public AjaxResult getProcessId(@PathVariable("processId") String processId) + { + return success(sysDisBasicService.selectSysDisBasicByProcessInstanceId(processId)); + } + /** * 新增退伍复学申请 */ diff --git a/srs-routine/src/main/java/com/srs/routine/domain/SysDisBasic.java b/srs-routine/src/main/java/com/srs/routine/domain/SysDisBasic.java index e8eebf6..6a91a60 100644 --- a/srs-routine/src/main/java/com/srs/routine/domain/SysDisBasic.java +++ b/srs-routine/src/main/java/com/srs/routine/domain/SysDisBasic.java @@ -369,6 +369,30 @@ private static final long serialVersionUID=1L; @Excel(name = "流程部署编号") private String deployId; + /** + * 学生编号 + */ + @ApiModelProperty("学生编号") + @TableField("student_id") + @Excel(name = "学生编号") + private Long studentId; + + /** + * 保留字段1 + */ + @ApiModelProperty("保留字段1") + @TableField("test_data") + @Excel(name = "保留字段1") + private String testData; + + /** + * 保留字段2 + */ + @ApiModelProperty("保留字段2") + @TableField("test_test") + @Excel(name = "保留字段2") + private String testTest; + /** * 退伍复学-填报材料 */ diff --git a/srs-routine/src/main/java/com/srs/routine/domain/dto/SysDisBasicDao.java b/srs-routine/src/main/java/com/srs/routine/domain/dto/SysDisBasicDao.java new file mode 100644 index 0000000..e888450 --- /dev/null +++ b/srs-routine/src/main/java/com/srs/routine/domain/dto/SysDisBasicDao.java @@ -0,0 +1,361 @@ +package com.srs.routine.domain.dto; + + +import com.srs.common.annotation.Excel; +import com.baomidou.mybatisplus.annotation.*; +import com.srs.routine.domain.SysDisMate; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; +import com.srs.common.core.domain.BaseEntity; + +import java.util.List; + + +/** + * 退伍复学申请对象 sys_dis_basic + * + * @author srs + * @date 2025-11-06 + */ +@Data +@ApiModel("退伍复学申请") +public class SysDisBasicDao{ + private static final long serialVersionUID=1L; + + /** + * + */ + @Excel(name = "序号",isSeq = true) + private Long seq; + +// /** +// * 复学流程ID +// */ +// @ApiModelProperty("复学流程ID") +// @Excel(name = "复学流程ID") +// private String fxId; +// +// /** +// * 流程申请时间 +// */ +// @ApiModelProperty("流程申请时间") +// @Excel(name = "流程申请时间") +// private String fxTime; + + /** + * 学号 + */ + @ApiModelProperty("学号") + @Excel(name = "学号") + private String stId; + + /** + * 姓名 + */ + @ApiModelProperty("姓名") + @Excel(name = "姓名") + private String stName; + + + @ApiModelProperty("学院") + @Excel(name = "学院") + private String college; + + /** + * 辅导员名字 + */ +// @ApiModelProperty("辅导员名字") +// @Excel(name = "辅导员名字") +// private String fdName; + + /** + * 性别 + */ + @ApiModelProperty("性别") + @Excel(name = "性别") + private String sex; + + /** + * 民族 + */ + @ApiModelProperty("民族") + @Excel(name = "民族") + private String nations; + +// /** +// * $column.columnComment +// */ +// @ApiModelProperty("${column.columnComment}") +// @Excel(name = "辅导员签名" , readConverterExp = "$column.readConverterExp()") +// private String fdQm; +// +// /** +// * $column.columnComment +// */ +// @ApiModelProperty("${column.columnComment}") +// @Excel(name = "学务签名" , readConverterExp = "$column.readConverterExp()") +// private String xwQm; +// +// /** +// * $column.columnComment +// */ +// @ApiModelProperty("${column.columnComment}") +// @Excel(name = "二级学院签名" , readConverterExp = "$column.readConverterExp()") +// private String erQm; +// +// /** +// * $column.columnComment +// */ +// @ApiModelProperty("${column.columnComment}") +// @Excel(name = "学籍管理签名" , readConverterExp = "$column.readConverterExp()") +// private String xjQm; +// +// /** +// * $column.columnComment +// */ +// @ApiModelProperty("${column.columnComment}") +// @Excel(name = "教务签名" , readConverterExp = "$column.readConverterExp()") +// private String jwQm; + + /** + * 班级 + */ + @ApiModelProperty("班级") + @Excel(name = "班级") + private String stClass; + + /** + * 专业 + */ + @ApiModelProperty("专业") + @Excel(name = "专业") + private String majors; + + /** + * 年级 + */ + @ApiModelProperty("年级") + @Excel(name = "年级") + private String grade; + + /** + * 学院 + */ + + + /** + * 原因 + */ + @ApiModelProperty("原因") + @Excel(name = "原因") + private String reasons; + +// /** +// * 辅导员意见 +// */ +// @ApiModelProperty("辅导员意见") +// @TableField("fd_idea") +// @Excel(name = "辅导员意见") +// private String fdIdea; +// +// /** +// * 二级学院意见 +// */ +// @ApiModelProperty("二级学院意见") +// @TableField("two_idea") +// @Excel(name = "二级学院意见") +// private String twoIdea; +// +// /** +// * 学务意见 +// */ +// @ApiModelProperty("学务意见") +// @TableField("xw_idea") +// @Excel(name = "学务意见") +// private String xwIdea; +// +// /** +// * 学籍管理意见 +// */ +// @ApiModelProperty("学籍管理意见") +// @TableField("xj_idea") +// @Excel(name = "学籍管理意见") +// private String xjIdea; +// +// /** +// * 教务处意见 +// */ +// @ApiModelProperty("教务处意见") +// @TableField("jw_idea") +// @Excel(name = "教务处意见") +// private String jwIdea; +// +// /** +// * 招生意见 +// */ +// @ApiModelProperty("招生意见") +// @TableField("zs_idea") +// @Excel(name = "招生意见") +// private String zsIdea; +// +// /** +// * 招生就业 +// */ +// @ApiModelProperty("招生就业") +// @TableField("zs_status") +// @Excel(name = "招生就业") +// private String zsStatus; +// +// /** +// * 时间 +// */ +// @ApiModelProperty("时间") +// @TableField("times") +// @Excel(name = "时间") +// private String times; +// +// /** +// * 辅导员审核状态 +// */ +// @ApiModelProperty("辅导员审核状态") +// @TableField("fd_status") +// @Excel(name = "辅导员审核状态") +// private String fdStatus; +// +// /** +// * +// */ +// @ApiModelProperty("") +// @TableField("xw_status") +// @Excel(name = "学务审核状态") +// private String xwStatus; +// +// /** +// * 二级学院审核状态 +// */ +// @ApiModelProperty("二级学院审核状态") +// @TableField("two_status") +// @Excel(name = "二级学院审核状态") +// private String twoStatus; +// +// /** +// * 学籍管理审核状态 +// */ +// @ApiModelProperty("学籍管理审核状态") +// @TableField("xjgl_status") +// @Excel(name = "学籍管理审核状态") +// private String xjglStatus; +// +// /** +// * 教务审核状态 +// */ +// @ApiModelProperty("教务审核状态") +// @TableField("jw_status") +// @Excel(name = "教务审核状态") +// private String jwStatus; +// +// /** +// * 退伍审核时间 +// */ +// @ApiModelProperty("退伍审核时间") +// @TableField("rw_time") +// @Excel(name = "退伍审核时间") +// private String rwTime; +// +// /** +// * 招生审核时间 +// */ +// @ApiModelProperty("招生审核时间") +// @TableField("zs_time") +// @Excel(name = "招生审核时间") +// private String zsTime; +// +// /** +// * 辅导员 +// */ +// @ApiModelProperty("辅导员") +// @TableField("fd_time") +// @Excel(name = "辅导员") +// private String fdTime; +// +// /** +// * 学务审核 +// */ +// @ApiModelProperty("学务审核") +// @TableField("xw_time") +// @Excel(name = "学务审核") +// private String xwTime; +// +// /** +// * 二时间 +// */ +// @ApiModelProperty("二时间") +// @TableField("two_time") +// @Excel(name = "二时间") +// private String twoTime; +// +// /** +// * 学籍时间 +// */ +// @ApiModelProperty("学籍时间") +// @TableField("xj_time") +// @Excel(name = "学籍时间") +// private String xjTime; +// +// /** +// * 教务审核时间 +// */ +// @ApiModelProperty("教务审核时间") +// @TableField("jw_time") +// @Excel(name = "教务审核时间") +// private String jwTime; +// +// /** +// * 空余字段 +// */ +// @ApiModelProperty("空余字段") +// @TableField("datab") +// @Excel(name = "空余字段") +// private String datab; +// +// /** +// * +// */ +// @ApiModelProperty("") +// @TableField("dataa") +// @Excel(name = "") +// private String dataa; + + /** + * 专业转换 + */ + @ApiModelProperty("专业转换") + @Excel(name = "专业转换") + private String conversion; + +// /** +// * 流程实例ID +// */ +// @ApiModelProperty("流程实例ID") +// @TableField("process_id") +// @Excel(name = "流程实例ID") +// private String processId; + +// /** +// * 流程部署编号 +// */ +// @ApiModelProperty("流程部署编号") +// @TableField("deploy_id") +// @Excel(name = "流程部署编号") +// private String deployId; + +// /** +// * 退伍复学-填报材料 +// */ +// @ApiModelProperty(value = "退伍复学-填报材料", hidden = true) +// @Excel(name = "退伍复学-填报材料") +// private List MaList; + +} + diff --git a/srs-routine/src/main/java/com/srs/routine/domain/dto/SysDisMateDao.java b/srs-routine/src/main/java/com/srs/routine/domain/dto/SysDisMateDao.java new file mode 100644 index 0000000..5e95791 --- /dev/null +++ b/srs-routine/src/main/java/com/srs/routine/domain/dto/SysDisMateDao.java @@ -0,0 +1,126 @@ +package com.srs.routine.domain.dto; + + +import com.srs.common.annotation.Excel; +import com.baomidou.mybatisplus.annotation.*; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; +import com.srs.common.core.domain.BaseEntity; + + + +/** + * 退伍复学材料对象 sys_dis_mate + * + * @author srs + * @date 2025-11-12 + */ +@Data +@ApiModel("退伍复学材料") +public class SysDisMateDao { + private static final long serialVersionUID=1L; + + /** + * + */ + @Excel(name = "序号",isSeq = true) + private Long seq; + + /** + * 学号 + */ + @ApiModelProperty("学号") + @Excel(name = "学号") + private String stId; + + /** + * 姓名 + */ + @ApiModelProperty("姓名") + @Excel(name = "姓名") + private String stName; + + @ApiModelProperty("学院") + @Excel(name = "学院") + private String college; + + /** + * 时间 + */ +// @ApiModelProperty("时间") +// @Excel(name = "时间") +// private String times; + + /** + * 学院 + */ + + /** + * 原年级 + */ + @ApiModelProperty("原年级") + @Excel(name = "原年级") + private String oldgrade; + + /** + * 原专业 + */ + @ApiModelProperty("原专业") + @Excel(name = "原专业") + private String oldmajor; + + /** + * 新年级 + */ + @ApiModelProperty("新年级") + @Excel(name = "新年级") + private String newgrade; + + /** + * 新专业 + */ + @ApiModelProperty("新专业") + @Excel(name = "新专业") + private String newmajor; + + /** + * 退役证明 + */ + @ApiModelProperty("退役证明") + @Excel(name = "退役证明") + private String proof; + + /** + * 身份证 + */ + @ApiModelProperty("身份证") + @Excel(name = "身份证") + private String idcard; + + /** + * 材料 + */ + @ApiModelProperty("材料") + @Excel(name = "材料") + private String material; +// +// /** +// * 保留字段1 +// */ +// @ApiModelProperty("保留字段1") +// @TableField("data1") +// @Excel(name = "保留字段1") +// private String data1; +// +// /** +// * 保留字段2 +// */ +// @ApiModelProperty("保留字段2") +// @TableField("data2") +// @Excel(name = "保留字段2") +// private String data2; + + +} + diff --git a/srs-routine/src/main/java/com/srs/routine/mapper/SysDisBasicMapper.java b/srs-routine/src/main/java/com/srs/routine/mapper/SysDisBasicMapper.java index 4605834..1386431 100644 --- a/srs-routine/src/main/java/com/srs/routine/mapper/SysDisBasicMapper.java +++ b/srs-routine/src/main/java/com/srs/routine/mapper/SysDisBasicMapper.java @@ -24,6 +24,10 @@ public interface SysDisBasicMapper extends BaseMapper { public SysDisBasic selectSysDisBasicById(Long id); public SysDisBasic selectSysDisBasicByStId(@Param("stId") String stId); + + public SysDisBasic selectSysDisBasicByProcessInstanceId(@Param("processId") String processId); + + public SysDisBasic selectSysDisBasicByStName(@Param("stName") String stName); /** * 查询退伍复学申请列表 * diff --git a/srs-routine/src/main/java/com/srs/routine/service/ISysDisBasicService.java b/srs-routine/src/main/java/com/srs/routine/service/ISysDisBasicService.java index 0b82960..3a68118 100644 --- a/srs-routine/src/main/java/com/srs/routine/service/ISysDisBasicService.java +++ b/srs-routine/src/main/java/com/srs/routine/service/ISysDisBasicService.java @@ -20,6 +20,10 @@ public interface ISysDisBasicService extends IService { */ public SysDisBasic selectSysDisBasicById(Long id); + public SysDisBasic selectSysDisBasicByStName(String stName); + + public SysDisBasic selectSysDisBasicByProcessInstanceId(String processId); + /** * 查询退伍复学申请列表 * @@ -28,6 +32,8 @@ public interface ISysDisBasicService extends IService { */ List selectSysDisBasicList(SysDisBasic sysDisBasic); + + /** * 新增退伍复学申请 * diff --git a/srs-routine/src/main/java/com/srs/routine/service/impl/SysDisBasicServiceImpl.java b/srs-routine/src/main/java/com/srs/routine/service/impl/SysDisBasicServiceImpl.java index f862a0a..cc8b1d8 100644 --- a/srs-routine/src/main/java/com/srs/routine/service/impl/SysDisBasicServiceImpl.java +++ b/srs-routine/src/main/java/com/srs/routine/service/impl/SysDisBasicServiceImpl.java @@ -3,7 +3,7 @@ package com.srs.routine.service.impl; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.io.InputStream; +import java.util.concurrent.TimeUnit; import com.srs.common.core.domain.AjaxResult; import com.srs.common.doman.dto.ProcessResultDto; @@ -13,13 +13,15 @@ import com.srs.common.utils.SecurityUtils; import com.srs.flowable.service.IFlowDefinitionService; import com.srs.routine.mapper.RtEnlistmentReserveMapper; import com.srs.routine.mapper.RtStuLeaveApplicationMapper; -import com.srs.routine.mapper.RtStuQuitSchoolMapper; import lombok.extern.slf4j.Slf4j; import org.flowable.engine.IdentityService; +import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; +import org.flowable.engine.runtime.ProcessInstance; import org.flowable.task.api.Task; import org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import com.srs.routine.mapper.SysDisBasicMapper; import com.srs.routine.domain.SysDisBasic; @@ -37,6 +39,7 @@ public class SysDisBasicServiceImpl extends ServiceImpl variables = new HashMap<>(); +// variables.put("basicId", sysDisBasic.getId()); +// variables.put("conversion", sysDisBasic.getConversion()); +// variables.put("stuId", sysDisBasic.getStId()); +// +// if ("N".equals(sysDisBasic.getConversion())) { // 修复字符串比较方式 +// TeacherVo counselorInfo = rtEnlistmentReserveMapper.getCounselorInfo(sysDisBasic.getStId()); +// if (counselorInfo == null) { +// log.error("未查询到辅导员信息,stuId: {}", sysDisBasic.getStId()); +// return null; // 避免空指针 +// } +// variables.put("approval", counselorInfo.getUserId()); +// variables.put("deptId", counselorInfo.getDeptId()); +// // 无需重复设置 conversion = "N",因为已经通过上面的代码设置过了 +// }else { +// List zjcData = sysDisBasicMapper.getShenDataInfo("招就处"); +// if (zjcData == null) { +// log.error("未查询到辅导员信息,stuId: {}", sysDisBasic.getStId()); +// return null; // 避免空指针 +// } +// variables.put("approval", zjcData.get(0).getUserId()); +// variables.put("deptId", zjcData.get(0).getDeptId()); +// } +//// +// +// //flow_m4npextk:28:257686 flow_m4npextk:31:755004 +// AjaxResult ajaxResult = flowDefinitionService.startProcessInstanceById("flow_nrblbjev:15:1330041", variables); +// String code = ajaxResult.get("code").toString(); +// if (code.equals("200")) { +// +// log.info("流程启动成功"); +// +// Object obj = ajaxResult.get("data"); +// ProcessResultDto dto = (ProcessResultDto) obj; +// +// // 操作工作流 +// // 设置当前用户 +// identityService.setAuthenticatedUserId(SecurityUtils.getUserId().toString()); +// // 查询待办任务列表 +// List tasks = taskService.createTaskQuery() +// .processInstanceId(dto.getProcessInstanceId()) +// .taskAssignee(SecurityUtils.getUserId().toString()) +// .active() +// .list(); +// // 保存审核结果到任务变量中 +// variables.put("approved", true); +// // 完成待办任务列表 +// for (Task task : tasks) { +// String taskId = task.getId(); +// String leaveId = taskService.getVariable(taskId, "basicId").toString(); +// if (leaveId.equals(sysDisBasic.getId().toString())) { +// taskService.complete(task.getId(), variables); +// } +// } +// +// // todo 企业微信推送消息 +// +// +// return dto; +// } else { +// return null; +// } +// } + @Autowired + private RuntimeService runtimeService; + + private ProcessResultDto startBasicProcess(SysDisBasic sysDisBasic) { + // 新增:核心唯一标识获取+空指针防护 + Long applyId = sysDisBasic.getId(); + String stId = sysDisBasic.getStId(); + if (applyId == null || stId == null) { + log.error("申请ID/学生ID为空,无法启动工作流 - applyId: {}, stId: {}", applyId, stId); + return null; + } + String basicId = applyId.toString(); + + // --------------- 新增:启动前暴力清理该学生所有流程实例(核心拦截)--------------- + List duplicateInstances = runtimeService.createProcessInstanceQuery() + .variableValueEquals("stuId", stId) // 按学生ID精准匹配 + .list(); + for (ProcessInstance instance : duplicateInstances) { + log.warn("清理学生重复流程实例 - stId: {}, 实例ID: {}", stId, instance.getId()); + runtimeService.deleteProcessInstance(instance.getId(), "同一学生重复提交清理"); + } + + // --------------- 原有变量构建(仅添加禁用回调标记)--------------- Map variables = new HashMap<>(); variables.put("basicId", sysDisBasic.getId()); variables.put("conversion", sysDisBasic.getConversion()); variables.put("stuId", sysDisBasic.getStId()); + // 新增:禁用所有自动回调(切断框架触发重复的链路) + variables.put("skipFormCallback", true); + variables.put("noAutoCallback", true); - if ("N".equals(sysDisBasic.getConversion())) { // 修复字符串比较方式 + // --------------- 原有审核人查询(优化空指针)--------------- + if ("N".equals(sysDisBasic.getConversion())) { TeacherVo counselorInfo = rtEnlistmentReserveMapper.getCounselorInfo(sysDisBasic.getStId()); if (counselorInfo == null) { log.error("未查询到辅导员信息,stuId: {}", sysDisBasic.getStId()); - return null; // 避免空指针 + return null; } variables.put("approval", counselorInfo.getUserId()); variables.put("deptId", counselorInfo.getDeptId()); - // 无需重复设置 conversion = "N",因为已经通过上面的代码设置过了 - }else { + } else { List zjcData = sysDisBasicMapper.getShenDataInfo("招就处"); - if (zjcData == null) { - log.error("未查询到辅导员信息,stuId: {}", sysDisBasic.getStId()); - return null; // 避免空指针 + // 修复:添加集合非空判断,避免IndexOutOfBoundsException + if (zjcData == null || zjcData.isEmpty()) { + log.error("未查询到招就处审核人信息,stuId: {}", sysDisBasic.getStId()); + return null; } variables.put("approval", zjcData.get(0).getUserId()); variables.put("deptId", zjcData.get(0).getDeptId()); } -// - //flow_m4npextk:28:257686 flow_m4npextk:31:755004 - AjaxResult ajaxResult = flowDefinitionService.startProcessInstanceById("flow_nrblbjev:14:1232527", variables); + // --------------- 原有流程启动逻辑(不变)--------------- + AjaxResult ajaxResult = flowDefinitionService.startProcessInstanceById("flow_nrblbjev:20:1347543", variables); String code = ajaxResult.get("code").toString(); if (code.equals("200")) { - - log.info("流程启动成功"); + log.info("流程启动成功 - stId: {}, applyId: {}", stId, basicId); Object obj = ajaxResult.get("data"); ProcessResultDto dto = (ProcessResultDto) obj; // 操作工作流 - // 设置当前用户 identityService.setAuthenticatedUserId(SecurityUtils.getUserId().toString()); - // 查询待办任务列表 List tasks = taskService.createTaskQuery() .processInstanceId(dto.getProcessInstanceId()) .taskAssignee(SecurityUtils.getUserId().toString()) .active() .list(); - // 保存审核结果到任务变量中 - variables.put("approved", true); + + // --------------- 核心修改:删除approved变量,任务完成不传递任何参数 --------------- + // 注释掉:variables.put("approved", true); // 移除该变量,避免触发回调 + // 完成待办任务列表 for (Task task : tasks) { String taskId = task.getId(); - String leaveId = taskService.getVariable(taskId, "basicId").toString(); - if (leaveId.equals(sysDisBasic.getId().toString())) { - taskService.complete(task.getId(), variables); + // 新增:变量非空校验,避免空指针 + Object taskBasicIdObj = taskService.getVariable(taskId, "basicId"); + if (taskBasicIdObj == null) { + log.warn("任务变量basicId为空,跳过任务 - 任务ID: {}", taskId); + continue; + } + String leaveId = taskBasicIdObj.toString(); + if (leaveId.equals(basicId)) { + // 核心修改:仅完成任务,不传递variables(切断回调触发重复) + taskService.complete(task.getId()); + log.info("自动完成任务 - 任务ID: {}, 实例ID: {}", taskId, dto.getProcessInstanceId()); } } // todo 企业微信推送消息 - - return dto; } else { + log.error("流程启动失败,响应码: {}", code); return null; } } + } diff --git a/srs-routine/src/main/resources/mapper/routine/SysDisBasicMapper.xml b/srs-routine/src/main/resources/mapper/routine/SysDisBasicMapper.xml index 7c68f08..84649a4 100644 --- a/srs-routine/src/main/resources/mapper/routine/SysDisBasicMapper.xml +++ b/srs-routine/src/main/resources/mapper/routine/SysDisBasicMapper.xml @@ -48,8 +48,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + @@ -81,20 +85,49 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + - SELECT d.user_id userId, d.dept_id deptId, d.user_name userName, d.nick_name nickName - FROM srs_student a - LEFT JOIN srs_class b ON a.class_id = b.class_id - LEFT JOIN cph_teacher c ON b.teacher_id = c.teacher_id - LEFT JOIN sys_user d ON c.employee_id = d.user_name - WHERE a.stu_id = #{stId} + + + + + + + + + + + + + + select id, fx_id, fx_time, st_id, st_name, fd_name, sex, nations, fd_qm, xw_qm, er_qm, xj_qm, jw_qm, st_class, majors, grade, college, reasons, fd_idea, two_idea, xw_idea, xj_idea, jw_idea, zs_idea, zs_status, times, fd_status, xw_status, two_status, xjgl_status, jw_status, rw_time, zs_time, fd_time, xw_time, two_time, xj_time, jw_time, datab, dataa, conversion, process_id, deploy_id, student_id, test_data, test_test from sys_dis_basic + @@ -148,28 +184,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} - - - - - - - - insert into sys_dis_basic @@ -216,6 +230,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" conversion, process_id, deploy_id, + student_id, + test_data, + test_test, #{fxId}, @@ -260,6 +277,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{conversion}, #{processId}, #{deployId}, + #{studentId}, + #{testData}, + #{testTest}, @@ -308,6 +328,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" conversion = #{conversion}, process_id = #{processId}, deploy_id = #{deployId}, + student_id = #{studentId}, + test_data = #{testData}, + test_test = #{testTest}, where id = #{id} @@ -322,4 +345,4 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{id} - + \ No newline at end of file