package com.xiaopeng.order.service.impl;
|
|
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 com.xiaopeng.order.service.IXpOrderService;
|
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.List;
|
import java.util.concurrent.TimeUnit;
|
|
@Service
|
@Component
|
public class BootCommonService {
|
|
@Resource
|
private XpPricingClient xpPricingClient;
|
@Resource
|
private XpVehicleClient xpVehicleClient;
|
@Resource
|
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<XpVehicle> 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<XpPricing> 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, order.getStatus(), 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<Integer> 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("订单状态", 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;
|
}
|
|
|
}
|