Merge remote-tracking branch 'origin/main'

This commit is contained in:
2026-03-20 11:49:15 +08:00
27 changed files with 708 additions and 67 deletions

View File

@@ -215,7 +215,7 @@
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${project.artifactId}</warName>
</configuration>
</plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin>
</plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>14</source><target>14</target></configuration></plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>

View File

@@ -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<RtEnlistmentReserve> list = rtEnlistmentReserveService.selectRtEnlistmentReserveList(rtEnlistmentReserve);
ExcelUtil<RtEnlistmentReserve> util = new ExcelUtil<RtEnlistmentReserve>(RtEnlistmentReserve.class);
util.exportExcel(response, list, "应征入伍保留学籍申请数据");
// 1. 查询原始数据列表
List<RtEnlistmentReserve> originalList = rtEnlistmentReserveService.selectRtEnlistmentReserveList(rtEnlistmentReserve);
// 2. 转换为导出DTO + 中文值转换
List<RtEnlistmentReserveExportDto> exportList = originalList.stream()
.map(this::convertToExportDto)
.collect(Collectors.toList());
// 3. 导出Excel使用DTO的@Excel注解配置中文表头
ExcelUtil<RtEnlistmentReserveExportDto> 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();
};
}
/**
* 获取应征入伍保留学籍申请详细信息

View File

@@ -151,6 +151,25 @@ public class RtStuDisciplinaryApplicationController extends BaseController {
util.exportExcel(response, list, "学生处分申请数据");
}
@PostMapping("/importTemplate")
@ApiOperation("下载学生处分导入模板")
public void importTemplate(HttpServletResponse response) {
ExcelUtil<RtStuDisciplinaryApplication> util = new ExcelUtil<RtStuDisciplinaryApplication>(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<RtStuDisciplinaryApplication> util = new ExcelUtil<RtStuDisciplinaryApplication>(RtStuDisciplinaryApplication.class);
// 生成数据
List<RtStuDisciplinaryApplication> list = util.importExcel(file.getInputStream());
String message = rtStuDisciplinaryApplicationService.importDisciplinaryApplication(list, updateSupport);
return success(message);
}
/**
* 获取学生处分申请详细信息
*/

View File

@@ -121,6 +121,24 @@ public class RtStuDisciplinaryRelieveController extends BaseController {
util.exportExcel(response, list, "学生解除处分申请数据");
}
@PostMapping("/importTemplate")
@ApiOperation("下载学生解除处分导入模板")
public void importTemplate(HttpServletResponse response) {
ExcelUtil<RtStuDisciplinaryRelieve> util = new ExcelUtil<RtStuDisciplinaryRelieve>(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<RtStuDisciplinaryRelieve> util = new ExcelUtil<RtStuDisciplinaryRelieve>(RtStuDisciplinaryRelieve.class);
List<RtStuDisciplinaryRelieve> list = util.importExcel(file.getInputStream());
String message = rtStuDisciplinaryRelieveService.importDisciplinaryRelieve(list, updateSupport);
return success(message);
}
/**
* 获取学生解除处分申请详细信息
*/

View File

@@ -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());

View File

@@ -44,6 +44,7 @@ public class SysTeacherKpiFillingBonusPointsController extends BaseController {
}
/**
* ……
* 根据辅导员名称、年份 月份 查询详细信息
*/
// @PreAuthorize("@ss.hasPermi('teacher:kpiFillingBonusPoints:list')")

View File

@@ -56,6 +56,7 @@ public class SysTeacherKpiFillingGraduationGuidanceController extends BaseContro
}
/**
* ……
* 导出业绩考核-个人填报-就业指导工作列表
*/
// @PreAuthorize("@ss.hasPermi('teacher:kpiFillingGraduationGuidance:export')")

View File

@@ -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<TeacherVo> 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<a href='https://zhxg.gxsdxy.cn/wab/#/pages/Approval/index'>请点击前往处理</a>",
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);
}
}
}

View File

