package com.xiaopeng.order.service; import cn.hutool.core.util.StrUtil; import com.xiaopeng.api.feignClient.operation.XpPricingClient; import com.xiaopeng.api.feignClient.pushMessage.SubscribeMessageClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.model.operation.XpPricing; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.pushMessage.SendSubscribeMessageVo; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.enums.MessageTemplateEnum; import com.xiaopeng.common.core.enums.OrderStatusEnum; import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.common.redis.service.RedisService; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @Service public class BootCommonService { @Resource private XpPricingClient xpPricingClient; @Resource private XpVehicleClient xpVehicleClient; @Resource @Lazy private IXpOrderService xpOrderService; @Resource private RedisService redisService; @Resource private SubscribeMessageClient subscribeMessageClient; public XpOrder getXpOrder(Long orderId) { XpOrder xpOrder = xpOrderService.getById(orderId); if (xpOrder == null) { throw new ServiceException("订单不存在"); } return xpOrder; } public XpVehicle getXpVehicle(Long vehicleId) { R xpVehicleR = xpVehicleClient.queryById(vehicleId); if (xpVehicleR.getCode() != R.SUCCESS || xpVehicleR.getData() == null) { throw new ServiceException("车型不存在"); } return xpVehicleR.getData(); } public String getVehicleModelId(Long orderId) { if(orderId!= null){ XpOrder xpOrder = getXpOrder(orderId); XpVehicle xpVehicle = getXpVehicle(xpOrder.getVehicleId()); return xpVehicle.getVehicleModel(); } return null; } public XpPricing getPricingByCid(Long cityId, String vehicleModelId) { R xpPricingR = xpPricingClient.getPricingByCid(cityId,vehicleModelId); if (xpPricingR.getCode() != R.SUCCESS || xpPricingR.getData() == null) { throw new ServiceException("当前城市未配置定价规则"); // throw new ServiceException("当前区域未开通服务"); } return xpPricingR.getData(); } public XpPricing getXpPricing(Long orderId) { if(orderId != null){ XpOrder xpOrder = getXpOrder(orderId); return getXpPricing(xpOrder.getCityId(),xpOrder.getVehicleId()); } return null; } public XpPricing getXpPricing(Long cityId, Long vehicleId) { String vehicleModelId = null; if(vehicleId != null){ XpVehicle xpVehicle = getXpVehicle(vehicleId); vehicleModelId = xpVehicle.getVehicleModel(); } return getPricingByCid(cityId, vehicleModelId); } public XpPricing getXpPricing(Long cityId, Long orderId, Long vehicleId) { String vehicleModelId = null; if(vehicleId != null ){ XpVehicle xpVehicle = getXpVehicle(vehicleId); vehicleModelId = xpVehicle.getVehicleModel(); } if(vehicleModelId != null){ if(orderId != null ){ vehicleModelId = getVehicleModelId(orderId); } } return getPricingByCid(cityId, vehicleModelId); } /** * 设置缓存订单状态 * 并发送微信通知 * @param xpOrderId 订单id * @param order OrderStatusEnum 订单状态 * oldStatus 订单旧状态 */ public void setCache_orderStatus(Long xpOrderId, XpOrder order ,OrderStatusEnum status) { if(order == null){ order = xpOrderService.getById(xpOrderId); } redisService.setCacheObject("ORDER_STATUS:" + xpOrderId, status.getCode(), 24L, TimeUnit.HOURS); SendSubscribeMessageVo vo = new SendSubscribeMessageVo(); vo.setUserId(order.getAppUserId()); String json = null; // status = 状态 0=已取消,1=待接单,2=待出发,3=接驾中,4=待客上车,5=乘客已上车,6=服务中,7=待客下车,8=待付款,9=待评价,10=已完成 if(order.getStatus() == OrderStatusEnum.PICK_UP.getCode()){//车辆接单/改派通知 String plateNumber = null; // 查询车辆 XpVehicle xpVehicle = xpVehicleClient.queryById(order.getVehicleId()).getData(); if(xpVehicle != null){ plateNumber = xpVehicle.getPlateNumber(); } if(StrUtil.isNotBlank(plateNumber)){ vo.setTemplateId(MessageTemplateEnum.E.getTemplateId()); json = MessageTemplateEnum.E.getRemarks(); json = json.replace("车牌号", plateNumber); json = json.replace("预计到达时间", LocalDateTime.now().toString()); } }else if(order.getStatus() == OrderStatusEnum.PICK_UP_GUESTS.getCode()) { //车辆到达上车点通知 String plateNumber = null; // 查询车辆 XpVehicle xpVehicle = xpVehicleClient.queryById(order.getVehicleId()).getData(); if(xpVehicle != null){ plateNumber = xpVehicle.getPlateNumber(); } if(StrUtil.isNotBlank(plateNumber)){ vo.setTemplateId(MessageTemplateEnum.E.getTemplateId()); json = MessageTemplateEnum.E.getRemarks(); json = json.replace("车牌号", plateNumber); json = json.replace("预计驶离时间", LocalDateTime.now().toString()); } }else{ // status = 状态 0=已取消,1=待接单,2=待出发,3=接驾中,4=待客上车,5=乘客已上车,6=服务中,7=待客下车,8=待付款,9=待评价,10=已完成 List statusList = Arrays.asList(OrderStatusEnum.CANCELED.getCode(),OrderStatusEnum.PASSENGER_BOARDED.getCode(), OrderStatusEnum.SEE_OFF_GUESTS.getCode(),OrderStatusEnum.APPROVAL_REJECTION.getCode(),OrderStatusEnum.PENDING_PAYMENT.getCode(), OrderStatusEnum.COMPLETED.getCode()) ; if(statusList.contains(order.getStatus())){ String bz = getBz(order); vo.setTemplateId(MessageTemplateEnum.A.getTemplateId()); json = MessageTemplateEnum.A.getRemarks(); json = json.replace("订单编号", order.getOrderNumber()); json = json.replace("订单状态", status.getDesc() ); json = json.replace("订单状态", OrderStatusEnum.getDescByCode(order.getStatus())); json = json.replace("备注", bz); json = json.replace("时间", LocalDateTime.now().toString()); vo.setPage(""); } } if(StrUtil.isNotBlank(json)){ vo.setJson(json); subscribeMessageClient.sendSubscribeMessage(vo); } } private static String getBz(XpOrder order) { String bz = ""; if(order.getStatus() == OrderStatusEnum.CANCELED.getCode()){ bz = "订单已"+OrderStatusEnum.CANCELED.getDesc(); }else if(order.getStatus() == OrderStatusEnum.PASSENGER_BOARDED.getCode()){ bz = OrderStatusEnum.PASSENGER_BOARDED.getDesc(); }else if(order.getStatus() == OrderStatusEnum.SEE_OFF_GUESTS.getCode()){ bz = OrderStatusEnum.SEE_OFF_GUESTS.getDesc(); }else if(order.getStatus() == OrderStatusEnum.APPROVAL_REJECTION.getCode()){ bz = "订单"+OrderStatusEnum.APPROVAL_REJECTION.getDesc(); }else if(order.getStatus() == OrderStatusEnum.PENDING_PAYMENT.getCode()){ bz = "订单"+OrderStatusEnum.PENDING_PAYMENT.getDesc(); }else if(order.getStatus() == OrderStatusEnum.COMPLETED.getCode()){ bz = "订单"+OrderStatusEnum.COMPLETED.getDesc(); } return bz; } }