Bladeren bron

feature: 智能控制V2版本 第六版(日志结束)

Jayhaw 2 weken geleden
bovenliggende
commit
829ceace6b

+ 41 - 53
src/main/java/cn/sciento/farm/automationv2/api/controller/AlarmController.java

@@ -1,12 +1,22 @@
 package cn.sciento.farm.automationv2.api.controller;
 
+import cn.sciento.core.domain.Page;
+import cn.sciento.core.iam.ResourceLevel;
+import cn.sciento.core.util.Results;
 import cn.sciento.farm.automationv2.api.dto.PageRequest;
 import cn.sciento.farm.automationv2.api.dto.Result;
 import cn.sciento.farm.automationv2.app.service.AlarmNotificationService;
 import cn.sciento.farm.automationv2.app.service.AlarmRecordService;
 import cn.sciento.farm.automationv2.domain.entity.AlarmRecord;
+import cn.sciento.farm.automationv2.domain.entity.IrrigationTask;
+import cn.sciento.farm.automationv2.domain.valueobject.IrrigationTaskVO;
+import cn.sciento.swagger.annotation.Permission;
+import io.choerodon.mybatis.pagehelper.annotation.PageableDefault;
+import io.choerodon.mybatis.pagehelper.domain.Sort;
+import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -16,75 +26,53 @@ import java.util.List;
  */
 @Slf4j
 @RestController
