| src/main/java/com/ruoyi/safe/controller/SafeTrainingController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/safe/dto/SafeTrainingDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/safe/mapper/SafeTrainingMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/safe/service/impl/SafeTrainingServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/safe/SafeTrainingMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/safe/controller/SafeTrainingController.java
@@ -1,6 +1,8 @@ package com.ruoyi.safe.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; import com.ruoyi.framework.web.domain.R; @@ -37,6 +39,7 @@ @GetMapping("/page") @Operation(summary = "分页查询") public R page(Page page, SafeTrainingDto safeTrainingDto) { safeTrainingDto.setCurrentUserId(SecurityUtils.getUserId()); return R.ok(safeTrainingService.pageSafeTraining(page, safeTrainingDto)); } @@ -51,6 +54,17 @@ @Log(title = "安全培训", businessType = BusinessType.INSERT) @PostMapping ("/sign") public R sign(@RequestBody SafeTrainingDetails safeTrainingDetails) { if (safeTrainingDetails.getSafeTrainingId() == null || safeTrainingDetails.getUserId() == null) { return R.fail("签到信息不完整"); } long count = safeTrainingDetailsService.count( Wrappers.<SafeTrainingDetails>lambdaQuery() .eq(SafeTrainingDetails::getSafeTrainingId, safeTrainingDetails.getSafeTrainingId()) .eq(SafeTrainingDetails::getUserId, safeTrainingDetails.getUserId()) ); if (count > 0) { return R.fail("已签到,请勿重复签到"); } return R.ok(safeTrainingDetailsService.save(safeTrainingDetails)); } src/main/java/com/ruoyi/safe/dto/SafeTrainingDto.java
@@ -1,7 +1,6 @@ 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.v3.oas.annotations.media.Schema; import lombok.Data; @@ -17,6 +16,12 @@ @Schema(description = "评价人") private String assessmentUserName; @Schema(description = "当前登录用户id") private Long currentUserId; @Schema(description = "当前登录用户是否已签到") private Boolean signed; @Schema(description = "附件集合") private List<SafeTrainingFile> safeTrainingFileList; src/main/java/com/ruoyi/safe/mapper/SafeTrainingMapper.java
@@ -19,6 +19,8 @@ @Mapper public interface SafeTrainingMapper extends BaseMapper<SafeTraining> { int refreshTrainingState(); IPage<SafeTrainingDto> pageSafeTraining(Page page, @Param("c") SafeTrainingDto safeTrainingDto); SafeTrainingDto getSafeTraining(@Param("id") Long id); src/main/java/com/ruoyi/safe/service/impl/SafeTrainingServiceImpl.java
@@ -51,6 +51,7 @@ @Override public IPage<SafeTrainingDto> pageSafeTraining(Page page, SafeTrainingDto safeTrainingDto) { safeTrainingMapper.refreshTrainingState(); return safeTrainingMapper.pageSafeTraining(page, safeTrainingDto); } @@ -84,10 +85,11 @@ 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)) { LocalDateTime now = LocalDateTime.now(); if (now.isBefore(openingTime)) { //未开始 safeTraining.setState(0); } else if (LocalDateTime.now().isAfter(endTime)) { } else if (!now.isBefore(endTime)) { //已结束 safeTraining.setState(2); } else { @@ -101,6 +103,7 @@ @Override public SafeTrainingDto getSafeTraining(Long id) { safeTrainingMapper.refreshTrainingState(); //主表数据 SafeTrainingDto safeTrainingDto = safeTrainingMapper.getSafeTraining(id); //附件 src/main/resources/mapper/safe/SafeTrainingMapper.xml
@@ -30,13 +30,42 @@ <result column="update_user" property="updateUser" /> <result column="tenant_id" property="tenantId" /> </resultMap> <sql id="trainingStateExpression"> CASE WHEN CURRENT_TIMESTAMP() < STR_TO_DATE(CONCAT(training_date, ' ', opening_time), '%Y-%m-%d %H:%i:%s') THEN 0 WHEN CURRENT_TIMESTAMP() >= STR_TO_DATE(CONCAT(training_date, ' ', end_time), '%Y-%m-%d %H:%i:%s') THEN 2 ELSE 1 END </sql> <update id="refreshTrainingState"> UPDATE safe_training SET state = <include refid="trainingStateExpression"/> WHERE training_date IS NOT NULL AND opening_time IS NOT NULL AND end_time IS NOT NULL AND STR_TO_DATE(CONCAT(training_date, ' ', opening_time), '%Y-%m-%d %H:%i:%s') IS NOT NULL AND STR_TO_DATE(CONCAT(training_date, ' ', end_time), '%Y-%m-%d %H:%i:%s') IS NOT NULL AND ( state IS NULL OR state != <include refid="trainingStateExpression"/> ) </update> <select id="pageSafeTraining" resultType="com.ruoyi.safe.dto.SafeTrainingDto"> SELECT st.*, su.nick_name AS assessmentUserName, COUNT(std.id) AS nums EXISTS( SELECT 1 FROM safe_training_details signed_std WHERE signed_std.safe_training_id = st.id AND signed_std.user_id = #{c.currentUserId} ) AS signed, ( SELECT COUNT(1) FROM safe_training_details nums_std WHERE nums_std.safe_training_id = st.id ) AS 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 st.state = #{c.state} <if test="c.placeTraining != null and c.placeTraining != ''">