Procházet zdrojové kódy

办结工单优化

xiang13487 před 3 týdny
rodič
revize
5968b4f1a2

+ 36 - 1
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/manhole/WorkOrderController.java

@@ -11,8 +11,11 @@ import com.zksy.common.annotation.Anonymous;
 import com.zksy.common.core.controller.BaseController;
 import com.zksy.common.core.domain.AjaxResult;
 import com.zksy.common.core.domain.AjaxResult2;
+import com.zksy.manhole.dto.in.WorkOrderAddInDTO;
+import com.zksy.manhole.dto.in.WorkOrderFinishedInDTO;
 import com.zksy.manhole.dto.in.WorkOrderOperInDTO;
 import com.zksy.manhole.dto.in.WorkOrderPageInDTO;
+import com.zksy.manhole.dto.in.WorkOrderProcessingInDTO;
 import com.zksy.manhole.dto.out.EquipmentStatusOutDTO;
 import com.zksy.manhole.dto.out.WorkOrderLogOutDTO;
 import com.zksy.manhole.dto.out.WorkOrderOutDTO;
@@ -53,7 +56,7 @@ public class WorkOrderController extends BaseController
      * 分页查询工单信息列表
      */
     @Anonymous
-    @GetMapping(value = "/findByPage")
+    @PostMapping(value = "/findByPage")
     @ApiOperation(value = "分页查询工单信息列表")
     public AjaxResult2<Page<WorkOrderOutDTO>> findByPage(@RequestBody WorkOrderPageInDTO pageInDTO)
     {
@@ -101,6 +104,38 @@ public class WorkOrderController extends BaseController
         return AjaxResult2.success(outDTO);
     }
 
+    /**
+     * 经办工单分页查询(处理中:待接单、已接单、处理中、待验收)
+     */
+    @Anonymous
+    @PostMapping(value = "/findProcessingPage")
+    @ApiOperation(value = "经办工单分页查询")
+    public AjaxResult2<Page<WorkOrderOutDTO>> findProcessingPage(@RequestBody WorkOrderProcessingInDTO inDTO) {
+        return AjaxResult2.success(workOrderService.findProcessingPage(inDTO));
+    }
+
+    /**
+     * 办结工单分页查询(已办结:已结案、已驳回)
+     */
+    @Anonymous
+    @PostMapping(value = "/findFinishedPage")
+    @ApiOperation(value = "办结工单分页查询")
+    public AjaxResult2<Page<WorkOrderOutDTO>> findFinishedPage(@RequestBody WorkOrderFinishedInDTO inDTO) {
+        return AjaxResult2.success(workOrderService.findFinishedPage(inDTO));
+    }
+
+    /**
+     * 新增工单
+     */
+    @Anonymous
+    @PostMapping(value = "/addWorkOrder")
+    @ApiOperation(value = "新增工单")
+    public AjaxResult addWorkOrder(@RequestBody WorkOrderAddInDTO inDTO) {
+        boolean result = workOrderService.addWorkOrder(inDTO);
+        return result ? AjaxResult.success("新增成功", result)
+                : AjaxResult.error("新增失败", result);
+    }
+
     /**
      * 操作工单
      * @param inDTO

+ 22 - 2
pipe-network-service/zksy-system/src/main/java/com/zksy/base/service/WorkOrderService.java

@@ -3,8 +3,7 @@ package com.zksy.base.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zksy.base.domain.WorkOrder;
-import com.zksy.manhole.dto.in.WorkOrderOperInDTO;
-import com.zksy.manhole.dto.in.WorkOrderPageInDTO;
+import com.zksy.manhole.dto.in.*;
 import com.zksy.manhole.dto.out.WorkOrderOutDTO;
 
 /**
@@ -21,6 +20,27 @@ public interface WorkOrderService extends IService<WorkOrder> {
      */
     Page<WorkOrderOutDTO> findByPage(WorkOrderPageInDTO pageInDTO);
 
