zhubaomin
2024-11-06 549b9d60edcdb46366c60666ea4ee2c2e4533951
创建工单接口,通过RocketMQ推送给消费者
6个文件已修改
1个文件已添加
1个文件已删除
270 ■■■■ 已修改文件
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeWorkOrderMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/ConsumerListener_push.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java 88 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeWorkOrderMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder;
import com.dy.pipIrrGlobal.voOp.VoWorkOrder;
import org.apache.ibatis.annotations.Mapper;
/**
@@ -24,4 +25,11 @@
    int updateByPrimaryKeySelective(OpeWorkOrder record);
    int updateByPrimaryKey(OpeWorkOrder record);
    /**
     * 根据主键获取工单视图对象
     * @param workOrderId
     * @return
     */
    VoWorkOrder getWorkOrderById(Long workOrderId);
}
pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java
New file
@@ -0,0 +1,82 @@
package com.dy.pipIrrGlobal.voOp;
import com.alibaba.fastjson2.annotation.JSONField;
import com.alibaba.fastjson2.writer.ObjectWriterImplToString;
import com.dy.common.po.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import lombok.Data;
import java.util.Date;
/**
 * @author ZhuBaoMin
 * @date 2024-11-06 15:46
 * @LastEditTime 2024-11-06 15:46
 * @Description 工单视图对象
 */
@Data
@JsonPropertyOrder({"dispatcherId", "dispatcher", "inspectorId", "inspector", "taskTypeId", "taskType", "taskContent", "completeCriteria", "deadLine", "dispatchTime", "rejectTimes"})
public class VoWorkOrder implements BaseEntity {
    public static final long serialVersionUID = 202411061524001L;
    /**
     * 派单人ID
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    private Long dispatcherId;
    /**
     * 派单人姓名
     */
    private String dispatcher;
    /**
     * 巡检员ID
     */
    @JSONField(serializeUsing= ObjectWriterImplToString.class)
    private Long inspectorId;
    /**
     * 巡检员姓名
     */
    private String inspector;
    /**
     * 任务类型ID
     */
    //@JSONField(serializeUsing= ObjectWriterImplToString.class)
    //private Long taskTypeId;
    /**
     * 任务类型
     */
    private String taskType;
    /**
     * 任务内容
     */
    private String taskContent;
    /**
     * 完成标准
     */
    private String completeCriteria;
    /**
     * 要求完成时间;精确到分
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private Date deadLine;
    /**
     * 派单时间
     */
    private Date dispatchTime;
    /**
     * 驳回次数
     */
    private Integer rejectTimes;
}
pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -381,4 +381,4 @@
#虚拟卡配置参数
vc:
    #虚拟卡最低余额报警值
    alarmValue: 10
    alarmValue: 10
pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml
@@ -183,4 +183,24 @@
      deleted = #{deleted,jdbcType=BIGINT}
    where id = #{id,jdbcType=BIGINT}
  </update>
  <!--根据主键获取工单视图对象-->
  <select id="getWorkOrderById" resultType="com.dy.pipIrrGlobal.voOp.VoWorkOrder">
    SELECT
        ord.dispatcher_id AS dispatcherId,
        us1.name AS dispatcher,
        ord.inspector_id AS inspectorId,
        us2.name AS inspector,
        typ.task_type AS taskType,
        ord.task_content AS taskContent,
        ord.complete_criteria AS completeCriteria,
        ord.dead_line AS deadLine,
        ord.dispatch_time AS dispatchTime,
        ord.reject_times AS rejectTimes
    FROM ope_work_order ord
        INNER JOIN ba_user us1 ON us1.id = ord.dispatcher_id
        INNER JOIN ba_user us2 ON us2.id = ord.inspector_id
        INNER JOIN ope_task_type typ ON typ.id = ord.task_type_id
    WHERE ord.deleted = 0 AND ord.id = #{workOrderId}
  </select>
