gongchunyi
4 天以前 cecd7580b5e629173bdb5b258f2676d16d580f72
fix: 安全培训考核签到修改
已修改5个文件
63 ■■■■■ 文件已修改
src/main/java/com/ruoyi/safe/controller/SafeTrainingController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/safe/dto/SafeTrainingDto.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/safe/mapper/SafeTrainingMapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/safe/service/impl/SafeTrainingServiceImpl.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/safe/SafeTrainingMapper.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | 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() &lt; STR_TO_DATE(CONCAT(training_date, ' ', opening_time), '%Y-%m-%d %H:%i:%s') THEN 0
            WHEN CURRENT_TIMESTAMP() &gt;= 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 != ''">