@@ -216,6 +216,14 @@ private static final long serialVersionUID=1L;
@Excel(name = "流程部署编号")
private String deployId;
/**
* 学院名称
*/
@ApiModelProperty("学院名称")
@TableField("dept_name")
@Excel(name = "学院名称")
private String deptName;
/**
* 入伍保留学籍申请表-审核记录
*/

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -31,6 +31,7 @@ public interface RtEnlistmentReserveMapper extends BaseMapper<RtEnlistmentReserv
*/
public RtEnlistmentReserve selectRtEnlistmentReserveByProcessInstanceId(String processInstanceId);
/**
* 查询应征入伍保留学籍申请
*
@@ -62,6 +63,13 @@ public interface RtEnlistmentReserveMapper extends BaseMapper<RtEnlistmentReserv
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
int insertRtEnlistmentReserve(RtEnlistmentReserve rtEnlistmentReserve);
/**
* Mapper接口方法统计指定年份的保留学籍记录数
* @param year 年份如2026
* @return 该年份的记录总数
*/
int countByYear(@Param("year") String year);
/**
* 修改应征入伍保留学籍申请
*

View File

@@ -70,6 +70,15 @@ public interface IRtStuDisciplinaryApplicationService extends IService<RtStuDisc
*/
int deleteRtStuDisciplinaryApplicationByApplicationId(Long applicationId);
/**
* 导入学生处分申请数据
*
* @param list 数据列表
* @param updateSupport 是否更新现有数据
* @return 结果
*/
String importDisciplinaryApplication(List<RtStuDisciplinaryApplication> list, boolean updateSupport);
/**
* 根据流程实例id获取学生处分申请
* @param procInsId

View File

@@ -95,4 +95,12 @@ public interface IRtStuDisciplinaryRelieveService extends IService<RtStuDiscipli
* @return
*/
List<RtStuDisciplinaryRelieve> selectRtStuDisciplinaryRelieveListByXW(RtStuDisciplinaryRelieve rtStuDisciplinaryRelieve);
/**
* 导入解除处分数据
* @param list 解除处分数据列表
* @param updateSupport 是否更新已经存在的数据
* @return 导入结果信息
*/
String importDisciplinaryRelieve(List<RtStuDisciplinaryRelieve> list, boolean updateSupport);
}

View File