-@RequestMapping("/api/alarms")
-@RequiredArgsConstructor
+@RequestMapping("/v2/{tenantId}/alarms")
 public class AlarmController {
 
-    private final AlarmRecordService alarmRecordService;
-    private final AlarmNotificationService alarmNotificationService;
+    private AlarmRecordService alarmRecordService;
+    private AlarmNotificationService alarmNotificationService;
 
-    /**
-     * 查询报警详情
-     */
-    @GetMapping("/{id}")
-    public Result<AlarmRecord> getAlarm(@PathVariable Long id) {
-        log.info("查询报警详情,alarmId={}", id);
-
-        AlarmRecord alarm = alarmRecordService.getAlarmById(id);
-        if (alarm == null) {
-            return Result.error("报警记录不存在");
-        }
-
-        return Result.success(alarm);
+    public AlarmController(AlarmRecordService alarmRecordService, AlarmNotificationService alarmNotificationService) {
+        this.alarmRecordService = alarmRecordService;
+        this.alarmNotificationService = alarmNotificationService;
     }
 
-    /**
-     * 分页查询报警记录
-     */
-    @GetMapping
-    public Result<List<AlarmRecord>> listAlarms(PageRequest pageRequest) {
-        log.info("分页查询报警记录,pageNum={}, pageSize={}, tenantId={}",
-                pageRequest.getPageNum(), pageRequest.getPageSize(), pageRequest.getTenantId());
-
-        List<AlarmRecord> alarms = alarmRecordService.listAlarms(
-                pageRequest.getTenantId(),
-                pageRequest.getOffset(),
-                pageRequest.getLimit()
-        );
 
-        return Result.success(alarms);
+    @ApiOperation("分页查询报警记录")
+    @Permission(level = ResourceLevel.ORGANIZATION)
+    @GetMapping
+    public ResponseEntity<Page<AlarmRecord>> page(@PathVariable Long tenantId,
+                                                  AlarmRecord alarmRecord,
+                                                  @PageableDefault(page = 1,size = 20,sort = {"creation_date"}, direction = Sort.Direction.DESC) io.choerodon.mybatis.pagehelper.domain.PageRequest pageRequest){
+        alarmRecord.setTenantId(tenantId);
+        return Results.success(alarmRecordService.page(alarmRecord,pageRequest));
     }
 
-    /**
-     * 查询未处理报警
-     */
-    @GetMapping("/unhandled")
-    public Result<List<AlarmRecord>> listUnhandledAlarms(@RequestParam Long tenantId,
-                                                          @RequestParam(defaultValue = "50") Integer limit) {
-        log.info("查询未处理报警,tenantId={}, limit={}", tenantId, limit);
-
-        List<AlarmRecord> alarms = alarmRecordService.listUnhandledAlarms(tenantId, limit);
 
-        return Result.success(alarms);
-    }
 
     /**
      * 标记报警已处理
      */
-    @PostMapping("/{id}/handle")
-    public Result<Void> handleAlarm(@PathVariable Long id,
-                                     @RequestParam Long handledBy,
+    @Permission(level = ResourceLevel.ORGANIZATION)
+    @PostMapping("/handle/{alarmId}")
+    public ResponseEntity handleAlarm(@PathVariable Long tenantId,
+                                    @PathVariable Long alarmId,
                                      @RequestParam(required = false) String remark) {
-        log.info("标记报警已处理,alarmId={}, handledBy={}, remark={}", id, handledBy, remark);
+        alarmRecordService.markAsHandled(alarmId, remark);
+        return Results.success();
 
-        try {
-            alarmRecordService.markAsHandled(id, handledBy, remark);
-            return Result.success();
+    }
 
-        } catch (Exception e) {
-            log.error("标记报警失败,alarmId={}", id, e);
-            return Result.error("标记失败: " + e.getMessage());
-        }
+    /**
+     * 全部已读
+     */
+    @Permission(level = ResourceLevel.ORGANIZATION)
+    @PostMapping("/handle-all")
+    public ResponseEntity handleAlarmAll(@PathVariable Long tenantId,
+                                    @RequestBody AlarmRecord alarmRecord) {
+        alarmRecord.setTenantId(tenantId);
+        alarmRecordService.markAsHandledAll(alarmRecord);
+        return Results.success();
     }
 
     /**

+ 34 - 20
src/main/java/cn/sciento/farm/automationv2/app/service/AlarmRecordService.java

@@ -1,5 +1,8 @@
 package cn.sciento.farm.automationv2.app.service;
 
+import cn.sciento.core.domain.Page;
+import cn.sciento.core.oauth.DetailsHelper;
+import cn.sciento.farm.automationv2.api.dto.DBSelectDTO;
 import cn.sciento.farm.automationv2.domain.entity.AlarmRecord;
 import cn.sciento.farm.automationv2.domain.entity.TaskExecution;
 import cn.sciento.farm.automationv2.domain.enums.AlarmType;
@@ -10,6 +13,8 @@ import cn.sciento.farm.automationv2.domain.valueobject.ExecutionPlan;
 import cn.sciento.farm.automationv2.infra.mapper.AlarmRecordMapper;
 import cn.sciento.farm.automationv2.infra.mapper.TaskExecutionMapper;
 import cn.sciento.farm.automationv2.infra.redis.ExecutionPlanStore;
+import io.choerodon.mybatis.pagehelper.PageHelper;
+import io.choerodon.mybatis.pagehelper.domain.PageRequest;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -126,25 +131,41 @@ public class AlarmRecordService {
      * 标记报警已处理
      *
      * @param alarmId   报警ID
-     * @param handledBy 处理人ID
      * @param remark    处理备注
      */
     @Transactional(rollbackFor = Exception.class)
-    public void markAsHandled(Long alarmId, Long handledBy, String remark) {
+    public void markAsHandled(Long alarmId, String remark) {
         AlarmRecord alarm = alarmRecordRepository.selectByPrimaryKey(alarmId);
         if (alarm == null) {
-            log.warn("报警记录不存在,alarmId={}", alarmId);
             return;
         }
-
-        alarm.setHandled(true);
-        alarm.setHandledBy(handledBy);
+        alarm.setHandled(Boolean.TRUE);
+        alarm.setHandledBy(DetailsHelper.getUserDetails().getUserId());
         alarm.setHandledAt(LocalDateTime.now());
         alarm.setHandleRemark(remark);
 
         alarmRecordRepository.updateByPrimaryKeySelective(alarm);
+    }
 
-        log.info("报警记录已标记为处理,alarmId={}, handledBy={}", alarmId, handledBy);
+    /**
+     * 标记报警全部已处理
+     *
+     * @param alarmRecord   任务
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void markAsHandledAll(AlarmRecord alarmRecord) {
+        List<AlarmRecord> alarmRecords = alarmRecordRepository.queryByList(alarmRecord);
+        if (alarmRecords.isEmpty()) {
+            return;
+        }
+        Long userId = DetailsHelper.getUserDetails().getUserId();
+        LocalDateTime now = LocalDateTime.now();
+        alarmRecords.forEach(e -> {
+            e.setHandled(Boolean.TRUE);
+            e.setHandledBy(userId);
+            e.setHandledAt(now);
+        });
+        alarmRecordRepository.batchUpdateByPrimaryKeySelective(alarmRecords);
     }
 
     /**
@@ -189,19 +210,12 @@ public class AlarmRecordService {
         return alarmRecordRepository.selectByPrimaryKey(alarmId);
     }
 
-    /**
-     * 分页查询未处理报警
-     */
-    public List<AlarmRecord> listUnhandledAlarms(Long tenantId, Integer limit) {
-//        return alarmRecordMapper.selectUnhandledAlarms(tenantId, limit);
-        return null;
-    }
 
-    /**
-     * 分页查询所有报警
-     */
-    public List<AlarmRecord> listAlarms(Long tenantId, Integer offset, Integer limit) {
-//        return alarmRecordMapper.selectByTenant(tenantId, offset, limit);
-        return null;
+
+
+    public Page<AlarmRecord> page(AlarmRecord alarmRecord, PageRequest pageRequest) {
+        return PageHelper.doPageAndSort(pageRequest,() -> {
+            return alarmRecordRepository.queryByList(alarmRecord);
+        });
     }
 }

+ 2 - 0
src/main/java/cn/sciento/farm/automationv2/domain/entity/AlarmRecord.java

@@ -2,6 +2,7 @@ package cn.sciento.farm.automationv2.domain.entity;
 
 import cn.sciento.farm.automationv2.domain.enums.AlarmType;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.choerodon.mybatis.domain.AuditDomain;
 import io.swagger.annotations.ApiModel;
 import lombok.AllArgsConstructor;
@@ -145,6 +146,7 @@ public class AlarmRecord extends AuditDomain {
     /**
      * 是否为严重报警
      */
+    @JsonIgnore
     public boolean isCritical() {
         return "CRITICAL".equals(alarmLevel) || "ERROR".equals(alarmLevel);
     }

+ 6 - 0
src/main/java/cn/sciento/farm/automationv2/domain/entity/IrrigationTask.java

@@ -3,6 +3,7 @@ package cn.sciento.farm.automationv2.domain.entity;
 import cn.sciento.farm.automationv2.domain.enums.*;
 import cn.sciento.farm.automationv2.infra.constant.BaseConstant;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.choerodon.mybatis.domain.AuditDomain;
 import io.swagger.annotations.ApiModel;
 import lombok.AllArgsConstructor;
@@ -182,6 +183,7 @@ public class IrrigationTask extends AuditDomain {
     /**
      * 是否为统一压力模式
      */
+    @JsonIgnore
     public boolean isPumpUnifiedMode() {
         return isPump() && PressureMode.PUMP_UNIFIED.getCode().equals(pressureMode);
     }
@@ -189,6 +191,7 @@ public class IrrigationTask extends AuditDomain {
     /**
      * 是否为分区压力模式
      */
+    @JsonIgnore
     public boolean isPumpZoneMode() {
         return isPump() && PressureMode.PUMP_ZONE.getCode().equals(pressureMode);
     }
@@ -196,6 +199,7 @@ public class IrrigationTask extends AuditDomain {
     /**
      * 是否为首部恒压模式
      */
+    @JsonIgnore
     public boolean isPump() {
         return BaseConstant.ENABLE.equals(isPump);
     }
@@ -211,6 +215,7 @@ public class IrrigationTask extends AuditDomain {
     /**
      * 是否为施肥时间模式
      */
+    @JsonIgnore
     public boolean isFertTimeMode() {
         return FertilizerControlMode.TIME.equals(fertilizerControlMode);
     }
@@ -218,6 +223,7 @@ public class IrrigationTask extends AuditDomain {
     /**
      * 是否为施肥容量模式
      */
+    @JsonIgnore
     public boolean isFertVolumeMode() {
         return FertilizerControlMode.VOLUME.equals(fertilizerControlMode);
     }

+ 7 - 0
src/main/java/cn/sciento/farm/automationv2/domain/repository/AlarmRecordRepository.java

@@ -15,4 +15,11 @@ import java.util.List;
  */
 public interface AlarmRecordRepository extends BaseRepository<AlarmRecord> {
 
+    /**
+     * 列表
+     * @param alarmRecord
+     * @return
+     */
+    List<AlarmRecord> queryByList(AlarmRecord alarmRecord);
+
 }

+ 1 - 3
src/main/java/cn/sciento/farm/automationv2/infra/mapper/AlarmRecordMapper.java

@@ -63,9 +63,7 @@ public interface AlarmRecordMapper extends BaseMapper<AlarmRecord> {
     /**
      * 分页查询报警记录
      */
-    List<AlarmRecord> selectByTenant(@Param("tenantId") Long tenantId,
-                                     @Param("offset") Integer offset,
-                                     @Param("limit") Integer limit);
+    List<AlarmRecord> selectByTenant(@Param("alarm") AlarmRecord alarm);
 
     /**
      * 统计未处理报警数

+ 10 - 0
src/main/java/cn/sciento/farm/automationv2/infra/repository/impl/AlarmRecordRepositoryImpl.java

@@ -2,7 +2,9 @@ package cn.sciento.farm.automationv2.infra.repository.impl;
 
 import cn.sciento.farm.automationv2.domain.entity.AlarmRecord;
 import cn.sciento.farm.automationv2.domain.repository.AlarmRecordRepository;
+import cn.sciento.farm.automationv2.infra.mapper.AlarmRecordMapper;
 import cn.sciento.mybatis.base.impl.BaseRepositoryImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -18,4 +20,12 @@ import java.util.List;
 @Service
 public class AlarmRecordRepositoryImpl extends BaseRepositoryImpl<AlarmRecord> implements AlarmRecordRepository {
 
+    @Autowired
+    private AlarmRecordMapper mapper;
+
+
+    @Override
+    public List<AlarmRecord> queryByList(AlarmRecord alarmRecord) {
+        return mapper.selectByTenant(alarmRecord);
+    }
 }

+ 4 - 2
src/main/resources/bootstrap.yml

@@ -1,5 +1,7 @@
 server:
   port: 8300
+  servlet:
+    context-path: /wfauto
 management:
   server:
     port: 8301
@@ -16,9 +18,9 @@ spring:
     nacos:
       config:
         server-addr: 192.168.10.18:8848
-        namespace: stong-test-demo1
+        namespace: stong-test-train
       discovery:
         server-addr: 192.168.10.18:8848
-        namespace: stong-test-demo1
+        namespace: stong-test-train
         metadata:
           VERSION: 1.0.0

+ 16 - 4
src/main/resources/mapper/AlarmRecordMapper.xml

@@ -96,10 +96,22 @@
     </update>
 
     <select id="selectByTenant" resultMap="BaseResultMap">
-        SELECT * FROM alarm_record
-        WHERE tenant_id = #{tenantId}
-        ORDER BY created_at DESC
-        LIMIT #{offset}, #{limit}
+        SELECT
+            *
+        FROM
+            wfauto_v2_alarm_record
+        WHERE
+            tenant_id = #{alarm.tenantId}
+        <if test="alarm.executionId != null and alarm.executionId != ''">
+            AND execution_id = #{alarm.executionId}
+        </if>
+        <if test="alarm.taskId != null and alarm.taskId != ''">
+            AND task_id = #{alarm.taskId}
+        </if>
+        <if test="alarm.handled != null and alarm.handled != ''">
+            AND handled = #{alarm.handled}
+        </if>
+
     </select>
 
     <select id="countUnhandled" resultType="int">