</mapper>
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/ConsumerListener_push.java
File was deleted
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java
@@ -1,6 +1,12 @@
package com.dy.pipIrrApp.workOrder;
import com.alibaba.fastjson2.JSON;
import com.dy.common.aop.SsoAop;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder;
import com.dy.pipIrrGlobal.voOp.VoWorkOrder;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.exception.MQBrokerException;
@@ -11,12 +17,17 @@
import org.apache.rocketmq.remoting.exception.RemotingException;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.MediaType;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
/**
 * @author ZhuBaoMin
@@ -35,26 +46,69 @@
    @Autowired
    private RocketMQTemplate rocketMQTemplate;
    @Value("${rocketmq.name-server}")
    protected String nameServer;
    @GetMapping("/sendWorkOrder")
    @Value("${rocketmq.producer.group}")
    protected String producerGroup;
    @Value("${rocketmq.topic}")
    protected String topic;
    /**
     * 创建工单
     * @param po
     * @param bindingResult
     * @return
     */
    @PostMapping(path = "addWorkOrder", consumes = MediaType.APPLICATION_JSON_VALUE)
    @Transactional(rollbackFor = Exception.class)
    @SsoAop()
    public void sendWorkOrder() throws MQClientException, MQBrokerException, RemotingException, InterruptedException {
        ConsumerListener_push ConsumerListener_push = new ConsumerListener_push();
        ConsumerListener_push.receiveMessage();
    public BaseResponse<Boolean> addWorkOrder(@RequestBody @Valid OpeWorkOrder po, BindingResult bindingResult) throws MQBrokerException, RemotingException, InterruptedException, MQClientException {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildErrorMsg(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        String topic = "workOrder";
        String tag = "王五";
        String key = "11";
        String message = "Hello World";
        //SendResult sendResult = rocketMQTemplate.syncSend(topic + ":" + tag, message);
        //System.out.println("send result:" + sendResult.toString());
        Long workOrderId = workOrderSv.insertWorkOrder(po);
        if(workOrderId == null || workOrderId == 0) {
            return BaseResponseUtils.buildErrorMsg("创建工单失败");
        }
        DefaultMQProducer producer = new DefaultMQProducer("producer_group");
        producer.setNamesrvAddr("127.0.0.1:9876");
        producer.start();
        Message msg = new Message(topic,tag,"11",message.getBytes(StandardCharsets.UTF_8));
        SendResult approveSendResult = producer.send(msg);
        System.out.println("send result:" + approveSendResult.toString());
        VoWorkOrder voWorkOrder = workOrderSv.getWorkOrderById(workOrderId);
        if(voWorkOrder == null) {
            return BaseResponseUtils.buildErrorMsg("获取工单失败");
        }
        if(!sendWorkOrder(voWorkOrder)) {
            return BaseResponseUtils.buildErrorMsg("工单推送失败");
        }
        return BaseResponseUtils.buildSuccess();
    }
    /**
     * 推送工单
     * @param voWorkOrder
     * @throws MQClientException
     * @throws MQBrokerException
     * @throws RemotingException
     * @throws InterruptedException
     */
    private Boolean sendWorkOrder(VoWorkOrder voWorkOrder) throws MQClientException, MQBrokerException, RemotingException, InterruptedException {
        String tag = voWorkOrder.getInspector();
        String key = voWorkOrder.getInspectorId().toString();
        String message = JSON.toJSONString(voWorkOrder);
        DefaultMQProducer producer = new DefaultMQProducer(producerGroup);
        producer.setNamesrvAddr(nameServer);
        producer.start();
        Message msg = new Message(topic, tag, key, message.getBytes(StandardCharsets.UTF_8));
        SendResult approveSendResult = producer.send(msg);
        if(!approveSendResult.getSendStatus().toString().equals("SEND_OK")) {
            return false;
        }
        return true;
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java
@@ -1,7 +1,13 @@
package com.dy.pipIrrApp.workOrder;
import com.dy.pipIrrGlobal.daoOp.OpeWorkOrderMapper;
import com.dy.pipIrrGlobal.pojoOp.OpeWorkOrder;
import com.dy.pipIrrGlobal.voOp.VoWorkOrder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
 * @author ZhuBaoMin
@@ -13,4 +19,30 @@
@Slf4j
@Service
public class WorkOrderSv {
    @Autowired
    private OpeWorkOrderMapper opeWorkOrderMapper;
    /**
     * 添加工单记录
     * @param po
     * @return
     */
    public Long insertWorkOrder(OpeWorkOrder po) {
        po.setDispatchTime(new Date());
        po.setState((byte)1);
        po.setRejectTimes(0);
        po.setDeleted(0L);
        opeWorkOrderMapper.insert(po);
        return po.getId();
    }
    /**
     * 根据主键获取工单视图对象
     * @param workOrderId
     * @return
     */
    public VoWorkOrder getWorkOrderById(Long workOrderId) {
        return opeWorkOrderMapper.getWorkOrderById(workOrderId);
    }
}
pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml
@@ -16,6 +16,7 @@
            idSuffix: ${pipIrr.app.idSuffix}
rocketmq:
    topic: "workOrder"
    consumer:
        group: consumer_group
        # 一次拉取消息最大值,注意是拉取消息的最大值而非消费最大值