+    /**
+     * 新增工单
+     * @param inDTO
+     * @return
+     */
+    boolean addWorkOrder(WorkOrderAddInDTO inDTO);
+
+    /**
+     * 经办工单分页查询(处理中:待接单、已接单、处理中、待验收)
+     * @param inDTO
+     * @return
+     */
+    Page<WorkOrderOutDTO> findProcessingPage(WorkOrderProcessingInDTO inDTO);
+
+    /**
+     * 办结工单分页查询(已办结:已结案、已驳回)
+     * @param inDTO
+     * @return
+     */
+    Page<WorkOrderOutDTO> findFinishedPage(WorkOrderFinishedInDTO inDTO);
+
     /**
      * 操作工单
      * @param inDTO

+ 122 - 2
pipe-network-service/zksy-system/src/main/java/com/zksy/base/service/impl/WorkOrderServiceImpl.java

@@ -4,15 +4,20 @@ import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.base.domain.CaseInfo;
+import com.zksy.base.domain.EquipmentBase;
 import com.zksy.base.domain.WorkOrder;
 import com.zksy.base.domain.WorkOrderLog;
+import com.zksy.base.mapper.CaseInfoMapper;
+import com.zksy.base.mapper.EquipmentBaseMapper;
 import com.zksy.base.mapper.WorkOrderLogMapper;
 import com.zksy.base.mapper.WorkOrderMapper;
 import com.zksy.base.service.WorkOrderService;
 import com.zksy.common.core.domain.entity.SysUser;
+import com.zksy.common.core.domain.model.LoginUser;
 import com.zksy.common.exception.ServiceException;
-import com.zksy.manhole.dto.in.WorkOrderOperInDTO;
-import com.zksy.manhole.dto.in.WorkOrderPageInDTO;
+import com.zksy.common.utils.SecurityUtils;
+import com.zksy.manhole.dto.in.*;
 import com.zksy.manhole.dto.out.WorkOrderOutDTO;
 import com.zksy.system.service.ISysUserService;
 import lombok.extern.slf4j.Slf4j;
@@ -20,8 +25,12 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
+import java.util.Random;
 
 /**
 * @author Administrator
@@ -39,6 +48,12 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
     @Autowired
     private WorkOrderLogMapper workOrderLogMapper;
 
+    @Autowired
+    private CaseInfoMapper caseInfoMapper;
+
+    @Autowired
+    private EquipmentBaseMapper equipmentBaseMapper;
+
     /**
      * 分页查询工单信息列表
      * @param pageInDTO
@@ -59,6 +74,111 @@ public class WorkOrderServiceImpl extends ServiceImpl<WorkOrderMapper, WorkOrder
         return outPage;
     }
 
+    /**
+     * 新增工单
+     * @param inDTO
+     * @return
+     */
+    @Override
+    public boolean addWorkOrder(WorkOrderAddInDTO inDTO) {
+        log.info("新增工单-入参:{}", inDTO);
+        WorkOrder workOrder = BeanUtil.copyProperties(inDTO, WorkOrder.class);
+        workOrder.setOrderNo(generateOrderNo());
+        // 初始状态:1-待派单
+        workOrder.setOrderStatus(1);
+        if(inDTO.getCaseId() != null){
+            CaseInfo caseInfo = caseInfoMapper.selectById(inDTO.getCaseId());
+            if(caseInfo != null){
+                workOrder.setCaseNo(caseInfo.getCaseNo());
+            }
+        }
+        if(inDTO.getDeviceId() != null){
+            EquipmentBase equipmentBase = equipmentBaseMapper.selectById(inDTO.getDeviceId());
+            if(equipmentBase != null){
+                workOrder.setDeviceCode(equipmentBase.getEquipmentCode());
+            }
+        }
+        this.save(workOrder);
+        WorkOrderLog workOrderLog = new WorkOrderLog();
+        workOrderLog.setOrderId(workOrder.getOrderId());
+        //1-创建工单
+        workOrderLog.setOperType(1);
+        workOrderLog.setOperDesc(inDTO.getOrderDesc() + ",创建工单");
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (loginUser != null) {
+            workOrderLog.setOperUserId(loginUser.getUserId());
+            workOrderLog.setOperUserName(loginUser.getUser().getNickName());
+        }
+        return workOrderLogMapper.insert(workOrderLog) > 0;
+    }
+
+    /**
+     * 生成工单编号
+     * @return
+     */
+    public static String generateOrderNo() {
+        // 1. 获取当前时间,格式化为14位年月日时分秒
+        String currentDateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
+        // 2. 生成4位随机数,不足补0
+        String randomNum = String.format("%04d", new Random().nextInt(10000));
+        // 3. 拼接完整编号
+        return "WO" + currentDateTime + randomNum;
+    }
+
+    /**
+     * 经办工单分页查询(处理中:待接单、已接单、处理中、待验收)
+     * @param inDTO
+     * @return
+     */
+    @Override
+    public Page<WorkOrderOutDTO> findProcessingPage(WorkOrderProcessingInDTO inDTO) {
+        log.info("经办工单分页查询-入参:{}", inDTO);
+        Page<WorkOrder> page = new Page<>(inDTO.getPageNum(), inDTO.getPageSize());
+        // 经办工单状态:2-待接单 3-已接单 4-处理中 5-待验收 8-延期审核
+        List<Integer> processingStatusList = Arrays.asList(2, 3, 4, 5, 8);
+        LambdaQueryWrapper<WorkOrder> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(WorkOrder::getOrderStatus, processingStatusList)
+                .like(StringUtils.isNotEmpty(inDTO.getOrderNo()), WorkOrder::getOrderNo, inDTO.getOrderNo())
+                .like(StringUtils.isNotEmpty(inDTO.getCaseNo()), WorkOrder::getCaseNo, inDTO.getCaseNo())
+                .eq(inDTO.getOrderType() != null, WorkOrder::getOrderType, inDTO.getOrderType())
+                .eq(inDTO.getOrderLevel() != null, WorkOrder::getOrderLevel, inDTO.getOrderLevel())
+                .eq(inDTO.getReceiveUser() != null, WorkOrder::getReceiveUser, inDTO.getReceiveUser())
+                .orderByDesc(WorkOrder::getUpdateTime);
+        Page<WorkOrder> rs = this.page(page, queryWrapper);
+        List<WorkOrderOutDTO> outDTOList = BeanUtil.copyToList(rs.getRecords(), WorkOrderOutDTO.class);
+        Page<WorkOrderOutDTO> outPage = new Page<>(inDTO.getPageNum(), inDTO.getPageSize(), rs.getTotal());
+        outPage.setRecords(outDTOList);
+        return outPage;
+    }
+
+    /**
+     * 办结工单分页查询(已办结:已结案、已驳回)
+     * @param inDTO
+     * @return
+     */
+    @Override
+    public Page<WorkOrderOutDTO> findFinishedPage(WorkOrderFinishedInDTO inDTO) {
+        log.info("办结工单分页查询-入参:{}", inDTO);
+        Page<WorkOrder> page = new Page<>(inDTO.getPageNum(), inDTO.getPageSize());
+        // 办结工单状态:6-已结案 7-已驳回 9-已延期
+        List<Integer> finishedStatusList = Arrays.asList(6, 7, 9);
+        LambdaQueryWrapper<WorkOrder> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.in(WorkOrder::getOrderStatus, finishedStatusList)
+                .like(StringUtils.isNotEmpty(inDTO.getOrderNo()), WorkOrder::getOrderNo, inDTO.getOrderNo())
+                .like(StringUtils.isNotEmpty(inDTO.getCaseNo()), WorkOrder::getCaseNo, inDTO.getCaseNo())
+                .eq(inDTO.getOrderType() != null, WorkOrder::getOrderType, inDTO.getOrderType())
+                .eq(inDTO.getOrderLevel() != null, WorkOrder::getOrderLevel, inDTO.getOrderLevel())
+                .eq(inDTO.getVerifyUser() != null, WorkOrder::getVerifyUser, inDTO.getVerifyUser())
+                .ge(inDTO.getStartTime() != null, WorkOrder::getRealFinishTime, inDTO.getStartTime())
+                .le(inDTO.getEndTime() != null, WorkOrder::getRealFinishTime, inDTO.getEndTime())
+                .orderByDesc(WorkOrder::getUpdateTime);
+        Page<WorkOrder> rs = this.page(page, queryWrapper);
+        List<WorkOrderOutDTO> outDTOList = BeanUtil.copyToList(rs.getRecords(), WorkOrderOutDTO.class);
+        Page<WorkOrderOutDTO> outPage = new Page<>(inDTO.getPageNum(), inDTO.getPageSize(), rs.getTotal());
+        outPage.setRecords(outDTOList);
+        return outPage;
+    }
+
     /**
      * 操作工单
      * @param inDTO

+ 45 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/manhole/dto/in/WorkOrderAddInDTO.java

@@ -0,0 +1,45 @@
+package com.zksy.manhole.dto.in;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 新增工单-入参
+ *
+ * @author xianggx
+ */
+@Data
+@ApiModel(value = "新增工单-入参", description = "新增工单-入参")
+public class WorkOrderAddInDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "报警ID")
+    private String alarmId;
+
+    @ApiModelProperty(value = "案件ID")
+    private Long caseId;
+
+    @ApiModelProperty(value = "设备ID", required = true)
+    private String deviceId;
+
+    @ApiModelProperty(value = "工单类型:1-故障维修 2-日常巡检 3-设备保养", required = true)
+    private Integer orderType;
+
+    @ApiModelProperty(value = "工单优先级:1-紧急 2-一般 3-低", required = true)
+    private Integer orderLevel;
+
+    @ApiModelProperty(value = "工单问题描述", required = true)
+    private String orderDesc;
+
+    @ApiModelProperty(value = "负责部门ID")
+    private Long deptId;
+
+    @ApiModelProperty(value = "计划完成时间")
+    @JsonFormat(locale = "zh", pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date planFinishTime;
+}

