diff --git a/dms-dormitory/src/main/java/com/srs/dormitory/domain/DmsOutsideAccommodationApply.java b/dms-dormitory/src/main/java/com/srs/dormitory/domain/DmsOutsideAccommodationApply.java index 2c5a4fe..14553d7 100644 --- a/dms-dormitory/src/main/java/com/srs/dormitory/domain/DmsOutsideAccommodationApply.java +++ b/dms-dormitory/src/main/java/com/srs/dormitory/domain/DmsOutsideAccommodationApply.java @@ -1,6 +1,7 @@ package com.srs.dormitory.domain; import java.util.Date; +import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; import com.srs.common.annotation.Excel; @@ -357,5 +358,17 @@ public class DmsOutsideAccommodationApply extends BaseEntity { @Excel(name = "承诺内容") private String promiseContent; + /** + * 外宿申请表-附件记录 + */ + @ApiModelProperty(value = "外宿申请表-附件记录", hidden = true) + @Excel(name = "外宿申请表-附件记录") + private List outsideAccommodationAttachments; + /** + * 外宿申请表-审核记录 + */ + @ApiModelProperty(value = "外宿申请表-审核记录", hidden = true) + @Excel(name = "外宿申请表-审核记录") + private List outsideAccommodationApprovals; } diff --git a/dms-dormitory/src/main/java/com/srs/dormitory/domain/DmsOutsideAccommodationApproval.java b/dms-dormitory/src/main/java/com/srs/dormitory/domain/DmsOutsideAccommodationApproval.java index e6c006a..b61e3f3 100644 --- a/dms-dormitory/src/main/java/com/srs/dormitory/domain/DmsOutsideAccommodationApproval.java +++ b/dms-dormitory/src/main/java/com/srs/dormitory/domain/DmsOutsideAccommodationApproval.java @@ -1,6 +1,7 @@ package com.srs.dormitory.domain; import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; import com.srs.common.annotation.Excel; import com.baomidou.mybatisplus.annotation.*; @@ -10,22 +11,21 @@ import lombok.*; import com.srs.common.core.domain.BaseEntity; - /** * 外宿申请审批记录对象 dms_outside_accommodation_approval * * @author srs - * @date 2025-12-05 + * @date 2025-12-19 */ @Data @EqualsAndHashCode(callSuper = true) @NoArgsConstructor @AllArgsConstructor @Builder -@ApiModel(value = "DmsOutsideAccommodationApproval对象" , description = "外宿申请审批记录表") +@ApiModel(value = "DmsOutsideAccommodationApproval对象", description = "外宿申请审批记录表") @TableName("dms_outside_accommodation_approval") -public class DmsOutsideAccommodationApproval extends BaseEntity{ -private static final long serialVersionUID=1L; +public class DmsOutsideAccommodationApproval extends BaseEntity { + private static final long serialVersionUID = 1L; /** * 主键ID @@ -39,7 +39,7 @@ private static final long serialVersionUID=1L; */ @ApiModelProperty("外宿申请ID(关联申请表)") @TableField("apply_id") - @Excel(name = "外宿申请ID" , readConverterExp = "关=联申请表") + @Excel(name = "外宿申请ID", readConverterExp = "关=联申请表") private Long applyId; /** @@ -95,7 +95,7 @@ private static final long serialVersionUID=1L; */ @ApiModelProperty("审批结果(1=同意,0=驳回)") @TableField("approval_result") - @Excel(name = "审批结果" , readConverterExp = "1==同意,0=驳回") + @Excel(name = "审批结果", readConverterExp = "1==同意,0=驳回") private Long approvalResult; /** @@ -104,7 +104,7 @@ private static final long serialVersionUID=1L; @ApiModelProperty("审批时间") @TableField("approval_time") @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "审批时间" , width = 30, dateFormat = "yyyy-MM-dd") + @Excel(name = "审批时间", width = 30, dateFormat = "yyyy-MM-dd") private Date approvalTime; /** @@ -131,5 +131,13 @@ private static final long serialVersionUID=1L; @Excel(name = "学生学号") private String studentNo; + /** + * 签名 + */ + @ApiModelProperty("签名") + @TableField("signature") + @Excel(name = "签名") + private String signature; + } diff --git a/dms-dormitory/src/main/java/com/srs/dormitory/domain/DmsOutsideAccommodationAttachment.java b/dms-dormitory/src/main/java/com/srs/dormitory/domain/DmsOutsideAccommodationAttachment.java index aa395a9..6064e49 100644 --- a/dms-dormitory/src/main/java/com/srs/dormitory/domain/DmsOutsideAccommodationAttachment.java +++ b/dms-dormitory/src/main/java/com/srs/dormitory/domain/DmsOutsideAccommodationAttachment.java @@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.*; import com.srs.common.core.domain.BaseEntity; +import java.util.List; /** @@ -104,5 +105,10 @@ private static final long serialVersionUID=1L; @Excel(name = "学生学号") private String studentNo; - + /** + * 外宿申请表 + */ + @ApiModelProperty(value = "外宿申请表", hidden = true) + @Excel(name = "外宿申请表") + private List outsideAccommodationApplies; } diff --git a/dms-dormitory/src/main/java/com/srs/dormitory/mapper/DmsOutsideAccommodationApprovalMapper.java b/dms-dormitory/src/main/java/com/srs/dormitory/mapper/DmsOutsideAccommodationApprovalMapper.java index fc2aa53..052491c 100644 --- a/dms-dormitory/src/main/java/com/srs/dormitory/mapper/DmsOutsideAccommodationApprovalMapper.java +++ b/dms-dormitory/src/main/java/com/srs/dormitory/mapper/DmsOutsideAccommodationApprovalMapper.java @@ -4,6 +4,7 @@ import java.util.List; import com.srs.dormitory.domain.DmsOutsideAccommodationApproval; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; /** * 外宿申请审批记录Mapper接口 @@ -28,6 +29,14 @@ public interface DmsOutsideAccommodationApprovalMapper extends BaseMapper selectDmsOutsideAccommodationApprovalList(DmsOutsideAccommodationApproval dmsOutsideAccommodationApproval); + /** + * 根据学生姓名学号和审批人id查询保留学籍审批记录 + * + * @param + * @return 结果 + */ + DmsOutsideAccommodationApproval selectOutsideAccommodationApprovalByStuName(@Param("studentName") String studentName, @Param("studentNo") String studentNo, @Param("approverId") Long approverId); + /** * 新增外宿申请审批记录 * diff --git a/dms-dormitory/src/main/java/com/srs/dormitory/mapper/DmsOutsideAccommodationAttachmentMapper.java b/dms-dormitory/src/main/java/com/srs/dormitory/mapper/DmsOutsideAccommodationAttachmentMapper.java index e157e6d..43805b6 100644 --- a/dms-dormitory/src/main/java/com/srs/dormitory/mapper/DmsOutsideAccommodationAttachmentMapper.java +++ b/dms-dormitory/src/main/java/com/srs/dormitory/mapper/DmsOutsideAccommodationAttachmentMapper.java @@ -4,6 +4,7 @@ import java.util.List; import com.srs.dormitory.domain.DmsOutsideAccommodationAttachment; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; /** * 外宿申请附件Mapper接口 @@ -28,6 +29,13 @@ public interface DmsOutsideAccommodationAttachmentMapper extends BaseMapper selectDmsOutsideAccommodationAttachmentList(DmsOutsideAccommodationAttachment dmsOutsideAccommodationAttachment); + /** + * 批量插入校外住宿附件 + * @param list 校外住宿附件列表 + * @return 插入行数 + */ + int batchInsertDmsOutsideAccommodationAttachment(List list); + /** * 新增外宿申请附件 * @@ -52,6 +60,15 @@ public interface DmsOutsideAccommodationAttachmentMapper extends BaseMapper selectDmsOutsideAccommodationAttachmentList(DmsOutsideAccommodationAttachment dmsOutsideAccommodationAttachment); + /** + * 批量插入校外住宿附件 + * @param list 校外住宿附件列表 + * @return 插入行数 + */ + int batchInsertDmsOutsideAccommodationAttachment(List list); + /** * 新增外宿申请附件 * @@ -52,6 +60,8 @@ public interface IDmsOutsideAccommodationAttachmentService extends IService list) { + // 统一设置默认值(如创建时间) + for (DmsOutsideAccommodationAttachment attach : list) { + attach.setCreateTime(DateUtils.getNowDate()); // 批量设置创建时间 + // 其他默认值(如状态等) + } + // 调用Mapper层批量插入方法 + return dmsOutsideAccommodationAttachmentMapper.batchInsertDmsOutsideAccommodationAttachment(list); + } + /** * 新增外宿申请附件 * @@ -77,6 +88,11 @@ public class DmsOutsideAccommodationAttachmentServiceImpl extends ServiceImpl - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, @@ -177,7 +248,7 @@ diff --git a/dms-dormitory/src/main/resources/mapper/dormitory/DmsOutsideAccommodationApprovalMapper.xml b/dms-dormitory/src/main/resources/mapper/dormitory/DmsOutsideAccommodationApprovalMapper.xml index d13d8b2..d1a6668 100644 --- a/dms-dormitory/src/main/resources/mapper/dormitory/DmsOutsideAccommodationApprovalMapper.xml +++ b/dms-dormitory/src/main/resources/mapper/dormitory/DmsOutsideAccommodationApprovalMapper.xml @@ -1,53 +1,94 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + - - - - - - - - - - - - - + + + + + + + + + + + + + + - select id, apply_id, apply_no, approval_node, approver_id, approver_name, approver_role, approval_opinion, approval_result, approval_time, process_instance_id, student_name, student_no from dms_outside_accommodation_approval + select id, + apply_id, + apply_no, + approval_node, + approver_id, + approver_name, + approver_role, + approval_opinion, + approval_result, + approval_time, + process_instance_id, + student_name, + student_no, + signature + from dms_outside_accommodation_approval - - - and apply_id = #{applyId} - and apply_no = #{applyNo} - and approval_node = #{approvalNode} - and approver_id = #{approverId} - and approver_name like concat('%', #{approverName}, '%') - and approver_role = #{approverRole} - and approval_opinion = #{approvalOpinion} - and approval_result = #{approvalResult} - and approval_time = #{approvalTime} - and process_instance_id = #{processInstanceId} - and student_name like concat('%', #{studentName}, '%') - and student_no = #{studentNo} + + and apply_id = #{applyId} + and apply_no = #{applyNo} + and approval_node = #{approvalNode} + and approver_id = #{approverId} + and approver_name like concat('%', #{approverName}, + '%') + + and approver_role = #{approverRole} + and approval_opinion = #{approvalOpinion} + and approval_result = #{approvalResult} + and approval_time = #{approvalTime} + and process_instance_id = + #{processInstanceId} + + and student_name like concat('%', #{studentName}, + '%') + + and student_no = #{studentNo} + and signature = #{signature} - - where id = #{id} - - + + + + insert into dms_outside_accommodation_approval apply_id, @@ -62,7 +103,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" process_instance_id, student_name, student_no, - + signature, + #{applyId}, #{applyNo}, @@ -76,7 +118,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{processInstanceId}, #{studentName}, #{studentNo}, - + #{signature}, + @@ -94,16 +137,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" process_instance_id = #{processInstanceId}, student_name = #{studentName}, student_no = #{studentNo}, + signature = #{signature}, where id = #{id} - delete from dms_outside_accommodation_approval where id = #{id} + delete + from dms_outside_accommodation_approval + where id = #{id} - delete from dms_outside_accommodation_approval where id in + delete from dms_outside_accommodation_approval where id in #{id} diff --git a/dms-dormitory/src/main/resources/mapper/dormitory/DmsOutsideAccommodationAttachmentMapper.xml b/dms-dormitory/src/main/resources/mapper/dormitory/DmsOutsideAccommodationAttachmentMapper.xml index bd3dbb6..f739087 100644 --- a/dms-dormitory/src/main/resources/mapper/dormitory/DmsOutsideAccommodationAttachmentMapper.xml +++ b/dms-dormitory/src/main/resources/mapper/dormitory/DmsOutsideAccommodationAttachmentMapper.xml @@ -1,48 +1,205 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + - - - - - - - - - - - + + + + + + + + + + + + + - - select id, apply_id, attachment_name, attachment_url, attachment_type, file_size, file_suffix, create_time, process_instance_id, student_name, student_no from dms_outside_accommodation_attachment - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + select * + from dms_outside_accommodation_apply + + + and id = #{id} + + + and student_name = #{studentName} + + + and student_no = #{studentNo} + - - + select * + from dms_outside_accommodation_approval + + + and student_name = #{studentName} + + + and student_no = #{studentNo} + + + + + + select id, + apply_id, + attachment_name, + attachment_url, + attachment_type, + file_size, + file_suffix, + create_time, + process_instance_id, + student_name, + student_no + from dms_outside_accommodation_attachment + + + + + - - + + + + insert into dms_outside_accommodation_attachment + ( + apply_id, + attachment_name, + attachment_url, + attachment_type, + file_size, + file_suffix, + create_time, + process_instance_id, + student_name, + student_no + ) + values + + ( + #{item.applyId}, + #{item.attachmentName}, + #{item.attachmentUrl}, + #{item.attachmentType}, + #{item.fileSize}, + #{item.fileSuffix}, + #{item.createTime}, + #{item.processInstanceId}, + #{item.studentName}, + #{item.studentNo} + ) + + + + insert into dms_outside_accommodation_attachment apply_id, @@ -55,7 +212,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" process_instance_id, student_name, student_no, - + #{applyId}, #{attachmentName}, @@ -67,7 +224,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{processInstanceId}, #{studentName}, #{studentNo}, - + @@ -88,11 +245,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - delete from dms_outside_accommodation_attachment where id = #{id} + delete + from dms_outside_accommodation_attachment + where id = #{id} + + + + delete + from dms_outside_accommodation_attachment + where attachment_name = #{attachmentName} and student_name = #{studentName} - delete from dms_outside_accommodation_attachment where id in + delete from dms_outside_accommodation_attachment where id in #{id} diff --git a/srs-admin/src/main/java/com/srs/web/controller/comprehensive/CphAuditDetailsController.java b/srs-admin/src/main/java/com/srs/web/controller/comprehensive/CphAuditDetailsController.java index 8030c5a..dbdeda0 100644 --- a/srs-admin/src/main/java/com/srs/web/controller/comprehensive/CphAuditDetailsController.java +++ b/srs-admin/src/main/java/com/srs/web/controller/comprehensive/CphAuditDetailsController.java @@ -266,14 +266,6 @@ public class CphAuditDetailsController extends BaseController { public AjaxResult getInfo(@PathVariable("id") Long id) { return success(cphAuditDetailsService.selectCphAuditDetailsById(id)); } - /** - * 查询个人思想品得加分项申请 - */ - @PostMapping("/getcphiamByOne/{stuNo}") - public TableDataInfo getcphiamByOne(@PathVariable("stuNo") String stuNo) { - List list=cphAuditDetailsService.getcphiamByOne(stuNo); - return getDataTable(list); - } /** * 新增审核明细 diff --git a/srs-admin/src/main/java/com/srs/web/controller/comprehensive/CphSqlServerDataController.java b/srs-admin/src/main/java/com/srs/web/controller/comprehensive/CphSqlServerDataController.java index 829e0dd..6fa8f57 100644 --- a/srs-admin/src/main/java/com/srs/web/controller/comprehensive/CphSqlServerDataController.java +++ b/srs-admin/src/main/java/com/srs/web/controller/comprehensive/CphSqlServerDataController.java @@ -144,7 +144,7 @@ public class CphSqlServerDataController extends BaseController { List list=sqlServerDataService.getBZRClassInfoList(); return success(list); } - //辅导员 + //教职工 @RequestMapping("/getEmployEEInfoList") public AjaxResult getEmployEEInfoList(){ //startPage(); diff --git a/srs-admin/src/main/java/com/srs/web/controller/comprehensive/SrsCqScoreController.java b/srs-admin/src/main/java/com/srs/web/controller/comprehensive/SrsCqScoreController.java index 9f706b7..7ea7fdb 100644 --- a/srs-admin/src/main/java/com/srs/web/controller/comprehensive/SrsCqScoreController.java +++ b/srs-admin/src/main/java/com/srs/web/controller/comprehensive/SrsCqScoreController.java @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletResponse; +import com.srs.comprehensive.domain.CphAuditDetails; import com.srs.comprehensive.domain.Dto.CphExport; import com.srs.comprehensive.domain.SrsCqScore; import com.srs.comprehensive.domain.SrsMajors; @@ -235,13 +236,6 @@ public class SrsCqScoreController extends BaseController { } - @GetMapping("/getOwn") - public AjaxResult getOwn() { - String stuNo = getUsername(); - return success(srsCqScoreService.getOwn(stuNo)); - } - - /** * 导出学生综合素质评分表列表 */ @@ -337,4 +331,41 @@ public class SrsCqScoreController extends BaseController { return getDataTable(list); } + /** + * 查询个人思想品得加分项申请 + */ + @PostMapping("/getcphiamByOne/{stuNo}") + public TableDataInfo getcphiamByOne(@PathVariable("stuNo") String stuNo) { + List list=srsCqScoreService.getcphiamByOne(stuNo); + return getDataTable(list); + } + @GetMapping("/getOwncphiamByOne") + public TableDataInfo getOwncphiamByOne() { + List list=srsCqScoreService.getcphiamByOne(getUsername()); + return getDataTable(list); + } + + /** + * 查询个人素质综合信息 + */ + @GetMapping("/getStuData") + public TableDataInfo getStuData(String stuNo) { + List list=srsCqScoreService.getStuData(stuNo); + return getDataTable(list); + } + @GetMapping("/getOwnData") + public TableDataInfo getOwnData() { + List list=srsCqScoreService.getStuData(getUsername()); + return getDataTable(list); + } + //查询综合素质分数 + @GetMapping("/getOwn") + public TableDataInfo getOwn() { + String stuNo = getUsername(); + return getDataTable(srsCqScoreService.getOwn2(stuNo)); + } + @GetMapping("/getStu") + public TableDataInfo getStu(String stuNo){ + return getDataTable(srsCqScoreService.getOwn2(stuNo)); + } } diff --git a/srs-admin/src/main/java/com/srs/web/controller/comprehensive/SyncDataController.java b/srs-admin/src/main/java/com/srs/web/controller/comprehensive/SyncDataController.java new file mode 100644 index 0000000..a1b1702 --- /dev/null +++ b/srs-admin/src/main/java/com/srs/web/controller/comprehensive/SyncDataController.java @@ -0,0 +1,37 @@ +package com.srs.web.controller.comprehensive; + +import com.srs.common.core.controller.BaseController; +import com.srs.common.core.domain.AjaxResult; +import com.srs.common.core.page.TableDataInfo; +import com.srs.comprehensive.service.ICphTeacherService; +import com.srs.comprehensive.service.SyncDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/syncdata") +public class SyncDataController extends BaseController { + @Autowired + private SyncDataService syncDataService; + @Autowired + private ICphTeacherService iCphTeacherService; + @RequestMapping("/getEmployEEInfoList") + public TableDataInfo getEmployEEInfoList(){ + startPage(); + List list=syncDataService.getEmployEEInfoList(); + return getDataTable(list); + } + //同步教职工 + @RequestMapping("/synchronousEmployEEInfoList") + public AjaxResult synchronousEmployEEInfoList(){ + List list=syncDataService.getEmployEEInfoList(); + iCphTeacherService.sqlserverSynchronousMYSQL(list);//同步教职工 + //iCphTeacherService.Usertb(); + return success(); + } +} diff --git a/srs-admin/src/main/java/com/srs/web/controller/dormitory/DmsOutsideAccommodationApplyController.java b/srs-admin/src/main/java/com/srs/web/controller/dormitory/DmsOutsideAccommodationApplyController.java index 2aa8c7f..4541f2e 100644 --- a/srs-admin/src/main/java/com/srs/web/controller/dormitory/DmsOutsideAccommodationApplyController.java +++ b/srs-admin/src/main/java/com/srs/web/controller/dormitory/DmsOutsideAccommodationApplyController.java @@ -75,7 +75,7 @@ public class DmsOutsideAccommodationApplyController extends BaseController { /** * 获取外宿申请详细信息 */ - @PreAuthorize("@ss.hasPermi('dormitory:enlistmentReserve:query')") + @PreAuthorize("@ss.hasPermi('dormitory:outsideAccommodationApply:query')") @GetMapping(value = "/process/{processInstanceId}") @ApiOperation("获取应征入伍保留学籍申请详细信息") public AjaxResult getInfoByProcessInstanceId(@PathVariable("processInstanceId") String processInstanceId) { diff --git a/srs-admin/src/main/java/com/srs/web/controller/dormitory/DmsOutsideAccommodationApprovalController.java b/srs-admin/src/main/java/com/srs/web/controller/dormitory/DmsOutsideAccommodationApprovalController.java index 63c9d99..c5cf916 100644 --- a/srs-admin/src/main/java/com/srs/web/controller/dormitory/DmsOutsideAccommodationApprovalController.java +++ b/srs-admin/src/main/java/com/srs/web/controller/dormitory/DmsOutsideAccommodationApprovalController.java @@ -2,6 +2,7 @@ package com.srs.web.controller.dormitory; import java.util.List; import javax.servlet.http.HttpServletResponse; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -37,11 +38,10 @@ public class DmsOutsideAccommodationApprovalController extends BaseController { /** * 查询外宿申请审批记录列表 */ -@PreAuthorize("@ss.hasPermi('dormitory:outsideAccommodationApproval:list')") -@GetMapping("/list") -@ApiOperation("查询外宿申请审批记录列表") - public TableDataInfo list(DmsOutsideAccommodationApproval dmsOutsideAccommodationApproval) - { + @PreAuthorize("@ss.hasPermi('dormitory:outsideAccommodationApproval:list')") + @GetMapping("/list") + @ApiOperation("查询外宿申请审批记录列表") + public TableDataInfo list(DmsOutsideAccommodationApproval dmsOutsideAccommodationApproval) { startPage(); List list = dmsOutsideAccommodationApprovalService.selectDmsOutsideAccommodationApprovalList(dmsOutsideAccommodationApproval); return getDataTable(list); @@ -54,8 +54,7 @@ public class DmsOutsideAccommodationApprovalController extends BaseController { @Log(title = "外宿申请审批记录", businessType = BusinessType.EXPORT) @PostMapping("/export") @ApiOperation("导出外宿申请审批记录列表") - public void export(HttpServletResponse response, DmsOutsideAccommodationApproval dmsOutsideAccommodationApproval) - { + public void export(HttpServletResponse response, DmsOutsideAccommodationApproval dmsOutsideAccommodationApproval) { List list = dmsOutsideAccommodationApprovalService.selectDmsOutsideAccommodationApprovalList(dmsOutsideAccommodationApproval); ExcelUtil util = new ExcelUtil(DmsOutsideAccommodationApproval.class); util.exportExcel(response, list, "外宿申请审批记录数据"); @@ -67,8 +66,7 @@ public class DmsOutsideAccommodationApprovalController extends BaseController { @PreAuthorize("@ss.hasPermi('dormitory:outsideAccommodationApproval:query')") @GetMapping(value = "/{id}") @ApiOperation("获取外宿申请审批记录详细信息") - public AjaxResult getInfo(@PathVariable("id") Long id) - { + public AjaxResult getInfo(@PathVariable("id") Long id) { return success(dmsOutsideAccommodationApprovalService.selectDmsOutsideAccommodationApprovalById(id)); } @@ -79,11 +77,21 @@ public class DmsOutsideAccommodationApprovalController extends BaseController { @Log(title = "外宿申请审批记录", businessType = BusinessType.INSERT) @PostMapping("/add") @ApiOperation("新增外宿申请审批记录") - public AjaxResult add(@RequestBody DmsOutsideAccommodationApproval dmsOutsideAccommodationApproval) - { + public AjaxResult add(@RequestBody DmsOutsideAccommodationApproval dmsOutsideAccommodationApproval) { return toAjax(dmsOutsideAccommodationApprovalService.insertDmsOutsideAccommodationApproval(dmsOutsideAccommodationApproval)); } + /** + * 新增或修改外宿申请审批记录 + */ + @PreAuthorize("@ss.hasPermi('dormitory:outsideAccommodationApproval:add')") + @Log(title = "外宿申请审批记录", businessType = BusinessType.INSERT) + @PostMapping("/addOrUpdate") + @ApiOperation("新增或修改外宿申请审批记录") + public AjaxResult addOrUpdateAccommodationApproval(@RequestBody DmsOutsideAccommodationApproval dmsOutsideAccommodationApproval) { + return toAjax(dmsOutsideAccommodationApprovalService.addOrUpdateAccommodationApproval(dmsOutsideAccommodationApproval)); + } + /** * 修改外宿申请审批记录 */ @@ -91,8 +99,7 @@ public class DmsOutsideAccommodationApprovalController extends BaseController { @Log(title = "外宿申请审批记录", businessType = BusinessType.UPDATE) @PostMapping("/update") @ApiOperation("修改外宿申请审批记录") - public AjaxResult edit(@RequestBody DmsOutsideAccommodationApproval dmsOutsideAccommodationApproval) - { + public AjaxResult edit(@RequestBody DmsOutsideAccommodationApproval dmsOutsideAccommodationApproval) { return toAjax(dmsOutsideAccommodationApprovalService.updateDmsOutsideAccommodationApproval(dmsOutsideAccommodationApproval)); } @@ -103,8 +110,7 @@ public class DmsOutsideAccommodationApprovalController extends BaseController { @Log(title = "外宿申请审批记录", businessType = BusinessType.DELETE) @PostMapping("/{ids}") @ApiOperation("删除外宿申请审批记录") - public AjaxResult remove(@PathVariable Long[] ids) - { + public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(dmsOutsideAccommodationApprovalService.deleteDmsOutsideAccommodationApprovalByIds(ids)); } } diff --git a/srs-admin/src/main/java/com/srs/web/controller/dormitory/DmsOutsideAccommodationAttachmentController.java b/srs-admin/src/main/java/com/srs/web/controller/dormitory/DmsOutsideAccommodationAttachmentController.java index 24ea031..b3a1eda 100644 --- a/srs-admin/src/main/java/com/srs/web/controller/dormitory/DmsOutsideAccommodationAttachmentController.java +++ b/srs-admin/src/main/java/com/srs/web/controller/dormitory/DmsOutsideAccommodationAttachmentController.java @@ -2,6 +2,8 @@ package com.srs.web.controller.dormitory; import java.util.List; import javax.servlet.http.HttpServletResponse; + +import com.srs.routine.domain.RtEnlistmentReserveAttach; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -37,11 +39,10 @@ public class DmsOutsideAccommodationAttachmentController extends BaseController /** * 查询外宿申请附件列表 */ -@PreAuthorize("@ss.hasPermi('dormitory:outsideAccommodationAttachment:list')") -@GetMapping("/list") -@ApiOperation("查询外宿申请附件列表") - public TableDataInfo list(DmsOutsideAccommodationAttachment dmsOutsideAccommodationAttachment) - { + @PreAuthorize("@ss.hasPermi('dormitory:outsideAccommodationAttachment:list')") + @GetMapping("/list") + @ApiOperation("查询外宿申请附件列表") + public TableDataInfo list(DmsOutsideAccommodationAttachment dmsOutsideAccommodationAttachment) { startPage(); List list = dmsOutsideAccommodationAttachmentService.selectDmsOutsideAccommodationAttachmentList(dmsOutsideAccommodationAttachment); return getDataTable(list); @@ -54,8 +55,7 @@ public class DmsOutsideAccommodationAttachmentController extends BaseController @Log(title = "外宿申请附件", businessType = BusinessType.EXPORT) @PostMapping("/export") @ApiOperation("导出外宿申请附件列表") - public void export(HttpServletResponse response, DmsOutsideAccommodationAttachment dmsOutsideAccommodationAttachment) - { + public void export(HttpServletResponse response, DmsOutsideAccommodationAttachment dmsOutsideAccommodationAttachment) { List list = dmsOutsideAccommodationAttachmentService.selectDmsOutsideAccommodationAttachmentList(dmsOutsideAccommodationAttachment); ExcelUtil util = new ExcelUtil(DmsOutsideAccommodationAttachment.class); util.exportExcel(response, list, "外宿申请附件数据"); @@ -67,8 +67,7 @@ public class DmsOutsideAccommodationAttachmentController extends BaseController @PreAuthorize("@ss.hasPermi('dormitory:outsideAccommodationAttachment:query')") @GetMapping(value = "/{id}") @ApiOperation("获取外宿申请附件详细信息") - public AjaxResult getInfo(@PathVariable("id") Long id) - { + public AjaxResult getInfo(@PathVariable("id") Long id) { return success(dmsOutsideAccommodationAttachmentService.selectDmsOutsideAccommodationAttachmentById(id)); } @@ -79,11 +78,31 @@ public class DmsOutsideAccommodationAttachmentController extends BaseController @Log(title = "外宿申请附件", businessType = BusinessType.INSERT) @PostMapping("/add") @ApiOperation("新增外宿申请附件") - public AjaxResult add(@RequestBody DmsOutsideAccommodationAttachment dmsOutsideAccommodationAttachment) - { + public AjaxResult add(@RequestBody DmsOutsideAccommodationAttachment dmsOutsideAccommodationAttachment) { return toAjax(dmsOutsideAccommodationAttachmentService.insertDmsOutsideAccommodationAttachment(dmsOutsideAccommodationAttachment)); } + /** + * 批量新增保留学籍申请附件(入伍通知书等) + */ + @PreAuthorize("@ss.hasPermi('dormitory:outsideAccommodationAttachment:add')") + @Log(title = "外宿申请附件", businessType = BusinessType.INSERT) + @PostMapping("/batchAdd") // 注意:修改接口路径避免与原单条接口冲突 + @ApiOperation("批量新增外宿申请附件") + public AjaxResult batchAdd(@RequestBody List list) { + // 1. 校验参数合法性 + if (list == null || list.isEmpty()) { + return AjaxResult.error("批量插入失败:附件列表不能为空"); + } + + // 2. 调用Service层批量插入方法 + int rows = dmsOutsideAccommodationAttachmentService.batchInsertDmsOutsideAccommodationAttachment(list); + + // 3. 返回结果(rows为成功插入的条数) + return rows > 0 ? AjaxResult.success("批量插入成功,共插入 " + rows + " 条记录") + : AjaxResult.error("批量插入失败"); + } + /** * 修改外宿申请附件 */ @@ -91,8 +110,7 @@ public class DmsOutsideAccommodationAttachmentController extends BaseController @Log(title = "外宿申请附件", businessType = BusinessType.UPDATE) @PostMapping("/update") @ApiOperation("修改外宿申请附件") - public AjaxResult edit(@RequestBody DmsOutsideAccommodationAttachment dmsOutsideAccommodationAttachment) - { + public AjaxResult edit(@RequestBody DmsOutsideAccommodationAttachment dmsOutsideAccommodationAttachment) { return toAjax(dmsOutsideAccommodationAttachmentService.updateDmsOutsideAccommodationAttachment(dmsOutsideAccommodationAttachment)); } @@ -103,8 +121,18 @@ public class DmsOutsideAccommodationAttachmentController extends BaseController @Log(title = "外宿申请附件", businessType = BusinessType.DELETE) @PostMapping("/{ids}") @ApiOperation("删除外宿申请附件") - public AjaxResult remove(@PathVariable Long[] ids) - { + public AjaxResult remove(@PathVariable Long[] ids) { return toAjax(dmsOutsideAccommodationAttachmentService.deleteDmsOutsideAccommodationAttachmentByIds(ids)); } + + /** + * 删除保留学籍申请附件(入伍通知书等) + */ + @PreAuthorize("@ss.hasPermi('dormitory:outsideAccommodationAttachment:remove')") + @Log(title = "外宿申请附件", businessType = BusinessType.DELETE) + @PostMapping("/OutsideAccommodationAttachment") + @ApiOperation("删除外宿申请附件") + public AjaxResult deleteOutsideAccommodationAttachmentNameAndStuName(String attachmentName, String studentName) { + return toAjax(dmsOutsideAccommodationAttachmentService.deleteOutsideAccommodationAttachmentNameAndStuName(attachmentName, studentName)); + } } diff --git a/srs-admin/src/main/java/com/srs/web/controller/dormitory/SrsDormitoryStudentController.java b/srs-admin/src/main/java/com/srs/web/controller/dormitory/SrsDormitoryStudentController.java index 746513a..ee0c293 100644 --- a/srs-admin/src/main/java/com/srs/web/controller/dormitory/SrsDormitoryStudentController.java +++ b/srs-admin/src/main/java/com/srs/web/controller/dormitory/SrsDormitoryStudentController.java @@ -226,7 +226,7 @@ public class SrsDormitoryStudentController extends BaseController { } - @PreAuthorize("@ss.hasPermi('dms:dormStu:add')") + @ApiOperation(value = "学生自主选择床位", notes = "id不用填写,只能选择是当前学生班级并且为空的宿舍床位", response = StudentDormitoryDto.class) @PostMapping("/addCheckInInformation") public AjaxResult addCheckInInformation(@RequestBody StudentDormitoryDto dto) { diff --git a/srs-admin/src/main/resources/application.yml b/srs-admin/src/main/resources/application.yml index efab106..e77d1ab 100644 --- a/srs-admin/src/main/resources/application.yml +++ b/srs-admin/src/main/resources/application.yml @@ -64,8 +64,8 @@ spring: # 国际化资源文件路径 basename: i18n/messages profiles: -# active: druid #正式环境 - active: dev #测试环境 + active: druid #正式环境 +# active: dev #测试环境 # 文件上传 servlet: multipart: @@ -82,13 +82,13 @@ spring: redis: # 地址 host: localhost #正式环境redis -# host: 47.112.118.149 #测试开发地址 +# host: 47.112.118.149 #测试开发地址 # 端口,默认为6379 port: 6379 # 数据库索引 database: 0 # 密码SSSS -# password: Houpuyfb #测试开发密码 +# password: Houpuyfb #测试开发密码 password: #正式环境密码 # 连接超时时间 timeout: 10s diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/domain/SrsCqScore.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/domain/SrsCqScore.java index 10dca31..2c07316 100644 --- a/srs-comprehensive/src/main/java/com/srs/comprehensive/domain/SrsCqScore.java +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/domain/SrsCqScore.java @@ -1,6 +1,9 @@ package com.srs.comprehensive.domain; import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.TableField; +import lombok.Data; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.srs.common.annotation.Excel; @@ -8,10 +11,11 @@ import com.srs.common.core.domain.BaseEntity; /** * 学生综合素质评分表对象 srs_cq_score - * + * * @author srs * @date 2023-06-29 */ +@Data public class SrsCqScore extends BaseEntity { private static final long serialVersionUID = 1L; @@ -45,7 +49,23 @@ public class SrsCqScore extends BaseEntity private String majorsName; @Excel(name = "班级") private String className; - + //思想品德 + @TableField(exist = false) + private BigDecimal iamScore; + //第二课堂 + @TableField(exist = false) + private BigDecimal classtwoScore; + //综合评价 + @TableField(exist = false) + private BigDecimal ceScore; + //科学文化素质 + @TableField(exist = false) + private BigDecimal stuScore; + //体能素质 + @TableField(exist = false) + private BigDecimal sportScore; + @TableField(exist = false) + private BigDecimal totalScore; public String getStuYearName() { return stuYearName; @@ -94,12 +114,12 @@ public class SrsCqScore extends BaseEntity } - public void setId(Long id) + public void setId(Long id) { this.id = id; } - public Long getId() + public Long getId() { return id; } @@ -110,30 +130,30 @@ public class SrsCqScore extends BaseEntity public void setStuNo(String stuNo) { this.stuNo = stuNo; } - public void setStuYearId(Long stuYearId) + public void setStuYearId(Long stuYearId) { this.stuYearId = stuYearId; } - public Long getStuYearId() + public Long getStuYearId() { return stuYearId; } - public void setCqScore(BigDecimal cqScore) + public void setCqScore(BigDecimal cqScore) { this.cqScore = cqScore; } - public BigDecimal getCqScore() + public BigDecimal getCqScore() { return cqScore; } - public void setDelFlag(String delFlag) + public void setDelFlag(String delFlag) { this.delFlag = delFlag; } - public String getDelFlag() + public String getDelFlag() { return delFlag; } diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/domain/Vo/CphOwnScore.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/domain/Vo/CphOwnScore.java index 23affe3..c1864a6 100644 --- a/srs-comprehensive/src/main/java/com/srs/comprehensive/domain/Vo/CphOwnScore.java +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/domain/Vo/CphOwnScore.java @@ -28,5 +28,4 @@ public class CphOwnScore { public BigDecimal stuScore; public BigDecimal sportScore; - } diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/domain/Vo/CphStuScoreType.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/domain/Vo/CphStuScoreType.java index d1d61e2..33ab75b 100644 --- a/srs-comprehensive/src/main/java/com/srs/comprehensive/domain/Vo/CphStuScoreType.java +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/domain/Vo/CphStuScoreType.java @@ -20,5 +20,6 @@ public class CphStuScoreType { public String typeName; + public BigDecimal totalScore; } diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/mapper/CphAuditDetailsMapper.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/mapper/CphAuditDetailsMapper.java index 99f58c4..a9c5d44 100644 --- a/srs-comprehensive/src/main/java/com/srs/comprehensive/mapper/CphAuditDetailsMapper.java +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/mapper/CphAuditDetailsMapper.java @@ -22,7 +22,6 @@ public interface CphAuditDetailsMapper * @return 审核明细 */ public CphAuditDetails selectCphAuditDetailsById(Long id); - public List getcphiamByOne(String stuNo); public CphAuditDetails selectCphAuditDetailsByProjectId(Long id); diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/mapper/SrsCqScoreMapper.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/mapper/SrsCqScoreMapper.java index 6c69a2c..cc2423b 100644 --- a/srs-comprehensive/src/main/java/com/srs/comprehensive/mapper/SrsCqScoreMapper.java +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/mapper/SrsCqScoreMapper.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.srs.comprehensive.domain.CphAuditDetails; import com.srs.comprehensive.domain.Dto.CphExport; import com.srs.comprehensive.domain.SrsCqScore; import com.srs.comprehensive.domain.SrsMajors; @@ -14,7 +15,7 @@ import org.springframework.data.repository.query.Param; /** * 学生综合素质评分表Mapper接口 - * + * * @author srs * @date 2023-06-29 */ @@ -29,7 +30,7 @@ public interface SrsCqScoreMapper extends BaseMapper /** * 查询学生综合素质评分表 - * + * * @param id 学生综合素质评分表主键 * @return 学生综合素质评分表 */ @@ -45,6 +46,8 @@ public interface SrsCqScoreMapper extends BaseMapper public List listOwnFive(String stuNo); + public List getcphiamByOne(String stuNo); + public List listOwnCollegeScore(CphSearch param); public List listOwnCollegeStu(CphSearch param); @@ -54,6 +57,7 @@ public interface SrsCqScoreMapper extends BaseMapper public List listOwnClass(CphSearch param); + public List getStuData(String stuNo); /** @@ -80,6 +84,8 @@ public interface SrsCqScoreMapper extends BaseMapper public List getOwn(String stuNo); + public List getOwn2(String stuNo); + public void generateComprehensiveSummary(@Param("id") int id); @@ -87,7 +93,7 @@ public interface SrsCqScoreMapper extends BaseMapper /** * 新增学生综合素质评分表 - * + * * @param srsCqScore 学生综合素质评分表 * @return 结果 */ @@ -97,7 +103,7 @@ public interface SrsCqScoreMapper extends BaseMapper /** * 修改学生综合素质评分表 - * + * * @param srsCqScore 学生综合素质评分表 * @return 结果 */ @@ -105,7 +111,7 @@ public interface SrsCqScoreMapper extends BaseMapper /** * 删除学生综合素质评分表 - * + * * @param id 学生综合素质评分表主键 * @return 结果 */ @@ -113,7 +119,7 @@ public interface SrsCqScoreMapper extends BaseMapper /** * 批量删除学生综合素质评分表 - * + * * @param ids 需要删除的数据主键集合 * @return 结果 */ diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/mapper/SyncDataMapper.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/mapper/SyncDataMapper.java new file mode 100644 index 0000000..72ad3d0 --- /dev/null +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/mapper/SyncDataMapper.java @@ -0,0 +1,8 @@ +package com.srs.comprehensive.mapper; + +import java.util.List; +import java.util.Map; + +public interface SyncDataMapper { + public List getEmployEEInfoList();//教职工 +} diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/CphSqlServerDataService.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/CphSqlServerDataService.java index a4dcfaf..15b6a16 100644 --- a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/CphSqlServerDataService.java +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/CphSqlServerDataService.java @@ -36,7 +36,7 @@ public interface CphSqlServerDataService { public List getBZRClassInfoList();//班级辅导员 - List getEmployEEInfoList();//辅导员 + List getEmployEEInfoList();//教职工 public String gets(Long njid); diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/ICphAuditDetailsService.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/ICphAuditDetailsService.java index 860528c..fe45d0a 100644 --- a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/ICphAuditDetailsService.java +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/ICphAuditDetailsService.java @@ -49,14 +49,6 @@ public interface ICphAuditDetailsService */ public CphAuditDetails selectCphAuditDetailsById(Long id); - /** - * 查询个人思想品得加分项申请 - * - * @param stuNo - * @return - **/ - public List getcphiamByOne(String stuNo); - /** * 我的已审核 * @author zhy diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/ISrsCqScoreService.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/ISrsCqScoreService.java index b8b376e..1a9f00c 100644 --- a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/ISrsCqScoreService.java +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/ISrsCqScoreService.java @@ -1,6 +1,7 @@ package com.srs.comprehensive.service; import com.srs.common.core.domain.AjaxResult; +import com.srs.comprehensive.domain.CphAuditDetails; import com.srs.comprehensive.domain.Dto.CphExport; import com.srs.comprehensive.domain.SrsCqScore; import com.srs.comprehensive.domain.SrsMajors; @@ -37,6 +38,11 @@ public interface ISrsCqScoreService public List getOwn(String stuNo); + public List getOwn2(String stuNo); + + public List getcphiamByOne(String stuNo); + + public List listCphScore(CphSearch search); public List listOwnCollegeScore(CphSearch param); @@ -109,4 +115,6 @@ public interface ISrsCqScoreService List comprehensiveRanking(SrsCqScore srsCqScore); + public List getStuData(String stuNo); + } diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/SyncDataService.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/SyncDataService.java new file mode 100644 index 0000000..a128842 --- /dev/null +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/SyncDataService.java @@ -0,0 +1,8 @@ +package com.srs.comprehensive.service; + +import java.util.List; +import java.util.Map; + +public interface SyncDataService { + List getEmployEEInfoList();//教职工 +} diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/CphAuditDetailsServiceImpl.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/CphAuditDetailsServiceImpl.java index 0b6843f..c4ea80f 100644 --- a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/CphAuditDetailsServiceImpl.java +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/CphAuditDetailsServiceImpl.java @@ -331,11 +331,6 @@ public class CphAuditDetailsServiceImpl implements ICphAuditDetailsService { return cphAuditDetailsMapper.selectCphAuditDetailsById(id); } - //查询个人思想品得加分申请 - public List getcphiamByOne(String stuNo){ - return cphAuditDetailsMapper.getcphiamByOne(stuNo); - } - /** * 查询已审核 * diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/CphTeacherServiceImpl.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/CphTeacherServiceImpl.java index e89ed43..98e98d5 100644 --- a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/CphTeacherServiceImpl.java +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/CphTeacherServiceImpl.java @@ -469,6 +469,7 @@ public class CphTeacherServiceImpl implements ICphTeacherService String xm=(String) map.get("xm"); String xb=(String) map.get("xb"); String ksh=(String) map.get("ksh"); + String zgzt=(String) map.get("zgzt"); QgzxTeacher qgzxTeacher = qgzxTeacherMapper.selectQgzxTeacherByEmployeeId(zgh); Long deptId = qgzxTeacherMapper.selectDeptCode(ksh); QgzxTeacher entity=new QgzxTeacher(); @@ -478,7 +479,7 @@ public class CphTeacherServiceImpl implements ICphTeacherService if(deptId!=null) { entity.setDeptId(deptId); } - entity.setStatus("1"); + entity.setStatus(zgzt); entity.setCreateTime(DateUtils.getNowDate()); if(qgzxTeacher==null){ qgzxTeacherMapper.insertQgzxTeacher(entity); diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/SrsCqScoreServiceImpl.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/SrsCqScoreServiceImpl.java index 262c915..ecfd049 100644 --- a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/SrsCqScoreServiceImpl.java +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/SrsCqScoreServiceImpl.java @@ -89,7 +89,12 @@ public class SrsCqScoreServiceImpl extends ServiceImpl getOwn(String stuNo){ - return srsCqScoreMapper.getOwn( stuNo); + return srsCqScoreMapper.getOwn(stuNo); + } + + @Override + public List getOwn2(String stuNo){ + return srsCqScoreMapper.getOwn2(stuNo); } @Override @@ -342,5 +347,12 @@ public class SrsCqScoreServiceImpl extends ServiceImpl getcphiamByOne(String stuNo){ + return srsCqScoreMapper.getcphiamByOne(stuNo); + } + //查询个人素质综合信息 + public List getStuData(String stuNo){ + return srsCqScoreMapper.getStuData(stuNo); + } } diff --git a/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/SyncDataServiceImpl.java b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/SyncDataServiceImpl.java new file mode 100644 index 0000000..13b6fdb --- /dev/null +++ b/srs-comprehensive/src/main/java/com/srs/comprehensive/service/impl/SyncDataServiceImpl.java @@ -0,0 +1,19 @@ +package com.srs.comprehensive.service.impl; + +import com.srs.comprehensive.mapper.SyncDataMapper; +import com.srs.comprehensive.service.SyncDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +@Service +public class SyncDataServiceImpl implements SyncDataService { + @Autowired + private SyncDataMapper syncDataMapper; + @Override + public List getEmployEEInfoList() { + return syncDataMapper.getEmployEEInfoList(); + } +} diff --git a/srs-comprehensive/src/main/resources/mapper/comprehensive/CphAuditDetailsMapper.xml b/srs-comprehensive/src/main/resources/mapper/comprehensive/CphAuditDetailsMapper.xml index 58ebb0f..445cd29 100644 --- a/srs-comprehensive/src/main/resources/mapper/comprehensive/CphAuditDetailsMapper.xml +++ b/srs-comprehensive/src/main/resources/mapper/comprehensive/CphAuditDetailsMapper.xml @@ -245,17 +245,5 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join cph_rules as b on a.rule_id = b.rule_id where stu_no = #{stuNo} and stu_year_id = #{stuYearId}; - + diff --git a/srs-comprehensive/src/main/resources/mapper/comprehensive/SrsCqScoreMapper.xml b/srs-comprehensive/src/main/resources/mapper/comprehensive/SrsCqScoreMapper.xml index 7c07024..c4a7c83 100644 --- a/srs-comprehensive/src/main/resources/mapper/comprehensive/SrsCqScoreMapper.xml +++ b/srs-comprehensive/src/main/resources/mapper/comprehensive/SrsCqScoreMapper.xml @@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -37,7 +37,7 @@ m.major_name, c.class_name, stu_year_name - + from srs_cq_score cq left join srs_student s on s.stu_no = cq.stu_no @@ -46,7 +46,7 @@ left JOIN srs_majors m ON c.major_id = m.major_id left JOIN sys_dept d ON m.college_id = d.dept_id left JOIN srs_stu_year sy ON cq.stu_year_id = sy.id - + - - + + + + - + - - - insert into srs_cq_score @@ -383,7 +404,7 @@ #{delFlag}, - + update srs_cq_score @@ -398,20 +419,20 @@ where id = #{id} - + delete from srs_cq_score where id = #{id} - + delete from srs_cq_score where id in #{id} - + - + - - \ No newline at end of file + + + diff --git a/srs-comprehensive/src/main/resources/mapper/comprehensive/SrsStudentMapper.xml b/srs-comprehensive/src/main/resources/mapper/comprehensive/SrsStudentMapper.xml index 6e197b9..f35b211 100644 --- a/srs-comprehensive/src/main/resources/mapper/comprehensive/SrsStudentMapper.xml +++ b/srs-comprehensive/src/main/resources/mapper/comprehensive/SrsStudentMapper.xml @@ -710,34 +710,69 @@ order by quantity desc limit 4 + SELECT TBA.GH as zgh,TBA.XM as xm,CASE + WHEN XBDM = 1 THEN '男' + WHEN XBDM = 2 THEN '女' + ELSE '未知' -- 可选:添加默认值,避免NULL + END as xb,TBD.BMMC as ksmc,TBD.BMMC as yxmc,TBD.BMBH as ksh,TBA.ZGDQZTDM as zgzt from from_gxsdxyxxzx_teacher TBA LEFT JOIN from_gxsdxyxxzx_xzbm TBD ON TBA.SZBMBH=TBD.BMBH + WHERE TBA.ZGLBDM LIKE '1%' + + diff --git a/srs-flowable/src/main/java/com/srs/flowable/domain/DormitoryStudent.java b/srs-flowable/src/main/java/com/srs/flowable/domain/DormitoryStudent.java new file mode 100644 index 0000000..760bb91 --- /dev/null +++ b/srs-flowable/src/main/java/com/srs/flowable/domain/DormitoryStudent.java @@ -0,0 +1,69 @@ +package com.srs.flowable.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 宿舍学生关联表 + *

