Przeglądaj źródła

feat(warning): 添加预警原因库管理功能

- 新增 WarningReasonController 提供完整的 CRUD 接口
- 实现分页查询、条件筛选和详情查看功能
- 添加新增、修改、删除和状态更新操作
- 集成权限控制和数据验证逻辑
- 实现按类型和级别查询原因列表功能
- 自动生成功能确保唯一的原因编码生成
林仔 1 miesiąc temu
rodzic
commit
fad01cdc78

+ 103 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/warning/WarningReasonController.java

@@ -0,0 +1,103 @@
+package com.zksy.web.controller.warning;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zksy.base.warning.domain.WarningReason;
+import com.zksy.base.warning.service.WarningReasonService;
+import com.zksy.common.core.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Slf4j
+@RestController
+@RequestMapping("/warning/reason")
+@Api(tags = "预警原因库管理")
+public class WarningReasonController {
+
+    @Autowired
+    private WarningReasonService warningReasonService;
+
+    @GetMapping("/list")
+    @ApiOperation("预警原因库管理-分页查询预警原因列表")
+    @PreAuthorize("@ss.hasPermi('warning:reason:list')")
+    public AjaxResult queryWarningReasons(
+            @ApiParam("页码") @RequestParam(defaultValue = "1") Integer pageNum,
+            @ApiParam("每页数量") @RequestParam(defaultValue = "10") Integer pageSize,
+            @ApiParam("原因编码") @RequestParam(required = false) String reasonCode,
+            @ApiParam("原因名称") @RequestParam(required = false) String reasonName,
+            @ApiParam("预警类型") @RequestParam(required = false) String warningType,
+            @ApiParam("预警级别") @RequestParam(required = false) String warningLevel,
+            @ApiParam("状态") @RequestParam(required = false) String status) {
+        Page<WarningReason> page = new Page<>(pageNum, pageSize);
+        IPage<WarningReason> result = warningReasonService.queryWarningReasons(page, reasonCode, reasonName, 
+                                                                                 warningType, warningLevel, status);
+        return AjaxResult.success(result);
+    }
+
+    @GetMapping("/query")
+    @ApiOperation("预警原因库管理-根据类型和级别查询原因列表")
+    @PreAuthorize("@ss.hasPermi('warning:reason:query')")
+    public AjaxResult getReasonsByTypeAndLevel(
+            @ApiParam("预警类型") @RequestParam String warningType,
+            @ApiParam("预警级别") @RequestParam String warningLevel) {
+        List<WarningReason> result = warningReasonService.getReasonsByTypeAndLevel(warningType, warningLevel);
+        return AjaxResult.success(result);
+    }
+
+    @PostMapping("/add")
+    @ApiOperation("预警原因库管理-新增预警原因")
+    @PreAuthorize("@ss.hasPermi('warning:reason:add')")
+    public AjaxResult addWarningReason(@RequestBody WarningReason warningReason) {
+        boolean success = warningReasonService.addWarningReason(warningReason);
+        if (success) {
+            return AjaxResult.success(warningReason);
+        } else {
+            return AjaxResult.error("新增预警原因失败");
+        }
+    }
+
+    @PutMapping("/update")
+    @ApiOperation("预警原因库管理-修改预警原因")
+    @PreAuthorize("@ss.hasPermi('warning:reason:edit')")
+    public AjaxResult updateWarningReason(@RequestBody WarningReason warningReason) {
+        boolean success = warningReasonService.updateWarningReason(warningReason);
+        if (success) {
+            return AjaxResult.success();
+        } else {
+            return AjaxResult.error("修改预警原因失败");
+        }
+    }
+
+    @PutMapping("/status")
+    @ApiOperation("预警原因库管理-更新原因状态")
+    @PreAuthorize("@ss.hasPermi('warning:reason:edit')")
+    public AjaxResult updateReasonStatus(
+            @ApiParam("原因ID") @RequestParam String reasonId,
+            @ApiParam("状态(0-正常 1-停用)") @RequestParam String status) {
+        boolean success = warningReasonService.updateReasonStatus(reasonId, status);
+        if (success) {
+            return AjaxResult.success();
+        } else {
+            return AjaxResult.error("更新状态失败");
+        }
+    }
+
+    @GetMapping("/detail/{reasonId}")
+    @ApiOperation("预警原因库管理-获取原因详细信息")
+    @PreAuthorize("@ss.hasPermi('warning:reason:query')")
+    public AjaxResult getReasonDetail(@PathVariable String reasonId) {
+        WarningReason reason = warningReasonService.getReasonDetail(reasonId);
+        if (reason != null) {
+            return AjaxResult.success(reason);
+        } else {
+            return AjaxResult.error("预警原因不存在");
+        }
+    }
+}

+ 24 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/warning/service/WarningReasonService.java