@@ -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<RtEnlistmentRese
@Autowired
IdentityService identityService;
@Autowired
ISysUserService sysUserService;
// 注入RuntimeService
@Autowired
@@ -103,23 +108,28 @@ public class RtEnlistmentReserveServiceImpl extends ServiceImpl<RtEnlistmentRese
throw new ServiceException("您已经申请过了,请勿重新申请!", 400);
}
SysUser sysUser = sysUserService.selectUserByUserName(rtEnlistmentReserve.getStudentNo());
if (sysUser == null) {
throw new ServiceException("该学生不存在", 500);
}
// ========== 生成保留学籍编号 ==========
// 查询申请记录数量
List<RtEnlistmentReserve> rtEnlistmentReserves = rtEnlistmentReserveMapper.getEnlistmentReserves();
int total = rtEnlistmentReserves.size();
// 设置保留学籍编号 LBXJ0001LBXJ是固定的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→000110→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→000110→0010100→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<RtEnlistmentRese
// 注意:若前端未传 applyStatus数据库默认 0不会触发流程
if (1 == rtEnlistmentReserve.getApplyStatus()) {
// 绑定当前学生 ID提交人即学生本人确保流程变量准确
rtEnlistmentReserve.setStudentId(SecurityUtils.getUserId());
if (rtEnlistmentReserve.getStudentId() == null) {
rtEnlistmentReserve.setStudentId(SecurityUtils.getUserId());
}
// 启动流程(此时 applyId 已存在,可正常传递)
ProcessResultDto processResultDto = startEnlistmentReserveProcess(rtEnlistmentReserve);

View File

@@ -21,7 +21,7 @@ import org.flowable.task.api.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.srs.common.utils.StringUtils;
import java.util.*;
/**
@@ -199,6 +199,74 @@ public class RtStuDisciplinaryApplicationServiceImpl extends ServiceImpl<RtStuDi
return rtStuDisciplinaryApplicationMapper.deleteRtStuDisciplinaryApplicationByApplicationId(applicationId);
}
@Override
public String importDisciplinaryApplication(List<RtStuDisciplinaryApplication> 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("<br/>" + successNum + "、学号 " + rtStuDisciplinaryApplication.getStuNo() + " 导入成功");
} catch (Exception e) {
failureNum++;
String msg = "<br/>" + 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);

View File

@@ -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<RtStuDiscip
return rtStuDisciplinaryRelieve;
}
@Override
public String importDisciplinaryRelieve(List<RtStuDisciplinaryRelieve> 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("<br/>" + successNum + "、学号 " + rtStuDisciplinaryRelieve.getStuNo() + " 导入成功");
} catch (Exception e) {
failureNum++;
String msg = "<br/>" + 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();
}
}

View File

@@ -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<SysDisMateMapper,SysDisMa
public int deleteSysDisMateById(Long id) {
return sysDisMateMapper.deleteSysDisMateById(id);
}
}

View File

@@ -46,6 +46,7 @@
<result property="updateTime" column="update_time"/>
<result property="affixId" column="affix_id"/>
<result property="deployId" column="deploy_id" />
<result property="deptName" column="dept_name"/>
<!--入伍保留学籍申请表-审核记录 多条件查询column里传入了多条件【{studentName = student_name, studentNo = student_no}】javaType里面写了list表明你有多条件 studentName student_name字段-->
<collection property="enlistmentReserveApprovalList"
column="{studentName = student_name, studentNo = student_no}"

View File

@@ -29,6 +29,7 @@
<result property="updateTime" column="update_time"/>
<result property="affixId" column="affix_id"/>
<result property="deployId" column="deploy_id"/>
<result property="deptName" column="dept_name" />
<!--入伍保留学籍申请表-审核记录 多条件查询column里传入了多条件【{studentName = student_name, studentNo = student_no}】javaType里面写了list表明你有多条件 studentName student_name字段-->
<collection property="enlistmentReserveApprovalList"
column="{studentName = student_name, studentNo = student_no}"
@@ -125,7 +126,8 @@
create_time,
update_time,
affix_id,
deploy_id
deploy_id,
dept_name
from rt_enlistment_reserve
</sql>
@@ -160,7 +162,9 @@
<if test="approvalNo != null and approvalNo != ''">and approval_no = #{approvalNo}</if>
<if test="affixId != null and affixId != ''">and affix_id = #{affixId}</if>
<if test="deployId != null and deployId != ''">and deploy_id = #{deployId}</if>
<if test="deptName != null and deptName != ''"> and dept_name like concat('%', #{deptName}, '%')</if>
</where>
order by id desc
</select>
<select id="selectRtEnlistmentReserveById" parameterType="Long" resultMap="RtEnlistmentReserveResult">
@@ -188,6 +192,13 @@
select * from rt_enlistment_reserve
</select>
<!-- 匹配reserve_no以"BLXJ(年份)"开头的记录-->
<select id="countByYear" resultType="int">
SELECT COUNT(*)
FROM rt_enlistment_reserve
WHERE reserve_no LIKE CONCAT('BLXJ(', #{year}, ')%')
</select>
<!-- 根据流程编号查询申请记录 -->
<select id="selectRtEnlistmentReserveByProcessInstanceId" parameterType="String"
resultMap="RtEnlistmentReserveResult">
@@ -231,6 +242,7 @@
<if test="updateTime != null">update_time,</if>
<if test="affixId != null">affix_id,</if>
<if test="deployId != null">deploy_id,</if>
<if test="deptName != null">dept_name,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="applyNo != null and applyNo != ''">#{applyNo},</if>
@@ -256,6 +268,7 @@
<if test="updateTime != null">#{updateTime},</if>
<if test="affixId != null">#{affixId},</if>
<if test="deployId != null">#{deployId},</if>
<if test="deptName != null">#{deptName},</if>
</trim>
</insert>
@@ -285,6 +298,7 @@
<if test="updateTime != null">update_time = #{updateTime},</if>
<if test="affixId != null">affix_id = #{affixId},</if>
<if test="deployId != null">deploy_id = #{deployId},</if>
<if test="deptName != null">dept_name = #{deptName},</if>
</trim>
where id = #{id}
</update>

View File

@@ -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);
}

View File

@@ -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<SysTeacherVisitDormitoryMaterials> visitDormitoryMaterialsList;
/**
* 职业测评/就业育人佐证材料
*/
@ApiModelProperty(value = "职业测评/就业育人佐证材料", hidden = true)
@Excel(name = "职业测评/就业育人佐证材料")
private List<SysTeacherStuTestMaterials> edgMaterialsList;
/**
* 通知任务佐证材料
*/
@ApiModelProperty(value = "通知任务佐证材料", hidden = true)
@Excel(name = "通知任务佐证材料")
private List<SysTeacherStuNoticeMaterials> noticeMaterialsList;
}

