调整微信websocket的数据推送接口调整

取消没用的mqtt
This commit is contained in:
andy 2025-07-25 15:35:42 +08:00
parent c87d090a71
commit 3a040fe510
21 changed files with 343 additions and 224 deletions

View File

@ -71,6 +71,12 @@
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
<scope>compile</scope>
</dependency>
</dependencies>

View File

@ -1,19 +1,15 @@
package com.evotech.hd.common.core.entity.cloud;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.evotech.hd.common.core.entity.BaseEntity;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
import org.springframework.format.annotation.DateTimeFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author zrb
* @since 2024-12-11
@ -35,6 +31,7 @@ public class OrderSwapBatteryStep extends BaseEntity implements Serializable {
private String stepName;
@Schema(description = "步骤时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date stepTime;
}

View File

@ -26,12 +26,8 @@ public class InsertAndUpdateMybatisHandler implements MetaObjectHandler {
public void insertFill(MetaObject metaObject) {
try {
AuthUser user = RedisPermissionUtils.getUser();
if(BeanUtil.isEmpty(user)){
log.info("当前操作位登录, 无需执行");
return;
}
if(BeanUtil.isNotEmpty(metaObject)){
mySetFieldValByName("creater",user.getUid(),metaObject);
mySetFieldValByName("creater",(BeanUtil.isEmpty(user) ? "system" : user.getUid()),metaObject);
mySetFieldValByName("ctime",new Date(),metaObject);
}
} catch (Exception e) {
@ -52,12 +48,8 @@ public class InsertAndUpdateMybatisHandler implements MetaObjectHandler {
public void updateFill(MetaObject metaObject) {
try {
AuthUser user = RedisPermissionUtils.getUser();
if(BeanUtil.isEmpty(user)){
log.info("当前操作未登录, 无需执行");
return;
}
if(BeanUtil.isNotEmpty(metaObject)){
mySetFieldValByName("updater",user.getUid(),metaObject);
mySetFieldValByName("updater",(BeanUtil.isEmpty(user) ? "system" : user.getUid()),metaObject);
mySetFieldValByName("uptime",new Date(),metaObject);
}
} catch (Exception e) {

View File

@ -107,7 +107,7 @@ public class MqttEventSwapCompleteExchangeProcessorImpl implements MqttStrategyE
orderService.updateById(order);
//修改订单状态及金额
alterOrderStatus(order, statusData);
//记录换电步骤
//记录电池信息 or 记录最后的换电步骤
alterSwapBatteryStep(orderStatus, statusData, order);
}

View File

@ -1,69 +1,69 @@
package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatteryData;
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatteryInfoReq;
import com.evotech.hd.cloud.service.BatteryStationDcService;
import com.evotech.hd.common.core.constant.HDConstant;
import com.evotech.hd.common.core.entity.cloud.BatteryStationDc;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* 站端请求电池数据
*
* @ClassName:MqttRequestBatteryInfoExchangeProcessorImpl
* @date: 2025年05月19日 17:41
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Service
@Slf4j
public class MqttRequestBatteryInfoExchangeProcessorImpl implements MqttStrategyRequestExchangeProcessor {
@Resource
BatteryStationDcService batteryStationDcService;
@Override
public boolean accept(String functionName) {
return RequestFunctionTypesEnum.FUN_BATTERYINFO.getFunction().equals(functionName);
}
@Override
public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
BatteryInfoReq batteryInfoReq = JSONUtil.toBean(dataBody, BatteryInfoReq.class);
String batCode = batteryInfoReq.getBatCode();
//直接默认为错误
MqttResponse<List<BatteryData>> response = new MqttResponse<List<BatteryData>>().createError(batteryInfoReq.getBatteryInfoRequestId());
List<BatteryStationDc> list = Collections.emptyList();
if(org.apache.commons.lang3.StringUtils.isNotEmpty(batCode)){
list.addAll(batteryStationDcService.list(new LambdaQueryWrapper<BatteryStationDc>().eq(BatteryStationDc::getBatCode, batCode).eq(BatteryStationDc::getDelFlag, HDConstant.DELETE_NO)));
}else{
//如果没有电池编号, 则以当前站的电池数据为准
list.addAll(batteryStationDcService.listByStationCode(topic.getStationCode()));
}
if(com.evotech.hd.common.core.utils.Collections.isNotEmpty(list)){
response.setCode(MqttResponse.PUBLIC_SUCCESS);
response.setData(list.stream().map(x -> new BatteryData(x.getBatCode(), x.getProductionDate(), x.getRegistrationDate())).collect(Collectors.toList()));
}else {
response.setMsg("未查询到电池信息");
}
logger.info("\r\n站端请求电池数据: MqttRequestBatteryInfoExchangeProcessorImpl =====>>>message:{}", response.getMsg());
sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_BATTERYINFO, response);
}
}
//package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request;
//
//import cn.hutool.json.JSONObject;
//import cn.hutool.json.JSONUtil;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum;
//import com.evotech.hd.cloud.mqtt.message.MessageTopic;
//import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
//import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
//import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatteryData;
//import com.evotech.hd.cloud.mqtt.message.dto.newer.req.battery.BatteryInfoReq;
//import com.evotech.hd.cloud.service.BatteryStationDcService;
//import com.evotech.hd.common.core.constant.HDConstant;
//import com.evotech.hd.common.core.entity.cloud.BatteryStationDc;
//import jakarta.annotation.Resource;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Service;
//
//import java.util.Collections;
//import java.util.List;
//import java.util.stream.Collectors;
//
///**
// * 站端请求电池数据
// *
// * @ClassName:MqttRequestBatteryInfoExchangeProcessorImpl
// * @date: 2025年05月19日 17:41
// * @author: andy.shi
// * @contact: 17330188597
// * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
// */
//@Service
//@Slf4j
//public class MqttRequestBatteryInfoExchangeProcessorImpl implements MqttStrategyRequestExchangeProcessor {
//
// @Resource
// BatteryStationDcService batteryStationDcService;
//
// @Override
// public boolean accept(String functionName) {
// return RequestFunctionTypesEnum.FUN_BATTERYINFO.getFunction().equals(functionName);
// }
//
// @Override
// public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
// BatteryInfoReq batteryInfoReq = JSONUtil.toBean(dataBody, BatteryInfoReq.class);
// String batCode = batteryInfoReq.getBatCode();
// //直接默认为错误
// MqttResponse<List<BatteryData>> response = new MqttResponse<List<BatteryData>>().createError(batteryInfoReq.getBatteryInfoRequestId());
//
// List<BatteryStationDc> list = Collections.emptyList();
// if(org.apache.commons.lang3.StringUtils.isNotEmpty(batCode)){
// list.addAll(batteryStationDcService.list(new LambdaQueryWrapper<BatteryStationDc>().eq(BatteryStationDc::getBatCode, batCode).eq(BatteryStationDc::getDelFlag, HDConstant.DELETE_NO)));
// }else{
// //如果没有电池编号, 则以当前站的电池数据为准
// list.addAll(batteryStationDcService.listByStationCode(topic.getStationCode()));
// }
// if(com.evotech.hd.common.core.utils.Collections.isNotEmpty(list)){
// response.setCode(MqttResponse.PUBLIC_SUCCESS);
// response.setData(list.stream().map(x -> new BatteryData(x.getBatCode(), x.getProductionDate(), x.getRegistrationDate())).collect(Collectors.toList()));
// }else {
// response.setMsg("未查询到电池信息");
// }
//
// logger.info("\r\n站端请求电池数据: MqttRequestBatteryInfoExchangeProcessorImpl =====>>>message:{}", response.getMsg());
// sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_BATTERYINFO, response);
// }
//
//}

View File

@ -23,7 +23,7 @@ import org.springframework.stereotype.Service;
import java.util.Date;
/**
* 站端回复开始换电通知信息类
* 换电信息--站端回复开始换电通知信息类
*
* @ClassName:MqttRequestBatterySwapExchangeProcessorImpl
* @date: 2025年06月20日 11:29

View File

@ -14,7 +14,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
/**
* 取消订单请求类
* 取消订单--取消订单请求类
* @ClassName:MqttRequestCancelOrderExchangeProcessorImpl
* @date: 2025年05月19日 14:51
* @author: andy.shi

View File

@ -1,73 +1,73 @@
package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.evotech.hd.cloud.dao.VehicleWechatUserRelationDao;
import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.CarInfoReq;
import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.VehicleData;
import com.evotech.hd.common.core.entity.cloud.VehicleWechatUserRelation;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* 站端请求车辆信息
* @ClassName:MqttRequestCarInfoExchangeProcessorImpl
* @date: 2025年06月19日 11:21
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Service
@Slf4j
public class MqttRequestCarInfoExchangeProcessorImpl implements MqttStrategyRequestExchangeProcessor {
@Resource
private VehicleWechatUserRelationDao vehicleWechatUserRelationDao;
@Override
public boolean accept(String functionName) {
return RequestFunctionTypesEnum.FUN_CARINFO.getFunction().equals(functionName);
}
@Override
public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
CarInfoReq carInfoReq = JSONUtil.toBean(dataBody, CarInfoReq.class);
//直接默认为错误
MqttResponse<List<VehicleData>> response = new MqttResponse<List<VehicleData>>().createError(carInfoReq.getCarInfoRequestId());
String plateNum = carInfoReq.getPlateNum();
if(StringUtils.isEmpty(plateNum)){
response.setMsg("没有车牌号参数");
}else{
List<VehicleWechatUserRelation> list = vehicleWechatUserRelationDao.selectList(new LambdaQueryWrapper<VehicleWechatUserRelation>().eq( VehicleWechatUserRelation::getPlateNum, plateNum));
if(com.evotech.hd.common.core.utils.Collections.isNotEmpty(list)){
response.setCode(MqttResponse.PUBLIC_SUCCESS);
response.setData(list.stream().map(x->convertVehicleData(x)).collect(Collectors.toList()));
}else {
response.setMsg("未查询到车辆信息");
}
}
logger.info("\r\n站端请求车辆信息: MqttRequestCarInfoExchangeProcessorImpl =====>>>message:{}", response.getMsg());
sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_CARINFO, response);
}
public static VehicleData convertVehicleData(VehicleWechatUserRelation data){
VehicleData vd = new VehicleData();
BeanUtils.copyProperties(data, vd);
return vd;
}
}
//package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.request;
//
//import cn.hutool.json.JSONObject;
//import cn.hutool.json.JSONUtil;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.evotech.hd.cloud.dao.VehicleWechatUserRelationDao;
//import com.evotech.hd.cloud.mqtt.enums.RequestFunctionTypesEnum;
//import com.evotech.hd.cloud.mqtt.message.MessageTopic;
//import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
//import com.evotech.hd.cloud.mqtt.message.dto.newer.req.MqttResponse;
//import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.CarInfoReq;
//import com.evotech.hd.cloud.mqtt.message.dto.newer.req.carinfo.VehicleData;
//import com.evotech.hd.common.core.entity.cloud.VehicleWechatUserRelation;
//import jakarta.annotation.Resource;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.BeanUtils;
//import org.springframework.stereotype.Service;
//
//import java.util.List;
//import java.util.stream.Collectors;
//
///**
// * 站端请求车辆信息
// * @ClassName:MqttRequestCarInfoExchangeProcessorImpl
// * @date: 2025年06月19日 11:21
// * @author: andy.shi
// * @contact: 17330188597
// * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
// */
//@Service
//@Slf4j
//public class MqttRequestCarInfoExchangeProcessorImpl implements MqttStrategyRequestExchangeProcessor {
//
// @Resource
// private VehicleWechatUserRelationDao vehicleWechatUserRelationDao;
//
// @Override
// public boolean accept(String functionName) {
// return RequestFunctionTypesEnum.FUN_CARINFO.getFunction().equals(functionName);
// }
//
// @Override
// public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
// CarInfoReq carInfoReq = JSONUtil.toBean(dataBody, CarInfoReq.class);
// //直接默认为错误
// MqttResponse<List<VehicleData>> response = new MqttResponse<List<VehicleData>>().createError(carInfoReq.getCarInfoRequestId());
// String plateNum = carInfoReq.getPlateNum();
// if(StringUtils.isEmpty(plateNum)){
// response.setMsg("没有车牌号参数");
// }else{
// List<VehicleWechatUserRelation> list = vehicleWechatUserRelationDao.selectList(new LambdaQueryWrapper<VehicleWechatUserRelation>().eq( VehicleWechatUserRelation::getPlateNum, plateNum));
// if(com.evotech.hd.common.core.utils.Collections.isNotEmpty(list)){
// response.setCode(MqttResponse.PUBLIC_SUCCESS);
// response.setData(list.stream().map(x->convertVehicleData(x)).collect(Collectors.toList()));
// }else {
// response.setMsg("未查询到车辆信息");
// }
// }
//
// logger.info("\r\n站端请求车辆信息: MqttRequestCarInfoExchangeProcessorImpl =====>>>message:{}", response.getMsg());
// sendAESMessage(topic, header, RequestFunctionTypesEnum.FUN_CARINFO, response);
// }
//
//
// public static VehicleData convertVehicleData(VehicleWechatUserRelation data){
// VehicleData vd = new VehicleData();
// BeanUtils.copyProperties(data, vd);
// return vd;
// }
//
//
//}

View File

@ -19,7 +19,7 @@ import org.springframework.stereotype.Service;
import java.util.stream.Stream;
/**
* 站端请求创建预约单类
* 预约订单--站端请求创建预约单类
*
* @ClassName:MqttRequestPreOrderExchangeProcessorImpl
* @date: 2025年05月19日 17:41
@ -42,7 +42,7 @@ public class MqttRequestPreOrderExchangeProcessorImpl implements MqttStrategyReq
@Override
public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
OrderSwapBatteryPre orderSwapBatteryPre = JSONUtil.toBean(dataBody, OrderSwapBatteryPre.class);
MqttResponse response = new MqttResponse().createError(orderSwapBatteryPre.getSourceId());
MqttResponse response = new MqttResponse().error("");
// 1. 基础字段校验
if (validateRequiredFields(orderSwapBatteryPre)) {
response.setMsg("预约信息不完整");
@ -55,6 +55,7 @@ public class MqttRequestPreOrderExchangeProcessorImpl implements MqttStrategyReq
// 创建预约单信息
orderSwapBatteryPre.setUcode(wechatUser.getWuid());
orderSwapBatteryPre.setSource(3);
orderSwapBatteryPre.setStationCode(topic.getStationCode());
Result<Boolean> integerResult = orderSwapBatteryPreService.addOrderSwapBatteryPre(orderSwapBatteryPre);
//检查结果
if (integerResult.getData()){
@ -85,12 +86,12 @@ public class MqttRequestPreOrderExchangeProcessorImpl implements MqttStrategyReq
return Stream.of(
order.getPlateNum(),
order.getPhone(),
order.getStationCode(),
order.getStationName(),
order.getUname(),
order.getSwapDay(),
order.getSwapDuration(),
order.getReservationTime()
// order.getStationCode(),
// order.getStationName(),
order.getUname()
// order.getSwapDay(),
// order.getSwapDuration(),
// order.getReservationTime()
).anyMatch(StrUtil::isBlankIfStr);
}
}

View File

@ -15,7 +15,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
/**
* 接收站端推送的车牌照, 创建车辆信息和预约单
* 初始化车辆和预约单--接收站端推送的车牌照, 创建车辆信息和预约单
*
* @ClassName:MqttRequestPushCarCreateMakeAppointmentExchangeProcessorImpl
* @date: 2025年04月30日 15:34

View File

@ -20,6 +20,7 @@ import com.evotech.hd.common.core.entity.order.Order;
import com.evotech.hd.common.core.enums.CodeMsg;
import com.evotech.hd.common.core.enums.OrderStatusEnums;
import com.evotech.hd.common.core.enums.SwapBatteryStepEnum;
import com.evotech.hd.common.core.utils.Collections;
import com.evotech.hd.common.redis.utils.RedisServiceUtils;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
@ -30,7 +31,7 @@ import org.springframework.stereotype.Service;
import java.util.Date;
/**
* 站端根据车牌号查询订单
* 查询订单--站端根据车牌号查询订单
*
* @ClassName:MqttRequestQueryOrderExchangeProcessorImpl
* @date: 2025年05月19日 17:41
@ -72,7 +73,7 @@ public class MqttRequestQueryOrderExchangeProcessorImpl implements MqttStrategyR
.eq(Order::getPlateNum, orderSwapBatteryPre.getPlateNum())
.eq(Order::getStationCode, orderSwapBatteryPre.getStationCode())
.eq(Order::getOrderPreId, orderSwapBatteryPre.getPkId())
.eq(Order::getStatus, OrderStatusEnums.CREATE.getCode()));
.in(Order::getStatus, Collections.asList(OrderStatusEnums.CREATE.getCode(), OrderStatusEnums.SWAP.getCode())));
if (ObjectUtils.isNotEmpty(order)) {
response.setCode(MqttResponse.PUBLIC_SUCCESS);
}else{

View File

@ -16,7 +16,7 @@ import org.springframework.util.StringUtils;
import java.util.List;
/**
* Mqtt查询充电策略
* 查询充电策略--Mqtt查询充电策略
* @ClassName:StrategyMqttMessageRequestExchangeProcessorImpl
* @date: 2025年04月08日 11:36
* @author: andy.shi

View File

@ -1,42 +1,42 @@
package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state;
import cn.hutool.json.JSONObject;
import com.evotech.hd.cloud.dao.OrderSwapBatteryStepDao;
import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum;
import com.evotech.hd.cloud.mqtt.message.MessageTopic;
import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
import com.evotech.hd.cloud.utils.components.HDStepDictComponent;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* 站端反馈订单状态
*
* @ClassName:MqttStateSwapStepDataExchangeProcessor
* @date: 2025年04月29日 13:26
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Slf4j
@Service
public class MqttStateOrderStatusDataExchangeProcessor implements MqttStrategyStateExchangeProcessor {
@Resource
private HDStepDictComponent hdStepDictComponent;
@Resource
private OrderSwapBatteryStepDao orderSwapBatteryStepDao;
@Override
public boolean accept(String functionName) {
return StateFunctionTypesEnum.FUN_ORDERSTATUS.getFunction().equals(functionName);
}
@Override
public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
// OrderStatus orderStatus = JSONUtil.toBean(dataBody, OrderStatus.class);
// OrderStatusData statusData = JSONUtil.toBean(dataBody.getJSONObject("statusData"), OrderStatusData.class);
log.info("\r\n=====>>>站端反馈订单状态--MQTT收到消息主题{},换电步骤名称:{}",topic, dataBody.toString());
}
}
//package com.evotech.hd.cloud.mqtt.message.processor.strategy.impl.state;
//
//import cn.hutool.json.JSONObject;
//import com.evotech.hd.cloud.dao.OrderSwapBatteryStepDao;
//import com.evotech.hd.cloud.mqtt.enums.StateFunctionTypesEnum;
//import com.evotech.hd.cloud.mqtt.message.MessageTopic;
//import com.evotech.hd.cloud.mqtt.message.MqttMessageHeader;
//import com.evotech.hd.cloud.utils.components.HDStepDictComponent;
//import jakarta.annotation.Resource;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Service;
//
///**
// * 站端反馈订单状态
// *
// * @ClassName:MqttStateSwapStepDataExchangeProcessor
// * @date: 2025年04月29日 13:26
// * @author: andy.shi
// * @contact: 17330188597
// * @remark: 开发人员联系方式 1042025947@qq.com/微信同步
// */
//@Slf4j
//@Service
//public class MqttStateOrderStatusDataExchangeProcessor implements MqttStrategyStateExchangeProcessor {
//
// @Resource
// private HDStepDictComponent hdStepDictComponent;
// @Resource
// private OrderSwapBatteryStepDao orderSwapBatteryStepDao;
//
// @Override
// public boolean accept(String functionName) {
// return StateFunctionTypesEnum.FUN_ORDERSTATUS.getFunction().equals(functionName);
// }
//
// @Override
// public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
//// OrderStatus orderStatus = JSONUtil.toBean(dataBody, OrderStatus.class);
//// OrderStatusData statusData = JSONUtil.toBean(dataBody.getJSONObject("statusData"), OrderStatusData.class);
// log.info("\r\n=====>>>站端反馈订单状态--MQTT收到消息主题{},换电步骤名称:{}",topic, dataBody.toString());
// }
//}

View File

@ -50,16 +50,11 @@ public class MqttStateSwapStepDataExchangeProcessor implements MqttStrategyState
public void exchange(MessageTopic topic, MqttMessageHeader header, JSONObject dataBody) {
SwapStep swapStep = JSONUtil.toBean(dataBody, SwapStep.class);
// 记录换电步骤
// OrderSwapBatteryStep step = new OrderSwapBatteryStep();
// BeanUtils.copyProperties(swapStep, step);
// step.setCtime(new Date());
// step.setCreater("SYS");
// step.setStepName(hdStepDictComponent.hdStepDictName(step.getStep()));
log.info("\r\n=====>>>站端反馈换电步骤--MQTT收到消息主题{},换电步骤名称:{}",topic, hdStepDictComponent.hdStepDictName(swapStep.getStep()));
if(orderSwapBatteryStepService.addOrderSwapBatteryStepBySwapComplete(swapStep.getOrderNo(), swapStep.getStep(), swapStep.getStepTime())){
Order order = orderService.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNo, swapStep.getOrderNo()).eq(Order::getDelFlag, HDConstant.DELETE_NO));
//发送通知到指定客户端
wechatService.sendClientMessage(order.getPreWechatId(), JSON.toJSONString(orderSwapBatteryStepService.list(new LambdaQueryWrapper<OrderSwapBatteryStep>().eq(OrderSwapBatteryStep::getOrderNo, order.getOrderNo()).orderByAsc(OrderSwapBatteryStep::getStepTime))));
wechatService.sendClientMessage(order.getPreWechatId(), JSON.toJSONString(orderSwapBatteryStepService.list(new LambdaQueryWrapper<OrderSwapBatteryStep>().eq(OrderSwapBatteryStep::getOrderNo, order.getOrderNo()).orderByAsc(OrderSwapBatteryStep::getStep))));
}
}
}

View File

@ -201,7 +201,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderDao, Order> implements Or
order.setPlateNum(orderSwapBatteryPre.getPlateNum());
order.setOrderTime(new Date());
order.setOrderType(HDConstant.OrderConstant.ORDER_TYPE_SWAP);
order.setStatus(OrderStatusEnums.CREATE.getCode());
//站端不会推送换电中事件, 所以根据预约单创建订单, 即为换电中
order.setStatus(OrderStatusEnums.SWAP.getCode());
order.setStationCode(orderSwapBatteryPre.getStationCode());
order.setStationName(orderSwapBatteryPre.getStationName());
order.setDelFlag(HDConstant.DELETE_NO);

View File

@ -0,0 +1,16 @@
package com.evotech.hd.wechat.Dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evotech.hd.wechat.websocket.entity.LogWebSocket;
/**
* 接口
*
* @ClassName:LogWebSocketDao
* @date: 2025年07月25日 8:45
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
public interface LogWebSocketDao extends BaseMapper<LogWebSocket> {
}

View File

@ -0,0 +1,16 @@
package com.evotech.hd.wechat.Dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.evotech.hd.wechat.websocket.entity.OnlineWebSocketUser;
/**
* 接口
*
* @ClassName:LogWebSocketDao
* @date: 2025年07月25日 8:45
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
public interface OnlineWebSocketUserDao extends BaseMapper<OnlineWebSocketUser> {
}

View File

@ -1,5 +1,9 @@
package com.evotech.hd.wechat.websocket.controller;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.evotech.hd.wechat.Dao.OnlineWebSocketUserDao;
import com.evotech.hd.wechat.websocket.entity.OnlineWebSocketUser;
import jakarta.websocket.OnClose;
import jakarta.websocket.OnError;
import jakarta.websocket.OnOpen;
@ -9,6 +13,8 @@ import jakarta.websocket.server.ServerEndpoint;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* websocket服务类
@ -28,6 +34,7 @@ import org.springframework.stereotype.Component;
public class WebSocketService {
/**
* 建立连接
*
@ -38,6 +45,12 @@ public class WebSocketService {
public void openConnection(Session session, @PathParam(value = "wechatId") String wechatId) {
WebSocketUtils.SESSION_POOLS.put(wechatId, session);
WebSocketUtils.onlineNum.incrementAndGet();
try {
SpringUtil.getBean(OnlineWebSocketUserDao.class).insert(new OnlineWebSocketUser(new Date(), wechatId));
} catch (Exception e) {
log.error("记录连接用户出现错误"+e.getMessage());
e.printStackTrace();
}
log.info(wechatId + "建立连接! 当前连接数为: {}", WebSocketUtils.onlineNum);
}
@ -50,6 +63,12 @@ public class WebSocketService {
public void closeConnection(@PathParam(value = "wechatId") String wechatId) {
WebSocketUtils.SESSION_POOLS.remove(wechatId);
int cnt = WebSocketUtils.onlineNum.decrementAndGet();
try {
SpringUtil.getBean(OnlineWebSocketUserDao.class).delete(new LambdaQueryWrapper<OnlineWebSocketUser>().eq(OnlineWebSocketUser::getWechatId, wechatId));
} catch (Exception e) {
log.error("删除连接用户出现错误"+e.getMessage());
e.printStackTrace();
}
log.info(wechatId + "断开连接, 当前连接数为:{}", cnt);
}

View File

@ -1,5 +1,8 @@
package com.evotech.hd.wechat.websocket.controller;
import cn.hutool.extra.spring.SpringUtil;
import com.evotech.hd.wechat.Dao.LogWebSocketDao;
import com.evotech.hd.wechat.websocket.entity.LogWebSocket;
import jakarta.websocket.Session;
import lombok.extern.slf4j.Slf4j;
@ -54,6 +57,12 @@ public class WebSocketUtils {
*/
public static void sendMessage(String wechatId , String message){
try {
//记录日志
try {
SpringUtil.getBean(LogWebSocketDao.class).insert(new LogWebSocket(wechatId, message));
} catch (Exception e) {
log.error("日志记录错误"+e.getMessage());
}
sendMessage(WebSocketUtils.SESSION_POOLS.get(wechatId), message);
} catch (IOException e) {
log.error("信息推送失败, 用户的微信ID: {}, 推送消息是: {}, 异常原因是:{}", wechatId, message, e.getMessage());

View File

@ -0,0 +1,33 @@
package com.evotech.hd.wechat.websocket.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.evotech.hd.common.core.entity.IdEntity;
import lombok.Data;
import java.io.Serializable;
/**
*
*
* @ClassName:LogWebSocket
* @date: 2025年07月25日 8:37
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Data
@TableName(value = "yt_t_log_web_socket", schema = "hd_wechat")
public class LogWebSocket extends IdEntity implements Serializable {
String clientWechatId;
String sendInfo;
public LogWebSocket() {
}
public LogWebSocket(String clientWechatId, String sendInfo) {
this.clientWechatId = clientWechatId;
this.sendInfo = sendInfo;
}
}

View File

@ -0,0 +1,33 @@
package com.evotech.hd.wechat.websocket.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.evotech.hd.common.core.entity.IdEntity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
*
*
* @ClassName:OnlineWebSocketUser
* @date: 2025年07月25日 8:42
* @author: andy.shi
* @contact: 17330188597
* @remark: 开发人员联系方式 1042025947@qq.com/微信同步
*/
@Data
@TableName(value = "yt_t_online_web_socket_user", schema = "hd_wechat")
public class OnlineWebSocketUser extends IdEntity implements Serializable {
String wechatId;
//链接时间
Date linkDate;
public OnlineWebSocketUser() {
}
public OnlineWebSocketUser(Date linkDate, String wechatId) {
this.linkDate = linkDate;
this.wechatId = wechatId;
}
}