@@ -0,0 +1,24 @@
+package com.zksy.base.warning.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.base.warning.domain.WarningReason;
+
+import java.util.List;
+
+public interface WarningReasonService extends IService<WarningReason> {
+
+    IPage<WarningReason> queryWarningReasons(Page<WarningReason> page, String reasonCode, String reasonName, 
+                                             String warningType, String warningLevel, String status);
+
+    List<WarningReason> getReasonsByTypeAndLevel(String warningType, String warningLevel);
+
+    boolean addWarningReason(WarningReason warningReason);
+
+    boolean updateWarningReason(WarningReason warningReason);
+
+    boolean updateReasonStatus(String reasonId, String status);
+
+    WarningReason getReasonDetail(String reasonId);
+}

+ 116 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/warning/service/impl/WarningReasonServiceImpl.java

@@ -0,0 +1,116 @@
+package com.zksy.base.warning.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.base.warning.domain.WarningReason;
+import com.zksy.base.warning.mapper.WarningReasonMapper;
+import com.zksy.base.warning.service.WarningReasonService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+@Slf4j
+@Service
+public class WarningReasonServiceImpl extends ServiceImpl<WarningReasonMapper, WarningReason> implements WarningReasonService {
+
+    @Override
+    public IPage<WarningReason> queryWarningReasons(Page<WarningReason> page, String reasonCode, String reasonName, 
+                                                     String warningType, String warningLevel, String status) {
+        LambdaQueryWrapper<WarningReason> wrapper = new LambdaQueryWrapper<>();
+        
+        if (reasonCode != null && !reasonCode.isEmpty()) {
+            wrapper.like(WarningReason::getReasonCode, reasonCode);
+        }
+        if (reasonName != null && !reasonName.isEmpty()) {
+            wrapper.like(WarningReason::getReasonName, reasonName);
+        }
+        if (warningType != null && !warningType.isEmpty()) {
+            wrapper.eq(WarningReason::getWarningType, warningType);
+        }
+        if (warningLevel != null && !warningLevel.isEmpty()) {
+            wrapper.eq(WarningReason::getWarningLevel, warningLevel);
+        }
+        if (status != null && !status.isEmpty()) {
+            wrapper.eq(WarningReason::getStatus, status);
+        }
+        
+        wrapper.orderByAsc(WarningReason::getSortOrder).orderByDesc(WarningReason::getCreateTime);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    public List<WarningReason> getReasonsByTypeAndLevel(String warningType, String warningLevel) {
+        LambdaQueryWrapper<WarningReason> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(WarningReason::getWarningType, warningType)
+               .eq(WarningReason::getWarningLevel, warningLevel)
+               .eq(WarningReason::getStatus, "0")
+               .orderByAsc(WarningReason::getSortOrder);
+        return this.list(wrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addWarningReason(WarningReason warningReason) {
+        if (warningReason.getReasonCode() == null || warningReason.getReasonCode().isEmpty()) {
+            warningReason.setReasonCode(generateReasonCode(warningReason.getWarningType(), warningReason.getWarningLevel()));
+        }
+        if (warningReason.getStatus() == null) {
+            warningReason.setStatus("0");
+        }
+        if (warningReason.getSortOrder() == null) {
+            warningReason.setSortOrder(0);
+        }
+        return this.save(warningReason);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateWarningReason(WarningReason warningReason) {
+        return this.updateById(warningReason);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateReasonStatus(String reasonId, String status) {
+        WarningReason reason = new WarningReason();
+        reason.setReasonId(reasonId);
+        reason.setStatus(status);
+        return this.updateById(reason);
+    }
+
+    @Override
+    public WarningReason getReasonDetail(String reasonId) {
+        return this.getById(reasonId);
+    }
+
+    private String generateReasonCode(String warningType, String warningLevel) {
+        String dateStr = new SimpleDateFormat("yyyyMMdd").format(new Date());
+        String prefix = "WR" + warningType.substring(0, Math.min(3, warningType.length())).toUpperCase() + warningLevel;
+        
+        LambdaQueryWrapper<WarningReason> wrapper = new LambdaQueryWrapper<>();
+        wrapper.likeRight(WarningReason::getReasonCode, prefix + dateStr);
+        wrapper.orderByDesc(WarningReason::getReasonCode);
+        wrapper.last("LIMIT 1");
+        
+        WarningReason lastReason = this.getOne(wrapper);
+        int sequence = 1;
+        
+        if (lastReason != null) {
+            String lastCode = lastReason.getReasonCode();
+            String lastSeqStr = lastCode.substring(lastCode.length() - 4);
+            try {
+                sequence = Integer.parseInt(lastSeqStr) + 1;
+            } catch (NumberFormatException e) {
+                sequence = 1;
+            }
+        }
+        
+        return prefix + dateStr + String.format("%04d", sequence);
+    }
+}