Просмотр исходного кода

feat(warning): 添加预警事项管理功能

- 新增 WarningItemController 提供预警事项的 CRUD 操作接口
- 实现分页查询、新增、修改、状态更新等基础功能
- 添加事项详情查询和编码生成功能
- 集成 Swagger 文档注解提供 API 接口文档
- 实现基于权限的角色访问控制
- 添加事务管理确保数据一致性
- 实现自定义编码生成规则支持按类型级别自动生成事项编码
林仔 1 месяц назад
Родитель
Сommit
db8e37b95c

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

@@ -0,0 +1,102 @@
+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.WarningItem;
+import com.zksy.base.warning.service.WarningItemService;
+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.*;
+
+@Slf4j
+@RestController
+@RequestMapping("/warning/item")
+@Api(tags = "预警清单管理")
+public class WarningItemController {
+
+    @Autowired
+    private WarningItemService warningItemService;
+
+    @GetMapping("/list")
+    @ApiOperation("事项信息查询-分页查询预警事项列表")
+    @PreAuthorize("@ss.hasPermi('warning:item:list')")
+    public AjaxResult queryWarningItems(
+            @ApiParam("页码") @RequestParam(defaultValue = "1") Integer pageNum,
+            @ApiParam("每页数量") @RequestParam(defaultValue = "10") Integer pageSize,
+            @ApiParam("事项编码") @RequestParam(required = false) String itemCode,
+            @ApiParam("事项名称") @RequestParam(required = false) String itemName,
+            @ApiParam("预警类型") @RequestParam(required = false) String warningType,
+            @ApiParam("预警级别") @RequestParam(required = false) String warningLevel,
+            @ApiParam("预警专项") @RequestParam(required = false) String warningSpecial,
+            @ApiParam("状态") @RequestParam(required = false) String status) {
+        Page<WarningItem> page = new Page<>(pageNum, pageSize);
+        IPage<WarningItem> result = warningItemService.queryWarningItems(page, itemCode, itemName, 
+                                                                          warningType, warningLevel, warningSpecial, status);
+        return AjaxResult.success(result);
+    }
+
+    @PostMapping("/add")
+    @ApiOperation("预警事项管理-新增预警事项")
+    @PreAuthorize("@ss.hasPermi('warning:item:add')")
+    public AjaxResult addWarningItem(@RequestBody WarningItem warningItem) {
+        boolean success = warningItemService.addWarningItem(warningItem);
+        if (success) {
+            return AjaxResult.success(warningItem);
+        } else {
+            return AjaxResult.error("新增预警事项失败");
+        }
+    }
+
+    @PutMapping("/update")
+    @ApiOperation("预警事项管理-修改预警事项")
+    @PreAuthorize("@ss.hasPermi('warning:item:edit')")
+    public AjaxResult updateWarningItem(@RequestBody WarningItem warningItem) {
+        boolean success = warningItemService.updateWarningItem(warningItem);
+        if (success) {
+            return AjaxResult.success();
+        } else {
+            return AjaxResult.error("修改预警事项失败");
+        }
+    }
+
+    @PutMapping("/status")
+    @ApiOperation("预警事项管理-更新事项状态(启用/禁用/作废)")
+    @PreAuthorize("@ss.hasPermi('warning:item:edit')")
+    public AjaxResult updateItemStatus(
+            @ApiParam("事项ID") @RequestParam String itemId,
+            @ApiParam("状态(ENABLED-启用 DISABLED-禁用 INVALID-作废)") @RequestParam String status) {
+        boolean success = warningItemService.updateItemStatus(itemId, status);
+        if (success) {
+            return AjaxResult.success();
+        } else {
+            return AjaxResult.error("更新状态失败");
+        }
+    }
+
+    @GetMapping("/detail/{itemId}")
+    @ApiOperation("预警事项详情-获取事项详细信息")
+    @PreAuthorize("@ss.hasPermi('warning:item:query')")
+    public AjaxResult getItemDetail(@PathVariable String itemId) {
+        WarningItem item = warningItemService.getItemDetail(itemId);
+        if (item != null) {
+            return AjaxResult.success(item);
+        } else {
+            return AjaxResult.error("预警事项不存在");
+        }
+    }
+
+    @GetMapping("/code/generate")
+    @ApiOperation("事项编码生成-自动生成事项编码")
+    @PreAuthorize("@ss.hasPermi('warning:item:query')")
+    public AjaxResult generateItemCode(
+            @ApiParam("预警类型") @RequestParam String warningType,
+            @ApiParam("预警级别") @RequestParam String warningLevel) {
+        String itemCode = warningItemService.generateItemCode(warningType, warningLevel);
+        return AjaxResult.success(itemCode);
+    }
+}

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