View File

@@ -82,10 +82,10 @@ public class SysTeacherKpiFillingBusinessWorkServiceImpl extends ServiceImpl<Sys
public int updateSysTeacherKpiFillingBusinessWork(SysTeacherKpiFillingBusinessWork sysTeacherKpiFillingBusinessWork) {
// sysTeacherKpiFillingBusinessWork.setFdyName(SecurityUtils.getLoginUser().getUser().getNickName());
// 判断填报记录是否填报
List<SysTeacherKpiFillingBusinessWork> sysTeacherKpiFillingBusinessWorkList = sysTeacherKpiFillingBusinessWorkMapper.selectSysTeacherKpiFillingBusinessWorkByFdyName(sysTeacherKpiFillingBusinessWork.getFdyName(), sysTeacherKpiFillingBusinessWork.getFillingYear(), sysTeacherKpiFillingBusinessWork.getFillingMonth(), sysTeacherKpiFillingBusinessWork.getClassType());
/*List<SysTeacherKpiFillingBusinessWork> sysTeacherKpiFillingBusinessWorkList = sysTeacherKpiFillingBusinessWorkMapper.selectSysTeacherKpiFillingBusinessWorkByFdyName(sysTeacherKpiFillingBusinessWork.getFdyName(), sysTeacherKpiFillingBusinessWork.getFillingYear(), sysTeacherKpiFillingBusinessWork.getFillingMonth(), sysTeacherKpiFillingBusinessWork.getClassType());
if (sysTeacherKpiFillingBusinessWorkList != null && !sysTeacherKpiFillingBusinessWorkList.isEmpty()) {
throw new ServiceException("已提交,请勿重复提交", 500);
}
}*/
return sysTeacherKpiFillingBusinessWorkMapper.updateSysTeacherKpiFillingBusinessWork(sysTeacherKpiFillingBusinessWork);
}

View File

