From 549b9d60edcdb46366c60666ea4ee2c2e4533951 Mon Sep 17 00:00:00 2001 From: zhubaomin <zhubaomin> Date: 星期三, 06 十一月 2024 19:47:51 +0800 Subject: [PATCH] 创建工单接口,通过RocketMQ推送给消费者 --- /dev/null | 37 ------- pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java | 32 ++++++ pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml | 1 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeWorkOrderMapper.java | 8 + pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml | 20 ++++ pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java | 88 ++++++++++++++--- pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml | 2 pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java | 82 ++++++++++++++++ 8 files changed, 215 insertions(+), 55 deletions(-) diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeWorkOrderMapper.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeWorkOrderMapper.java index 385896e..24e556b 100644 --- a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/daoOp/OpeWorkOrderMapper.java +++ b/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); } \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java new file mode 100644 index 0000000..5b8ad54 --- /dev/null +++ b/pipIrr-platform/pipIrr-global/src/main/java/com/dy/pipIrrGlobal/voOp/VoWorkOrder.java @@ -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; + + /** + * 娲惧崟浜篒D + */ + @JSONField(serializeUsing= ObjectWriterImplToString.class) + private Long dispatcherId; + + /** + * 娲惧崟浜哄鍚� + */ + private String dispatcher; + + /** + * 宸℃鍛業D + */ + @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; +} diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml index 8375871..7564bf5 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml +++ b/pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml @@ -381,4 +381,4 @@ #铏氭嫙鍗¢厤缃弬鏁� vc: #铏氭嫙鍗℃渶浣庝綑棰濇姤璀﹀�� - alarmValue: 10 + alarmValue: 10 \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml b/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml index ea42de9..4b62a3b 100644 --- a/pipIrr-platform/pipIrr-global/src/main/resources/mapper/OpeWorkOrderMapper.xml +++ b/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> \ No newline at end of file diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/ConsumerListener_push.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/ConsumerListener_push.java deleted file mode 100644 index db86cf3..0000000 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/ConsumerListener_push.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.dy.pipIrrApp.workOrder; - -import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer; -import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus; -import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently; -import org.apache.rocketmq.client.exception.MQClientException; -import org.apache.rocketmq.common.message.MessageExt; -import org.springframework.stereotype.Component; - -/** - * @author ZhuBaoMin - * @date 2024-11-04 15:02 - * @LastEditTime 2024-11-04 15:02 - * @Description - */ - -@Component -public class ConsumerListener_push{ - public void receiveMessage () throws MQClientException { - DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer_group"); - consumer.setNamesrvAddr("127.0.0.1:9876"); - - // 璁剧疆娑堟伅鐩戝惉鍣� - consumer.registerMessageListener((MessageListenerConcurrently) (msgs, context) -> { - for (MessageExt msg : msgs) { - System.out.println("ConsumerListener_push receive message: " + new String(msg.getBody())); - } - return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; - }); - - // 璁㈤槄涓婚鍜屾爣绛� - consumer.subscribe("workOrder", "鐜嬩簲"); - - // 鍚姩娑堣垂鑰� - consumer.start(); - } -} diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java index a20b809..96f3f92 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderCtrl.java +++ b/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; + } + } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java index c635d5e..1a01ab6 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/java/com/dy/pipIrrApp/workOrder/WorkOrderSv.java +++ b/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); + } } diff --git a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml b/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml index 7c6f3fb..ec02f18 100644 --- a/pipIrr-platform/pipIrr-web/pipIrr-web-app/src/main/resources/application.yml +++ b/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 # 涓�娆℃媺鍙栨秷鎭渶澶у�硷紝娉ㄦ剰鏄媺鍙栨秷鎭殑鏈�澶у�艰�岄潪娑堣垂鏈�澶у�� -- Gitblit v1.8.0