@@ -0,0 +1,27 @@
+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.WarningItem;
+import com.zksy.base.warning.domain.WarningReason;
+
+import java.util.List;
+
+public interface WarningItemService extends IService<WarningItem> {
+
+    IPage<WarningItem> queryWarningItems(Page<WarningItem> page, String itemCode, String itemName, 
+                                         String warningType, String warningLevel, String warningSpecial, String status);
+
+    boolean addWarningItem(WarningItem warningItem);
+
+    boolean updateWarningItem(WarningItem warningItem);
+
+    boolean updateItemStatus(String itemId, String status);
+
+    WarningItem getItemDetail(String itemId);
+
+    WarningItem getItemByCode(String itemCode);
+
+    String generateItemCode(String warningType, String warningLevel);
+}

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

@@ -0,0 +1,113 @@
+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.WarningItem;
+import com.zksy.base.warning.mapper.WarningItemMapper;
+import com.zksy.base.warning.service.WarningItemService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@Slf4j
+@Service
+public class WarningItemServiceImpl extends ServiceImpl<WarningItemMapper, WarningItem> implements WarningItemService {
+
+    @Override
+    public IPage<WarningItem> queryWarningItems(Page<WarningItem> page, String itemCode, String itemName, 
+                                                 String warningType, String warningLevel, String warningSpecial, String status) {
+        LambdaQueryWrapper<WarningItem> wrapper = new LambdaQueryWrapper<>();
+        
+        if (itemCode != null && !itemCode.isEmpty()) {
+            wrapper.like(WarningItem::getItemCode, itemCode);
+        }
+        if (itemName != null && !itemName.isEmpty()) {
+            wrapper.like(WarningItem::getItemName, itemName);
+        }
+        if (warningType != null && !warningType.isEmpty()) {
+            wrapper.eq(WarningItem::getWarningType, warningType);
+        }
+        if (warningLevel != null && !warningLevel.isEmpty()) {
+            wrapper.eq(WarningItem::getWarningLevel, warningLevel);
+        }
+        if (warningSpecial != null && !warningSpecial.isEmpty()) {
+            wrapper.like(WarningItem::getWarningSpecial, warningSpecial);
+        }
+        if (status != null && !status.isEmpty()) {
+            wrapper.eq(WarningItem::getStatus, status);
+        }
+        
+        wrapper.orderByDesc(WarningItem::getCreateTime);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addWarningItem(WarningItem warningItem) {
+        if (warningItem.getItemCode() == null || warningItem.getItemCode().isEmpty()) {
+            warningItem.setItemCode(generateItemCode(warningItem.getWarningType(), warningItem.getWarningLevel()));
+        }
+        if (warningItem.getStatus() == null) {
+            warningItem.setStatus("ENABLED");
+        }
+        return this.save(warningItem);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateWarningItem(WarningItem warningItem) {
+        return this.updateById(warningItem);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateItemStatus(String itemId, String status) {
+        WarningItem item = new WarningItem();
+        item.setItemId(itemId);
+        item.setStatus(status);
+        return this.updateById(item);
+    }
+
+    @Override
+    public WarningItem getItemDetail(String itemId) {
+        return this.getById(itemId);
+    }
+
+    @Override
+    public WarningItem getItemByCode(String itemCode) {
+        LambdaQueryWrapper<WarningItem> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(WarningItem::getItemCode, itemCode);
+        return this.getOne(wrapper);
+    }
+
+    @Override
+    public String generateItemCode(String warningType, String warningLevel) {
+        String dateStr = new SimpleDateFormat("yyyyMMdd").format(new Date());
+        String prefix = "WI" + warningType.substring(0, Math.min(3, warningType.length())).toUpperCase() + warningLevel;
+        
+        LambdaQueryWrapper<WarningItem> wrapper = new LambdaQueryWrapper<>();
+        wrapper.likeRight(WarningItem::getItemCode, prefix + dateStr);
+        wrapper.orderByDesc(WarningItem::getItemCode);
+        wrapper.last("LIMIT 1");
+        
+        WarningItem lastItem = this.getOne(wrapper);
+        int sequence = 1;
+        
+        if (lastItem != null) {
+            String lastCode = lastItem.getItemCode();
+            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);
+    }
+}