2 Commits 027c7fba94 ... 8f60126e08

Author SHA1 Message Date
  gao 8f60126e08 通知公告模块:修复新增通知bug,完善预览功能 1 day ago
  gao df6e24dfdd 安全风险预警模块,修复问题发现时间显示 1 day ago

+ 1 - 0
supervision-admin/src/main/java/com/supervision/web/noticeManage/entity/Notice.java

@@ -11,4 +11,5 @@ public class Notice {
     private String attachment; // 存放前端传过来的文件URL
     private LocalDateTime createTime;
     private LocalDateTime updateTime;
+    private String fileType;
 }

+ 41 - 20
supervision-system/src/main/java/com/supervision/safety/mapper/SafetyIssueMapper.java

@@ -1,6 +1,8 @@
 package com.supervision.safety.mapper;
 
-import com.supervision.safety.domain.*;
+import com.supervision.safety.domain.IssueStatus;
+import com.supervision.safety.domain.RiskLevel;
+import com.supervision.safety.domain.SafetyIssue;
 import org.apache.ibatis.annotations.*;
 import org.apache.ibatis.type.EnumTypeHandler;
 
@@ -11,25 +13,44 @@ import java.util.Map;
 @Mapper
 public interface SafetyIssueMapper {
 
-    // === 基础 ===
+    // ========= 基础 =========
     @Select("SELECT id, description, risk_level, status, found_at, rectified_at, deleted, create_time, update_time " +
             "FROM safety_issue WHERE id=#{id} AND deleted=0")
-    @Results(id="IssueMap", value = {
-            @Result(column="risk_level", property="riskLevel", javaType=RiskLevel.class,
-                    typeHandler=EnumTypeHandler.class),
-            @Result(column="status", property="status", javaType=IssueStatus.class,
-                    typeHandler=EnumTypeHandler.class)
+    @Results(id = "IssueMap", value = {
+            // 显式列 -> 属性映射(关键修复)
+            @Result(column = "id",           property = "id"),
+            @Result(column = "description",  property = "description"),
+            @Result(column = "risk_level",   property = "riskLevel",
+                    javaType = RiskLevel.class,  typeHandler = EnumTypeHandler.class),
+            @Result(column = "status",       property = "status",
+                    javaType = IssueStatus.class, typeHandler = EnumTypeHandler.class),
+            @Result(column = "found_at",     property = "foundAt"),
+            @Result(column = "rectified_at", property = "rectifiedAt"),
+            @Result(column = "deleted",      property = "deleted"),
+            @Result(column = "create_time",  property = "createTime"),
+            @Result(column = "update_time",  property = "updateTime")
     })
     SafetyIssue findById(@Param("id") Long id);
 
-    @Insert("INSERT INTO safety_issue(description, risk_level, status, found_at, rectified_at, deleted, create_time, update_time) " +
-            "VALUES(#{description}, #{riskLevel,typeHandler=org.apache.ibatis.type.EnumTypeHandler}, " +
-            "#{status,typeHandler=org.apache.ibatis.type.EnumTypeHandler}, #{foundAt}, #{rectifiedAt}, 0, NOW(), NOW())")
-    @Options(useGeneratedKeys = true, keyProperty = "id")
+    @Insert("INSERT INTO safety_issue " +
+            "(description, risk_level, status, found_at, rectified_at, deleted, create_time, update_time) VALUES " +
+            "(#{description}, " +
+            " #{riskLevel, typeHandler=org.apache.ibatis.type.EnumTypeHandler}, " +
+            " #{status,    typeHandler=org.apache.ibatis.type.EnumTypeHandler}, " +
+            " COALESCE(#{foundAt}, NOW()), " +     // 兜底,未传 foundAt 用当前时间
+            " #{rectifiedAt}, 0, NOW(), NOW())")
+    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
     int insert(SafetyIssue issue);
 
-    @Update("UPDATE safety_issue SET status=#{status,typeHandler=org.apache.ibatis.type.EnumTypeHandler}, " +
-            "rectified_at=#{rectifiedAt}, update_time=NOW() WHERE id=#{id} AND deleted=0")
+    @Update("UPDATE safety_issue SET " +
+            " status = #{status, typeHandler=org.apache.ibatis.type.EnumTypeHandler}, " +
+            " rectified_at = CASE " +
+            "   WHEN #{status, typeHandler=org.apache.ibatis.type.EnumTypeHandler} = 'RECTIFIED' " +
+            "     THEN COALESCE(#{rectifiedAt}, NOW()) " +  // 置为 RECTIFIED 时自动写整改时间
+            "   ELSE rectified_at " +
+            " END, " +
+            " update_time = NOW() " +
+            "WHERE id = #{id} AND deleted = 0")
     int updateStatus(@Param("id") Long id,
                      @Param("status") IssueStatus status,
                      @Param("rectifiedAt") Date rectifiedAt);
@@ -37,8 +58,8 @@ public interface SafetyIssueMapper {
     @Update("UPDATE safety_issue SET deleted=1, update_time=NOW() WHERE id=#{id} AND deleted=0")
     int logicalDelete(@Param("id") Long id);
 
-    // === 查询/分页 ===
-    @SelectProvider(type=SafetyIssueSqlProvider.class, method="searchSql")
+    // ========= 查询 / 分页 =========
+    @SelectProvider(type = SafetyIssueSqlProvider.class, method = "searchSql")
     @ResultMap("IssueMap")
     List<SafetyIssue> search(@Param("keyword") String keyword,
                              @Param("level") RiskLevel level,
@@ -48,22 +69,22 @@ public interface SafetyIssueMapper {
                              @Param("limit") int limit,
                              @Param("offset") int offset);
 
-    @SelectProvider(type=SafetyIssueSqlProvider.class, method="countSql")
+    @SelectProvider(type = SafetyIssueSqlProvider.class, method = "countSql")
     long count(@Param("keyword") String keyword,
                @Param("level") RiskLevel level,
                @Param("status") IssueStatus status,
                @Param("from") Date from,
                @Param("to") Date to);
 
-    // === 统计 ===
-    @SelectProvider(type=SafetyIssueSqlProvider.class, method="countPendingByLevelSql")
+    // ========= 统计 =========
+    @SelectProvider(type = SafetyIssueSqlProvider.class, method = "countPendingByLevelSql")
     List<Map<String, Object>> countPendingByLevel();
 
-    @SelectProvider(type=SafetyIssueSqlProvider.class, method="trendByDaySql")
+    @SelectProvider(type = SafetyIssueSqlProvider.class, method = "trendByDaySql")
     List<Map<String, Object>> trendByDay(@Param("from") Date from,
                                          @Param("to") Date to);
 
-    @SelectProvider(type=SafetyIssueSqlProvider.class, method="top5HighSql")
+    @SelectProvider(type = SafetyIssueSqlProvider.class, method = "top5HighSql")
     @ResultMap("IssueMap")
     List<SafetyIssue> top5High();
 }

+ 1 - 1
supervision-system/src/main/java/com/supervision/safety/mapper/SafetyIssueSqlProvider.java

@@ -46,4 +46,4 @@ public class SafetyIssueSqlProvider {
                 "FROM safety_issue WHERE deleted=0 AND risk_level='HIGH' AND status='PENDING' " +
                 "ORDER BY found_at DESC LIMIT 5";
     }
-}
+}