|
@@ -9,10 +9,14 @@ import com.zksy.base.domain.EquipmentBase;
|
|
|
import com.zksy.base.domain.EquipmentType;
|
|
import com.zksy.base.domain.EquipmentType;
|
|
|
import com.zksy.base.mapper.EquipmentBaseMapper;
|
|
import com.zksy.base.mapper.EquipmentBaseMapper;
|
|
|
import com.zksy.base.mapper.EquipmentTypeMapper;
|
|
import com.zksy.base.mapper.EquipmentTypeMapper;
|
|
|
|
|
+import com.zksy.ops.domain.WorkOrder;
|
|
|
|
|
+import com.zksy.ops.enums.WorkOrderStatusEnum;
|
|
|
|
|
+import com.zksy.ops.mapper.WorkOrderMapper;
|
|
|
import com.zksy.common.annotation.Anonymous;
|
|
import com.zksy.common.annotation.Anonymous;
|
|
|
import com.zksy.common.core.domain.AjaxResult;
|
|
import com.zksy.common.core.domain.AjaxResult;
|
|
|
import io.swagger.annotations.Api;
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
|
@@ -23,6 +27,7 @@ import java.util.stream.Collectors;
|
|
|
/**
|
|
/**
|
|
|
* 管线压力异常报警
|
|
* 管线压力异常报警
|
|
|
*/
|
|
*/
|
|
|
|
|
+@Slf4j
|
|
|
@RestController
|
|
@RestController
|
|
|
@RequestMapping("/api/pressure-alarm")
|
|
@RequestMapping("/api/pressure-alarm")
|
|
|
@Api(tags = "燃气监测-压力报警")
|
|
@Api(tags = "燃气监测-压力报警")
|
|
@@ -31,6 +36,8 @@ public class PressureAlarmController {
|
|
|
@Autowired private AlarmDataService alarmDataService;
|
|
@Autowired private AlarmDataService alarmDataService;
|
|
|
@Autowired private EquipmentTypeMapper equipmentTypeMapper;
|
|
@Autowired private EquipmentTypeMapper equipmentTypeMapper;
|
|
|
@Autowired private EquipmentBaseMapper equipmentBaseMapper;
|
|
@Autowired private EquipmentBaseMapper equipmentBaseMapper;
|
|
|
|
|
+ @Autowired private com.zksy.ops.service.WorkOrderService workOrderService;
|
|
|
|
|
+ @Autowired private WorkOrderMapper workOrderMapper;
|
|
|
|
|
|
|
|
private static final DateTimeFormatter FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
private static final DateTimeFormatter FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
|
@@ -49,7 +56,7 @@ public class PressureAlarmController {
|
|
|
.collect(Collectors.toMap(EquipmentBase::getEquipmentCode, e -> e, (a, b) -> a));
|
|
.collect(Collectors.toMap(EquipmentBase::getEquipmentCode, e -> e, (a, b) -> a));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private Map<String, Object> toVo(AlarmData a, Map<String, EquipmentBase> eqMap) {
|
|
|
|
|
|
|
+ private Map<String, Object> toVo(AlarmData a, Map<String, EquipmentBase> eqMap, WorkOrder order) {
|
|
|
EquipmentBase eq = eqMap.get(a.getDeviceCode());
|
|
EquipmentBase eq = eqMap.get(a.getDeviceCode());
|
|
|
Map<String, Object> m = new LinkedHashMap<>();
|
|
Map<String, Object> m = new LinkedHashMap<>();
|
|
|
m.put("id", a.getId()); m.put("deviceCode", a.getDeviceCode());
|
|
m.put("id", a.getId()); m.put("deviceCode", a.getDeviceCode());
|
|
@@ -62,9 +69,25 @@ public class PressureAlarmController {
|
|
|
m.put("statusText", a.getAlarmStatus() != null && a.getAlarmStatus() == 0 ? "待处理" : "已处理");
|
|
m.put("statusText", a.getAlarmStatus() != null && a.getAlarmStatus() == 0 ? "待处理" : "已处理");
|
|
|
m.put("resolveTime", a.getHandleTime() != null ? a.getHandleTime().format(FMT) : null);
|
|
m.put("resolveTime", a.getHandleTime() != null ? a.getHandleTime().format(FMT) : null);
|
|
|
m.put("handler", a.getHandleUser()); m.put("remark", a.getHandleRemark());
|
|
m.put("handler", a.getHandleUser()); m.put("remark", a.getHandleRemark());
|
|
|
|
|
+ m.put("hasWorkOrder", order != null);
|
|
|
|
|
+ m.put("workOrderId", order == null ? null : order.getOrderId());
|
|
|
|
|
+ m.put("workOrderStatus", order == null ? null : order.getOrderStatus());
|
|
|
|
|
+ m.put("workOrderStatusText", order == null ? null : WorkOrderStatusEnum.getDescByCode(order.getOrderStatus()));
|
|
|
return m;
|
|
return m;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private Map<String, WorkOrder> loadWorkOrderMap(Collection<String> alarmIds) {
|
|
|
|
|
+ if (alarmIds == null || alarmIds.isEmpty()) {
|
|
|
|
|
+ return Collections.emptyMap();
|
|
|
|
|
+ }
|
|
|
|
|
+ List<WorkOrder> orders = workOrderMapper.selectList(new LambdaQueryWrapper<WorkOrder>()
|
|
|
|
|
+ .in(WorkOrder::getAlarmId, alarmIds)
|
|
|
|
|
+ .orderByDesc(WorkOrder::getOrderId));
|
|
|
|
|
+ return orders.stream()
|
|
|
|
|
+ .filter(order -> order.getAlarmId() != null)
|
|
|
|
|
+ .collect(Collectors.toMap(WorkOrder::getAlarmId, order -> order, (first, ignored) -> first));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@GetMapping("/equipment")
|
|
@GetMapping("/equipment")
|
|
|
@ApiOperation("压力设备列表(含最新报警值)") @Anonymous
|
|
@ApiOperation("压力设备列表(含最新报警值)") @Anonymous
|
|
|
public AjaxResult equipment() {
|
|
public AjaxResult equipment() {
|
|
@@ -76,6 +99,9 @@ public class PressureAlarmController {
|
|
|
.orderByDesc(AlarmData::getAlarmTime));
|
|
.orderByDesc(AlarmData::getAlarmTime));
|
|
|
Map<String, AlarmData> latestMap = all.stream()
|
|
Map<String, AlarmData> latestMap = all.stream()
|
|
|
.collect(Collectors.toMap(AlarmData::getDeviceCode, a -> a, (a, b) -> a));
|
|
.collect(Collectors.toMap(AlarmData::getDeviceCode, a -> a, (a, b) -> a));
|
|
|
|
|
+ // 设备列表只展示每个设备最新报警的工单状态,避免把全部历史报警 ID 拼成大 IN 条件。
|
|
|
|
|
+ Map<String, WorkOrder> orderMap = loadWorkOrderMap(latestMap.values().stream()
|
|
|
|
|
+ .map(AlarmData::getId).filter(Objects::nonNull).collect(Collectors.toSet()));
|
|
|
List<Map<String, Object>> rows = new ArrayList<>();
|
|
List<Map<String, Object>> rows = new ArrayList<>();
|
|
|
for (EquipmentBase eq : eqs) {
|
|
for (EquipmentBase eq : eqs) {
|
|
|
AlarmData latest = latestMap.get(eq.getEquipmentCode());
|
|
AlarmData latest = latestMap.get(eq.getEquipmentCode());
|
|
@@ -87,6 +113,12 @@ public class PressureAlarmController {
|
|
|
m.put("latestThreshold", latest != null ? latest.getMaxValue() : null);
|
|
m.put("latestThreshold", latest != null ? latest.getMaxValue() : null);
|
|
|
m.put("latestAlarmTime", latest != null && latest.getAlarmTime() != null ? latest.getAlarmTime().format(FMT) : null);
|
|
m.put("latestAlarmTime", latest != null && latest.getAlarmTime() != null ? latest.getAlarmTime().format(FMT) : null);
|
|
|
m.put("latestAlarmLevel", latest != null ? latest.getAlarmLevel() : null);
|
|
m.put("latestAlarmLevel", latest != null ? latest.getAlarmLevel() : null);
|
|
|
|
|
+ m.put("latestAlarmId", latest == null ? null : latest.getId());
|
|
|
|
|
+ WorkOrder order = latest == null ? null : orderMap.get(latest.getId());
|
|
|
|
|
+ m.put("latestHasWorkOrder", order != null);
|
|
|
|
|
+ m.put("latestWorkOrderId", order == null ? null : order.getOrderId());
|
|
|
|
|
+ m.put("latestWorkOrderStatus", order == null ? null : order.getOrderStatus());
|
|
|
|
|
+ m.put("latestWorkOrderStatusText", order == null ? null : WorkOrderStatusEnum.getDescByCode(order.getOrderStatus()));
|
|
|
rows.add(m);
|
|
rows.add(m);
|
|
|
}
|
|
}
|
|
|
return AjaxResult.success(rows);
|
|
return AjaxResult.success(rows);
|
|
@@ -112,7 +144,11 @@ public class PressureAlarmController {
|
|
|
qw.orderByDesc(AlarmData::getAlarmTime);
|
|
qw.orderByDesc(AlarmData::getAlarmTime);
|
|
|
Page<AlarmData> page = alarmDataService.page(new Page<>(pageNum, pageSize), qw);
|
|
Page<AlarmData> page = alarmDataService.page(new Page<>(pageNum, pageSize), qw);
|
|
|
Map<String, EquipmentBase> eqMap = loadEquipMap();
|
|
Map<String, EquipmentBase> eqMap = loadEquipMap();
|
|
|
- List<Map<String, Object>> rows = page.getRecords().stream().map(a -> toVo(a, eqMap)).collect(Collectors.toList());
|
|
|
|
|
|
|
+ Map<String, WorkOrder> orderMap = loadWorkOrderMap(page.getRecords().stream()
|
|
|
|
|
+ .map(AlarmData::getId).filter(Objects::nonNull).collect(Collectors.toSet()));
|
|
|
|
|
+ List<Map<String, Object>> rows = page.getRecords().stream()
|
|
|
|
|
+ .map(a -> toVo(a, eqMap, orderMap.get(a.getId())))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
Map<String, Object> result = new LinkedHashMap<>();
|
|
Map<String, Object> result = new LinkedHashMap<>();
|
|
|
result.put("records", rows); result.put("total", page.getTotal());
|
|
result.put("records", rows); result.put("total", page.getTotal());
|
|
|
return AjaxResult.success(result);
|
|
return AjaxResult.success(result);
|
|
@@ -135,16 +171,40 @@ public class PressureAlarmController {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@PutMapping("/resolve/{id}") @ApiOperation("标记已处理") @Anonymous
|
|
@PutMapping("/resolve/{id}") @ApiOperation("标记已处理") @Anonymous
|
|
|
- public AjaxResult resolve(@PathVariable String id) {
|
|
|
|
|
|
|
+ public AjaxResult resolve(@PathVariable String id,
|
|
|
|
|
+ @RequestParam(required = false) String handleRemark) {
|
|
|
AlarmData e = alarmDataService.getById(id);
|
|
AlarmData e = alarmDataService.getById(id);
|
|
|
if (e == null) return AjaxResult.error("记录不存在");
|
|
if (e == null) return AjaxResult.error("记录不存在");
|
|
|
e.setAlarmStatus(1); e.setHandleTime(java.time.LocalDateTime.now()); e.setHandleUser("当前用户");
|
|
e.setAlarmStatus(1); e.setHandleTime(java.time.LocalDateTime.now()); e.setHandleUser("当前用户");
|
|
|
|
|
+ e.setHandleRemark(handleRemark == null || handleRemark.trim().isEmpty() ? "标记已处理" : handleRemark.trim());
|
|
|
alarmDataService.updateById(e);
|
|
alarmDataService.updateById(e);
|
|
|
return AjaxResult.success("已处理");
|
|
return AjaxResult.success("已处理");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- @PostMapping("/dispatch/{id}") @ApiOperation("派发工单(伪)") @Anonymous
|
|
|
|
|
- public AjaxResult dispatch(@PathVariable String id) {
|
|
|
|
|
- return AjaxResult.success("工单已派发(伪)");
|
|
|
|
|
|
|
+ @PostMapping("/dispatch/{id}") @ApiOperation("将管线压力报警转为运维工单") @Anonymous
|
|
|
|
|
+ public AjaxResult dispatch(@PathVariable String id,
|
|
|
|
|
+ @RequestBody(required = false) Map<String, Object> body) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ Integer orderLevel = parseOrderLevel(body);
|
|
|
|
|
+ String orderDesc = body == null || body.get("orderDesc") == null
|
|
|
|
|
+ ? null : body.get("orderDesc").toString();
|
|
|
|
|
+ Long orderId = workOrderService.createWorkOrderFromAlarm(id, orderLevel, orderDesc);
|
|
|
|
|
+ return AjaxResult.success("工单派发成功", orderId);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("管线压力报警转工单失败:alarmId={}", id, e);
|
|
|
|
|
+ return AjaxResult.error("工单派发失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private Integer parseOrderLevel(Map<String, Object> body) {
|
|
|
|
|
+ if (body == null || body.get("orderLevel") == null
|
|
|
|
|
+ || body.get("orderLevel").toString().trim().isEmpty()) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ return Integer.valueOf(body.get("orderLevel").toString());
|
|
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
|
|
+ throw new IllegalArgumentException("工单优先级格式不正确");
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|