src/main/java/com/ruoyi/ScheduleTask.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,58 @@ package com.ruoyi; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.project.system.domain.SysNotice; import com.ruoyi.project.system.mapper.SysNoticeMapper; import com.ruoyi.safe.mapper.SafeTrainingMapper; import com.ruoyi.safe.pojo.SafeTraining; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.List; @Component //宿¶ä»»å¡æ±æ» public class ScheduleTask { @Autowired private SafeTrainingMapper safeTrainingMapper; @Autowired private SysNoticeMapper noticeMapper; //宿¶ä»»å¡(15åéæ§è¡ä¸æ¬¡--夿å¹è®è®¡åæ°æ®,ç¶æååæ´) @Scheduled(cron = "0 0/15 * * * ?") public void testScheduleTask() { List<SafeTraining> safeTrainings = safeTrainingMapper.selectList(Wrappers.<SafeTraining>lambdaQuery().ne(SafeTraining::getState, 2)); if (safeTrainings.size() > 0) { for (SafeTraining safeTraining : safeTrainings) { //æ ¹æ®æ¶é´å¤æå¹è®ç¶æ String trainingDate = safeTraining.getTrainingDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); LocalDateTime openingTime = LocalDateTime.parse((trainingDate + safeTraining.getOpeningTime()), DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss")); LocalDateTime endTime = LocalDateTime.parse((trainingDate + safeTraining.getEndTime()), DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss")); if (LocalDateTime.now().isBefore(openingTime)) { //æªå¼å§ safeTraining.setState(0); } else if (LocalDateTime.now().isAfter(endTime)) { //å·²ç»æ safeTraining.setState(2); } else { //è¿è¡ä¸ safeTraining.setState(1); } safeTrainingMapper.updateById(safeTraining); } } } //å·²è¯»æ°æ®åä¸ä¸ªå®æ¶ä»»å¡(æ¯æ1å·1ç¹æ¸ ç䏿¬¡ä¸ä¸ªæå·²è¯»æ°æ®) @Scheduled(cron = "0 0 1 1 * ?") public void cleanReadData() { noticeMapper.delete(Wrappers.<SysNotice>lambdaQuery() .eq(SysNotice::getStatus,"1") .lt(SysNotice::getCreateTime, LocalDateTime.now())); } } src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java
@@ -1,19 +1,22 @@ package com.ruoyi.project.system.mapper; import java.util.List; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import com.ruoyi.project.system.domain.SysDept; /** * é¨é¨ç®¡ç æ°æ®å± * * * @author ruoyi */ @Mapper public interface SysDeptMapper { /** * æ¥è¯¢é¨é¨ç®¡çæ°æ® * * * @param dept é¨é¨ä¿¡æ¯ * @return é¨é¨ä¿¡æ¯éå */ @@ -21,7 +24,7 @@ /** * æ ¹æ®è§è²IDæ¥è¯¢é¨é¨æ ä¿¡æ¯ * * * @param roleId è§è²ID * @param deptCheckStrictly é¨é¨æ 鿩项æ¯å¦å ³èæ¾ç¤º * @return éä¸é¨é¨å表 @@ -30,7 +33,7 @@ /** * æ ¹æ®é¨é¨IDæ¥è¯¢ä¿¡æ¯ * * * @param deptId é¨é¨ID * @return é¨é¨ä¿¡æ¯ */ @@ -38,7 +41,7 @@ /** * æ ¹æ®IDæ¥è¯¢ææåé¨é¨ * * * @param deptId é¨é¨ID * @return é¨é¨å表 */ @@ -46,7 +49,7 @@ /** * æ ¹æ®IDæ¥è¯¢ææåé¨é¨ï¼æ£å¸¸ç¶æï¼ * * * @param deptId é¨é¨ID * @return åé¨é¨æ° */ @@ -54,7 +57,7 @@ /** * æ¯å¦åå¨åèç¹ * * * @param deptId é¨é¨ID * @return ç»æ */ @@ -62,7 +65,7 @@ /** * æ¥è¯¢é¨é¨æ¯å¦åå¨ç¨æ· * * * @param deptId é¨é¨ID * @return ç»æ */ @@ -70,7 +73,7 @@ /** * æ ¡éªé¨é¨åç§°æ¯å¦å¯ä¸ * * * @param deptName é¨é¨åç§° * @param parentId ç¶é¨é¨ID * @return ç»æ @@ -79,7 +82,7 @@ /** * æ°å¢é¨é¨ä¿¡æ¯ * * * @param dept é¨é¨ä¿¡æ¯ * @return ç»æ */ @@ -87,7 +90,7 @@ /** * ä¿®æ¹é¨é¨ä¿¡æ¯ * * * @param dept é¨é¨ä¿¡æ¯ * @return ç»æ */ @@ -95,14 +98,14 @@ /** * ä¿®æ¹æå¨é¨é¨æ£å¸¸ç¶æ * * * @param deptIds é¨é¨IDç» */ public void updateDeptStatusNormal(Long[] deptIds); /** * ä¿®æ¹åå ç´ å ³ç³» * * * @param depts åå ç´ * @return ç»æ */ @@ -110,7 +113,7 @@ /** * å é¤é¨é¨ç®¡çä¿¡æ¯ * * * @param deptId é¨é¨ID * @return ç»æ */ src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java
@@ -1,5 +1,6 @@ package com.ruoyi.project.system.service.impl; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -22,6 +23,7 @@ import com.ruoyi.project.system.mapper.SysUserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import com.ruoyi.project.system.domain.SysNotice; import com.ruoyi.project.system.mapper.SysNoticeMapper; @@ -210,4 +212,5 @@ sysNotice.setTenantId(tenantId); return sysNotice; } } src/main/java/com/ruoyi/safe/controller/SafeAccidentController.java
@@ -48,7 +48,7 @@ @ApiOperation("å é¤äºæ 䏿¥è®°å½") @DeleteMapping("/{ids}") public R delSafeCertification(@RequestBody List<Integer> ids) { public R delSafeAccident(@RequestBody List<Integer> ids) { return R.ok(safeAccidentService.removeBatchByIds(ids)); } src/main/java/com/ruoyi/safe/controller/SafeTrainingController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,81 @@ package com.ruoyi.safe.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.safe.dto.SafeTrainingDto; import com.ruoyi.safe.pojo.SafeAccident; import com.ruoyi.safe.pojo.SafeTraining; import com.ruoyi.safe.pojo.SafeTrainingDetails; import com.ruoyi.safe.service.SafeAccidentService; import com.ruoyi.safe.service.SafeTrainingDetailsService; import com.ruoyi.safe.service.SafeTrainingService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸ å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:06 */ @RestController @RequestMapping("/safeTraining") @Api(tags = "å®å ¨ç产--å®å ¨å¹è®èæ ¸") public class SafeTrainingController { @Autowired private SafeTrainingService safeTrainingService; @Autowired private SafeTrainingDetailsService safeTrainingDetailsService; @GetMapping("/page") @ApiOperation("å页æ¥è¯¢") public R page(Page page, SafeTrainingDto safeTrainingDto) { return R.ok(safeTrainingService.pageSafeTraining(page, safeTrainingDto)); } @ApiOperation("æ°å¢/ç¼è¾å®å ¨å¹è®èæ ¸") @PostMapping() public R addOrUpdate(@RequestBody SafeTraining safeTraining) { return R.ok(safeTrainingService.addOrUpdate(safeTraining)); } @ApiOperation("ç¾å°") @PostMapping ("/sign") public R sign(@RequestBody SafeTrainingDetails safeTrainingDetails) { return R.ok(safeTrainingDetailsService.save(safeTrainingDetails)); } @ApiOperation("ç»ææç»æ¥è¯¢") @GetMapping ("/getSafeTraining") public R getSafeTraining(Long id) { return R.ok(safeTrainingService.getSafeTraining(id)); } @ApiOperation("ç»ææç»ä¿å") @PostMapping ("/saveSafeTraining") public R saveSafeTraining(@RequestBody SafeTrainingDto safeTrainingDto) { return R.ok(safeTrainingService.saveSafeTraining(safeTrainingDto)); } @ApiOperation("å é¤å®å ¨å¹è®èæ ¸") @DeleteMapping("/{ids}") public R delSafeTraining(@RequestBody List<Integer> ids) { return R.ok(safeTrainingService.delSafeTraining(ids)); } @ApiOperation("导åº") @PostMapping ("/export") public void export(HttpServletResponse response, @RequestBody SafeTraining safeTraining) { safeTrainingService.export(response,safeTraining.getId()); } } src/main/java/com/ruoyi/safe/controller/SafeTrainingDetailsController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,45 @@ package com.ruoyi.safe.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.safe.dto.SafeTrainingDto; import com.ruoyi.safe.pojo.SafeTraining; import com.ruoyi.safe.pojo.SafeTrainingDetails; import com.ruoyi.safe.service.SafeTrainingDetailsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸--è®°å½è¯¦æ å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:15 */ @RestController @RequestMapping("/safeTrainingDetails") @Api(tags = "å®å ¨ç产--å®å ¨å¹è®èæ ¸--è®°å½è¯¦æ ") public class SafeTrainingDetailsController { @Autowired private SafeTrainingDetailsService safeTrainingDetailsService; @GetMapping("/page") @ApiOperation("å页æ¥è¯¢") public R page(Page page, SafeTrainingDetails safeTrainingDetails) { return R.ok(safeTrainingDetailsService.pageDetails(page, safeTrainingDetails)); } @ApiOperation("导åº") @PostMapping("/export") public void export(HttpServletResponse response, @RequestBody SafeTrainingDetails safeTrainingDetails) { safeTrainingDetailsService.export(response,safeTrainingDetails.getUserId()); } } src/main/java/com/ruoyi/safe/controller/SafeTrainingFileController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,72 @@ package com.ruoyi.safe.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.safe.pojo.SafeHiddenFile; import com.ruoyi.safe.pojo.SafeTrainingFile; import com.ruoyi.safe.service.SafeTrainingFileService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸--éä»¶ å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:23 */ @RestController @RequestMapping("/safeTrainingFile") @Api(tags = "å®å ¨ç产--å®å ¨å¹è®èæ ¸--éä»¶") public class SafeTrainingFileController { @Resource private SafeTrainingFileService safeTrainingFileService; /** * æ°å¢ * @param safeHiddenFile * @return */ @PostMapping("/add") @ApiOperation("æ°å¢") public R add(@RequestBody SafeTrainingFile safeHiddenFile) { return R.ok(safeTrainingFileService.save(safeHiddenFile)); } /** * å é¤ * @param ids * @return */ @DeleteMapping("/del") @ApiOperation("å é¤") public R delSafeHiddenFile(@RequestBody List<Integer> ids) { if(CollectionUtils.isEmpty(ids)){ return R.fail("è¯·éæ©è³å°ä¸æ¡æ°æ®"); } //å 餿£éªéä»¶ return R.ok(safeTrainingFileService.removeBatchByIds(ids)); } /** *å页æ¥è¯¢ * @param page * @param safeTrainingFile * @return */ @GetMapping("/listPage") @ApiOperation("å页æ¥è¯¢") public R listPage(Page page, SafeTrainingFile safeTrainingFile) { return R.ok(safeTrainingFileService.page(page, Wrappers.<SafeTrainingFile>lambdaQuery().eq(SafeTrainingFile::getSafeTrainingId,safeTrainingFile.getSafeTrainingId()))); } } src/main/java/com/ruoyi/safe/dto/SafeTrainingDetailsDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.ruoyi.safe.dto; import com.baomidou.mybatisplus.annotation.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.safe.pojo.SafeTrainingDetails; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.Getter; import lombok.Setter; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; import java.time.LocalDateTime; @Data public class SafeTrainingDetailsDto extends SafeTrainingDetails { @ApiModelProperty("å¹è®äººåç¼å·") private String userName; @ApiModelProperty("å¹è®äººååç§°") private String nickName; @ApiModelProperty("ææºå·ç ") private String phonenumber; } src/main/java/com/ruoyi/safe/dto/SafeTrainingDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,26 @@ package com.ruoyi.safe.dto; import com.ruoyi.safe.pojo.SafeTraining; import com.ruoyi.safe.pojo.SafeTrainingDetails; import com.ruoyi.safe.pojo.SafeTrainingFile; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data public class SafeTrainingDto extends SafeTraining { @ApiModelProperty("æ¥å人æ°") private Integer nums; @ApiModelProperty("è¯ä»·äºº") private String assessmentUserName; @ApiModelProperty("éä»¶éå") private List<SafeTrainingFile> safeTrainingFileList; @ApiModelProperty("å¹è®è®°å½äººå详æ éå") private List<SafeTrainingDetailsDto> safeTrainingDetailsDtoList; } src/main/java/com/ruoyi/safe/mapper/SafeTrainingDetailsMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package com.ruoyi.safe.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.safe.dto.SafeTrainingDetailsDto; import com.ruoyi.safe.pojo.SafeTrainingDetails; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸--è®°å½è¯¦æ Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:15 */ @Mapper public interface SafeTrainingDetailsMapper extends BaseMapper<SafeTrainingDetails> { List<SafeTrainingDetailsDto> getSafeTraining(@Param("id") Long id); IPage<SafeTrainingDetails> pageDetails(Page page, @Param("c") SafeTrainingDetails safeTrainingDetails); } src/main/java/com/ruoyi/safe/mapper/SafeTrainingFileMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.safe.mapper; import com.ruoyi.safe.pojo.SafeTrainingFile; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸--éä»¶ Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:23 */ @Mapper public interface SafeTrainingFileMapper extends BaseMapper<SafeTrainingFile> { } src/main/java/com/ruoyi/safe/mapper/SafeTrainingMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,25 @@ package com.ruoyi.safe.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.safe.dto.SafeTrainingDto; import com.ruoyi.safe.pojo.SafeTraining; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸ Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:06 */ @Mapper public interface SafeTrainingMapper extends BaseMapper<SafeTraining> { IPage<SafeTrainingDto> pageSafeTraining(Page page, @Param("c") SafeTrainingDto safeTrainingDto); SafeTrainingDto getSafeTraining(@Param("id") Long id); } src/main/java/com/ruoyi/safe/pojo/SafeTraining.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,123 @@ package com.ruoyi.safe.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableLogic; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.time.LocalDate; import java.time.LocalDateTime; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.NotBlank; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:06 */ @Getter @Setter @TableName("safe_training") @ApiModel(value = "SafeTraining对象", description = "å®å ¨ç产--å®å ¨å¹è®èæ ¸") public class SafeTraining implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Long id; @ApiModelProperty("课ç¨ç¼å·") private String courseCode; @ApiModelProperty("å¹è®ç®æ ") private String trainingObjectives; @ApiModelProperty("å¹è®å 容") private String trainingContent; @ApiModelProperty("å¹è®æ¹å¼") private String trainingMode; @ApiModelProperty("ç¶æ(0ï¼æªå¼å§1ï¼è¿è¡ä¸ï¼2ï¼å·²ç»æ)") private Integer state; @ApiModelProperty("åå 对象") private String participants; @ApiModelProperty("å¹è®å°ç¹") private String placeTraining; @ApiModelProperty("å¹è®è®²å¸") private String trainingLecturer; @ApiModelProperty("å¹è®æ¥æ") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @NotBlank(message = "å¹è®æ¥æä¸è½ä¸ºç©º") private LocalDate trainingDate; @ApiModelProperty("å¼å§æ¶é´(æ¶åç§)") @NotBlank(message = "å¼å§æ¶é´ä¸è½ä¸ºç©º") private String openingTime; @ApiModelProperty("ç»ææ¶é´(æ¶åç§)") @NotBlank(message = "ç»ææ¶é´ä¸è½ä¸ºç©º") private String endTime; @ApiModelProperty("课é¢å¦å") private String projectCredits; @ApiModelProperty("课æ¶") private Double classHour; @ApiModelProperty("èæ ¸æ¹å¼") private String assessmentMethod; @ApiModelProperty("æ¬æ¬¡å¹è®ç»¼åè¯ä»·") private String comprehensiveAssessment; @ApiModelProperty("夿³¨") private String remarks; @ApiModelProperty("è¯ä»·äººid") private Integer assessmentUserId; @ApiModelProperty("è¯ä»·æ¶é´") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate assessmentDate; @ApiModelProperty("å¹è®æè¦") private String trainingAbstract; @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT) private Integer createUser; @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; @TableField(fill = FieldFill.INSERT) private Integer tenantId; } src/main/java/com/ruoyi/safe/pojo/SafeTrainingDetails.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,95 @@ package com.ruoyi.safe.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; 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 java.io.Serializable; import java.time.LocalDate; import java.time.LocalDateTime; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.NotBlank; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸--è®°å½è¯¦æ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:15 */ @Getter @Setter @TableName("safe_training_details") @ApiModel(value = "SafeTrainingDetails对象", description = "å®å ¨ç产--å®å ¨å¹è®èæ ¸--è®°å½è¯¦æ ") public class SafeTrainingDetails implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty("ç¨æ·è¡¨æ ¼ï¼userï¼ä¸»é®") @NotBlank(message = "ç¨æ·idä¸è½ä¸ºç©º") private Long userId; @ApiModelProperty("å ³èå®å ¨å¹è®èæ ¸id") private Integer safeTrainingId; @ApiModelProperty("èæ ¸ç»æ") private String examinationResults; @TableField(fill = FieldFill.INSERT) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT) private Integer createUser; @TableField(fill = FieldFill.INSERT_UPDATE) @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; @TableField(fill = FieldFill.INSERT) private Integer tenantId; @ApiModelProperty("å¹è®æ¥æ") @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") @TableField(exist = false) private LocalDate trainingDate; @ApiModelProperty("课ç¨ç¼å·") @TableField(exist = false) private String courseCode; @ApiModelProperty("å¹è®å 容") @TableField(exist = false) private String trainingContent; @ApiModelProperty("å¹è®è¯¾æ¶") @TableField(exist = false) private Double classHour; @ApiModelProperty("课é¢å¦å") @TableField(exist = false) private String projectCredits; @ApiModelProperty("夿³¨") @TableField(exist = false) private String remarks; } src/main/java/com/ruoyi/safe/pojo/SafeTrainingFile.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,57 @@ package com.ruoyi.safe.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; 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 java.io.Serializable; import java.time.LocalDateTime; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸--éä»¶ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:23 */ @Getter @Setter @TableName("safe_training_file") @ApiModel(value = "SafeTrainingFile对象", description = "å®å ¨ç产--å®å ¨å¹è®èæ ¸--éä»¶") public class SafeTrainingFile implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = "id", type = IdType.AUTO) private Integer id; @ApiModelProperty("å ³èå®å ¨å¹è®èæ ¸id") private Integer safeTrainingId; private String name; private String url; private Object fileSize; @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT) private Integer createUser; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateUser; @TableField(fill = FieldFill.INSERT) private Integer tenantId; } src/main/java/com/ruoyi/safe/service/SafeTrainingDetailsService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.safe.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.safe.dto.SafeTrainingDto; import com.ruoyi.safe.pojo.SafeTrainingDetails; import com.baomidou.mybatisplus.extension.service.IService; import javax.servlet.http.HttpServletResponse; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸--è®°å½è¯¦æ æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:15 */ public interface SafeTrainingDetailsService extends IService<SafeTrainingDetails> { IPage<SafeTrainingDetails> pageDetails(Page page, SafeTrainingDetails safeTrainingDetails); void export(HttpServletResponse response, Long userId); } src/main/java/com/ruoyi/safe/service/SafeTrainingFileService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package com.ruoyi.safe.service; import com.ruoyi.safe.pojo.SafeTrainingFile; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸--éä»¶ æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:23 */ public interface SafeTrainingFileService extends IService<SafeTrainingFile> { } src/main/java/com/ruoyi/safe/service/SafeTrainingService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,33 @@ package com.ruoyi.safe.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.safe.dto.SafeTrainingDto; import com.ruoyi.safe.pojo.SafeTraining; import com.baomidou.mybatisplus.extension.service.IService; import javax.servlet.http.HttpServletResponse; import java.util.List; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸ æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:06 */ public interface SafeTrainingService extends IService<SafeTraining> { IPage<SafeTrainingDto> pageSafeTraining(Page page, SafeTrainingDto safeTrainingDto); int addOrUpdate(SafeTraining safeTraining); SafeTrainingDto getSafeTraining(Long id); int saveSafeTraining(SafeTrainingDto safeTrainingDto); int delSafeTraining(List<Integer> ids); void export(HttpServletResponse response, Long id); } src/main/java/com/ruoyi/safe/service/impl/SafeHiddenServiceImpl.java
@@ -47,7 +47,7 @@ @Override public int add(SafeHidden safeHidden) { safeHiddenMapper.insert(safeHidden); String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyMMdd")); String no = "YH" + String.format("%s%03d", datePrefix, safeHidden.getId()); safeHidden.setHiddenCode(no); safeHiddenMapper.updateById(safeHidden); src/main/java/com/ruoyi/safe/service/impl/SafeTrainingDetailsServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,81 @@ package com.ruoyi.safe.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.ruoyi.common.utils.HackLoopTableRenderPolicy; import com.ruoyi.project.system.domain.SysUser; import com.ruoyi.project.system.mapper.SysUserMapper; import com.ruoyi.safe.dto.SafeTrainingDetailsDto; import com.ruoyi.safe.dto.SafeTrainingDto; import com.ruoyi.safe.pojo.SafeTrainingDetails; import com.ruoyi.safe.mapper.SafeTrainingDetailsMapper; import com.ruoyi.safe.service.SafeTrainingDetailsService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.util.HashMap; import java.util.List; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸--è®°å½è¯¦æ æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:15 */ @Service public class SafeTrainingDetailsServiceImpl extends ServiceImpl<SafeTrainingDetailsMapper, SafeTrainingDetails> implements SafeTrainingDetailsService { @Autowired private SafeTrainingDetailsMapper safeTrainingDetailsMapper; @Autowired private SysUserMapper sysUserMapper; @Override public IPage<SafeTrainingDetails> pageDetails(Page page, SafeTrainingDetails safeTrainingDetails) { return safeTrainingDetailsMapper.pageDetails(page, safeTrainingDetails); } @Override public void export(HttpServletResponse response, Long userId) { SafeTrainingDetails safeTrainingDetails = new SafeTrainingDetails(); safeTrainingDetails.setUserId(userId); SysUser sysUser = sysUserMapper.selectUserById(userId); List<SafeTrainingDetails> safeTrainingDetailsList = safeTrainingDetailsMapper.pageDetails(new Page(1, -1), safeTrainingDetails).getRecords(); InputStream inputStream = this.getClass().getResourceAsStream("/static/safe-training-details.docx"); Configure configure = Configure.builder() .bind("safeTrainingDetailsList", new HackLoopTableRenderPolicy()) .build(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap<String, Object>() {{ put("user", sysUser); put("safeTrainingDetailsList", safeTrainingDetailsList); }}); try { response.setContentType("application/msword"); String fileName = URLEncoder.encode( "å¹è®ä¸èæ ¸è®°å½", "UTF-8"); response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx"); OutputStream os = response.getOutputStream(); template.write(os); os.flush(); os.close(); inputStream.close(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("导åºå¤±è´¥"); } } } src/main/java/com/ruoyi/safe/service/impl/SafeTrainingFileServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package com.ruoyi.safe.service.impl; import com.ruoyi.safe.pojo.SafeTrainingFile; import com.ruoyi.safe.mapper.SafeTrainingFileMapper; import com.ruoyi.safe.service.SafeTrainingFileService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸--éä»¶ æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:23 */ @Service public class SafeTrainingFileServiceImpl extends ServiceImpl<SafeTrainingFileMapper, SafeTrainingFile> implements SafeTrainingFileService { } src/main/java/com/ruoyi/safe/service/impl/SafeTrainingServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,179 @@ package com.ruoyi.safe.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.config.Configure; import com.ruoyi.common.utils.HackLoopTableRenderPolicy; import com.ruoyi.production.pojo.ProductOrder; import com.ruoyi.production.pojo.ProductWorkOrder; import com.ruoyi.project.system.domain.SysNotice; import com.ruoyi.safe.dto.SafeTrainingDetailsDto; import com.ruoyi.safe.dto.SafeTrainingDto; import com.ruoyi.safe.mapper.SafeTrainingDetailsMapper; import com.ruoyi.safe.mapper.SafeTrainingFileMapper; import com.ruoyi.safe.pojo.SafeTraining; import com.ruoyi.safe.mapper.SafeTrainingMapper; import com.ruoyi.safe.pojo.SafeTrainingDetails; import com.ruoyi.safe.pojo.SafeTrainingFile; import com.ruoyi.safe.service.SafeTrainingService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.HashMap; import java.util.List; /** * <p> * å®å ¨ç产--å®å ¨å¹è®èæ ¸ æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-29 10:54:06 */ @Service public class SafeTrainingServiceImpl extends ServiceImpl<SafeTrainingMapper, SafeTraining> implements SafeTrainingService { @Autowired private SafeTrainingMapper safeTrainingMapper; @Autowired private SafeTrainingFileMapper safeTrainingFileMapper; @Autowired private SafeTrainingDetailsMapper safeTrainingDetailsMapper; @Override public IPage<SafeTrainingDto> pageSafeTraining(Page page, SafeTrainingDto safeTrainingDto) { return safeTrainingMapper.pageSafeTraining(page, safeTrainingDto); } @Override public int addOrUpdate(SafeTraining safeTraining) { if (ObjectUtils.isNull(safeTraining.getId())) { String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyMMdd")); // æ¥è¯¢ä»æ¥å·²åå¨çæå¤§è¯¾ç¨ç¼å· QueryWrapper<SafeTraining> queryWrapper = new QueryWrapper<>(); queryWrapper.likeRight("course_code", datePrefix) .orderByDesc("course_code") .last("LIMIT 1"); SafeTraining lastSafeTraining = safeTrainingMapper.selectOne(queryWrapper); int sequenceNumber = 1; // é»è®¤åºå· if (lastSafeTraining != null && lastSafeTraining.getCourseCode() != null) { String lastNo = lastSafeTraining.getCourseCode().toString(); if (lastNo.startsWith(datePrefix)) { String seqStr = lastNo.substring(datePrefix.length()); try { sequenceNumber = Integer.parseInt(seqStr) + 1; } catch (NumberFormatException e) { sequenceNumber = 1; } } } // çæå®æ´ç课ç¨ç¼å· String no = "KC-" + String.format("%s%03d", datePrefix, sequenceNumber); safeTraining.setCourseCode(no); } //æ ¹æ®æ¶é´å¤æå¹è®ç¶æ String trainingDate = safeTraining.getTrainingDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); LocalDateTime openingTime = LocalDateTime.parse((trainingDate + safeTraining.getOpeningTime()), DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss")); LocalDateTime endTime = LocalDateTime.parse((trainingDate + safeTraining.getEndTime()), DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss")); if (LocalDateTime.now().isBefore(openingTime)) { //æªå¼å§ safeTraining.setState(0); } else if (LocalDateTime.now().isAfter(endTime)) { //å·²ç»æ safeTraining.setState(2); } else { //è¿è¡ä¸ safeTraining.setState(1); } //æ°å¢ææ´æ° saveOrUpdate(safeTraining); return 0; } @Override public SafeTrainingDto getSafeTraining(Long id) { //ä¸»è¡¨æ°æ® SafeTrainingDto safeTrainingDto = safeTrainingMapper.getSafeTraining(id); //éä»¶ List<SafeTrainingFile> safeTrainingFiles = safeTrainingFileMapper.selectList(Wrappers.<SafeTrainingFile>lambdaQuery().eq(SafeTrainingFile::getSafeTrainingId, id)); safeTrainingDto.setSafeTrainingFileList(safeTrainingFiles); //å¹è®è®°å½è¯¦æ List<SafeTrainingDetailsDto> safeTrainingDetailsDto = safeTrainingDetailsMapper.getSafeTraining(id); safeTrainingDto.setSafeTrainingDetailsDtoList(safeTrainingDetailsDto); return safeTrainingDto; } @Override public int saveSafeTraining(SafeTrainingDto safeTrainingDto) { //æ´æ°ä¸»è¡¨ safeTrainingMapper.updateById(safeTrainingDto); //æ´æ°å¹è®è®°å½è¯¦æ safeTrainingDto.getSafeTrainingDetailsDtoList().forEach(safeTrainingDetailsDto -> { safeTrainingDetailsMapper.updateById(safeTrainingDetailsDto); }); return 0; } @Override public int delSafeTraining(List<Integer> ids) { //å é¤ä¸»è¡¨ safeTrainingMapper.deleteBatchIds(ids); //å é¤éä»¶ safeTrainingFileMapper.delete(Wrappers.<SafeTrainingFile>lambdaQuery().in(SafeTrainingFile::getSafeTrainingId, ids)); //å é¤å¹è®è®°å½ safeTrainingDetailsMapper.delete(Wrappers.<SafeTrainingDetails>lambdaQuery().in(SafeTrainingDetails::getSafeTrainingId, ids)); return 0; } @Override public void export(HttpServletResponse response, Long id) { SafeTrainingDto safeTrainingDto = safeTrainingMapper.getSafeTraining(id); List<SafeTrainingDetailsDto> safeTrainingDetailsDtoList = safeTrainingDetailsMapper.getSafeTraining(id); InputStream inputStream = this.getClass().getResourceAsStream("/static/safe-training.docx"); Configure configure = Configure.builder() .bind("safeTrainingDetailsDtoList", new HackLoopTableRenderPolicy()) .build(); XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( new HashMap<String, Object>() {{ put("safeTrainingDto", safeTrainingDto); put("safeTrainingDetailsDtoList", safeTrainingDetailsDtoList); }}); try { response.setContentType("application/msword"); String fileName = URLEncoder.encode( safeTrainingDto.getCourseCode() + "å¹è®ä¸èæ ¸è®¡å", "UTF-8"); response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".docx"); OutputStream os = response.getOutputStream(); template.write(os); os.flush(); os.close(); inputStream.close(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("导åºå¤±è´¥"); } } } src/main/resources/mapper/safe/SafeAccidentMapper.xml
@@ -35,13 +35,13 @@ and sa.accident_code like concat('%', #{c.accidentCode}, '%') </if> <if test="c.accidentName != null and c.accidentName != ''"> and sa.accident_name like concat('%', #{accidentName}, '%') and sa.accident_name like concat('%', #{c.accidentName}, '%') </if> <if test="c.accidentType != null and c.accidentType != ''"> and sa.accident_type like concat('%', #{accidentType}, '%') and sa.accident_type like concat('%', #{c.accidentType}, '%') </if> <if test="c.accidentGrade != null and c.accidentGrade != ''"> and sa.accident_grade like concat('%', #{accidentGrade}, '%') and sa.accident_grade like concat('%', #{c.accidentGrade}, '%') </if> </select> src/main/resources/mapper/safe/SafeTrainingDetailsMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,37 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.safe.mapper.SafeTrainingDetailsMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.safe.pojo.SafeTrainingDetails"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="safe_training_id" property="safeTrainingId"/> <result column="examination_results" property="examinationResults"/> <result column="create_time" property="createTime"/> <result column="create_user" property="createUser"/> <result column="update_time" property="updateTime"/> <result column="update_user" property="updateUser"/> <result column="tenant_id" property="tenantId"/> </resultMap> <select id="getSafeTraining" resultType="com.ruoyi.safe.dto.SafeTrainingDetailsDto"> select std.*, su.user_name, su.nick_name, su.phonenumber from safe_training_details std left join sys_user su on std.user_id = su.user_id where std.safe_training_id = #{id} </select> <select id="pageDetails" resultType="com.ruoyi.safe.pojo.SafeTrainingDetails"> select std.*, st.* from safe_training_details std left join safe_training st on std.safe_training_id = st.id where std.user_id = #{c.userId} <if test="c.trainingDate != null"> and st.training_date = #{c.trainingDate} </if> </select> </mapper> src/main/resources/mapper/safe/SafeTrainingFileMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.safe.mapper.SafeTrainingFileMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.safe.pojo.SafeTrainingFile"> <id column="id" property="id" /> <result column="safe_training_id" property="safeTrainingId" /> <result column="name" property="name" /> <result column="url" property="url" /> <result column="file_size" property="fileSize" /> <result column="create_time" property="createTime" /> <result column="create_user" property="createUser" /> <result column="update_time" property="updateTime" /> <result column="update_user" property="updateUser" /> <result column="tenant_id" property="tenantId" /> </resultMap> </mapper> src/main/resources/mapper/safe/SafeTrainingMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,59 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.ruoyi.safe.mapper.SafeTrainingMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.safe.pojo.SafeTraining"> <id column="id" property="id" /> <result column="course_code" property="courseCode" /> <result column="training_objectives" property="trainingObjectives" /> <result column="training_content" property="trainingContent" /> <result column="training_mode" property="trainingMode" /> <result column="state" property="state" /> <result column="participants" property="participants" /> <result column="place_training" property="placeTraining" /> <result column="training_lecturer" property="trainingLecturer" /> <result column="training_date" property="trainingDate" /> <result column="opening_time" property="openingTime" /> <result column="end_time" property="endTime" /> <result column="project_credits" property="projectCredits" /> <result column="class_hour" property="classHour" /> <result column="assessment_method" property="assessmentMethod" /> <result column="comprehensive_assessment" property="comprehensiveAssessment" /> <result column="remarks" property="remarks" /> <result column="assessment_user_id" property="assessmentUserId" /> <result column="assessment_date" property="assessmentDate" /> <result column="training_abstract" property="trainingAbstract" /> <result column="create_time" property="createTime" /> <result column="create_user" property="createUser" /> <result column="update_time" property="updateTime" /> <result column="update_user" property="updateUser" /> <result column="tenant_id" property="tenantId" /> </resultMap> <select id="pageSafeTraining" resultType="com.ruoyi.safe.dto.SafeTrainingDto"> select st.*, su.nick_name assessmentUserName, count(std.id) nums from safe_training st left join safe_training_details std on std.safe_training_id = st.id left join sys_user su on st.assessment_user_id = su.user_id where 1=1 <if test="c.placeTraining != null and c.placeTraining != ''"> and st.place_training like concat('%', #{c.placeTraining}, '%') </if> <if test="c.trainingDate != null and c.trainingDate != ''"> and st.training_date = #{c.trainingDate} </if> <if test="c.state != null and c.state != ''"> and st.state like concat('%', #{c.state}, '%') </if> </select> <select id="getSafeTraining" resultType="com.ruoyi.safe.dto.SafeTrainingDto"> select st.*, su.nick_name assessmentUserName from safe_training st left join sys_user su on st.assessment_user_id = su.user_id where st.id=#{id} </select> </mapper> src/main/resources/static/safe-training-details.docxBinary files differ
src/main/resources/static/safe-training.docxBinary files differ