Forráskód Böngészése

重构-窨井子系统-案件流转管理

zengy 19 órája
szülő
commit
8a41360991

+ 3 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/alarm/domain/AlarmData.java

@@ -6,6 +6,7 @@ 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 com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -63,8 +64,10 @@ public class AlarmData implements Serializable {
     @ApiModelProperty(value = "报警等级:alarm_level 字典编码(1最高~4最低),与 sys_dict_data.dict_value 对齐")
     private String alarmLevel;
 
+    // 前端已不再展示偏差率:仅允许写入,不再作为接口出参返回
     @TableField(value = "deviation_ratio")
     @ApiModelProperty(value = "偏差率(百分比)")
+    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
     private BigDecimal deviationRatio;
 
     @TableField(value = "alarm_status")

+ 1 - 1
pipe-network-service/zksy-system/src/main/java/com/zksy/base/alarm/dto/AlarmReviewQuery.java

@@ -13,7 +13,7 @@ public class AlarmReviewQuery {
     @ApiModelProperty("报警编码,精确匹配;燃气菜单限定 WARN-GAS-CONCENTRATION")
     @Size(max = 100)
     private String warningCode;
-    @ApiModelProperty("设备编码/名称,模糊匹配")
+    @ApiModelProperty("报警单号 / 设备编码 / 设备名称,模糊匹配")
     @Size(max = 100)
     private String keyword;
     @ApiModelProperty("报警等级:alarm_level 字典启用值,保留1-4编码,1级最高")

+ 4 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/alarm/dto/AlarmVO.java

@@ -1,6 +1,7 @@
 package com.zksy.base.alarm.dto;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zksy.ops.dto.WorkOrderDetailVO;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import java.time.LocalDateTime;
@@ -9,6 +10,7 @@ import java.time.LocalDateTime;
 @EqualsAndHashCode(callSuper = true)
 public class AlarmVO extends AlarmReviewVO {
     private Integer equipmentTypeId;
+    private String equipmentTypeName;
     private Integer deviceAlarmStatus;
     private Integer displayStatus;
     private String displayStatusText;
@@ -17,6 +19,8 @@ public class AlarmVO extends AlarmReviewVO {
     private Integer orderStatus;
     private String orderStatusName;
     private String receiveUserName;
+    /** 按 alarm_data.work_order_id 关联出的工单详情(含处置日志),供案件流转等页面直接使用 */
+    private WorkOrderDetailVO workOrderDetail;
     private String monitorStatusName;
     private String latestOperation;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")

+ 27 - 2
pipe-network-service/zksy-system/src/main/java/com/zksy/base/alarm/service/AlarmOperationsService.java

@@ -7,6 +7,8 @@ import com.zksy.base.alarm.enums.*;
 import com.zksy.base.alarm.mapper.AlarmLogMapper;
 import com.zksy.base.alarm.mapper.AlarmOperationsMapper;
 import com.zksy.base.enums.AlarmStatusEnum;
+import com.zksy.ops.dto.WorkOrderDetailVO;
+import com.zksy.ops.service.WorkOrderService;
 import com.zksy.common.core.domain.entity.SysDictData;
 import com.zksy.common.exception.ServiceException;
 import com.zksy.ops.enums.WorkOrderStatusEnum;
@@ -28,6 +30,7 @@ public class AlarmOperationsService {
     private final AlarmReviewScopeService scope;
     private final AlarmLogMapper logs;
     private final ISysDictDataService dictDataService;
+    private final WorkOrderService workOrderService;
 
     public Page<AlarmVO> page(AlarmQuery query) {
         validate(query);
@@ -54,9 +57,14 @@ public class AlarmOperationsService {
         return detailInScope(id, query.toAlarmQuery(), scope.resolveMobile(query));
     }
     public List<AlarmLog> mobileLogs(String id, MobileAlarmQuery query) {
-        mobileDetail(id, query);
+        requireMobileAlarm(id, query);
         return history(id);
     }
+    private void requireMobileAlarm(String id, MobileAlarmQuery query) {
+        if (mapper.selectMobileDetail(id, query.toAlarmQuery(), scope.resolveMobile(query)) == null) {
+            throw new ServiceException("报警不存在或不属于当前管理范围");
+        }
+    }
     private Page<AlarmVO> pageInScope(AlarmQuery query, List<Integer> typeIds) {
         validate(query);
         Page<AlarmVO> page = mapper.selectMobilePage(new Page<>(query.getPageNum(), query.getPageSize()), query, typeIds);
@@ -67,14 +75,26 @@ public class AlarmOperationsService {
         AlarmVO alarm = mapper.selectDetail(id, query, scope.resolveOperations(query));
         if (alarm == null) throw new ServiceException("报警不存在或不属于当前管理范围");
         labels(alarm);
+        fillWorkOrder(alarm);
         return alarm;
     }
     private AlarmVO detailInScope(String id, AlarmQuery query, List<Integer> typeIds) {
         AlarmVO alarm = mapper.selectMobileDetail(id, query, typeIds);
         if (alarm == null) throw new ServiceException("报警不存在或不属于当前管理范围");
         labels(alarm);
+        fillWorkOrder(alarm);
         return alarm;
     }
+    /** 按 alarm_data.work_order_id 关联查询 work_order(含处置日志),避免前端依赖工单模块权限。 */
+    private void fillWorkOrder(AlarmVO alarm) {
+        if (alarm.getWorkOrderId() == null) return;
+        try {
+            WorkOrderDetailVO detail = workOrderService.getDetail(alarm.getWorkOrderId());
+            alarm.setWorkOrderDetail(detail);
+        } catch (RuntimeException ignored) {
+            // 工单已被删除或不可见时不阻断报警详情
+        }
+    }
     public Page<AlarmVO> reminders(AlarmQuery query) {
         // 提醒只展示未处理报警,不能通过请求参数切换为历史已恢复事件。
         query.setAlarmStatus(AlarmRecordStatusEnum.UNHANDLED.getCode());
@@ -84,9 +104,14 @@ public class AlarmOperationsService {
         return page;
     }
     public List<AlarmLog> logs(String id, AlarmQuery query) {
-        detail(id, query);
+        requireAlarm(id, query);
         return history(id);
     }
+    private void requireAlarm(String id, AlarmQuery query) {
+        if (mapper.selectDetail(id, query, scope.resolveOperations(query)) == null) {
+            throw new ServiceException("报警不存在或不属于当前管理范围");
+        }
+    }
     private List<AlarmLog> history(String id) {
         List<AlarmLog> result = logs.selectHistory(id);
         result.forEach(log -> { AlarmLogOperTypeEnum type = AlarmLogOperTypeEnum.fromCode(log.getOperType());

+ 4 - 1
pipe-network-service/zksy-system/src/main/resources/mapper/base/AlarmOperationsMapper.xml

@@ -47,13 +47,14 @@
         FROM app_user.alarm_data a
         LEFT JOIN LATERAL (SELECT b.* FROM app_user.equipment_base b WHERE b.equipment_code = a.device_code
             ORDER BY b.equipment_id LIMIT 1) e ON true
+        LEFT JOIN app_user.equipment_type t ON t.id = e.equipment_type_id
         LEFT JOIN LATERAL (SELECT s.alarm_status FROM app_user.equipment_status s WHERE s.equipment_id = e.equipment_id AND s.del_flag = '0' ORDER BY s.status_update_time DESC NULLS LAST, s.status_id DESC LIMIT 1) st ON true
         LEFT JOIN app_user.work_order w ON w.order_id = a.work_order_id
         LEFT JOIN app_user.sys_user u ON u.user_id = w.receive_user
     </sql>
     <sql id="columns">
         a.*, e.equipment_id, e.equipment_name AS current_device_name, e.equipment_location,
-        e.equipment_type_id, e.equipment_image, e.longitude, e.latitude, st.alarm_status AS device_alarm_status,
+        e.equipment_type_id, t.type_name AS equipment_type_name, e.equipment_image, e.longitude, e.latitude, st.alarm_status AS device_alarm_status,
         w.order_no, w.order_status, w.plan_finish_time, COALESCE(u.nick_name,u.user_name) AS receive_user_name,
         (SELECT wtt.warning_unit FROM app_user.equipment_warning_type ewt
             JOIN app_user.warning_type wtt ON wtt.id = ewt.warning_type_id
@@ -62,6 +63,8 @@
     <resultMap id="alarm" type="com.zksy.base.alarm.dto.AlarmVO" autoMapping="true">
         <id property="id" column="id"/>
         <result property="deviceName" column="current_device_name"/>
+        <result property="equipmentTypeName" column="equipment_type_name"/>
+        <result property="workOrderId" column="work_order_id"/>
     </resultMap>
     <sql id="filters">
         <include refid="com.zksy.base.alarm.mapper.AlarmReviewMapper.scope"/>

+ 1 - 0
pipe-network-service/zksy-system/src/main/resources/mapper/base/AlarmReviewMapper.xml

@@ -23,6 +23,7 @@
         <include refid="scope"/>
         <if test="query.keyword != null and query.keyword != ''">
             AND (a.device_code ILIKE CONCAT('%', #{query.keyword}, '%')
+                OR a.alarm_no ILIKE CONCAT('%', #{query.keyword}, '%')
                 OR EXISTS (SELECT 1 FROM app_user.equipment_base e WHERE e.equipment_code = a.device_code
                     AND e.equipment_name ILIKE CONCAT('%', #{query.keyword}, '%')))
         </if>