Преглед изворни кода

fix:隐患接入工单bug修改

null пре 1 месец
родитељ
комит
4c8923946b

+ 26 - 5
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/gasbasic/BusinessWorkOrderController.java

@@ -6,18 +6,16 @@ import com.zksy.base.domain.WorkOrderLog;
 import com.zksy.base.service.BusinessWorkOrderService;
 import com.zksy.common.core.controller.BaseController;
 import com.zksy.common.core.domain.AjaxResult;
-import com.zksy.common.core.domain.entity.SysUser;
+import com.zksy.common.utils.DateUtils;
 import com.zksy.common.utils.SecurityUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 业务工单管理 Controller
@@ -127,6 +125,29 @@ public class BusinessWorkOrderController extends BaseController {
         return AjaxResult.success("提交验收成功");
     }
 
+    @PostMapping("/createFromHazard")
+    @ApiOperation("从隐患创建工单")
+    public AjaxResult createFromHazard(@RequestBody Map<String, Object> body) {
+        String hazardId = (String) body.get("hazardId");
+        String hazardDesc = (String) body.get("hazardDesc");
+        String equipmentId = (String) body.get("equipmentId");
+        String hazardLevel = (String) body.get("hazardLevel");
+        String hazardImages = (String) body.get("hazardImages");
+        String planFinishTimeStr = (String) body.get("planFinishTime");
+
+        if (hazardId == null || equipmentId == null) {
+            return AjaxResult.error("隐患ID和设备ID不能为空");
+        }
+
+        Date planFinishTime = null;
+        if (StringUtils.isNotEmpty(planFinishTimeStr)) {
+            planFinishTime = DateUtils.parseDate(planFinishTimeStr);
+        }
+
+        Long orderId = businessWorkOrderService.createWorkOrderFromHazard(hazardId, hazardDesc, equipmentId, hazardLevel, hazardImages, planFinishTime);
+        return AjaxResult.success("工单创建成功", orderId);
+    }
+
     @DeleteMapping("/{orderId}")
     @ApiOperation("取消工单")
     public AjaxResult cancel(@PathVariable Long orderId) {

+ 6 - 3
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/hidden/HazardController.java

@@ -64,12 +64,15 @@ public class HazardController {
     }
 
     @PutMapping("/submit/{hazardId}")
-    @ApiOperation("隐患报送")
+    @ApiOperation("隐患报送(同时自动创建工单)")
     @Log(title = "隐患报送", businessType = BusinessType.UPDATE)
     public AjaxResult submit(@PathVariable String hazardId) {
-        boolean submitted = service.submitHazard(hazardId);
+        Long orderId = service.submitHazard(hazardId);
 
-        return submitted ? AjaxResult.success("报送成功") : AjaxResult.error("报送失败");
+        if (orderId != null) {
+            return AjaxResult.success("报送成功,已自动创建工单", orderId);
+        }
+        return AjaxResult.success("报送成功");
     }
 
     @GetMapping("/map-points")

+ 14 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/service/BusinessWorkOrderService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.zksy.base.domain.WorkOrder;
 import com.zksy.base.domain.WorkOrderLog;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -60,4 +61,17 @@ public interface BusinessWorkOrderService extends IService<WorkOrder> {
      * 取消工单
      */
     boolean cancelOrder(Long orderId, Long operUserId, String operUserName);
+
+    /**
+     * 从隐患创建工单
+     * @param hazardId 隐患ID
+     * @param hazardDesc 隐患描述
+     * @param equipmentId 设备ID
+     * @param hazardLevel 隐患等级
+     * @param hazardImages 隐患图片
+     * @param planFinishTime 计划完成时间
+     * @return 工单ID
+     */
+    Long createWorkOrderFromHazard(String hazardId, String hazardDesc, String equipmentId,
+                                    String hazardLevel, String hazardImages, Date planFinishTime);
 }

+ 5 - 1
pipe-network-service/zksy-system/src/main/java/com/zksy/base/service/HazardHiddenAccountService.java

@@ -16,7 +16,11 @@ public interface HazardHiddenAccountService extends IService<HazardHiddenAccount
 
     boolean updateWithCheck(HazardHiddenAccount entity);
 
-    boolean submitHazard(String hazardId);
+    /**
+     * 隐患报送(同时自动创建工单)
+     * @return 创建的工单ID,若无需创建返回null
+     */
+    Long submitHazard(String hazardId);
 
     List<HazardHiddenAccount> getActiveMapPoints();
 

+ 44 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/base/service/impl/BusinessWorkOrderServiceImpl.java

@@ -205,6 +205,50 @@ public class BusinessWorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, W
         return true;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Long createWorkOrderFromHazard(String hazardId, String hazardDesc, String equipmentId, String hazardLevel, String hazardImages, Date planFinishTime) {
+        // 隐患等级映射到工单优先级:0-重大→紧急(1) 1-较大→一般(2) 2-一般→一般(2) 3-轻微→低(3)
+        Integer orderLevel;
+        if ("0".equals(hazardLevel)) {
+            orderLevel = 1;
+        } else if ("3".equals(hazardLevel)) {
+            orderLevel = 3;
+        } else {
+            orderLevel = 2;
+        }
+
+        WorkOrder workOrder = new WorkOrder();
+        workOrder.setOrderNo(generateOrderNo());
+        workOrder.setDeviceId(equipmentId);
+        workOrder.setOrderType(1); // 默认故障维修
+        workOrder.setOrderLevel(orderLevel);
+        workOrder.setOrderDesc(hazardDesc);
+        workOrder.setOrderStatus(1); // 待派单
+        workOrder.setWorkImage(hazardImages);
+        workOrder.setPlanFinishTime(planFinishTime);
+        workOrder.setCreateTime(new Date());
+        this.save(workOrder);
+
+        // 写入操作日志
+        WorkOrderLog logEntry = new WorkOrderLog();
+        logEntry.setOrderId(workOrder.getOrderId());
+        logEntry.setOperType(1);
+        logEntry.setOperDesc("由隐患[" + hazardId + "]自动创建工单");
+        logEntry.setOperTime(new Date());
+        workOrderLogMapper.insert(logEntry);
+
+        log.info("从隐患[{}]创建工单成功,工单ID={}", hazardId, workOrder.getOrderId());
+        return workOrder.getOrderId();
+    }
+
+    /**
+     * 生成工单编号:WO-yyyyMMddHHmmssSSS
+     */
+    private String generateOrderNo() {
+        return "WO-" + new java.text.SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean cancelOrder(Long orderId, Long operUserId, String operUserName) {

+ 32 - 3
pipe-network-service/zksy-system/src/main/java/com/zksy/base/service/impl/HazardHiddenAccountServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zksy.base.domain.HazardHiddenAccount;
 import com.zksy.base.dto.HazardPageInDTO;
 import com.zksy.base.mapper.HazardHiddenAccountMapper;
+import com.zksy.base.service.BusinessWorkOrderService;
 import com.zksy.base.service.HazardHiddenAccountService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -19,6 +20,7 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -32,6 +34,9 @@ public class HazardHiddenAccountServiceImpl extends ServiceImpl<HazardHiddenAcco
     @Autowired
     private ISysDictDataService dictDataService;
 
+    @Autowired
+    private BusinessWorkOrderService businessWorkOrderService;
+
     @Override
     public Page<HazardHiddenAccount> findByPage(HazardPageInDTO dto) {
         Page<HazardHiddenAccount> page = new Page<>(dto.getPageNum(), dto.getPageSize());
@@ -90,14 +95,38 @@ public class HazardHiddenAccountServiceImpl extends ServiceImpl<HazardHiddenAcco
 
     @Override
     @Transactional
-    public boolean submitHazard(String hazardId) {
+    public Long submitHazard(String hazardId) {
         HazardHiddenAccount hazard = this.getById(hazardId);
         if (hazard == null) {
-            return false;
+            return null;
         }
         hazard.setIsSubmitted(1);
         hazard.setSubmitTime(LocalDateTime.now());
-        return this.updateById(hazard);
+        this.updateById(hazard);
+
+        // 当隐患关联了设备时,自动创建工单
+        if (hazard.getEquipmentId() != null && !hazard.getEquipmentId().isEmpty()) {
+            try {
+                Date planFinishTime = null;
+                if (hazard.getRectifyDeadline() != null) {
+                    planFinishTime = java.sql.Date.valueOf(hazard.getRectifyDeadline());
+                }
+                Long orderId = businessWorkOrderService.createWorkOrderFromHazard(
+                        hazard.getHazardId(),
+                        hazard.getHazardDesc(),
+                        hazard.getEquipmentId(),
+                        hazard.getHazardLevel(),
+                        hazard.getHazardImages(),
+                        planFinishTime
+                );
+                log.info("隐患报送[{}]自动创建工单成功,工单ID={}", hazardId, orderId);
+                return orderId;
+            } catch (Exception e) {
+                log.error("隐患报送[{}]自动创建工单失败", hazardId, e);
+                throw new ServiceException("报送成功但工单创建失败:" + e.getMessage());
+            }
+        }
+        return null;
     }
 
     @Override