+ * + */ +@Data +@TableName("srs_dormitory_student") +@ApiModel(value = "SrsDormitoryStudent对象", description = "宿舍学生关联表") +public class DormitoryStudent implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键ID") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("宿舍ID") + @TableField("dormitory_id") + private Long dormitoryId; + + @ApiModelProperty("床位ID") + @TableField("bed_id") + private Long bedId; + + @ApiModelProperty("学生学号") + @TableField("stu_no") + private String stuNo; + + @ApiModelProperty("是否为宿舍长(0否 1是)") + @TableField("is_dormitory_head") + private Integer isDormitoryHead; + + @ApiModelProperty("状态(0未缴费 1已缴费)") + @TableField("status") + private Integer status; + + @ApiModelProperty("入住时间") + @TableField("checkin_time") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDateTime checkinTime; + + @ApiModelProperty("入住状态") + @TableField("in_status") + public String inStatus; + + @ApiModelProperty("是否在校住宿") + @TableField("isInStudentsleep") + public String isInStudentsleep; + +} + + + + diff --git a/srs-flowable/src/main/java/com/srs/flowable/domain/EnlistmentReserveApproval.java b/srs-flowable/src/main/java/com/srs/flowable/domain/EnlistmentReserveApproval.java index d33c691..baf6d91 100644 --- a/srs-flowable/src/main/java/com/srs/flowable/domain/EnlistmentReserveApproval.java +++ b/srs-flowable/src/main/java/com/srs/flowable/domain/EnlistmentReserveApproval.java @@ -1,6 +1,7 @@ package com.srs.flowable.domain; import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; import com.srs.common.annotation.Excel; import com.baomidou.mybatisplus.annotation.*; @@ -10,7 +11,6 @@ import lombok.*; import com.srs.common.core.domain.BaseEntity; - /** * 保留学籍审批记录对象 rt_enlistment_reserve_approval * @@ -22,10 +22,10 @@ import com.srs.common.core.domain.BaseEntity; @NoArgsConstructor @AllArgsConstructor @Builder -@ApiModel(value = "RtEnlistmentReserveApproval对象" , description = "保留学籍审批记录") +@ApiModel(value = "RtEnlistmentReserveApproval对象", description = "保留学籍审批记录") @TableName("rt_enlistment_reserve_approval") -public class EnlistmentReserveApproval extends BaseEntity{ - private static final long serialVersionUID=1L; +public class EnlistmentReserveApproval extends BaseEntity { + private static final long serialVersionUID = 1L; /** * 主键 @@ -63,7 +63,7 @@ public class EnlistmentReserveApproval extends BaseEntity{ */ @ApiModelProperty("审批节点(辅导员/学务等)") @TableField("node_name") - @Excel(name = "审批节点" , readConverterExp = "辅=导员/学务等") + @Excel(name = "审批节点", readConverterExp = "辅=导员/学务等") private String nodeName; /** @@ -71,7 +71,7 @@ public class EnlistmentReserveApproval extends BaseEntity{ */ @ApiModelProperty("审批人ID(关联sys_user)") @TableField("approver_id") - @Excel(name = "审批人ID" , readConverterExp = "关=联sys_user") + @Excel(name = "审批人ID", readConverterExp = "关=联sys_user") private Long approverId; /** @@ -95,7 +95,7 @@ public class EnlistmentReserveApproval extends BaseEntity{ */ @ApiModelProperty("审批结果(1-通过") @TableField("approval_result") - @Excel(name = "审批结果" , readConverterExp = "审批结果(1-通过") + @Excel(name = "审批结果", readConverterExp = "审批结果(1-通过") private Long approvalResult; /** @@ -104,7 +104,7 @@ public class EnlistmentReserveApproval extends BaseEntity{ @ApiModelProperty("审批时间") @TableField("approval_time") @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "审批时间" , width = 30, dateFormat = "yyyy-MM-dd") + @Excel(name = "审批时间", width = 30, dateFormat = "yyyy-MM-dd") private Date approvalTime; /** @@ -123,5 +123,12 @@ public class EnlistmentReserveApproval extends BaseEntity{ @Excel(name = "学号") private String studentNo; + /** + * 签名 + */ + @ApiModelProperty("签名") + @TableField("signature") + @Excel(name = "签名") + private String signature; } diff --git a/srs-flowable/src/main/java/com/srs/flowable/domain/OutsideAccommodationApproval.java b/srs-flowable/src/main/java/com/srs/flowable/domain/OutsideAccommodationApproval.java index dbadaab..aa267c1 100644 --- a/srs-flowable/src/main/java/com/srs/flowable/domain/OutsideAccommodationApproval.java +++ b/srs-flowable/src/main/java/com/srs/flowable/domain/OutsideAccommodationApproval.java @@ -14,7 +14,6 @@ import lombok.*; import java.util.Date; - /** * 外宿申请审批记录对象 dms_outside_accommodation_approval * @@ -26,10 +25,10 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor @Builder -@ApiModel(value = "DmsOutsideAccommodationApproval对象" , description = "外宿申请审批记录表") +@ApiModel(value = "DmsOutsideAccommodationApproval对象", description = "外宿申请审批记录表") @TableName("dms_outside_accommodation_approval") -public class OutsideAccommodationApproval extends BaseEntity{ -private static final long serialVersionUID=1L; +public class OutsideAccommodationApproval extends BaseEntity { + private static final long serialVersionUID = 1L; /** * 主键ID @@ -43,7 +42,7 @@ private static final long serialVersionUID=1L; */ @ApiModelProperty("外宿申请ID(关联申请表)") @TableField("apply_id") - @Excel(name = "外宿申请ID" , readConverterExp = "关=联申请表") + @Excel(name = "外宿申请ID", readConverterExp = "关=联申请表") private Long applyId; /** @@ -99,7 +98,7 @@ private static final long serialVersionUID=1L; */ @ApiModelProperty("审批结果(1=同意,0=驳回)") @TableField("approval_result") - @Excel(name = "审批结果" , readConverterExp = "1==同意,0=驳回") + @Excel(name = "审批结果", readConverterExp = "1==同意,0=驳回") private Long approvalResult; /** @@ -108,7 +107,7 @@ private static final long serialVersionUID=1L; @ApiModelProperty("审批时间") @TableField("approval_time") @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "审批时间" , width = 30, dateFormat = "yyyy-MM-dd") + @Excel(name = "审批时间", width = 30, dateFormat = "yyyy-MM-dd") private Date approvalTime; /** @@ -136,4 +135,12 @@ private static final long serialVersionUID=1L; private String studentNo; + /** + * 签名 + */ + @ApiModelProperty("签名") + @TableField("signature") + @Excel(name = "签名") + private String signature; + } 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 4d4bb98..73e2be3 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 @@ -37,9 +37,6 @@ public class DiscListener implements ExecutionListener { @Override public void notify(DelegateExecution execution) { - log.info("===== 退伍复学审批监听器触发 ====="); - log.info("当前节点ID:{}", execution.getCurrentActivityId()); - log.info("流程实例ID:{}", execution.getProcessInstanceId()); // 1. 获取当前节点ID和流程定义ID String currentActivityId = execution.getCurrentActivityId(); // 当前节点ID(兼容所有版本) String processDefinitionId = execution.getProcessDefinitionId(); // 流程定义ID @@ -117,9 +114,17 @@ public class DiscListener implements ExecutionListener { switch (currentNodeName) { case "招生与就业处": - return counselorInfo.getUserId(); + List zjcData = sysDisBasicMapper.getShenDataInfo("招就处"); + return zjcData.get(0).getUserId(); + case "辅导员审核": + + // 返回匹配的辅导员用户ID(作为下一个节点负责人) + return counselorInfo.getUserId(); + + case "学务审核": + // 辅导员通过后 → 下一个节点:学务(筛选出角色ID=105,且与当前部门一致) // 查询角色ID=105(学务)的所有用户 SysUser queryUser = new SysUser(); @@ -134,12 +139,8 @@ public class DiscListener implements ExecutionListener { .filter(user -> currentDeptId.equals(user.getDeptId())) // 部门ID匹配 .findFirst() // 取第一个匹配的学务(若有多个,可根据排序或优先级调整) .orElseThrow(() -> new RuntimeException("未找到部门ID=" + currentDeptId + "的学务负责人")); - - - // 返回匹配的辅导员用户ID(作为下一个节点负责人) return targetAcademic.getUserId(); - case "学务审核": // 学务通过后 → 下一个节点:二级学院(角色ID=106,匹配学生所属学院) // 查询当前流程对应的业务数据(获取学生所属学院ID) // RtEnlistmentReserve reserve = enlistmentReserveMapper.selectRtEnlistmentReserveByProcessInstanceId(processInstanceId); @@ -147,6 +148,10 @@ public class DiscListener implements ExecutionListener { // throw new RuntimeException("未查询到流程对应的业务数据,processInstanceId=" + processInstanceId); // } + + + case "二级学院审核": + // 二级学院通过后 → 下一个节点:学籍管理科 // 查询角色ID=106(二级学院)的所有用户 SysUser qUser = new SysUser(); qUser.setRoleId(106L); // 二级学院角色固定ID=106 @@ -165,9 +170,12 @@ public class DiscListener implements ExecutionListener { // 返回匹配的二级学院负责人ID return targetCollegeLeader.getUserId(); + // 学籍管理科通过后 → 下一个节点:教务处主管领导(假设部门ID=40) - case "二级学院审核": - // 二级学院通过后 → 下一个节点:学籍管理科 + // 获取学教务处主管领导审核人 + + + case "学籍管理": // 获取学籍管理科审核人 List shenDataInfo = sysDisBasicMapper.getShenDataInfo("学籍管理科"); @@ -180,10 +188,11 @@ public class DiscListener implements ExecutionListener { // 暂时选择学籍管理科第一个人作为审核人 return shenDataInfo.get(0).getUserId(); - case "学籍管理": - // 学籍管理科通过后 → 下一个节点:教务处主管领导(假设部门ID=40) - // 获取学教务处主管领导审核人 + + + case "教务处主管": + // 最后一个节点通过后 → 流程结束(无需设置负责人) List teacherVos = sysDisBasicMapper.getShenDataInfo("教务处主管领导"); if (teacherVos.isEmpty()) { @@ -193,13 +202,9 @@ public class DiscListener implements ExecutionListener { // 暂时选择教务处主管领导第一个人作为审核人 return teacherVos.get(0).getUserId(); - case "教务处主管": - // 最后一个节点通过后 → 流程结束(无需设置负责人) - return null; - default: throw new RuntimeException("未配置节点[" + currentNodeName + "]的下一个负责人规则"); } } -} +} \ No newline at end of file diff --git a/srs-flowable/src/main/java/com/srs/flowable/listener/enlistmentReserve/ApprovalAssigneeListener.java b/srs-flowable/src/main/java/com/srs/flowable/listener/enlistmentReserve/ApprovalAssigneeListener.java index eeec62f..a32f56e 100644 --- a/srs-flowable/src/main/java/com/srs/flowable/listener/enlistmentReserve/ApprovalAssigneeListener.java +++ b/srs-flowable/src/main/java/com/srs/flowable/listener/enlistmentReserve/ApprovalAssigneeListener.java @@ -5,12 +5,15 @@ import com.srs.common.core.domain.entity.SysUser; import com.srs.common.doman.vo.TeacherVo; import com.srs.common.utils.SecurityUtils; +import com.srs.common.utils.WeChatUtil; import com.srs.common.utils.spring.SpringUtils; import com.srs.flowable.domain.EnlistmentReserve; import com.srs.flowable.domain.EnlistmentReserveApproval; import com.srs.flowable.mapper.EnlistmentReserveApprovalMapper; import com.srs.flowable.mapper.EnlistmentReserveMapper; +import com.srs.flowable.mapper.RelieveMapper; import com.srs.system.service.ISysUserService; +import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; import org.flowable.engine.HistoryService; @@ -28,9 +31,10 @@ import java.util.List; /** * 审批流程负责人自动流转监听器 - * 用于节点审批通过时,添加审批记录 + * 用于节点审批通过时,添加审批记录 + 给学生发送企业微信通知 */ @Component("approvalAssigneeListener") // Spring Bean名称,与BPMN表达式对应 +@Slf4j public class ApprovalAssigneeListener implements ExecutionListener { @Autowired @@ -61,6 +65,9 @@ public class ApprovalAssigneeListener implements ExecutionListener { // 获取审核意见 String approvalOpinion = (String) execution.getVariable("approvalOpinion"); + // 获取签名 + String signature = (String) execution.getVariable("signature"); + // 获取审核状态(兼容Integer/Long类型) Object approvalResultObj = execution.getVariable("approvalResult"); Long approvalResult = null; @@ -70,20 +77,119 @@ public class ApprovalAssigneeListener implements ExecutionListener { approvalResult = num.longValue(); } - // 添加审批记录 EnlistmentReserveMapper rtEnlistmentReserveMapper = (EnlistmentReserveMapper) SpringUtils.getBean(EnlistmentReserveMapper.class); // 根据Id查询入伍申请记录 EnlistmentReserve enlistmentReserve = rtEnlistmentReserveMapper.selectRtEnlistmentReserveById(enlistmentId); - saveApprovalRecord(enlistmentReserve.getId(), enlistmentReserve.getProcessInstanceId(),currentActivityId,currentNodeName, enlistmentReserve.getStudentName(), enlistmentReserve.getStudentNo(), approvalOpinion, approvalResult); + // 添加审批记录 + saveApprovalRecord(enlistmentReserve.getId(), enlistmentReserve.getProcessInstanceId(),currentActivityId,currentNodeName, enlistmentReserve.getStudentName(), enlistmentReserve.getStudentNo(), approvalOpinion, approvalResult, signature); + Long status = 1L; + if (currentNodeName.equals("辅导员审批")) { + status = 2L; + } + if (currentNodeName.equals("学务审批")) { + status = 3L; + } + if (currentNodeName.equals("二级学院审批")) { + status = 4L; + } + if (currentNodeName.equals("学籍管理科审批")){ + // 改变申请表中的审核状态(审核通过) + status = 5L; + } // 如果到了最后一个审批人,则修改申请表审核状态 if (currentNodeName.equals("教务处主管领导审批")){ - // 改变申请表中的审核状态(审核通过) - enlistmentReserve.setApplyStatus(2L); - rtEnlistmentReserveMapper.updateRtEnlistmentReserve(enlistmentReserve); + status = 6L; + + // 审批通过后删除学生入住信息 + rtEnlistmentReserveMapper.deleteDormitoryStudentById(enlistmentReserve.getStudentNo()); + } + // 改变申请表中的审核状态(审核通过) + enlistmentReserve.setApplyStatus(status); + rtEnlistmentReserveMapper.updateRtEnlistmentReserve(enlistmentReserve); + // ========== 给学生发送入伍保留学籍审批通知 ========== + sendStudentWeChatNotification(execution, enlistmentReserve, currentNodeName, approvalResult, approvalOpinion); + } + + /** + * 给学生发送入伍保留学籍审批结果的企业微信通知 + */ + private void sendStudentWeChatNotification(DelegateExecution execution, EnlistmentReserve enlistmentReserve, + String currentNodeName, Long approvalResult, String approvalOpinion) { + try { + // 1. 获取需要的Mapper和工具类 + RelieveMapper relieveMapper = (RelieveMapper) SpringUtils.getBean("relieveMapper"); + WeChatUtil weChatUtil = SpringUtils.getBean(WeChatUtil.class); + + // 2. 获取学生基础信息 + String studentNo = enlistmentReserve.getStudentNo(); + String studentName = enlistmentReserve.getStudentName(); + + // 3. 获取学生userId(优先从流程变量取) + Long stuUserId = null; + if (execution.hasVariable("stuUserId")) { + stuUserId = Long.valueOf(execution.getVariable("stuUserId").toString()); + } else { + // 兜底:通过申请表获取学生id + stuUserId = enlistmentReserve.getStudentId(); + } + + if (stuUserId == null) { + log.warn("⚠ 未找到学生(学号:{},姓名:{})对应的用户ID,无法发送通知", studentNo, studentName); + return; + } + + // 4. 查询学生的企业微信账号 + String stuUserName = relieveMapper.getUserNameByUserId(stuUserId); + + if (stuUserName != null && !stuUserName.isEmpty()) { + // 5. 拼接审批结果描述 + String approveResultDesc = getApprovalResultDesc(approvalResult, currentNodeName); + + // 6. 构造通知内容 + String content = String.format("您的入伍保留学籍申请有新的审批进展:%s(%s),%s,点此查看详情", + currentNodeName, + approveResultDesc, + (approvalOpinion != null && !approvalOpinion.isEmpty()) ? "审批意见:" + approvalOpinion : ""); + + // 7. 发送企业微信消息 + weChatUtil.sendTextMessage(stuUserName, content); + log.info("✅ 已成功向学生(姓名:{},学号:{},userName:{})发送入伍保留学籍审批通知。审批节点:{},结果:{}", + studentName, studentNo, stuUserName, currentNodeName, approveResultDesc); + + } else { + // 发送日志 + log.warn("⚠ 找到了学生(学号:{},姓名:{},userId:{}),但其对应的企业微信账号为空,无法发送通知。", + studentNo, studentName, stuUserId); + } + } catch (Exception e) { + // 异常处理:记录日志+不影响主流程 + String studentNo = enlistmentReserve.getStudentNo(); + log.error("❌ 向学生(学号:{})发送入伍保留学籍审批通知时出现异常,但流程将继续。错误详情:", studentNo, e); } } + /** + * 转换审批结果为可读描述(适配入伍保留学籍审批状态) + */ + private String getApprovalResultDesc(Long approvalResult, String currentNodeName) { + if (approvalResult == null) { + return "审批已处理"; + } + // 匹配项目中实际的审批状态值(0=驳回/1=通过/2=审批中) + switch (approvalResult.intValue()) { + case 0: + return currentNodeName + "驳回"; + case 1: + return currentNodeName + "通过"; + case 2: + return "审批中"; + default: + return "审批已完成"; + } + } + + /** * 根据节点ID和流程定义ID,查询节点名称(兼容所有版本的核心方法) */ @@ -102,7 +208,7 @@ public class ApprovalAssigneeListener implements ExecutionListener { /** * 通用审批记录保存方法 */ - private void saveApprovalRecord(Long ApplyId,String processInstanceId, String taskId, String nodeName, String studentName, String studentNo, String approvalOpinion, Long approvalResult) { + private void saveApprovalRecord(Long ApplyId,String processInstanceId, String taskId, String nodeName, String studentName, String studentNo, String approvalOpinion, Long approvalResult, String signature) { EnlistmentReserveApproval enlistmentReserveApproval = new EnlistmentReserveApproval(); // 赋值 enlistmentReserveApproval.setApplyId(ApplyId); @@ -123,7 +229,9 @@ public class ApprovalAssigneeListener implements ExecutionListener { enlistmentReserveApproval.setApprovalTime(new Date()); enlistmentReserveApproval.setStudentName(studentName); enlistmentReserveApproval.setStudentNo(studentNo); - System.out.println(SecurityUtils.getLoginUser().getUser()); +// System.out.println(SecurityUtils.getLoginUser().getUser()); + // 设置签名 + enlistmentReserveApproval.setSignature(signature); EnlistmentReserveApprovalMapper rtEnlistmentReserveApprovalMapper = (EnlistmentReserveApprovalMapper) SpringUtils.getBean(EnlistmentReserveApprovalMapper.class); // 查询审批记录是否存在 EnlistmentReserveApproval enlistmentReserveApproval1 = rtEnlistmentReserveApprovalMapper.selectRtEnlistmentReserveApprovalByStuName(studentName, studentNo, SecurityUtils.getLoginUser().getUser().getUserId()); diff --git a/srs-flowable/src/main/java/com/srs/flowable/listener/enlistmentReserve/StartApprovalAssigneeListener.java b/srs-flowable/src/main/java/com/srs/flowable/listener/enlistmentReserve/StartApprovalAssigneeListener.java index ae55c20..9ed55d4 100644 --- a/srs-flowable/src/main/java/com/srs/flowable/listener/enlistmentReserve/StartApprovalAssigneeListener.java +++ b/srs-flowable/src/main/java/com/srs/flowable/listener/enlistmentReserve/StartApprovalAssigneeListener.java @@ -4,13 +4,18 @@ 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.EnlistmentReserve; import com.srs.flowable.domain.EnlistmentReserveApproval; +import com.srs.flowable.domain.NotificationManage; import com.srs.flowable.mapper.EnlistmentReserveApprovalMapper; import com.srs.flowable.mapper.EnlistmentReserveMapper; +import com.srs.flowable.mapper.LeaveMapper; import com.srs.system.service.ISysUserService; +import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; import org.flowable.engine.HistoryService; @@ -31,6 +36,7 @@ import java.util.List; * 用于节点审批之前时,更新下一个节点的负责人变量(approval) */ @Component("startApprovalAssigneeListener") // Spring Bean名称,与BPMN表达式对应 +@Slf4j public class StartApprovalAssigneeListener implements ExecutionListener { @Autowired @@ -46,7 +52,7 @@ public class StartApprovalAssigneeListener implements ExecutionListener { String currentActivityId = execution.getCurrentActivityId(); // 当前节点ID(兼容所有版本) String processDefinitionId = execution.getProcessDefinitionId(); // 流程定义ID - // 2. 根据节点ID查询节点名称(核心修正:通过流程定义获取名称) + // 2. 根据节点ID查询节点名称(通过流程定义获取名称) String currentNodeName = getNodeNameByActivityId(processDefinitionId, currentActivityId); if (currentNodeName == null) { throw new RuntimeException("未找到节点ID=" + currentActivityId + "的名称"); @@ -61,6 +67,8 @@ public class StartApprovalAssigneeListener implements ExecutionListener { if (nextAssigneeId != null) { execution.setVariable("approval", nextAssigneeId); execution.setVariable("currentNode", currentNodeName); + // ========== 发送通知逻辑 ========== + sendApprovalNotification(execution, currentNodeName, nextAssigneeId, enlistmentId); } } @@ -174,4 +182,99 @@ public class StartApprovalAssigneeListener implements ExecutionListener { throw new RuntimeException("未配置节点[" + currentNodeName + "]的当前负责人规则"); } } + + /** + * 发送审批通知(系统通知+企业微信通知) + */ + private void sendApprovalNotification(DelegateExecution execution, String currentNodeName, + Long nextAssigneeId, Long enlistmentId) { + try { + // 获取需要的Mapper和工具类 + EnlistmentReserveMapper enlistmentReserveMapper = (EnlistmentReserveMapper) SpringUtils.getBean(EnlistmentReserveMapper.class); + LeaveMapper leaveMapper = (LeaveMapper) SpringUtils.getBean("leaveMapper"); + WeChatUtil weChatUtil = SpringUtils.getBean(WeChatUtil.class); + + // 1. 查询入伍保留学籍申请详情 + EnlistmentReserve enlistmentReserve = enlistmentReserveMapper.selectRtEnlistmentReserveById(enlistmentId); + if (enlistmentReserve == null) { + log.warn("未找到入伍保留学籍申请记录,ID:{}", enlistmentId); + return; + } + + // 2. 查询下一个审批人的信息(获取用户名/工号) + SysUser nextApprover = sysUserService.selectUserById(nextAssigneeId); + if (nextApprover == null) { + log.warn("未找到审批人信息,用户ID:{}", nextAssigneeId); + return; + } + String approverUserName = nextApprover.getUserName(); // 审批人工号/用户名 + String approverName = nextApprover.getNickName(); // 审批人姓名 + + log.info("开始发送【入伍保留学籍审批】通知,审批节点:{},审批人:{}({})", + currentNodeName, approverName, approverUserName); + + // 3. 处理系统通知(先删后加,避免重复通知) + NotificationManage notificationManage = new NotificationManage(); + notificationManage.setContent(String.format("您有一条【入伍保留学籍审批】待处理(节点:%s)", currentNodeName)); + notificationManage.setReceiver(nextAssigneeId); // 接收人:下一个审批人 + + // 3.1 查询是否已有相同通知,有则删除 + NotificationManage existNotify = leaveMapper.selectCphMsgListForFlowable(notificationManage); + if (existNotify != null) { + int delRes = leaveMapper.deleteCphMsgById(existNotify.getId()); + log.info("删除重复的系统通知,通知ID:{},删除结果:{}", existNotify.getId(), delRes); + } + + // 3.2 添加新的系统通知 + notificationManage.setSender(SecurityUtils.getUserId()); // 发送人:当前操作人 + notificationManage.setCreateTime(DateUtils.getNowDate()); // 创建时间 + int addRes = leaveMapper.insertCphMsg(notificationManage); + log.info("新增系统通知成功,接收人ID:{},添加结果:{}", nextAssigneeId, addRes); + + // 4. 企业微信推送消息 + if (approverUserName != null && !approverUserName.isEmpty()) { + // 构造带超链接的消息内容 + String weChatContent = String.format( + "您有一条【入伍保留学籍审批】待处理(节点:%s),请点击前往处理", + currentNodeName + ); + + // 发送企业微信文本消息 + weChatUtil.sendTextMessage(approverUserName, weChatContent); + log.info("企业微信通知发送成功,接收人工号:{},节点:{}", approverUserName, currentNodeName); + } else { + log.warn("审批人工号为空,无法发送企业微信通知,用户ID:{}", nextAssigneeId); + } + + // ========== 删除当前审批人的待处理通知 ========== + // 4.1 获取当前审批人ID(当前操作人=已完成审批的人) + Long currentApproverId = SecurityUtils.getUserId(); + if (currentApproverId == null) { + log.warn("当前审批人ID为空,无法删除其待处理通知"); + return; + } + + // 4.2 构造当前审批人的待处理通知查询条件 + NotificationManage currentNotifyQuery = new NotificationManage(); + // 内容匹配:当前节点的待处理通知(关键词+节点名称) + currentNotifyQuery.setContent(String.format("您有一条【入伍保留学籍审批】待处理(节点:%s)", currentNodeName)); + currentNotifyQuery.setReceiver(currentApproverId); // 接收人=当前审批人 + + // 4.3 查询当前审批人的该节点待处理通知 + NotificationManage currentExistNotify = leaveMapper.selectCphMsgListForFlowable(currentNotifyQuery); + if (currentExistNotify != null) { + // 4.4 删除该通知(清理已处理的待办) + int currentDelRes = leaveMapper.deleteCphMsgById(currentExistNotify.getId()); + log.info("删除当前审批人({})的【{}】待处理通知,通知ID:{},删除结果:{}", + currentApproverId, currentNodeName, currentExistNotify.getId(), currentDelRes); + } else { + log.info("当前审批人({})无【{}】节点的待处理通知,无需删除", currentApproverId, currentNodeName); + } + + } catch (Exception e) { + // 捕获所有异常,仅记录日志,不影响主流程 + log.error("发送入伍保留学籍审批通知失败,节点:{},审批人ID:{},错误信息:{}", + currentNodeName, nextAssigneeId, e.getMessage(), e); + } + } } \ No newline at end of file diff --git a/srs-flowable/src/main/java/com/srs/flowable/listener/outsideAccommodation/OutsideAccommodationEndListener.java b/srs-flowable/src/main/java/com/srs/flowable/listener/outsideAccommodation/OutsideAccommodationEndListener.java index 2c5a54d..7f7dbe3 100644 --- a/srs-flowable/src/main/java/com/srs/flowable/listener/outsideAccommodation/OutsideAccommodationEndListener.java +++ b/srs-flowable/src/main/java/com/srs/flowable/listener/outsideAccommodation/OutsideAccommodationEndListener.java @@ -2,17 +2,15 @@ package com.srs.flowable.listener.outsideAccommodation; import com.srs.common.utils.SecurityUtils; +import com.srs.common.utils.WeChatUtil; import com.srs.common.utils.spring.SpringUtils; -import com.srs.dormitory.domain.DmsOutsideAccommodationApply; -import com.srs.flowable.domain.EnlistmentReserve; -import com.srs.flowable.domain.EnlistmentReserveApproval; +import com.srs.flowable.domain.DormitoryStudent; import com.srs.flowable.domain.OutsideAccommodationApply; import com.srs.flowable.domain.OutsideAccommodationApproval; -import com.srs.flowable.mapper.EnlistmentReserveApprovalMapper; -import com.srs.flowable.mapper.EnlistmentReserveMapper; import com.srs.flowable.mapper.OutsideAccommodationApplyMapper; import com.srs.flowable.mapper.OutsideAccommodationApprovalMapper; -import com.srs.system.service.ISysUserService; +import com.srs.flowable.mapper.RelieveMapper; +import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; import org.flowable.engine.RepositoryService; @@ -26,9 +24,10 @@ import java.util.Date; /** * 审批流程负责人自动流转监听器 - * 用于节点审批通过时,添加审批记录 + * 用于节点审批通过时,添加审批记录 + 给学生发送企业微信通知 */ @Component("OutsideAccommodationEndListener") // Spring Bean名称,与BPMN表达式对应 +@Slf4j public class OutsideAccommodationEndListener implements ExecutionListener { // 用于查询流程定义中的节点信息 @@ -41,7 +40,7 @@ public class OutsideAccommodationEndListener implements ExecutionListener { String currentActivityId = execution.getCurrentActivityId(); // 当前节点ID(兼容所有版本) String processDefinitionId = execution.getProcessDefinitionId(); // 流程定义ID - // 2. 根据节点ID查询节点名称(核心修正:通过流程定义获取名称) + // 2. 根据节点ID查询节点名称(通过流程定义获取名称) String currentNodeName = getNodeNameByActivityId(processDefinitionId, currentActivityId); if (currentNodeName == null) { throw new RuntimeException("未找到节点ID=" + currentActivityId + "的名称"); @@ -53,6 +52,9 @@ public class OutsideAccommodationEndListener implements ExecutionListener { // 获取审核意见 String approvalOpinion = (String) execution.getVariable("approvalOpinion"); + // 获取签名 + String signature = (String) execution.getVariable("signature"); + // 获取审核状态(兼容Integer/Long类型) Object approvalResultObj = execution.getVariable("approvalResult"); Long approvalResult = null; @@ -67,7 +69,7 @@ public class OutsideAccommodationEndListener implements ExecutionListener { // 根据Id查询外宿申请记录 OutsideAccommodationApply outsideAccommodationApply = outsideAccommodationApplyMapper.selectDmsOutsideAccommodationApplyById(accommodationId); // 添加审批记录 - saveApprovalRecord(outsideAccommodationApply.getId(), outsideAccommodationApply.getProcessInstanceId(),outsideAccommodationApply.getApplyNo(),currentNodeName, outsideAccommodationApply.getStudentName(), outsideAccommodationApply.getStudentNo(), approvalOpinion, approvalResult); + saveApprovalRecord(outsideAccommodationApply.getId(), outsideAccommodationApply.getProcessInstanceId(),outsideAccommodationApply.getApplyNo(),currentNodeName, outsideAccommodationApply.getStudentName(), outsideAccommodationApply.getStudentNo(), approvalOpinion, approvalResult, signature); Long status = 1L; if (currentNodeName.equals("辅导员审批")) { status = 2L; @@ -82,9 +84,92 @@ public class OutsideAccommodationEndListener implements ExecutionListener { if (currentNodeName.equals("学校领导审批")){ // 改变申请表中的审核状态(审核通过) status = 5L; + DormitoryStudent dormitoryStudent = new DormitoryStudent(); + dormitoryStudent.setStuNo(outsideAccommodationApply.getStudentNo()); + dormitoryStudent.setIsInStudentsleep("外宿"); + // 审核通过改变学生住宿状态 + outsideAccommodationApplyMapper.updateSrsDormitoryStudent(dormitoryStudent); } outsideAccommodationApply.setStatus(status); outsideAccommodationApplyMapper.updateDmsOutsideAccommodationApply(outsideAccommodationApply); + // ========== 给学生发送企业微信通知 ========== + sendStudentWeChatNotification(execution, outsideAccommodationApply, currentNodeName, approvalResult, approvalOpinion); + } + + /** + * 给学生发送外宿申请审批结果的企业微信通知 + */ + private void sendStudentWeChatNotification(DelegateExecution execution, OutsideAccommodationApply outsideAccommodationApply, + String currentNodeName, Long approvalResult, String approvalOpinion) { + try { + // 1. 获取需要的Mapper和工具类 + RelieveMapper relieveMapper = (RelieveMapper) SpringUtils.getBean("relieveMapper"); + WeChatUtil weChatUtil = SpringUtils.getBean(WeChatUtil.class); + + // 2. 获取学生学号和姓名(从外宿申请对象中获取) + String studentNo = outsideAccommodationApply.getStudentNo(); + String studentName = outsideAccommodationApply.getStudentName(); + + // 3. 先尝试从流程变量获取学生userId + Long stuUserId = null; + if (execution.hasVariable("stuUserId")) { + stuUserId = Long.valueOf(execution.getVariable("stuUserId").toString()); + } else { + // 补充逻辑:如果流程变量中没有stuUserId,通过申请表获取 + stuUserId = outsideAccommodationApply.getStudentId(); + } + + if (stuUserId == null) { + log.warn("⚠ 未找到学生(学号:{},姓名:{})对应的用户ID,无法发送通知", studentNo, studentName); + return; + } + + // 4. 使用userId查询对应的企业微信账号 + String stuUserName = relieveMapper.getUserNameByUserId(stuUserId); + + if (stuUserName != null && !stuUserName.isEmpty()) { + // 5. 拼接审批结果提示信息(适配外宿申请场景) + String approveResultDesc = getApprovalResultDesc(approvalResult, currentNodeName); + + // 6. 拼接最终通知内容 + String content = String.format("您的外宿申请有新的审批进展:%s(%s),%s,点此查看详情", + currentNodeName, + approveResultDesc, + (approvalOpinion != null && !approvalOpinion.isEmpty()) ? "审批意见:" + approvalOpinion : ""); + + // 7. 发送企业微信消息 + weChatUtil.sendTextMessage(stuUserName, content); + log.info("✅ 已成功向学生(姓名:{},学号:{},userName:{})发送外宿申请审批通知。审批节点:{},结果:{}", + studentName, studentNo, stuUserName, currentNodeName, approveResultDesc); + + } else { + log.warn("⚠ 找到了学生(学号:{},姓名:{},userId:{}),但其对应的企业微信账号为空,无法发送通知。", + studentNo, studentName, stuUserId); + } + } catch (Exception e) { + // 捕获所有异常,仅记录日志,不影响主流程 + String studentNo = outsideAccommodationApply.getStudentNo(); + log.error("❌ 向学生(学号:{})发送外宿申请审批通知时出现异常,但流程将继续。错误详情:", studentNo, e); + } + } + + /** + * 转换审批结果为可读描述(适配外宿申请的审批状态) + */ + private String getApprovalResultDesc(Long approvalResult, String currentNodeName) { + if (approvalResult == null) { + return "审批已处理"; + } + switch (approvalResult.intValue()) { + case 0: + return currentNodeName + "驳回"; + case 1: + return currentNodeName + "通过"; + case 2: + return "审批中"; + default: + return "审批已完成"; + } } /** @@ -105,7 +190,7 @@ public class OutsideAccommodationEndListener implements ExecutionListener { /** * 通用审批记录保存方法 */ - private void saveApprovalRecord(Long ApplyId,String processInstanceId, String applyNo, String nodeName, String studentName, String studentNo, String approvalOpinion, Long approvalResult) { + private void saveApprovalRecord(Long ApplyId,String processInstanceId, String applyNo, String nodeName, String studentName, String studentNo, String approvalOpinion, Long approvalResult, String signature) { OutsideAccommodationApproval outsideAccommodationApproval = new OutsideAccommodationApproval(); // 赋值 outsideAccommodationApproval.setApplyId(ApplyId); @@ -126,14 +211,16 @@ public class OutsideAccommodationEndListener implements ExecutionListener { outsideAccommodationApproval.setApprovalTime(new Date()); outsideAccommodationApproval.setStudentName(studentName); outsideAccommodationApproval.setStudentNo(studentNo); + // 设置签名 + outsideAccommodationApproval.setSignature(signature); OutsideAccommodationApprovalMapper outsideAccommodationApprovalMapper = (OutsideAccommodationApprovalMapper) SpringUtils.getBean(OutsideAccommodationApprovalMapper.class); // 查询审批记录是否存在 OutsideAccommodationApproval approval = outsideAccommodationApprovalMapper.selectOutsideAccommodationApprovalByStuName(studentName, studentNo, SecurityUtils.getLoginUser().getUser().getUserId()); if (approval == null) { outsideAccommodationApprovalMapper.insertDmsOutsideAccommodationApproval(outsideAccommodationApproval); } else { - approval.setId(approval.getId()); - outsideAccommodationApprovalMapper.insertDmsOutsideAccommodationApproval(outsideAccommodationApproval); + outsideAccommodationApproval.setId(approval.getId()); + outsideAccommodationApprovalMapper.updateDmsOutsideAccommodationApproval(outsideAccommodationApproval); } } } \ No newline at end of file diff --git a/srs-flowable/src/main/java/com/srs/flowable/listener/outsideAccommodation/OutsideAccommodationStartListener.java b/srs-flowable/src/main/java/com/srs/flowable/listener/outsideAccommodation/OutsideAccommodationStartListener.java index 557c172..2aebd5b 100644 --- a/srs-flowable/src/main/java/com/srs/flowable/listener/outsideAccommodation/OutsideAccommodationStartListener.java +++ b/srs-flowable/src/main/java/com/srs/flowable/listener/outsideAccommodation/OutsideAccommodationStartListener.java @@ -2,13 +2,19 @@ package com.srs.flowable.listener.outsideAccommodation; 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.dormitory.domain.DmsOutsideAccommodationApply; import com.srs.flowable.domain.EnlistmentReserve; +import com.srs.flowable.domain.NotificationManage; import com.srs.flowable.domain.OutsideAccommodationApply; import com.srs.flowable.mapper.EnlistmentReserveMapper; +import com.srs.flowable.mapper.LeaveMapper; import com.srs.flowable.mapper.OutsideAccommodationApplyMapper; import com.srs.system.service.ISysUserService; +import lombok.extern.slf4j.Slf4j; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowNode; import org.flowable.engine.RepositoryService; @@ -25,6 +31,7 @@ import java.util.List; * 用于节点审批之前时,更新下一个节点的负责人变量(approval) */ @Component("OutsideAccommodationStartListener") // Spring Bean名称,与BPMN表达式对应 +@Slf4j public class OutsideAccommodationStartListener implements ExecutionListener { @Autowired @@ -40,7 +47,7 @@ public class OutsideAccommodationStartListener implements ExecutionListener { String currentActivityId = execution.getCurrentActivityId(); // 当前节点ID(兼容所有版本) String processDefinitionId = execution.getProcessDefinitionId(); // 流程定义ID - // 2. 根据节点ID查询节点名称(核心修正:通过流程定义获取名称) + // 2. 根据节点ID查询节点名称(通过流程定义获取名称) String currentNodeName = getNodeNameByActivityId(processDefinitionId, currentActivityId); if (currentNodeName == null) { throw new RuntimeException("未找到节点ID=" + currentActivityId + "的名称"); @@ -55,6 +62,8 @@ public class OutsideAccommodationStartListener implements ExecutionListener { if (nextAssigneeId != null) { execution.setVariable("approval", nextAssigneeId); execution.setVariable("currentNode", currentNodeName); + // ========== 外宿申请审批通知逻辑 ========== + sendOutsideAccommodationNotification(execution, currentNodeName, nextAssigneeId, accommodationId); } } @@ -168,4 +177,98 @@ public class OutsideAccommodationStartListener implements ExecutionListener { throw new RuntimeException("未配置节点[" + currentNodeName + "]的当前负责人规则"); } } + /** + * 发送外宿申请审批通知(系统通知+企业微信通知) + */ + private void sendOutsideAccommodationNotification(DelegateExecution execution, String currentNodeName, + Long nextAssigneeId, Long accommodationId) { + try { + // 获取需要的Mapper和工具类 + OutsideAccommodationApplyMapper outsideAccommodationApplyMapper = SpringUtils.getBean(OutsideAccommodationApplyMapper.class); + LeaveMapper leaveMapper = (LeaveMapper) SpringUtils.getBean("leaveMapper"); + WeChatUtil weChatUtil = SpringUtils.getBean(WeChatUtil.class); + + // 1. 查询外宿申请详情 + com.srs.flowable.domain.OutsideAccommodationApply outsideAccommodationApply = outsideAccommodationApplyMapper.selectDmsOutsideAccommodationApplyById(accommodationId); + if (outsideAccommodationApply == null) { + log.warn("未找到外宿申请记录,ID:{}", accommodationId); + return; + } + + // 2. 查询下一个审批人的信息(获取用户名/工号) + SysUser nextApprover = sysUserService.selectUserById(nextAssigneeId); + if (nextApprover == null) { + log.warn("未找到审批人信息,用户ID:{}", nextAssigneeId); + return; + } + String approverUserName = nextApprover.getUserName(); // 审批人工号/用户名 + String approverName = nextApprover.getNickName(); // 审批人姓名 + + log.info("开始发送【外宿申请审批】通知,审批节点:{},审批人:{}({})", + currentNodeName, approverName, approverUserName); + + // 3. 处理系统通知(先删后加,避免重复通知) + NotificationManage notificationManage = new NotificationManage(); + notificationManage.setContent(String.format("您有一条【外宿申请审批】待处理(节点:%s)", currentNodeName)); + notificationManage.setReceiver(nextAssigneeId); // 接收人:下一个审批人 + + // 3.1 查询是否已有相同通知,有则删除 + NotificationManage existNotify = leaveMapper.selectCphMsgListForFlowable(notificationManage); + if (existNotify != null) { + int delRes = leaveMapper.deleteCphMsgById(existNotify.getId()); + log.info("删除重复的系统通知,通知ID:{},删除结果:{}", existNotify.getId(), delRes); + } + + // 3.2 添加新的系统通知 + notificationManage.setSender(SecurityUtils.getUserId() != null ? SecurityUtils.getUserId() : 0L); // 发送人:当前操作人(兜底处理) + notificationManage.setCreateTime(DateUtils.getNowDate()); // 创建时间 + int addRes = leaveMapper.insertCphMsg(notificationManage); + log.info("新增系统通知成功,接收人ID:{},添加结果:{}", nextAssigneeId, addRes); + + // 4. 企业微信推送消息 + if (approverUserName != null && !approverUserName.isEmpty()) { + // 构造带超链接的消息内容 + String weChatContent = String.format( + "您有一条【外宿申请审批】待处理(节点:%s),请点击前往处理", + currentNodeName + ); + + // 发送企业微信文本消息 + weChatUtil.sendTextMessage(approverUserName, weChatContent); + log.info("企业微信通知发送成功,接收人工号:{},节点:{}", approverUserName, currentNodeName); + } else { + log.warn("审批人工号为空,无法发送企业微信通知,用户ID:{}", nextAssigneeId); + } + + // ========== 删除当前审批人的待处理通知 ========== + // 4.1 获取当前审批人ID(当前操作人=已完成审批的人) + Long currentApproverId = SecurityUtils.getUserId(); + if (currentApproverId == null) { + log.warn("当前审批人ID为空,无法删除其待处理通知"); + return; + } + + // 4.2 构造当前审批人的待处理通知查询条件 + NotificationManage currentNotifyQuery = new NotificationManage(); + // 内容匹配:当前节点的待处理通知(关键词+节点名称) + currentNotifyQuery.setContent(String.format("您有一条【外宿申请审批】待处理(节点:%s)", currentNodeName)); + currentNotifyQuery.setReceiver(currentApproverId); // 接收人=当前审批人 + + // 4.3 查询当前审批人的该节点待处理通知 + NotificationManage currentExistNotify = leaveMapper.selectCphMsgListForFlowable(currentNotifyQuery); + if (currentExistNotify != null) { + // 4.4 删除该通知(清理已处理的待办) + int currentDelRes = leaveMapper.deleteCphMsgById(currentExistNotify.getId()); + log.info("删除当前审批人({})的【{}】待处理通知,通知ID:{},删除结果:{}", + currentApproverId, currentNodeName, currentExistNotify.getId(), currentDelRes); + } else { + log.info("当前审批人({})无【{}】节点的待处理通知,无需删除", currentApproverId, currentNodeName); + } + + } catch (Exception e) { + // 捕获所有异常,仅记录日志,不影响主流程 + log.error("发送外宿申请审批通知失败,节点:{},审批人ID:{},错误信息:{}", + currentNodeName, nextAssigneeId, e.getMessage(), e); + } + } } \ No newline at end of file diff --git a/srs-flowable/src/main/java/com/srs/flowable/mapper/EnlistmentReserveMapper.java b/srs-flowable/src/main/java/com/srs/flowable/mapper/EnlistmentReserveMapper.java index 38568ba..8013649 100644 --- a/srs-flowable/src/main/java/com/srs/flowable/mapper/EnlistmentReserveMapper.java +++ b/srs-flowable/src/main/java/com/srs/flowable/mapper/EnlistmentReserveMapper.java @@ -75,6 +75,8 @@ public interface EnlistmentReserveMapper extends BaseMapper { */ int deleteRtEnlistmentReserveById(Long id); + int deleteDormitoryStudentById(String StuNo); + /** * 批量删除应征入伍保留学籍申请 * diff --git a/srs-flowable/src/main/java/com/srs/flowable/mapper/OutsideAccommodationApplyMapper.java b/srs-flowable/src/main/java/com/srs/flowable/mapper/OutsideAccommodationApplyMapper.java index b34697e..ba98a78 100644 --- a/srs-flowable/src/main/java/com/srs/flowable/mapper/OutsideAccommodationApplyMapper.java +++ b/srs-flowable/src/main/java/com/srs/flowable/mapper/OutsideAccommodationApplyMapper.java @@ -2,6 +2,7 @@ package com.srs.flowable.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.srs.common.doman.vo.TeacherVo; +import com.srs.flowable.domain.DormitoryStudent; import com.srs.flowable.domain.OutsideAccommodationApply; import org.apache.ibatis.annotations.Options; import org.apache.ibatis.annotations.Param; @@ -67,6 +68,9 @@ public interface OutsideAccommodationApplyMapper extends BaseMapper vars = taskVo.getVariables(); + if (vars != null && vars.containsKey("variables")) { + runtimeService.removeVariable(task.getExecutionId(), "variables"); + } + } catch (Exception ignore) { + } if (DelegationState.PENDING.equals(task.getDelegationState())) { taskService.addComment(taskVo.getTaskId(), taskVo.getInstanceId(), FlowComment.DELEGATE.getType(), taskVo.getComment()); taskService.resolveTask(taskVo.getTaskId(), taskVo.getVariables()); diff --git a/srs-flowable/src/main/resources/mapper/EnlistmentReserveApprovalMapper.xml b/srs-flowable/src/main/resources/mapper/EnlistmentReserveApprovalMapper.xml index 734e30f..ebdf34d 100644 --- a/srs-flowable/src/main/resources/mapper/EnlistmentReserveApprovalMapper.xml +++ b/srs-flowable/src/main/resources/mapper/EnlistmentReserveApprovalMapper.xml @@ -5,42 +5,64 @@ - - - - - - - - - - - - + + + + + + + + + + + + + - select id, apply_id, process_instance_id, task_id, node_name, approver_id, approver_name, approval_opinion, approval_result, approval_time, student_name, student_no from rt_enlistment_reserve_approval + select id, + apply_id, + process_instance_id, + task_id, + node_name, + approver_id, + approver_name, + approval_opinion, + approval_result, + approval_time, + student_name, + student_no, + signature + from rt_enlistment_reserve_approval - - and apply_id = #{applyId} - and process_instance_id = #{processInstanceId} - and task_id = #{taskId} - and node_name like concat('%', #{nodeName}, '%') - and approver_id = #{approverId} - and approver_name like concat('%', #{approverName}, '%') - and approval_opinion = #{approvalOpinion} - and approval_result = #{approvalResult} - and approval_time = #{approvalTime} - and student_name like concat('%', #{studentName}, '%') - and student_no = #{studentNo} + and apply_id = #{applyId} + and process_instance_id = + #{processInstanceId} + + and task_id = #{taskId} + and node_name like concat('%', #{nodeName}, '%') + and approver_id = #{approverId} + and approver_name like concat('%', #{approverName}, + '%') + + and approval_opinion = #{approvalOpinion} + and approval_result = #{approvalResult} + and approval_time = #{approvalTime} + and student_name like concat('%', #{studentName}, + '%') + + and student_no = #{studentNo} - where id = #{id} @@ -61,7 +83,8 @@ - + insert into rt_enlistment_reserve_approval apply_id, @@ -75,6 +98,7 @@ approval_time, student_name, student_no, + signature, #{applyId}, @@ -88,6 +112,7 @@ #{approvalTime}, #{studentName}, #{studentNo}, + #{signature}, @@ -95,7 +120,9 @@ update rt_enlistment_reserve_approval apply_id = #{applyId}, - process_instance_id = #{processInstanceId}, + process_instance_id = + #{processInstanceId}, + task_id = #{taskId}, node_name = #{nodeName}, approver_id = #{approverId}, @@ -105,12 +132,15 @@ approval_time = #{approvalTime}, student_name = #{studentName}, student_no = #{studentNo}, + signature = #{signature}, where id = #{id} - delete from rt_enlistment_reserve_approval where id = #{id} + delete + from rt_enlistment_reserve_approval + where id = #{id} diff --git a/srs-flowable/src/main/resources/mapper/EnlistmentReserveMapper.xml b/srs-flowable/src/main/resources/mapper/EnlistmentReserveMapper.xml index e98f93d..2a0b6fb 100644 --- a/srs-flowable/src/main/resources/mapper/EnlistmentReserveMapper.xml +++ b/srs-flowable/src/main/resources/mapper/EnlistmentReserveMapper.xml @@ -200,6 +200,13 @@ where id = #{id} + + + delete + from srs_dormitory_student + where stu_no = #{stuNo} + + delete from rt_enlistment_reserve where id in diff --git a/srs-flowable/src/main/resources/mapper/OutsideAccommodationApplyMapper.xml b/srs-flowable/src/main/resources/mapper/OutsideAccommodationApplyMapper.xml index 0bac24a..c14c084 100644 --- a/srs-flowable/src/main/resources/mapper/OutsideAccommodationApplyMapper.xml +++ b/srs-flowable/src/main/resources/mapper/OutsideAccommodationApplyMapper.xml @@ -301,6 +301,26 @@ + + + update srs_dormitory_student + + dormitory_id = #{dormitoryId}, + dormitory_id =NULL, + bed_id = #{bedId}, + stu_no = #{stuNo}, + is_dormitory_head = #{isDormitoryHead}, + status =#{status}, + checkin_time = #{checkinTime}, + checkin_time =NULL, + in_status = #{inStatus}, + isInStudentsleep = #{isInStudentsleep}, + + + and stu_no = #{stuNo} + + + update dms_outside_accommodation_apply diff --git a/srs-flowable/src/main/resources/mapper/OutsideAccommodationApprovalMapper.xml b/srs-flowable/src/main/resources/mapper/OutsideAccommodationApprovalMapper.xml index cc4d0d9..c28c1fc 100644 --- a/srs-flowable/src/main/resources/mapper/OutsideAccommodationApprovalMapper.xml +++ b/srs-flowable/src/main/resources/mapper/OutsideAccommodationApprovalMapper.xml @@ -1,48 +1,72 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - select id, apply_id, apply_no, approval_node, approver_id, approver_name, approver_role, approval_opinion, approval_result, approval_time, process_instance_id, student_name, student_no from dms_outside_accommodation_approval + select id, + apply_id, + apply_no, + approval_node, + approver_id, + approver_name, + approver_role, + approval_opinion, + approval_result, + approval_time, + process_instance_id, + student_name, + student_no, + signature + from dms_outside_accommodation_approval - - - and apply_id = #{applyId} - and apply_no = #{applyNo} - and approval_node = #{approvalNode} - and approver_id = #{approverId} - and approver_name like concat('%', #{approverName}, '%') - and approver_role = #{approverRole} - and approval_opinion = #{approvalOpinion} - and approval_result = #{approvalResult} - and approval_time = #{approvalTime} - and process_instance_id = #{processInstanceId} - and student_name like concat('%', #{studentName}, '%') - and student_no = #{studentNo} + + and apply_id = #{applyId} + and apply_no = #{applyNo} + and approval_node = #{approvalNode} + and approver_id = #{approverId} + and approver_name like concat('%', #{approverName}, + '%') + + and approver_role = #{approverRole} + and approval_opinion = #{approvalOpinion} + and approval_result = #{approvalResult} + and approval_time = #{approvalTime} + and process_instance_id = + #{processInstanceId} + + and student_name like concat('%', #{studentName}, + '%') + + and student_no = #{studentNo} + and signature = #{signature} - - where id = #{id} @@ -62,8 +86,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - - + + insert into dms_outside_accommodation_approval apply_id, @@ -78,7 +103,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" process_instance_id, student_name, student_no, - + signature, + #{applyId}, #{applyNo}, @@ -92,7 +118,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{processInstanceId}, #{studentName}, #{studentNo}, - + #{signature}, + @@ -110,16 +137,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" process_instance_id = #{processInstanceId}, student_name = #{studentName}, student_no = #{studentNo}, + signature = #{signature}, where id = #{id} - delete from dms_outside_accommodation_approval where id = #{id} + delete + from dms_outside_accommodation_approval + where id = #{id} - delete from dms_outside_accommodation_approval where id in + delete from dms_outside_accommodation_approval where id in #{id} 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 5b2b0ba..49e6ec0 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 @@ -142,11 +142,11 @@ private static final long serialVersionUID=1L; private String applyReason; /** - * 申请状态(0-草稿 + * 申请状态(0-草稿,1=待辅导员审批,2=待学务审批,3=待二级学院审批,4=待学籍管理科审批,5=待教务处主管领导审批,6=审批通过,7=驳回) */ - @ApiModelProperty("申请状态(0-草稿 1-审批中 2-通过 3-驳回)") + @ApiModelProperty("申请状态(0-草稿,1=待辅导员审批,2=待学务审批,3=待二级学院审批,4=待学籍管理科审批,5=待教务处主管领导审批,6=审批通过,7=驳回)") @TableField("apply_status") - @Excel(name = "申请状态" , readConverterExp = "申请状态(0-草稿 1-审批中 2-通过 3-驳回)") + @Excel(name = "申请状态" , readConverterExp = "0=-草稿,1=待辅导员审批,2=待学务审批,3=待二级学院审批,4=待学籍管理科审批,5=待教务处主管领导审批,6=审批通过,7=驳回") private Long applyStatus; /** diff --git a/srs-routine/src/main/java/com/srs/routine/domain/RtEnlistmentReserveApproval.java b/srs-routine/src/main/java/com/srs/routine/domain/RtEnlistmentReserveApproval.java index b9964ff..728fb5b 100644 --- a/srs-routine/src/main/java/com/srs/routine/domain/RtEnlistmentReserveApproval.java +++ b/srs-routine/src/main/java/com/srs/routine/domain/RtEnlistmentReserveApproval.java @@ -1,6 +1,7 @@ package com.srs.routine.domain; import java.util.Date; + import com.fasterxml.jackson.annotation.JsonFormat; import com.srs.common.annotation.Excel; import com.baomidou.mybatisplus.annotation.*; @@ -10,7 +11,6 @@ import lombok.*; import com.srs.common.core.domain.BaseEntity; - /** * 保留学籍审批记录对象 rt_enlistment_reserve_approval * @@ -22,10 +22,10 @@ import com.srs.common.core.domain.BaseEntity; @NoArgsConstructor @AllArgsConstructor @Builder -@ApiModel(value = "RtEnlistmentReserveApproval对象" , description = "保留学籍审批记录") +@ApiModel(value = "RtEnlistmentReserveApproval对象", description = "保留学籍审批记录") @TableName("rt_enlistment_reserve_approval") -public class RtEnlistmentReserveApproval extends BaseEntity{ - private static final long serialVersionUID=1L; +public class RtEnlistmentReserveApproval extends BaseEntity { + private static final long serialVersionUID = 1L; /** * 主键 @@ -63,7 +63,7 @@ public class RtEnlistmentReserveApproval extends BaseEntity{ */ @ApiModelProperty("审批节点(辅导员/学务等)") @TableField("node_name") - @Excel(name = "审批节点" , readConverterExp = "辅=导员/学务等") + @Excel(name = "审批节点", readConverterExp = "辅=导员/学务等") private String nodeName; /** @@ -71,7 +71,7 @@ public class RtEnlistmentReserveApproval extends BaseEntity{ */ @ApiModelProperty("审批人ID(关联sys_user)") @TableField("approver_id") - @Excel(name = "审批人ID" , readConverterExp = "关=联sys_user") + @Excel(name = "审批人ID", readConverterExp = "关=联sys_user") private Long approverId; /** @@ -95,7 +95,7 @@ public class RtEnlistmentReserveApproval extends BaseEntity{ */ @ApiModelProperty("审批结果(1-通过") @TableField("approval_result") - @Excel(name = "审批结果" , readConverterExp = "审批结果(1-通过") + @Excel(name = "审批结果", readConverterExp = "审批结果(1-通过") private Long approvalResult; /** @@ -104,7 +104,7 @@ public class RtEnlistmentReserveApproval extends BaseEntity{ @ApiModelProperty("审批时间") @TableField("approval_time") @JsonFormat(pattern = "yyyy-MM-dd") - @Excel(name = "审批时间" , width = 30, dateFormat = "yyyy-MM-dd") + @Excel(name = "审批时间", width = 30, dateFormat = "yyyy-MM-dd") private Date approvalTime; /** @@ -123,5 +123,13 @@ public class RtEnlistmentReserveApproval extends BaseEntity{ @Excel(name = "学号") private String studentNo; + /** + * 签名 + */ + @ApiModelProperty("签名") + @TableField("signature") + @Excel(name = "签名") + private String signature; + } diff --git a/srs-routine/src/main/java/com/srs/routine/domain/RtEnlistmentReserveAttach.java b/srs-routine/src/main/java/com/srs/routine/domain/RtEnlistmentReserveAttach.java index 42b0e55..96444c6 100644 --- a/srs-routine/src/main/java/com/srs/routine/domain/RtEnlistmentReserveAttach.java +++ b/srs-routine/src/main/java/com/srs/routine/domain/RtEnlistmentReserveAttach.java @@ -7,6 +7,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.*; import com.srs.common.core.domain.BaseEntity; +import java.util.List; + /** * 保留学籍申请附件(入伍通知书等)对象 rt_enlistment_reserve_attach @@ -95,5 +97,10 @@ public class RtEnlistmentReserveAttach extends BaseEntity { @Excel(name = "学号") private String studentNo; - + /** + * 入伍保留学籍申请表 + */ + @ApiModelProperty(value = "入伍保留学籍申请表", hidden = true) + @Excel(name = "入伍保留学籍申请表") + private List rtEnlistmentReserves; } 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 cc8b1d8..8ca202f 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 @@ -283,7 +283,7 @@ public class SysDisBasicServiceImpl extends ServiceImpl + @@ -31,7 +32,8 @@ approval_result, approval_time, student_name, - student_no + student_no, + signature from rt_enlistment_reserve_approval @@ -96,6 +98,7 @@ approval_time, student_name, student_no, + signature, #{applyId}, @@ -109,6 +112,7 @@ #{approvalTime}, #{studentName}, #{studentNo}, + #{signature}, @@ -128,6 +132,7 @@ approval_time = #{approvalTime}, student_name = #{studentName}, student_no = #{studentNo}, + signature = #{signature}, where id = #{id} diff --git a/srs-routine/src/main/resources/mapper/routine/RtEnlistmentReserveAttachMapper.xml b/srs-routine/src/main/resources/mapper/routine/RtEnlistmentReserveAttachMapper.xml index bb2f7ad..370f133 100644 --- a/srs-routine/src/main/resources/mapper/routine/RtEnlistmentReserveAttachMapper.xml +++ b/srs-routine/src/main/resources/mapper/routine/RtEnlistmentReserveAttachMapper.xml @@ -15,8 +15,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, apply_id, diff --git a/srs-routine/src/main/resources/mapper/routine/RtEnlistmentReserveMapper.xml b/srs-routine/src/main/resources/mapper/routine/RtEnlistmentReserveMapper.xml index 5d0ed9b..cf7e2a1 100644 --- a/srs-routine/src/main/resources/mapper/routine/RtEnlistmentReserveMapper.xml +++ b/srs-routine/src/main/resources/mapper/routine/RtEnlistmentReserveMapper.xml @@ -28,7 +28,7 @@ - + + @@ -158,7 +159,7 @@ and reserve_end_date = #{reserveEndDate} and approval_no = #{approvalNo} and affix_id = #{affixId} - and deploy_id = #{deployId} + and deploy_id = #{deployId} diff --git a/srs-system/src/main/java/com/srs/system/domain/QgzxTeacher.java b/srs-system/src/main/java/com/srs/system/domain/QgzxTeacher.java index e5499d7..8b59286 100644 --- a/srs-system/src/main/java/com/srs/system/domain/QgzxTeacher.java +++ b/srs-system/src/main/java/com/srs/system/domain/QgzxTeacher.java @@ -93,5 +93,7 @@ private static final long serialVersionUID=1L; @Excel(name = "学院") private String deptName; - + @ApiModelProperty("职工状态") + @TableField("zgzt") + private String zgzt; }