@@ -103,10 +103,10 @@ public class SysTeacherKpiFillingStuMgtServiceImpl extends ServiceImpl<SysTeache
*/
@Override
public int updateSysTeacherKpiFillingStuMgt(SysTeacherKpiFillingStuMgt sysTeacherKpiFillingStuMgt) {
List<SysTeacherKpiFillingStuMgt> sysTeacherKpiFillingStuMgts = sysTeacherKpiFillingStuMgtMapper.selectSysTeacherKpiFillingStuMgtByFdyNameAndFillingYear(sysTeacherKpiFillingStuMgt.getDepartmentName(), sysTeacherKpiFillingStuMgt.getFdyName(), sysTeacherKpiFillingStuMgt.getFillingYear(), sysTeacherKpiFillingStuMgt.getFillingMonth());
/*List<SysTeacherKpiFillingStuMgt> 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());
}

View File

@@ -89,6 +89,14 @@
<collection property="visitDormitoryMaterialsList"
column="{fdyName = fdy_name, fillingYear = filling_year, fillingMonth = filling_month}"
javaType="java.util.ArrayList" select="selectVisitDormitoryMaterialsById"/>
<!--职业测评/就业育人佐证材料子表的集合 -->
<collection property="edgMaterialsList"
column="{fdyName = fdy_name, fillingYear = filling_year, fillingMonth = filling_month}"
javaType="java.util.ArrayList" select="selectEdgMaterialsById"/>
<!--通知任务佐证材料子表的集合 -->
<collection property="noticeMaterialsList"
column="{fdyName = fdy_name, fillingYear = filling_year, fillingMonth = filling_month}"
javaType="java.util.ArrayList" select="selectNoticeMaterialsById"/>
</resultMap>
<!--个人填报-业务工作子表的映射 -->
@@ -401,6 +409,32 @@
<result property="fillingYear" column="filling_year"/>
<result property="fillingMonth" column="filling_month"/>
</resultMap>
<!--个人填报-学生管理-职业测评材料子表的映射 -->
<resultMap type="SysTeacherStuTestMaterials" id="SysTeacherEdgMaterialsResult">
<result property="id" column="id"/>
<result property="developmentTime" column="development_time"/>
<result property="place" column="place"/>
<result property="className" column="class_name"/>
<result property="numberOfStudents" column="number_of_students"/>
<result property="mainContent" column="main_content"/>
<result property="photo" column="photo"/>
<result property="fdyName" column="fdy_name"/>
<result property="fillingYear" column="filling_year"/>
<result property="fillingMonth" column="filling_month"/>
</resultMap>
<!--个人填报-学生管理-通知任务材料子表的映射 -->
<resultMap type="SysTeacherStuNoticeMaterials" id="SysTeacherStuNoticeMaterialsResult">
<result property="id" column="id"/>
<result property="developmentTime" column="development_time"/>
<result property="place" column="place"/>
<result property="className" column="class_name"/>
<result property="numberOfStudents" column="number_of_students"/>
<result property="mainContent" column="main_content"/>
<result property="photo" column="photo"/>
<result property="fdyName" column="fdy_name"/>
<result property="fillingYear" column="filling_year"/>
<result property="fillingMonth" column="filling_month"/>
</resultMap>
<!--个人填报-考勤管理-会议培训佐证材料子子表的映射 -->
<resultMap type="SysTeacherConferenceMeetingMaterials" id="SysTeacherConferenceMeetingMaterialsResult">
<result property="id" column="id"/>
@@ -497,6 +531,40 @@
</where>
order by id desc
</select>
<!--查询个人填报-学生管理-职业测评材料子表的数据-->
<select id="selectEdgMaterialsById" resultMap="SysTeacherEdgMaterialsResult">
select *
from sys_teacher_stu_test_materials
<where>
<if test="fdyName != null and fdyName != ''">
and fdy_name = #{fdyName}
</if>
<if test="fillingYear != null and fillingYear != ''">
and filling_year = #{fillingYear}
</if>
<if test="fillingMonth != null and fillingMonth != ''">
and filling_month = #{fillingMonth}
</if>
</where>
order by id desc
</select>
<!--查询个人填报-学生管理-通知任务材料子表的数据-->
<select id="selectNoticeMaterialsById" resultMap="SysTeacherStuNoticeMaterialsResult">
select *
from sys_teacher_stu_notice_materials
<where>
<if test="fdyName != null and fdyName != ''">
and fdy_name = #{fdyName}
</if>
<if test="fillingYear != null and fillingYear != ''">
and filling_year = #{fillingYear}
</if>
<if test="fillingMonth != null and fillingMonth != ''">
and filling_month = #{fillingMonth}
</if>
</where>
order by id desc
</select>
<!--个人填报-考勤管理-会议培训佐证材料子子表的数据-->
<select id="selectConferenceMeetingMaterialsById" resultMap="SysTeacherConferenceMeetingMaterialsResult">
select *

View File

@@ -29,6 +29,10 @@
<collection property="stuTalkMaterialsList" column="{fdyName = fdy_name, fillingYear = filling_year, fillingMonth = filling_month}" javaType="java.util.ArrayList" select="selectStuTalkMaterialsById"/>
<!--每周深入学生宿舍佐证材料子表的集合 -->
<collection property="visitDormitoryMaterialsList" column="{fdyName = fdy_name, fillingYear = filling_year, fillingMonth = filling_month}" javaType="java.util.ArrayList" select="selectVisitDormitoryMaterialsById"/>
<!--职业测评/就业育人佐证材料子表的集合 -->
<collection property="edgMaterialsList" column="{fdyName = fdy_name, fillingYear = filling_year, fillingMonth = filling_month}" javaType="java.util.ArrayList" select="selectEdgMaterialsById"/>
<!--通知任务佐证材料子表的集合 -->
<collection property="noticeMaterialsList" column="{fdyName = fdy_name, fillingYear = filling_year, fillingMonth = filling_month}" javaType="java.util.ArrayList" select="selectNoticeMaterialsById"/>
</resultMap>
<!--干部会议佐证材料子表的映射 -->
@@ -95,6 +99,32 @@
<result property="fillingYear" column="filling_year"/>
<result property="fillingMonth" column="filling_month"/>
</resultMap>
<!--职业测评/就业育人佐证材料子表的映射 -->
<resultMap type="SysTeacherStuTestMaterials" id="SysTeacherEdgMaterialsResult">
<result property="id" column="id"/>
<result property="developmentTime" column="development_time"/>
<result property="place" column="place"/>
<result property="className" column="class_name"/>
<result property="numberOfStudents" column="number_of_students"/>
<result property="mainContent" column="main_content"/>
<result property="photo" column="photo"/>
<result property="fdyName" column="fdy_name"/>
<result property="fillingYear" column="filling_year"/>
<result property="fillingMonth" column="filling_month"/>
</resultMap>
<!--通知任务佐证材料子表的映射 -->
<resultMap type="SysTeacherStuNoticeMaterials" id="SysTeacherStuNoticeMaterialsResult">
<result property="id" column="id"/>
<result property="developmentTime" column="development_time"/>
<result property="place" column="place"/>
<result property="className" column="class_name"/>
<result property="numberOfStudents" column="number_of_students"/>
<result property="mainContent" column="main_content"/>
<result property="photo" column="photo"/>
<result property="fdyName" column="fdy_name"/>
<result property="fillingYear" column="filling_year"/>
<result property="fillingMonth" column="filling_month"/>
</resultMap>
<!--查询干部会议佐证材料子表的数据-->
<select id="selectCadreMeetingMaterialsById" resultMap="SysTeacherCadreMeetingMaterialsResult">
@@ -176,6 +206,40 @@
</if>
</where>
</select>
<!--职业测评/就业育人佐证材料子表的数据-->
<select id="selectEdgMaterialsById" resultMap="SysTeacherEdgMaterialsResult">
select *
from sys_teacher_stu_test_materials
<where>
<if test="fdyName != null and fdyName != ''">
and fdy_name = #{fdyName}
</if>
<if test="fillingYear != null and fillingYear != ''">
and filling_year = #{fillingYear}
</if>
<if test="fillingMonth != null and fillingMonth != ''">
and filling_month = #{fillingMonth}
</if>
</where>
order by id desc
</select>
<!--通知任务佐证材料子表的数据-->
<select id="selectNoticeMaterialsById" resultMap="SysTeacherStuNoticeMaterialsResult">
select *
from sys_teacher_stu_notice_materials
<where>
<if test="fdyName != null and fdyName != ''">
and fdy_name = #{fdyName}
</if>
<if test="fillingYear != null and fillingYear != ''">
and filling_year = #{fillingYear}
</if>
<if test="fillingMonth != null and fillingMonth != ''">
and filling_month = #{fillingMonth}
</if>
</where>
order by id desc
</select>
<sql id="selectSysTeacherKpiFillingStuMgtVo">
select id,