+ 49 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/manhole/dto/in/WorkOrderFinishedInDTO.java

@@ -0,0 +1,49 @@
+package com.zksy.manhole.dto.in;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 办结工单(已办结)分页查询-入参
+ *
+ * @author xianggx
+ */
+@Data
+@ApiModel(value = "办结工单-入参", description = "办结工单分页查询-入参")
+public class WorkOrderFinishedInDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "工单编号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "案件编号")
+    private String caseNo;
+
+    @ApiModelProperty(value = "工单类型:1-故障维修 2-日常巡检 3-设备保养")
+    private Integer orderType;
+
+    @ApiModelProperty(value = "工单优先级:1-紧急 2-一般 3-低")
+    private Integer orderLevel;
+
+    @ApiModelProperty(value = "验收人ID")
+    private Long verifyUser;
+
+    @ApiModelProperty(value = "办结开始时间")
+    @JsonFormat(locale = "zh", pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date startTime;
+
+    @ApiModelProperty(value = "办结结束时间")
+    @JsonFormat(locale = "zh", pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date endTime;
+
+    @ApiModelProperty(value = "当前记录起始索引", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "每页显示记录数", required = true)
+    private Long pageSize;
+}

+ 39 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/manhole/dto/in/WorkOrderProcessingInDTO.java

@@ -0,0 +1,39 @@
+package com.zksy.manhole.dto.in;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 经办工单(处理中)分页查询-入参
+ *
+ * @author xianggx
+ */
+@Data
+@ApiModel(value = "经办工单-入参", description = "经办工单分页查询-入参")
+public class WorkOrderProcessingInDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "工单编号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "案件编号")
+    private String caseNo;
+
+    @ApiModelProperty(value = "工单类型:1-故障维修 2-日常巡检 3-设备保养")
+    private Integer orderType;
+
+    @ApiModelProperty(value = "工单优先级:1-紧急 2-一般 3-低")
+    private Integer orderLevel;
+
+    @ApiModelProperty(value = "接单运维人员ID")
+    private Long receiveUser;
+
+    @ApiModelProperty(value = "当前记录起始索引", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "每页显示记录数", required = true)
+    private Long pageSize;
+}