diff --git a/srs-admin/pom.xml b/srs-admin/pom.xml
index c4722a1..814b6ce 100644
--- a/srs-admin/pom.xml
+++ b/srs-admin/pom.xml
@@ -215,7 +215,7 @@
false
${project.artifactId}
- org.apache.maven.pluginsmaven-compiler-plugin88
+ org.apache.maven.pluginsmaven-compiler-plugin1414
${project.artifactId}
diff --git a/srs-admin/src/main/java/com/srs/web/controller/routine/RtEnlistmentReserveController.java b/srs-admin/src/main/java/com/srs/web/controller/routine/RtEnlistmentReserveController.java
index 669acb8..780b47b 100644
--- a/srs-admin/src/main/java/com/srs/web/controller/routine/RtEnlistmentReserveController.java
+++ b/srs-admin/src/main/java/com/srs/web/controller/routine/RtEnlistmentReserveController.java
@@ -1,9 +1,11 @@
package com.srs.web.controller.routine;
import java.util.List;
+import java.util.stream.Collectors;
import javax.servlet.http.HttpServletResponse;
import com.srs.dormitory.domain.DmsOutsideAccommodationApply;
+import com.srs.routine.domain.dto.RtEnlistmentReserveExportDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -56,10 +58,72 @@ public class RtEnlistmentReserveController extends BaseController {
@PostMapping("/export")
@ApiOperation("导出应征入伍保留学籍申请列表")
public void export(HttpServletResponse response, RtEnlistmentReserve rtEnlistmentReserve) {
- List list = rtEnlistmentReserveService.selectRtEnlistmentReserveList(rtEnlistmentReserve);
- ExcelUtil util = new ExcelUtil(RtEnlistmentReserve.class);
- util.exportExcel(response, list, "应征入伍保留学籍申请数据");
+ // 1. 查询原始数据列表
+ List originalList = rtEnlistmentReserveService.selectRtEnlistmentReserveList(rtEnlistmentReserve);
+
+ // 2. 转换为导出DTO + 中文值转换
+ List exportList = originalList.stream()
+ .map(this::convertToExportDto)
+ .collect(Collectors.toList());
+
+ // 3. 导出Excel(使用DTO的@Excel注解配置中文表头)
+ ExcelUtil util = new ExcelUtil<>(RtEnlistmentReserveExportDto.class);
+ util.exportExcel(response, exportList, "应征入伍保留学籍申请数据");
}
+ /**
+ * 原始实体转换为导出DTO,并处理值的中文转换
+ */
+ private RtEnlistmentReserveExportDto convertToExportDto(RtEnlistmentReserve source) {
+ RtEnlistmentReserveExportDto dto = new RtEnlistmentReserveExportDto();
+
+ // 1. 基础字段赋值(一一映射)
+ dto.setApplyNo(source.getApplyNo());
+ dto.setTeacherName(source.getTeacherName());
+ dto.setStudentName(source.getStudentName());
+ dto.setNation(source.getNation());
+ dto.setGrade(source.getGrade());
+ dto.setStudentNo(source.getStudentNo());
+ dto.setClassName(source.getClassName());
+ dto.setMajor(source.getMajor());
+ dto.setFamilyAddress(source.getFamilyAddress());
+ dto.setParentPhone(source.getParentPhone());
+ dto.setApplyReason(source.getApplyReason());
+ dto.setReserveNo(source.getReserveNo());
+ dto.setReserveStartDate(source.getReserveStartDate());
+ dto.setReserveEndDate(source.getReserveEndDate());
+// dto.setApprovalNo(source.getApprovalNo());
+
+ // 2. 核心:0/1等值转换为中文
+ // 性别转换(1-男 0-女)
+ if (source.getGender() != null) {
+ dto.setGender("1".equals(source.getGender()) ? "男" : "0".equals(source.getGender()) ? "女" : source.getGender());
+ }
+
+ // 申请状态转换(0-草稿,1=待辅导员审批...7=驳回)
+ if (source.getApplyStatus() != null) {
+ dto.setApplyStatus(convertApplyStatus(source.getApplyStatus()));
+ }
+
+ return dto;
+ }
+
+ /**
+ * 申请状态值转换为中文描述(适配String类型)
+ */
+ private String convertApplyStatus(Long status) {
+ return switch (status.intValue()) {
+ case 0 -> "草稿";
+ case 1 -> "待辅导员审批";
+ case 2 -> "待学务审批";
+ case 3 -> "待二级学院审批";
+ case 4 -> "待学籍管理科审批";
+ case 5 -> "待教务处主管领导审批";
+ case 6 -> "审批通过";
+ case 7 -> "驳回";
+ default -> status.toString();
+ };
+ }
+
/**
* 获取应征入伍保留学籍申请详细信息
diff --git a/srs-admin/src/main/java/com/srs/web/controller/routine/RtStuDisciplinaryApplicationController.java b/srs-admin/src/main/java/com/srs/web/controller/routine/RtStuDisciplinaryApplicationController.java
index 295cd29..df5c797 100644
--- a/srs-admin/src/main/java/com/srs/web/controller/routine/RtStuDisciplinaryApplicationController.java
+++ b/srs-admin/src/main/java/com/srs/web/controller/routine/RtStuDisciplinaryApplicationController.java
@@ -151,6 +151,25 @@ public class RtStuDisciplinaryApplicationController extends BaseController {
util.exportExcel(response, list, "学生处分申请数据");
}
+ @PostMapping("/importTemplate")
+ @ApiOperation("下载学生处分导入模板")
+ public void importTemplate(HttpServletResponse response) {
+ ExcelUtil util = new ExcelUtil(RtStuDisciplinaryApplication.class);
+ util.importTemplateExcel(response, "学生处分申请数据导入");
+ }
+
+ @Log(title = "学生处分申请", businessType = BusinessType.IMPORT)
+ @PreAuthorize("@ss.hasPermi('routine:disciplinaryApplication:import')")
+ @PostMapping("/importData")
+ @ApiOperation("导入学生处分申请")
+ public AjaxResult importData(org.springframework.web.multipart.MultipartFile file, boolean updateSupport) throws Exception {
+ ExcelUtil util = new ExcelUtil(RtStuDisciplinaryApplication.class);
+ // 生成数据
+ List list = util.importExcel(file.getInputStream());
+ String message = rtStuDisciplinaryApplicationService.importDisciplinaryApplication(list, updateSupport);
+ return success(message);
+ }
+
/**
* 获取学生处分申请详细信息
*/
diff --git a/srs-admin/src/main/java/com/srs/web/controller/routine/RtStuDisciplinaryRelieveController.java b/srs-admin/src/main/java/com/srs/web/controller/routine/RtStuDisciplinaryRelieveController.java
index bf7090d..0e1dd32 100644
--- a/srs-admin/src/main/java/com/srs/web/controller/routine/RtStuDisciplinaryRelieveController.java
+++ b/srs-admin/src/main/java/com/srs/web/controller/routine/RtStuDisciplinaryRelieveController.java
@@ -121,6 +121,24 @@ public class RtStuDisciplinaryRelieveController extends BaseController {
util.exportExcel(response, list, "学生解除处分申请数据");
}
+ @PostMapping("/importTemplate")
+ @ApiOperation("下载学生解除处分导入模板")
+ public void importTemplate(HttpServletResponse response) {
+ ExcelUtil util = new ExcelUtil(RtStuDisciplinaryRelieve.class);
+ util.importTemplateExcel(response, "学生解除处分申请数据导入");
+ }
+
+ @Log(title = "学生解除处分申请", businessType = BusinessType.IMPORT)
+ @PreAuthorize("@ss.hasPermi('routine:relieve:import')")
+ @PostMapping("/importData")
+ @ApiOperation("导入学生解除处分申请")
+ public AjaxResult importData(org.springframework.web.multipart.MultipartFile file, boolean updateSupport) throws Exception {
+ ExcelUtil util = new ExcelUtil(RtStuDisciplinaryRelieve.class);
+ List list = util.importExcel(file.getInputStream());
+ String message = rtStuDisciplinaryRelieveService.importDisciplinaryRelieve(list, updateSupport);
+ return success(message);
+ }
+
/**
* 获取学生解除处分申请详细信息
*/
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 24d05a7..2be457e 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
@@ -104,8 +104,8 @@ public class SysDisBasicController extends BaseController {
for (SysDisMate mate : item.getMaList()){
dao1.setOldgrade(mate.getOldgrade());
dao1.setOldmajor(mate.getOldmajor());
- dao1.setNewgrade(mate.getNewgrade());
- dao1.setNewmajor(mate.getNewmajor());
+// 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());
diff --git a/srs-admin/src/main/java/com/srs/web/controller/teacher/SysTeacherKpiFillingBonusPointsController.java b/srs-admin/src/main/java/com/srs/web/controller/teacher/SysTeacherKpiFillingBonusPointsController.java
index 01533b7..0152415 100644
--- a/srs-admin/src/main/java/com/srs/web/controller/teacher/SysTeacherKpiFillingBonusPointsController.java
+++ b/srs-admin/src/main/java/com/srs/web/controller/teacher/SysTeacherKpiFillingBonusPointsController.java
@@ -44,6 +44,7 @@ public class SysTeacherKpiFillingBonusPointsController extends BaseController {
}
/**
+ * ……
* 根据辅导员名称、年份 月份 查询详细信息
*/
// @PreAuthorize("@ss.hasPermi('teacher:kpiFillingBonusPoints:list')")
diff --git a/srs-admin/src/main/java/com/srs/web/controller/teacher/SysTeacherKpiFillingGraduationGuidanceController.java b/srs-admin/src/main/java/com/srs/web/controller/teacher/SysTeacherKpiFillingGraduationGuidanceController.java
index 419d5a9..2c0baea 100644
--- a/srs-admin/src/main/java/com/srs/web/controller/teacher/SysTeacherKpiFillingGraduationGuidanceController.java
+++ b/srs-admin/src/main/java/com/srs/web/controller/teacher/SysTeacherKpiFillingGraduationGuidanceController.java
@@ -56,6 +56,7 @@ public class SysTeacherKpiFillingGraduationGuidanceController extends BaseContro
}
/**
+ * ……
* 导出业绩考核-个人填报-就业指导工作列表
*/
// @PreAuthorize("@ss.hasPermi('teacher:kpiFillingGraduationGuidance:export')")
diff --git a/srs-flowable/src/main/java/com/srs/flowable/listener/disbasic/DiscListener.java b/srs-flowable/src/main/java/com/srs/flowable/listener/disbasic/DiscListener.java
index 73e2be3..499c03f 100644
--- a/srs-flowable/src/main/java/com/srs/flowable/listener/disbasic/DiscListener.java
+++ b/srs-flowable/src/main/java/com/srs/flowable/listener/disbasic/DiscListener.java
@@ -3,10 +3,15 @@ package com.srs.flowable.listener.disbasic;
import com.srs.common.core.domain.entity.SysUser;
import com.srs.common.doman.vo.TeacherVo;
+import com.srs.common.utils.DateUtils;
+import com.srs.common.utils.SecurityUtils;
+import com.srs.common.utils.WeChatUtil;
import com.srs.common.utils.spring.SpringUtils;
import com.srs.flowable.domain.DisBasic;
+import com.srs.flowable.domain.NotificationManage;
import com.srs.flowable.mapper.DisBasicMapper;
import com.srs.flowable.mapper.EnlistmentReserveMapper;
+import com.srs.flowable.mapper.LeaveMapper;
import com.srs.system.service.ISysUserService;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.FlowNode;
@@ -76,6 +81,8 @@ public class DiscListener implements ExecutionListener {
execution.setVariable("approval", nextAssigneeId);
execution.setVariable("currentNode", currentNodeName);
}
+ // ========== 发送通知逻辑 ==========
+ sendApprovalNotification(execution, currentNodeName, nextAssigneeId, stId);
}
/**
@@ -188,9 +195,6 @@ public class DiscListener implements ExecutionListener {
// 暂时选择学籍管理科第一个人作为审核人
return shenDataInfo.get(0).getUserId();
-
-
-
case "教务处主管":
// 最后一个节点通过后 → 流程结束(无需设置负责人)
List teacherVos = sysDisBasicMapper.getShenDataInfo("教务处主管领导");
@@ -207,4 +211,92 @@ public class DiscListener implements ExecutionListener {
}
}
+ /**
+ * 发送审批通知(系统通知+企业微信通知)
+ * 适配DisBasic(退伍复学)业务场景
+ */
+ private void sendApprovalNotification(DelegateExecution execution, String currentNodeName,
+ Long nextAssigneeId, Long basicId) {
+ try {
+ // 1. 获取需要的Mapper和工具类(通过SpringUtils获取,避免Autowired循环依赖)
+ LeaveMapper leaveMapper = (LeaveMapper) SpringUtils.getBean("leaveMapper");
+ WeChatUtil weChatUtil = SpringUtils.getBean(WeChatUtil.class);
+
+ // 2. 查询退伍复学申请详情
+ DisBasicMapper disBasicMapper = (DisBasicMapper) SpringUtils.getBean(DisBasicMapper.class);
+ DisBasic disBasic = disBasicMapper.selectSysDisBasicById(basicId);
+ if (disBasic == null) {
+ log.warn("未找到退伍复学申请记录,basicId:{}", basicId);
+ return;
+ }
+
+ // 3. 查询下一个审批人的信息
+ SysUser nextApprover = sysUserService.selectUserById(nextAssigneeId);
+ if (nextApprover == null) {
+ log.warn("未找到审批人信息,用户ID:{}", nextAssigneeId);
+ return;
+ }
+ String approverUserName = nextApprover.getUserName(); // 审批人工号/用户名
+ String approverName = nextApprover.getNickName(); // 审批人姓名
+
+ log.info("开始发送【退伍复学审批】通知,审批节点:{},审批人:{}({}),申请ID:{}",
+ currentNodeName, approverName, approverUserName, basicId);
+
+ // 4. 处理系统通知(先删后加,避免重复通知)
+ NotificationManage notificationManage = new NotificationManage();
+ notificationManage.setContent(String.format("您有一条【退伍复学审批】待处理(节点:%s)", currentNodeName));
+ notificationManage.setReceiver(nextAssigneeId); // 接收人:下一个审批人
+
+ // 4.1 查询是否已有相同通知,有则删除
+ NotificationManage existNotify = leaveMapper.selectCphMsgListForFlowable(notificationManage);
+ if (existNotify != null) {
+ int delRes = leaveMapper.deleteCphMsgById(existNotify.getId());
+ log.info("删除重复的系统通知,通知ID:{},删除结果:{}", existNotify.getId(), delRes);
+ }
+
+ // 4.2 添加新的系统通知
+ notificationManage.setSender(SecurityUtils.getUserId()); // 发送人:当前操作人
+ notificationManage.setCreateTime(DateUtils.getNowDate()); // 创建时间
+ int addRes = leaveMapper.insertCphMsg(notificationManage);
+ log.info("新增系统通知成功,接收人ID:{},添加结果:{}", nextAssigneeId, addRes);
+
+ // 5. 企业微信推送消息(带超链接)
+ if (approverUserName != null && !approverUserName.isEmpty()) {
+ String weChatContent = String.format(
+ "您有一条【退伍复学审批】待处理(节点:%s),请点击前往处理",
+ currentNodeName
+ );
+ weChatUtil.sendTextMessage(approverUserName, weChatContent);
+ log.info("企业微信通知发送成功,接收人工号:{},节点:{},申请ID:{}", approverUserName, currentNodeName, basicId);
+ } else {
+ log.warn("审批人工号为空,无法发送企业微信通知,用户ID:{},申请ID:{}", nextAssigneeId, basicId);
+ }
+
+ // 6. 删除当前审批人的待处理通知(清理已处理的待办)
+ Long currentApproverId = SecurityUtils.getUserId();
+ if (currentApproverId == null) {
+ log.warn("当前审批人ID为空,无法删除其待处理通知,申请ID:{}", basicId);
+ return;
+ }
+
+ NotificationManage currentNotifyQuery = new NotificationManage();
+ currentNotifyQuery.setContent(String.format("您有一条【退伍复学审批】待处理(节点:%s)", currentNodeName));
+ currentNotifyQuery.setReceiver(currentApproverId);
+
+ NotificationManage currentExistNotify = leaveMapper.selectCphMsgListForFlowable(currentNotifyQuery);
+ if (currentExistNotify != null) {
+ int currentDelRes = leaveMapper.deleteCphMsgById(currentExistNotify.getId());
+ log.info("删除当前审批人({})的【{}】待处理通知,通知ID:{},删除结果:{},申请ID:{}",
+ currentApproverId, currentNodeName, currentExistNotify.getId(), currentDelRes, basicId);
+ } else {
+ log.info("当前审批人({})无【{}】节点的待处理通知,无需删除,申请ID:{}", currentApproverId, currentNodeName, basicId);
+ }
+
+ } catch (Exception e) {
+ // 捕获所有异常,仅记录日志,不影响主流程
+ log.error("发送退伍复学审批通知失败,节点:{},审批人ID:{},申请ID:{},错误信息:{}",
+ currentNodeName, nextAssigneeId, basicId, e.getMessage(), e);
+ }
+ }
+
}
\ No newline at end of file
diff --git a/srs-routine/src/main/java/com/srs/routine/domain/RtEnlistmentReserve.java b/srs-routine/src/main/java/com/srs/routine/domain/RtEnlistmentReserve.java
index 49e6ec0..8673cf6 100644
--- a/srs-routine/src/main/java/com/srs/routine/domain/RtEnlistmentReserve.java
+++ b/srs-routine/src/main/java/com/srs/routine/domain/RtEnlistmentReserve.java
@@ -216,6 +216,14 @@ private static final long serialVersionUID=1L;
@Excel(name = "流程部署编号")
private String deployId;
+ /**
+ * 学院名称
+ */
+ @ApiModelProperty("学院名称")
+ @TableField("dept_name")
+ @Excel(name = "学院名称")
+ private String deptName;
+
/**
* 入伍保留学籍申请表-审核记录
*/
diff --git a/srs-routine/src/main/java/com/srs/routine/domain/dto/RtEnlistmentReserveExportDto.java b/srs-routine/src/main/java/com/srs/routine/domain/dto/RtEnlistmentReserveExportDto.java
new file mode 100644
index 0000000..8b75a8f
--- /dev/null
+++ b/srs-routine/src/main/java/com/srs/routine/domain/dto/RtEnlistmentReserveExportDto.java
@@ -0,0 +1,130 @@
+package com.srs.routine.domain.dto;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.srs.common.annotation.Excel;
+import lombok.Data;
+
+
+import java.util.Date;
+
+
+// 入伍申请导出专用DTO,只包含需要导出的字段
+@Data
+public class RtEnlistmentReserveExportDto {
+
+ /**
+ * 申请编号(规则:RY+年份+6位序号,如RY2024000001)
+ */
+ @Excel(name = "申请编号")
+ private String applyNo;
+
+
+ /**
+ * 辅导员姓名
+ */
+ @Excel(name = "辅导员姓名")
+ private String teacherName;
+
+ /**
+ * 姓名
+ */
+ @Excel(name = "学生姓名")
+ private String studentName;
+
+ /**
+ * 性别(0-男
+ */
+ @Excel(name = "性别")
+ private String gender;
+
+ /**
+ * 民族
+ */
+ @Excel(name = "民族")
+ private String nation;
+
+ /**
+ * 年级
+ */
+ @Excel(name = "年级")
+ private String grade;
+
+ /**
+ * 学号
+ */
+ @Excel(name = "学号")
+ private String studentNo;
+
+ /**
+ * 班级
+ */
+ @Excel(name = "班级")
+ private String className;
+
+ /**
+ * 专业名称
+ */
+ @Excel(name = "专业名称")
+ private String major;
+
+ /**
+ * 家庭地址
+ */
+ @Excel(name = "家庭地址")
+ private String familyAddress;
+
+ /**
+ * 家长联系电话
+ */
+ @Excel(name = "家长联系电话")
+ private String parentPhone;
+
+ /**
+ * 申请理由(含入伍时间、服役期限)
+ */
+ @Excel(name = "申请理由")
+ private String applyReason;
+
+ /**
+ * 申请状态(0-草稿,1=待辅导员审批,2=待学务审批,3=待二级学院审批,4=待学籍管理科审批,5=待教务处主管领导审批,6=审批通过,7=驳回)
+ */
+ @Excel(name = "申请状态")
+ private String applyStatus;
+
+ /**
+ * 保留学籍编号(审批通过后生成)
+ */
+ @Excel(name = "保留学籍编号")
+ private String reserveNo;
+
+ /**
+ * 保留学籍开始日期
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "保留学籍开始日期" , width = 30, dateFormat = "yyyy-MM-dd")
+ private Date reserveStartDate;
+
+ /**
+ * 保留学籍结束日期(入伍时间+服役期限)
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @Excel(name = "保留学籍结束日期" , width = 30, dateFormat = "yyyy-MM-dd")
+ private Date reserveEndDate;
+
+// /**
+// * 批文号
+// */
+// @Excel(name = "批文号")
+// private String approvalNo;
+
+// @JsonFormat(pattern = "yyyy-MM-dd")
+// private Date createTime;
+//
+// @JsonFormat(pattern = "yyyy-MM-dd")
+// private Date updateTime;
+
+
+
+}
+
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
index 5e95791..5810b09 100644
--- 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
@@ -70,20 +70,6 @@ public class SysDisMateDao {
@Excel(name = "原专业")
private String oldmajor;
- /**
- * 新年级
- */
- @ApiModelProperty("新年级")
- @Excel(name = "新年级")
- private String newgrade;
-
- /**
- * 新专业
- */
- @ApiModelProperty("新专业")
- @Excel(name = "新专业")
- private String newmajor;
-
/**
* 退役证明
*/
@@ -104,22 +90,8 @@ public class SysDisMateDao {
@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/RtEnlistmentReserveMapper.java b/srs-routine/src/main/java/com/srs/routine/mapper/RtEnlistmentReserveMapper.java
index 129e91b..bc8e630 100644
--- a/srs-routine/src/main/java/com/srs/routine/mapper/RtEnlistmentReserveMapper.java
+++ b/srs-routine/src/main/java/com/srs/routine/mapper/RtEnlistmentReserveMapper.java
@@ -31,6 +31,7 @@ public interface RtEnlistmentReserveMapper extends BaseMapper list, boolean updateSupport);
+
/**
* 根据流程实例id获取学生处分申请
* @param procInsId
diff --git a/srs-routine/src/main/java/com/srs/routine/service/IRtStuDisciplinaryRelieveService.java b/srs-routine/src/main/java/com/srs/routine/service/IRtStuDisciplinaryRelieveService.java
index 2575551..5ee879b 100644
--- a/srs-routine/src/main/java/com/srs/routine/service/IRtStuDisciplinaryRelieveService.java
+++ b/srs-routine/src/main/java/com/srs/routine/service/IRtStuDisciplinaryRelieveService.java
@@ -95,4 +95,12 @@ public interface IRtStuDisciplinaryRelieveService extends IService selectRtStuDisciplinaryRelieveListByXW(RtStuDisciplinaryRelieve rtStuDisciplinaryRelieve);
+
+ /**
+ * 导入解除处分数据
+ * @param list 解除处分数据列表
+ * @param updateSupport 是否更新已经存在的数据
+ * @return 导入结果信息
+ */
+ String importDisciplinaryRelieve(List list, boolean updateSupport);
}
diff --git a/srs-routine/src/main/java/com/srs/routine/service/impl/RtEnlistmentReserveServiceImpl.java b/srs-routine/src/main/java/com/srs/routine/service/impl/RtEnlistmentReserveServiceImpl.java
index dd91db5..b88c8ee 100644
--- a/srs-routine/src/main/java/com/srs/routine/service/impl/RtEnlistmentReserveServiceImpl.java
+++ b/srs-routine/src/main/java/com/srs/routine/service/impl/RtEnlistmentReserveServiceImpl.java
@@ -7,6 +7,7 @@ import java.util.List;
import java.util.Map;
import com.srs.common.core.domain.AjaxResult;
+import com.srs.common.core.domain.entity.SysUser;
import com.srs.common.doman.dto.ProcessResultDto;
import com.srs.common.doman.vo.TeacherVo;
import com.srs.common.exception.ServiceException;
@@ -16,6 +17,7 @@ import com.srs.dormitory.domain.DmsOutsideAccommodationApply;
import com.srs.dormitory.mapper.DmsOutsideAccommodationApplyMapper;
import com.srs.flowable.service.IFlowDefinitionService;
import com.srs.routine.domain.RtEnlistmentReserveApproval;
+import com.srs.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import com.srs.routine.mapper.RtStuLeaveApplicationMapper;
import org.apache.commons.lang3.StringUtils;
@@ -53,6 +55,9 @@ public class RtEnlistmentReserveServiceImpl extends ServiceImpl rtEnlistmentReserves = rtEnlistmentReserveMapper.getEnlistmentReserves();
- int total = rtEnlistmentReserves.size();
- // 设置保留学籍编号 (LBXJ0001(LBXJ是固定的,0001根据数据数量累加) + 时间(根据系统时间,但是格式要20260304))
- // 1. 获取当前系统时间,格式化为8位日期(yyyyMMdd)
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
- String dateStr = sdf.format(new Date());
+ // 1. 获取当前系统年份(用于编号和序号重置判断)
+ SimpleDateFormat yearSdf = new SimpleDateFormat("yyyy");
+ String currentYear = yearSdf.format(new Date()); // 如2026
- // 2. 计算自增序号(总数+1,确保新编号是下一个序号),补零为4位
- int seq = total + 1;
- String seqStr = String.format("%04d", seq); // 不足4位时前面补0,如1→0001,10→0010
+ // 2. 查询「当前年份」的记录总数(按年份分组统计,实现每年序号重置)
+ // 统计rt_enlistment_reserve表中,reserve_no以"BLXJ("+currentYear+")"开头的记录数
+ int yearTotal = rtEnlistmentReserveMapper.countByYear(currentYear);
- // 3. 拼接保留学籍编号:LBXJ + 4位序号 + 8位日期
- String reserveNo = "LBXJ" + seqStr + dateStr;
+ // 3. 计算当年自增序号(总数+1),补零为4位(0001、0002...9999)
+ int seq = yearTotal + 1;
+ String seqStr = String.format("%04d", seq); // 不足4位补0,如1→0001,10→0010,100→0100
- // 4. 设置到实体对象中
+ // 4. 拼接最终编号:BLXJ(年份)序号
+ String reserveNo = "BLXJ(" + currentYear + ")" + seqStr;
+
+ // 5. 设置到实体对象中
rtEnlistmentReserve.setReserveNo(reserveNo);
rtEnlistmentReserve.setCreateTime(DateUtils.getNowDate());
@@ -139,7 +149,9 @@ public class RtEnlistmentReserveServiceImpl extends ServiceImpl list, boolean updateSupport) {
+ if (com.srs.common.utils.StringUtils.isNull(list) || list.size() == 0) {
+ throw new ServiceException("导入数据不能为空!");
+ }
+ int successNum = 0;
+ int failureNum = 0;
+ StringBuilder successMsg = new StringBuilder();
+ StringBuilder failureMsg = new StringBuilder();
+
+ for (int i = 0; i < list.size(); i++) {
+ RtStuDisciplinaryApplication rtStuDisciplinaryApplication = list.get(i);
+ // 跳过 null 元素
+ if (rtStuDisciplinaryApplication == null) {
+ continue;
+ }
+
+ // 跳过必填字段为空的行(学号为空则跳过)
+ if (StringUtils.isEmpty(rtStuDisciplinaryApplication.getStuNo())) {
+ continue;
+ }
+
+ try {
+ // 验证数据是否存在,或者补充必要信息
+ if (com.srs.common.utils.StringUtils.isNotNull(rtStuDisciplinaryApplication.getStuNo())) {
+ SysUser sysUser = sysUserService.selectUserByUserName(rtStuDisciplinaryApplication.getStuNo());
+ if (sysUser != null) {
+ rtStuDisciplinaryApplication.setStuId(sysUser.getUserId());
+ rtStuDisciplinaryApplication.setStuName(sysUser.getNickName());
+ }
+ }
+
+ rtStuDisciplinaryApplication.setCreateBy(SecurityUtils.getUsername());
+ rtStuDisciplinaryApplication.setCreateTime(DateUtils.getNowDate());
+ rtStuDisciplinaryApplication.setApplicantName(SecurityUtils.getLoginUser().getUser().getNickName());
+ rtStuDisciplinaryApplication.setApplicantId(SecurityUtils.getUserId());
+
+ if (rtStuDisciplinaryApplication.getSubmissionStatus() == null) {
+ rtStuDisciplinaryApplication.setSubmissionStatus(0L);
+ }
+
+ if (rtStuDisciplinaryApplication.getPenaltyStatus() == null) {
+ rtStuDisciplinaryApplication.setPenaltyStatus(0L); // 默认处分中
+ }
+
+ if (rtStuDisciplinaryApplication.getPenaltyType() != null && rtStuDisciplinaryApplication.getDisciplinaryDate() != null) {
+ rtStuDisciplinaryApplication.setExpirationDate(calculationDueDisposition(rtStuDisciplinaryApplication.getPenaltyType(), rtStuDisciplinaryApplication.getDisciplinaryDate()));
+ }
+
+ this.insertRtStuDisciplinaryApplication(rtStuDisciplinaryApplication);
+ successNum++;
+ successMsg.append("
" + successNum + "、学号 " + rtStuDisciplinaryApplication.getStuNo() + " 导入成功");
+ } catch (Exception e) {
+ failureNum++;
+ String msg = "
" + failureNum + "、学号 " + rtStuDisciplinaryApplication.getStuNo() + " 导入失败:";
+ failureMsg.append(msg + e.getMessage());
+ }
+ }
+
+ if (failureNum > 0) {
+ failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+ throw new ServiceException(failureMsg.toString());
+ } else {
+ successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+ }
+ return successMsg.toString();
+ }
+
@Override
public RtStuDisciplinaryApplication getDisciplinaryApplicationByProcInsId(String procInsId) {
RtStuDisciplinaryApplication rtStuDisciplinaryApplication = rtStuDisciplinaryApplicationMapper.selectDisciplinaryApplicationByProcInsId(procInsId);
diff --git a/srs-routine/src/main/java/com/srs/routine/service/impl/RtStuDisciplinaryRelieveServiceImpl.java b/srs-routine/src/main/java/com/srs/routine/service/impl/RtStuDisciplinaryRelieveServiceImpl.java
index 95902cb..c17a3ac 100644
--- a/srs-routine/src/main/java/com/srs/routine/service/impl/RtStuDisciplinaryRelieveServiceImpl.java
+++ b/srs-routine/src/main/java/com/srs/routine/service/impl/RtStuDisciplinaryRelieveServiceImpl.java
@@ -6,31 +6,32 @@ import java.util.Map;
import java.util.stream.Collectors;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.srs.common.core.domain.AjaxResult;
import com.srs.common.core.domain.entity.SysUser;
import com.srs.common.doman.dto.ProcessResultDto;
import com.srs.common.exception.ServiceException;
import com.srs.common.utils.DateUtils;
import com.srs.common.utils.SecurityUtils;
+import com.srs.common.utils.StringUtils;
import com.srs.common.utils.WeChatUtil;
import com.srs.flowable.service.IFlowDefinitionService;
import com.srs.routine.domain.RtStuDisciplinaryApplication;
+import com.srs.routine.domain.RtStuDisciplinaryRelieve;
import com.srs.routine.mapper.RtStuDisciplinaryApplicationMapper;
+import com.srs.routine.mapper.RtStuDisciplinaryRelieveMapper;
+import com.srs.routine.service.IRtStuDisciplinaryRelieveService;
import com.srs.system.mapper.SysUserMapper;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.IdentityService;
import org.flowable.engine.TaskService;
import org.flowable.task.api.Task;
import org.springframework.beans.factory.annotation.Autowired;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
-import com.srs.routine.mapper.RtStuDisciplinaryRelieveMapper;
-import com.srs.routine.domain.RtStuDisciplinaryRelieve;
-import com.srs.routine.service.IRtStuDisciplinaryRelieveService;
import org.springframework.transaction.annotation.Transactional;
/**
- * 学生解除处分申请Service业务层处理
+ * 学生解除处分申请 Service 业务层处理
*
* @author LSD
* @date 2024-04-29
@@ -300,4 +301,66 @@ public class RtStuDisciplinaryRelieveServiceImpl extends ServiceImpl list, boolean updateSupport) {
+ if (com.srs.common.utils.StringUtils.isNull(list) || list.size() == 0) {
+ throw new ServiceException("导入数据不能为空!");
+ }
+ int successNum = 0;
+ int failureNum = 0;
+ StringBuilder successMsg = new StringBuilder();
+ StringBuilder failureMsg = new StringBuilder();
+
+ for (int i = 0; i < list.size(); i++) {
+ RtStuDisciplinaryRelieve rtStuDisciplinaryRelieve = list.get(i);
+ // 跳过 null 元素
+ if (rtStuDisciplinaryRelieve == null) {
+ continue;
+ }
+
+ // 跳过必填字段为空的行(学号为空则跳过)
+ if (StringUtils.isEmpty(rtStuDisciplinaryRelieve.getStuNo())) {
+ continue;
+ }
+
+ try {
+ if (com.srs.common.utils.StringUtils.isNotNull(rtStuDisciplinaryRelieve.getStuNo())) {
+ SysUser sysUser = sysUserMapper.selectUserByUserName(rtStuDisciplinaryRelieve.getStuNo());
+ if (sysUser != null) {
+ rtStuDisciplinaryRelieve.setStuId(sysUser.getUserId());
+ rtStuDisciplinaryRelieve.setStuName(sysUser.getNickName());
+ }
+ }
+
+ rtStuDisciplinaryRelieve.setCreateBy(SecurityUtils.getUsername());
+ rtStuDisciplinaryRelieve.setCreateTime(DateUtils.getNowDate());
+ rtStuDisciplinaryRelieve.setApplicantName(SecurityUtils.getLoginUser().getUser().getNickName());
+
+ if (rtStuDisciplinaryRelieve.getSubmissionStatus() == null) {
+ rtStuDisciplinaryRelieve.setSubmissionStatus(0L);
+ }
+
+ if (rtStuDisciplinaryRelieve.getPenaltyStatus() == null) {
+ rtStuDisciplinaryRelieve.setPenaltyStatus(1L);
+ }
+
+ rtStuDisciplinaryRelieveMapper.insertRtStuDisciplinaryRelieve(rtStuDisciplinaryRelieve);
+ successNum++;
+ successMsg.append("
" + successNum + "、学号 " + rtStuDisciplinaryRelieve.getStuNo() + " 导入成功");
+ } catch (Exception e) {
+ failureNum++;
+ String msg = "
" + failureNum + "、学号 " + rtStuDisciplinaryRelieve.getStuNo() + " 导入失败:";
+ failureMsg.append(msg + e.getMessage());
+ }
+ }
+
+ if (failureNum > 0) {
+ failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+ throw new ServiceException(failureMsg.toString());
+ } else {
+ successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+ }
+ return successMsg.toString();
+ }
+
}
diff --git a/srs-routine/src/main/java/com/srs/routine/service/impl/SysDisMateServiceImpl.java b/srs-routine/src/main/java/com/srs/routine/service/impl/SysDisMateServiceImpl.java
index 4311aba..f86bfeb 100644
--- a/srs-routine/src/main/java/com/srs/routine/service/impl/SysDisMateServiceImpl.java
+++ b/srs-routine/src/main/java/com/srs/routine/service/impl/SysDisMateServiceImpl.java
@@ -1,6 +1,8 @@
package com.srs.routine.service.impl;
import java.util.List;
+
+import com.srs.routine.domain.dto.SysDisMateDao;
import org.springframework.beans.factory.annotation.Autowired;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@@ -8,6 +10,8 @@ import com.srs.routine.mapper.SysDisMateMapper;
import com.srs.routine.domain.SysDisMate;
import com.srs.routine.service.ISysDisMateService;
+import javax.servlet.http.HttpServletResponse;
+
/**
* 退伍复学材料Service业务层处理
*
@@ -84,4 +88,5 @@ public class SysDisMateServiceImpl extends ServiceImpl
+
+
@@ -160,7 +162,9 @@
and approval_no = #{approvalNo}
and affix_id = #{affixId}
and deploy_id = #{deployId}
+ and dept_name like concat('%', #{deptName}, '%')
+ order by id desc
+
+
+
-
+
-
+
insert into sys_dis_mate
diff --git a/srs-system/src/main/java/com/srs/system/service/impl/SysMenuServiceImpl.java b/srs-system/src/main/java/com/srs/system/service/impl/SysMenuServiceImpl.java
index 15c1d79..8b54d7a 100644
--- a/srs-system/src/main/java/com/srs/system/service/impl/SysMenuServiceImpl.java
+++ b/srs-system/src/main/java/com/srs/system/service/impl/SysMenuServiceImpl.java
@@ -526,7 +526,7 @@ public class SysMenuServiceImpl implements ISysMenuService
while (it.hasNext())
{
SysMenu n = (SysMenu) it.next();
- if (n.getParentId().longValue() == t.getMenuId().longValue())
+ if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getMenuId().longValue())
{
tlist.add(n);
}
diff --git a/srs-teacher/src/main/java/com/srs/teacher/domain/SysTeacherKpiFillingStuMgt.java b/srs-teacher/src/main/java/com/srs/teacher/domain/SysTeacherKpiFillingStuMgt.java
index 7694a73..74d5e7b 100644
--- a/srs-teacher/src/main/java/com/srs/teacher/domain/SysTeacherKpiFillingStuMgt.java
+++ b/srs-teacher/src/main/java/com/srs/teacher/domain/SysTeacherKpiFillingStuMgt.java
@@ -13,6 +13,8 @@ import lombok.*;
import com.srs.common.core.domain.BaseEntity;
import javax.validation.constraints.NotNull;
+import com.srs.teacher.domain.SysTeacherStuTestMaterials;
+import com.srs.teacher.domain.SysTeacherStuNoticeMaterials;
/**
@@ -172,4 +174,18 @@ public class SysTeacherKpiFillingStuMgt extends BaseEntity {
@ApiModelProperty(value = "每周深入学生宿舍佐证材料", hidden = true)
@Excel(name = "每周深入学生宿舍佐证材料")
private List visitDormitoryMaterialsList;
+
+ /**
+ * 职业测评/就业育人佐证材料
+ */
+ @ApiModelProperty(value = "职业测评/就业育人佐证材料", hidden = true)
+ @Excel(name = "职业测评/就业育人佐证材料")
+ private List edgMaterialsList;
+
+ /**
+ * 通知任务佐证材料
+ */
+ @ApiModelProperty(value = "通知任务佐证材料", hidden = true)
+ @Excel(name = "通知任务佐证材料")
+ private List noticeMaterialsList;
}
diff --git a/srs-teacher/src/main/java/com/srs/teacher/service/impl/SysTeacherKpiFillingBusinessWorkServiceImpl.java b/srs-teacher/src/main/java/com/srs/teacher/service/impl/SysTeacherKpiFillingBusinessWorkServiceImpl.java
index d605d71..3c6d06d 100644
--- a/srs-teacher/src/main/java/com/srs/teacher/service/impl/SysTeacherKpiFillingBusinessWorkServiceImpl.java
+++ b/srs-teacher/src/main/java/com/srs/teacher/service/impl/SysTeacherKpiFillingBusinessWorkServiceImpl.java
@@ -82,10 +82,10 @@ public class SysTeacherKpiFillingBusinessWorkServiceImpl extends ServiceImpl sysTeacherKpiFillingBusinessWorkList = sysTeacherKpiFillingBusinessWorkMapper.selectSysTeacherKpiFillingBusinessWorkByFdyName(sysTeacherKpiFillingBusinessWork.getFdyName(), sysTeacherKpiFillingBusinessWork.getFillingYear(), sysTeacherKpiFillingBusinessWork.getFillingMonth(), sysTeacherKpiFillingBusinessWork.getClassType());
+ /*List sysTeacherKpiFillingBusinessWorkList = sysTeacherKpiFillingBusinessWorkMapper.selectSysTeacherKpiFillingBusinessWorkByFdyName(sysTeacherKpiFillingBusinessWork.getFdyName(), sysTeacherKpiFillingBusinessWork.getFillingYear(), sysTeacherKpiFillingBusinessWork.getFillingMonth(), sysTeacherKpiFillingBusinessWork.getClassType());
if (sysTeacherKpiFillingBusinessWorkList != null && !sysTeacherKpiFillingBusinessWorkList.isEmpty()) {
throw new ServiceException("已提交,请勿重复提交", 500);
- }
+ }*/
return sysTeacherKpiFillingBusinessWorkMapper.updateSysTeacherKpiFillingBusinessWork(sysTeacherKpiFillingBusinessWork);
}
diff --git a/srs-teacher/src/main/java/com/srs/teacher/service/impl/SysTeacherKpiFillingStuMgtServiceImpl.java b/srs-teacher/src/main/java/com/srs/teacher/service/impl/SysTeacherKpiFillingStuMgtServiceImpl.java
index e81f155..6e94a8e 100644
--- a/srs-teacher/src/main/java/com/srs/teacher/service/impl/SysTeacherKpiFillingStuMgtServiceImpl.java
+++ b/srs-teacher/src/main/java/com/srs/teacher/service/impl/SysTeacherKpiFillingStuMgtServiceImpl.java
@@ -103,10 +103,10 @@ public class SysTeacherKpiFillingStuMgtServiceImpl extends ServiceImpl sysTeacherKpiFillingStuMgts = sysTeacherKpiFillingStuMgtMapper.selectSysTeacherKpiFillingStuMgtByFdyNameAndFillingYear(sysTeacherKpiFillingStuMgt.getDepartmentName(), sysTeacherKpiFillingStuMgt.getFdyName(), sysTeacherKpiFillingStuMgt.getFillingYear(), sysTeacherKpiFillingStuMgt.getFillingMonth());
+ /*List sysTeacherKpiFillingStuMgts = sysTeacherKpiFillingStuMgtMapper.selectSysTeacherKpiFillingStuMgtByFdyNameAndFillingYear(sysTeacherKpiFillingStuMgt.getDepartmentName(), sysTeacherKpiFillingStuMgt.getFdyName(), sysTeacherKpiFillingStuMgt.getFillingYear(), sysTeacherKpiFillingStuMgt.getFillingMonth());
if (sysTeacherKpiFillingStuMgts != null && !sysTeacherKpiFillingStuMgts.isEmpty()) {
throw new ServiceException("已提交,请勿重复提交", 500);
- }
+ }*/
if (sysTeacherKpiFillingStuMgt.getFdyName() == null) {
sysTeacherKpiFillingStuMgt.setFdyName(SecurityUtils.getLoginUser().getUser().getNickName());
}
diff --git a/srs-teacher/src/main/resources/mapper/teacher/SysTeacherKpiFillingMapper.xml b/srs-teacher/src/main/resources/mapper/teacher/SysTeacherKpiFillingMapper.xml
index a756a50..22a9815 100644
--- a/srs-teacher/src/main/resources/mapper/teacher/SysTeacherKpiFillingMapper.xml
+++ b/srs-teacher/src/main/resources/mapper/teacher/SysTeacherKpiFillingMapper.xml
@@ -89,6 +89,14 @@
+
+
+
+
@@ -401,6 +409,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -497,6 +531,40 @@
order by id desc
+
+
+
+
@@ -95,6 +99,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
select id,