From 4ad52b73c530b4b0d9887b5e2afc32f2e4aac27cb30001c38cc20abf6e23dd6a Mon Sep 17 00:00:00 2001 From: attiya <2413103649@qq.com> Date: Mon, 15 Dec 2025 15:15:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E6=96=87=E6=A8=A1=E5=9D=97=E5=A4=84?= =?UTF-8?q?=E7=90=86=E3=80=81=E6=8E=A5=E5=8F=A3=E5=AE=9A=E4=B9=89=EF=BC=9A?= =?UTF-8?q?=E5=B7=A5=E5=8D=95=E7=9C=8B=E6=9D=BF=E3=80=81=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E7=9C=8B=E6=9D=BF,kafka=E4=B8=BB=E9=A2=98=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=EF=BC=88=E9=A2=84=E7=95=99=E5=A4=9A=E5=93=81=E7=89=8C=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/cdzy/gather/mqtt/MqttHandler.java | 14 +- .../operations/component/KafkaConsumer.java | 2 +- .../controller/EbikeBikeOrderController.java | 17 ++- .../controller/EbikeHomeInfoController.java | 19 +++ .../operations/model/dto/EbikeHomeInfo.java | 129 ++++++++++++++++++ .../dto/EbikeOrderBulletinBoardInfo.java | 85 ++++++++++++ .../service/EbikeBikeOrderService.java | 6 + .../impl/EbikeBikeOrderServiceImpl.java | 6 + .../cdzy/report/component/KafkaConsumer.java | 4 +- .../cdzy/report/component/ReoprtHandler.java | 5 +- 10 files changed, 273 insertions(+), 14 deletions(-) create mode 100644 ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeHomeInfoController.java create mode 100644 ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeHomeInfo.java create mode 100644 ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeOrderBulletinBoardInfo.java diff --git a/ebike-gather/src/main/java/org/cdzy/gather/mqtt/MqttHandler.java b/ebike-gather/src/main/java/org/cdzy/gather/mqtt/MqttHandler.java index df60f26..c12575c 100644 --- a/ebike-gather/src/main/java/org/cdzy/gather/mqtt/MqttHandler.java +++ b/ebike-gather/src/main/java/org/cdzy/gather/mqtt/MqttHandler.java @@ -112,11 +112,15 @@ public class MqttHandler extends ChannelInboundHandlerAdapter { private void processReceivedMessage(String topic, String content) { try { KafkaProducer kafkaProducer = SpringContextHolder.getBean(KafkaProducer.class); - if (topic.contains("rsp")) { - kafkaProducer.send("msg_rsp",content); - } else if (topic.contains("rpt")) { - kafkaProducer.send("msg_rpt",content); - } + if (topic.contains("cdzybms")){ + if (topic.contains("rsp")) { + //乐摇摇响应 + kafkaProducer.send("msg_lyy_rsp",content); + } else if (topic.contains("rpt")) { + //乐摇摇上报 + kafkaProducer.send("msg_lyy_rpt",content); + } + } log.info("处理MQTT消息 - 主题: {}, 内容: {}", topic, content); if (topic.startsWith("sensor/")) { handleSensorData(topic, content); diff --git a/ebike-operations/src/main/java/com/cdzy/operations/component/KafkaConsumer.java b/ebike-operations/src/main/java/com/cdzy/operations/component/KafkaConsumer.java index 81f8213..38c89d6 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/component/KafkaConsumer.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/component/KafkaConsumer.java @@ -28,7 +28,7 @@ public class KafkaConsumer { * * @param record 消息 */ - @KafkaListener(topics = {"msg_rsp"}) + @KafkaListener(topics = {"msg_lyy_rsp"}) public void onMessage(ConsumerRecord record) throws JsonProcessingException { log.info("[KAFKA接收] 主题: {}, 内容: {}", record.topic(), record.value()); ObjectMapper objectMapper = new ObjectMapper(); diff --git a/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeBikeOrderController.java b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeBikeOrderController.java index a2e6115..8ac18cf 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeBikeOrderController.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeBikeOrderController.java @@ -5,10 +5,7 @@ import com.cdzy.common.enums.Message; import com.cdzy.common.model.request.PageParam; import com.cdzy.common.model.response.JsonResult; import com.cdzy.operations.enums.BikeOrderHandleState; -import com.cdzy.operations.model.dto.EbikeBikeOrderInfoDto; -import com.cdzy.operations.model.dto.EbikeOrderBikeListDto; -import com.cdzy.operations.model.dto.EbikeBikeOrderPageDto; -import com.cdzy.operations.model.dto.EbikeOrderBikeInfoDto; +import com.cdzy.operations.model.dto.*; import com.cdzy.operations.model.entity.EbikeRegion; import com.cdzy.operations.model.vo.*; import com.cdzy.operations.service.EbikeBikeOrderService; @@ -277,4 +274,16 @@ public class EbikeBikeOrderController { EbikeOrderBikeInfoDto info = ebikeBikeOrderService.bikeInfo(bikeCode,orderType); return JsonResult.success(info); } + + + /** + * 工单看板 + * + * @return 操作结果 + */ + @GetMapping("bulletinBoard") + public JsonResult bulletinBoard() { + EbikeOrderBulletinBoardInfo info = ebikeBikeOrderService.bulletinBoard(); + return JsonResult.success(info); + } } diff --git a/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeHomeInfoController.java b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeHomeInfoController.java new file mode 100644 index 0000000..adffba5 --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/controller/EbikeHomeInfoController.java @@ -0,0 +1,19 @@ +package com.cdzy.operations.controller; + +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 中控基本信息 控制层。 + * + * @author attiya + * @since 2025-09-15 + */ +@RestController +@RequestMapping("/home") +@Validated +public class EbikeHomeInfoController { + + +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeHomeInfo.java b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeHomeInfo.java new file mode 100644 index 0000000..f5af73f --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeHomeInfo.java @@ -0,0 +1,129 @@ +package com.cdzy.operations.model.dto; + +import com.cdzy.operations.handler.PGpointDeserializer; +import com.cdzy.operations.handler.PGpointSerializer; +import com.cdzy.operations.handler.PGpointTypeHandler; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.mybatisflex.annotation.Column; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.postgresql.geometric.PGpoint; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 主页详情。 + * + * @author attiya + * @since 2025-10-21 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EbikeHomeInfo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 车辆详情ID + */ + private Long bikeInfoId; + + /** + * 运营商ID + */ + private Long operatorId; + + /** + * 运营区ID + */ + private Long regionId; + + /** + * 运营区名称 + */ + private String regionName; + + /** + * 车辆编号(与车辆二维码编号相同 + */ + private String bikeCode; + + /** + * 电池ID + */ + private Long batteryId; + + /** + * 中控ID + */ + private Long ecuId; + + /** + * 头盔ID + */ + private Long helmetId; + + /** + * 定位 + */ + @Column(typeHandler = PGpointTypeHandler.class) + @JsonSerialize(using = PGpointSerializer.class) + @JsonDeserialize(using = PGpointDeserializer.class) + private PGpoint location; + + /** + * 备注 + */ + private String remarks; + + /** + * 车辆状态 + */ + private Integer status; + + /** + * 车辆使用状态 + */ + private Integer usageStatus; + + /** + * 创建时间 + */ + @Column(onInsertValue = "now()") + private LocalDateTime createdAt; + + /** + * 创建人 + */ + private Long createdBy; + + /** + * 修改时间 + */ + @Column(onUpdateValue = "now()") + private LocalDateTime updatedAt; + + /** + * 修改人 + */ + private Long updatedBy; + + /** + * 删除与否 + */ + private Boolean isDeleted; + + /** + * 是否包含头盔 + */ + private Boolean hasHelme; + +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeOrderBulletinBoardInfo.java b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeOrderBulletinBoardInfo.java new file mode 100644 index 0000000..e39b831 --- /dev/null +++ b/ebike-operations/src/main/java/com/cdzy/operations/model/dto/EbikeOrderBulletinBoardInfo.java @@ -0,0 +1,85 @@ +package com.cdzy.operations.model.dto; + +import com.cdzy.operations.handler.PGpointDeserializer; +import com.cdzy.operations.handler.PGpointSerializer; +import com.cdzy.operations.handler.PGpointTypeHandler; +import com.cdzy.operations.model.entity.EbikeOrderPart; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.mybatisflex.annotation.Column; +import com.mybatisflex.annotation.RelationOneToMany; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.postgresql.geometric.PGpoint; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + +/** + * 工单看板详情 + * + * @author attiya + * @since 2025-11-24 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class EbikeOrderBulletinBoardInfo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * 工单ID + */ + private Long orderId; + + /** + * 工单类型 + */ + private Integer orderType; + + /** + * 车辆编号 + */ + private String bikeCode; + + /** + * 定位 + */ + @Column(typeHandler = PGpointTypeHandler.class) + @JsonSerialize(using = PGpointSerializer.class) + @JsonDeserialize(using = PGpointDeserializer.class) + private PGpoint location; + + + + private LocalDateTime createdAt; + + /** + * 故障内容 + */ + private String remark; + + /** + * SN + */ + private String ecuSn; + + /** + * 电量 + */ + private Integer soc; + + /** + * 故障部位 + */ + @RelationOneToMany(selfField = "orderId", targetField = "orderId") + private List parts; +} diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeOrderService.java b/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeOrderService.java index f8b25cc..dad4e79 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeOrderService.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/EbikeBikeOrderService.java @@ -3,6 +3,7 @@ package com.cdzy.operations.service; import com.cdzy.operations.model.dto.EbikeBikeOrderInfoDto; import com.cdzy.operations.model.dto.EbikeOrderBikeListDto; import com.cdzy.operations.model.dto.EbikeOrderBikeInfoDto; +import com.cdzy.operations.model.dto.EbikeOrderBulletinBoardInfo; import com.cdzy.operations.model.entity.EbikeBikeOrder; import com.cdzy.operations.model.entity.EbikeRegion; import com.cdzy.operations.model.vo.*; @@ -127,4 +128,9 @@ public interface EbikeBikeOrderService extends IService { * @param faultOrderVo 信息 */ void doFault(DoneFaultOrderVo faultOrderVo); + + /** + * 工单看板 + */ + EbikeOrderBulletinBoardInfo bulletinBoard(); } diff --git a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeOrderServiceImpl.java b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeOrderServiceImpl.java index 50690ad..0ce596b 100644 --- a/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeOrderServiceImpl.java +++ b/ebike-operations/src/main/java/com/cdzy/operations/service/impl/EbikeBikeOrderServiceImpl.java @@ -9,6 +9,7 @@ import com.cdzy.operations.mapper.*; import com.cdzy.operations.model.dto.EbikeBikeOrderInfoDto; import com.cdzy.operations.model.dto.EbikeOrderBikeInfoDto; import com.cdzy.operations.model.dto.EbikeOrderBikeListDto; +import com.cdzy.operations.model.dto.EbikeOrderBulletinBoardInfo; import com.cdzy.operations.model.entity.*; import com.cdzy.operations.model.vo.*; import com.cdzy.operations.service.EbikeBikeOrderService; @@ -620,6 +621,11 @@ public class EbikeBikeOrderServiceImpl extends ServiceImpl record) throws JsonProcessingException { log.info("[KAFKA接收] 主题: {}, 内容: {}", record.topic(), record.value()); JsonNode jsonNode = mapper.readValue(record.value().toString(), JsonNode.class); - reoprtHandler.reportHandler(jsonNode); + reoprtHandler.reportHandler(jsonNode,record.topic()); } } diff --git a/ebike-report/src/main/java/com/cdzy/report/component/ReoprtHandler.java b/ebike-report/src/main/java/com/cdzy/report/component/ReoprtHandler.java index ddc8181..769d7e7 100644 --- a/ebike-report/src/main/java/com/cdzy/report/component/ReoprtHandler.java +++ b/ebike-report/src/main/java/com/cdzy/report/component/ReoprtHandler.java @@ -36,10 +36,11 @@ public class ReoprtHandler { /** * 报文处理 */ - public void reportHandler(JsonNode response) { + public void reportHandler(JsonNode response,String topic) { int c = response.get("c").asInt(); JsonNode param = response.get("param"); - String deviceId = param.get("SN").asText(); + String[] parts = topic.split("/"); + String deviceId = parts[parts.length - 1]; switch (c) { case 56: gpsMsgHandler(param, deviceId);