package com.dy.pipIrrApp.workOrder; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.dy.common.aop.SsoAop; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.QueryResultVo; import com.dy.pipIrrApp.workOrder.dto.DtoDeleteProResult; import com.dy.pipIrrApp.workOrder.dto.DtoDeleteWorkOrder; import com.dy.pipIrrApp.workOrder.mqtt.MqttClientConnectorPool; import com.dy.pipIrrApp.workOrder.mqtt.MqttMsgSender; import com.dy.pipIrrApp.workOrder.qo.QoWorkOrder; import com.dy.pipIrrGlobal.pojoOp.OpeApproveResult; import com.dy.pipIrrGlobal.pojoOp.OpeProcessingResult; import com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder; import com.dy.pipIrrGlobal.voBa.VoRoleSimple; import com.dy.pipIrrGlobal.voOp.VoProcessingResult; import com.dy.pipIrrGlobal.voOp.VoTaskType; import com.dy.pipIrrGlobal.voOp.VoWorkOrder; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.eclipse.paho.client.mqttv3.MqttClient; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Objects; /** * @author ZhuBaoMin * @date 2024-11-04 9:30 * @LastEditTime 2024-11-04 9:30 * @Description 工单控制类 */ @Slf4j @RestController @RequestMapping(path = "workOrder") @RequiredArgsConstructor public class WorkOrderCtrl { private final WorkOrderSv workOrderSv; @Value("${mqtt.broker}") private String broker; @Value("${mqtt.username}") private String username; @Value("${mqtt.password}") private String password; @Value("${mqtt.topic}") private String topic; @Value("${mqtt.qos}") private Integer qos; /** * 创建工单 * @param po * @param bindingResult * @return */ @PostMapping(path = "addWorkOrder", consumes = MediaType.APPLICATION_JSON_VALUE) @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse addWorkOrder(@RequestBody @Valid OpeWorkOrder po, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } if(po.getClientReportId() != null && po.getInspectorReportId() != null) { return BaseResponseUtils.buildErrorMsg("工单仅能关联一个问题上报"); } Long workOrderId = workOrderSv.insertWorkOrder(po); if(workOrderId == null || workOrderId == 0) { return BaseResponseUtils.buildErrorMsg("创建工单失败"); } VoWorkOrder voWorkOrder = workOrderSv.getWorkOrderById(workOrderId); if(voWorkOrder == null) { return BaseResponseUtils.buildErrorMsg("获取工单失败"); } if(!sendWorkOrder(voWorkOrder, workOrderId)) { return BaseResponseUtils.buildErrorMsg("工单推送失败"); } return BaseResponseUtils.buildSuccess(); } /** * 通过mosquitto发送巡检员ID及工单ID * @param voWorkOrder 工单对象 * @param workOrderId 工单ID * @return */ public Boolean sendWorkOrder(VoWorkOrder voWorkOrder, Long workOrderId) { //String message = JSON.toJSONString(voWorkOrder); JSONObject message_job = new JSONObject(); message_job.put("inspectorId", voWorkOrder.getInspectorId().toString()); message_job.put("workOrderId", workOrderId.toString()); String message = JSON.toJSONString(message_job); MqttClient mqttClient = MqttClientConnectorPool.connectMQTT(broker, username, password); MqttMsgSender sender = new MqttMsgSender(); if (null != mqttClient){ sender.sendMessage(mqttClient, topic, message, qos); } else { log.info("MqttClient为空,无法发送!"); return false; } return true; } /** * 逻辑删除指定派单人的指定未删除工单 * 先判断指定派单人、未删除的指定工单是否存在 * @param deleteWorkOrder 删除工单传输类 * @param bindingResult * @return */ @PostMapping(path = "deleteWorkOrder") @SsoAop() public BaseResponse deleteWorkOrder(@RequestBody @Valid DtoDeleteWorkOrder deleteWorkOrder, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } OpeWorkOrder workOrder = workOrderSv.getWorkOrder(deleteWorkOrder.getWorkOrderId(), deleteWorkOrder.getDispatcherId()); if(workOrder == null) { return BaseResponseUtils.buildErrorMsg("您要删除的工单不存在"); } if(workOrderSv.deleteWorkOrder(deleteWorkOrder.getWorkOrderId()) == 0) { return BaseResponseUtils.buildErrorMsg("工单删除失败"); } return BaseResponseUtils.buildSuccess(); } /** * 根据指定条件获取未删除的工单列表 * @param qo * @return */ @GetMapping(path = "/getWorkOrders") @SsoAop() public BaseResponse>> getWorkOrders(QoWorkOrder qo){ try { return BaseResponseUtils.buildSuccess(workOrderSv.getWorkOrders(qo)); } catch (Exception e) { return BaseResponseUtils.buildException(e.getMessage()) ; } } /** * 获取工单详情 * @param workOrderId * @return */ @GetMapping(path = "/getOneWorkOrder") @SsoAop() public BaseResponse getOneWorkOrder(@RequestParam("workOrderId") Long workOrderId) { try { return BaseResponseUtils.buildSuccess(workOrderSv.getWorkOrderById(workOrderId)); } catch (Exception e) { log.error("获取工单详情异常", e); return BaseResponseUtils.buildException(e.getMessage()); } } /** * 上报工单处理结果 * 1.未上报的,直接上报 * 2. 已上报的的,提示用户不能重复上报 * 3. 已通过的,提示用户处理结果处理结果已通过 * 4. 驳回的,逻辑删除原处理结果,上报新的处理结果 * @param po * @param bindingResult * @return */ @PostMapping(path = "addProcessingResult") @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse addProcessingResult(@RequestBody @Valid OpeProcessingResult po, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } String result = workOrderSv.addProcessingResult(po); if(!result.equals("success")) { return BaseResponseUtils.buildErrorMsg(result); } return BaseResponseUtils.buildSuccess(true) ; } /** * 逻辑删除一个处理结果 * @param deleteProResult * @param bindingResult * @return */ @PostMapping(path = "deleteProResult") @SsoAop() public BaseResponse deleteProResult(@RequestBody @Valid DtoDeleteProResult deleteProResult, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } OpeProcessingResult proResult = workOrderSv.getProResult(deleteProResult.getProResultId(), deleteProResult.getInspectorId()); if(proResult == null) { return BaseResponseUtils.buildErrorMsg("您要删除的处理结果不存在"); } if(workOrderSv.deleteProResult(deleteProResult.getProResultId()) == 0) { return BaseResponseUtils.buildErrorMsg("处理结果删除失败"); } return BaseResponseUtils.buildSuccess(); } /** * 获取处理结果详情 * @param proResultId * @return */ @GetMapping(path = "/getProResult") @SsoAop() public BaseResponse getProResult(@RequestParam("proResultId") Long proResultId) { try { String aa = JSON.toJSONString(workOrderSv.getProResultById(proResultId)); System.out.println(aa); return BaseResponseUtils.buildSuccess(workOrderSv.getProResultById(proResultId)); } catch (Exception e) { log.error("获取处理结果详情异常", e); return BaseResponseUtils.buildException(e.getMessage()); } } /** * 审核处理结果 * @param po * @param bindingResult * @return */ @PostMapping(path = "approveProResult") @Transactional(rollbackFor = Exception.class) @SsoAop() public BaseResponse approveProResult(@RequestBody @Valid OpeApproveResult po, BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } String result = workOrderSv.approveProResult(po); if(!result.equals("success")) { return BaseResponseUtils.buildErrorMsg(result); } return BaseResponseUtils.buildSuccess(true) ; } /** * 获取任务类型列表 * @return */ @GetMapping(path = "/getTaskTypes") @SsoAop() public BaseResponse> getTaskTypes() { try { return BaseResponseUtils.buildSuccess(workOrderSv.getTaskTypes()); } catch (Exception e) { log.error("获取任务类型异常", e); return BaseResponseUtils.buildException(e.getMessage()); } } /** * 获取巡检员列表 * @param inspector * @return */ @GetMapping(path = "/getInspectors") @SsoAop() public BaseResponse> getInspectors(@RequestParam("inspector") String inspector) { try { return BaseResponseUtils.buildSuccess(workOrderSv.getInspectors(inspector)); } catch (Exception e) { log.error("获取任务类型异常", e); return BaseResponseUtils.buildException(e.getMessage()); } } }