Commit 28327a74 by 周晓航

Merge branch 'KA-订单MQ功能迁移-zxh'

parents 556ef644 214c45a1
......@@ -28,21 +28,28 @@ public class OrderCallBackConfig {
public static final String OPEN_PLATFORM_ORDER_STATUS_CHANGE_PUSH_QUEUE_NAME = "open-platform-order-status-change-push-queue";
public static final String OPEN_PLATFORM_ORDER_STATUS_CHANGE_PUSH_ROUTING_KEY = "open-platform-order-status-change-routing-key";
public static final String WECHAT_REPORT_QUEUE_ROUTING_KEY="wechat-report-queue-routing-key";
public static final String WECHAT_REPORT_QUEUE_ROUTING_KEY = "wechat-report-queue-routing-key";
//微信订单上传
public static final String WECHAT_ORDER_REPORT_QUEUE_ROUTING_KEY="wechat-order-report-queue-routing-key";
public static final String WECHAT_ORDER_REPORT_QUEUE="wechat-order-report-queue";
public static final String WECHAT_ORDER_REPORT_QUEUE_ROUTING_KEY = "wechat-order-report-queue-routing-key";
public static final String WECHAT_ORDER_REPORT_QUEUE = "wechat-order-report-queue";
public static final String INVOICE_QUEUE = "invoice-report-queue";
public static final String INVOICE_ROUTE_KEY = "invoice-report-queue-routing-key";
// 腾讯有数上报 & 门店营业开店记录 发送到 ordercenter-order组的 mq中
public static final String SEND_YOUSHU_REPORT_QUEUE_ROUTING_KEY="send-youshu-report-queue-routing-key";
public static final String SEND_YOUSHU_REPORT_QUEUE="send-youshu-report-queue";
@Deprecated
public static final String SEND_YOUSHU_REPORT_QUEUE_ROUTING_KEY = "send-youshu-report-queue-routing-key";
@Deprecated
public static final String SEND_YOUSHU_REPORT_QUEUE = "send-youshu-report-queue";
// task-center-order-consumer服务 订单状态处理中心queue
public static final String ORDER_STATUS_PROCESS_CENTER_QUEUE_ROUTING_KEY = "order_status_process_center_queue-routing-key";
public static final String ORDER_STATUS_PROCESS_CENTER_QUEUE = "order_status_process_center_queue";
// 支付宝订单状态推送 tapd需求id 1032865
public static final String ZFB_ORDER_SEND_QUEUE_ROUTING_KEY="zfb-order-send-queue-routing-key";
public static final String ZFB_ORDER_SEND_QUEUE="zfb-order-send-queue";
public static final String ZFB_ORDER_SEND_QUEUE_ROUTING_KEY = "zfb-order-send-queue-routing-key";
public static final String ZFB_ORDER_SEND_QUEUE = "zfb-order-send-queue";
/**
* 定义基于Fanout 的Exchange。
......@@ -109,23 +116,27 @@ public class OrderCallBackConfig {
/**
* 发票queue绑定设置
*
* @return
*/
@Bean(name = "invoiceExchange")
public Exchange invoiceExchange() {
return ExchangeBuilder.topicExchange(TOPIC_EXCHANGE_NAME).durable(true).build();
}
@Bean(name="invoiceQueue")
@Bean(name = "invoiceQueue")
public Queue invoiceQueue() {
return QueueBuilder.durable(INVOICE_QUEUE).build();
}
@Bean
Binding bindingInvoiceQueue(@Qualifier("invoiceQueue") Queue invoiceQueue,@Qualifier("invoiceExchange") Exchange invoiceExchange) {
Binding bindingInvoiceQueue(@Qualifier("invoiceQueue") Queue invoiceQueue, @Qualifier("invoiceExchange") Exchange invoiceExchange) {
return BindingBuilder.bind(invoiceQueue).to(invoiceExchange).with(INVOICE_ROUTE_KEY).noargs();
}
/**
* 有数上报/ 支付门店 queue 绑定
* 有数上报/ 支付门店 queue 绑定
*
* @return
*/
@Bean(name = "sendWechatReportQueue")
......@@ -137,4 +148,20 @@ public class OrderCallBackConfig {
Binding bindingSendWechatReportQueue(@Qualifier("sendWechatReportQueue") Queue sendWechatReportQueue, @Qualifier("topicExchange") Exchange topicExchange) {
return BindingBuilder.bind(sendWechatReportQueue).to(topicExchange).with(SEND_YOUSHU_REPORT_QUEUE_ROUTING_KEY).noargs();
}
/**
* 有数上报/ 支付门店 queue 绑定
*
* @return
*/
@Bean(name = "orderStatusProcessCenterQueue")
public Queue orderStatusProcessCenterQueue() {
return QueueBuilder.durable(ORDER_STATUS_PROCESS_CENTER_QUEUE).build();
}
@Bean
Binding bindingOrderStatusProcessCenterQueue(@Qualifier("orderStatusProcessCenterQueue") Queue orderStatusProcessCenterQueue, @Qualifier("topicExchange") Exchange topicExchange) {
return BindingBuilder.bind(orderStatusProcessCenterQueue).to(topicExchange).with(ORDER_STATUS_PROCESS_CENTER_QUEUE_ROUTING_KEY).noargs();
}
}
......@@ -62,8 +62,13 @@ public class OrderCallBackMQService {
private AssortmentOpenPlatformWxappManager openPlatformWxappManager;
@Value("${saas.order.invoice.report.partnerIds}")
private String invoicePartnerIds;
private static final String backOrdersChangeOrderStatusConsumerQueue="program.backorders_change_order_status_consumer_queue";
private static final String backOrdersNotifyActivityExchange="program.backorders_notify_activity_exchange";
@Value("${queue-grace-offline:}")
private String queueGraceOffline;
private static final String backOrdersChangeOrderStatusConsumerQueue = "program.backorders_change_order_status_consumer_queue";
private static final String backOrdersNotifyActivityExchange = "program.backorders_notify_activity_exchange";
@Autowired
private LogUtil logUtil;
......@@ -73,10 +78,10 @@ public class OrderCallBackMQService {
return;
}
// bizType=3 会员业务,bizType=4 积分商城业务,bizType=5 储值账户业务,bizType=9 礼品卡业务 (会员订单合并到支付宝微信渠道,保持之前业务一样,暂时不处理)
if (Objects.equals(3,orderInfoReqs.getBizType())
|| Objects.equals(4,orderInfoReqs.getBizType())
|| Objects.equals(5,orderInfoReqs.getBizType())
|| Objects.equals(9,orderInfoReqs.getBizType())) {
if (Objects.equals(3, orderInfoReqs.getBizType())
|| Objects.equals(4, orderInfoReqs.getBizType())
|| Objects.equals(5, orderInfoReqs.getBizType())
|| Objects.equals(9, orderInfoReqs.getBizType())) {
return;
}
//发送订单回调
......@@ -85,7 +90,7 @@ public class OrderCallBackMQService {
MQMessage<OrderCallBackRequestVo> message = new MQMessage<>(header, body);
mqService.convertAndSend(OrderCallBackConfig.EXCHANGE_NAME, OrderCallBackConfig.QUEUE_ROUTING_KEY, message);
//订单状态变更通知开放平台
Boolean filterPushOrder = filterPushOrder(body,orderInfoReqs);
Boolean filterPushOrder = filterPushOrder(body, orderInfoReqs);
if (filterPushOrder) {
orderDistributionService.pushOrder(convent2DisRequest(body, orderInfoReqs.getOrderState()));
}
......@@ -96,11 +101,16 @@ public class OrderCallBackMQService {
//未支付超时关单,发送队列冲正积分、券码等,停车场订单走单独逻辑
if (checkParkingOrders(orderInfoReqs)) {
revertParkingOrders(body);
}else{
} else {
revert(body);
}
// 有数订单数据上报 & 每日下单门店统计
sendYoushuReportMQ(body);
if (!Objects.equals(queueGraceOffline, "1")) {
// 有数订单数据上报 & 每日下单门店统计
sendYoushuReportMQ(body);
}
// task-center-order-consumer服务 订单状态处理中心queue 优化原有相同queue代码
this.sendOrderStatusProcessCenterMQ(body);
//支付宝订单状态变更上报
sendzfbOrderMQ(body);
......@@ -108,20 +118,21 @@ public class OrderCallBackMQService {
/**
* 冲正库存、券码等
*
* @param body
*/
public void revert(OrderCallBackRequestVo body){
if (ObjectUtils.notEqual(body.getDelayMsgEventType(),2)){
public void revert(OrderCallBackRequestVo body) {
if (ObjectUtils.notEqual(body.getDelayMsgEventType(), 2)) {
return;
}
String redisKey = "kgd:cancel_payment_oid:" + body.getOrderCode() ;
String redisKey = "kgd:cancel_payment_oid:" + body.getOrderCode();
//取消支付订单缓存,
Object value = redisCache.getValue(redisKey);
if(value != null){
if (value != null) {
return;
}
ApiLog.infoMessage("activityReverse start orderCode:{}", body.getOrderCode());
String orderCode=body.getOrderCode();
String orderCode = body.getOrderCode();
OrderStatusChangeRequestDto requestDto = new OrderStatusChangeRequestDto();
requestDto.setOid(orderCode);
//2:未支付
......@@ -132,9 +143,10 @@ public class OrderCallBackMQService {
mqService.convertAndSend(backOrdersNotifyActivityExchange, backOrdersChangeOrderStatusConsumerQueue, message);
ApiLog.infoMessage("activityReverse end orderCode:{}", body.getOrderCode());
} catch (Exception e) {
ApiLog.infoMessage("activityReverse Error orderCode:{} e:{}",e, body.getOrderCode(), ExceptionUtils.getFullStackTrace(e));
ApiLog.infoMessage("activityReverse Error orderCode:{} e:{}", e, body.getOrderCode(), ExceptionUtils.getFullStackTrace(e));
}
}
private void sendWechatReportMQ(OrderCallBackRequestVo body) {
try {
OrderInfoReqs orderInfoReqs = getWechatReportOrderInfoReqs(body);
......@@ -152,6 +164,7 @@ public class OrderCallBackMQService {
ApiLog.infoMessage("sendWechatReportMQ Error orderCode:{} e:{}", body.getOrderCode(), ExceptionUtils.getFullStackTrace(e));
}
}
private DisRequest convent2DisRequest(OrderCallBackRequestVo orderBean, Integer orderState) {
DisRequest disRequest = new DisRequest();
disRequest.setExtJson(orderBean.getContent());
......@@ -175,7 +188,7 @@ public class OrderCallBackMQService {
return orderInfoReqs;
}
private Boolean filterPushOrder(OrderCallBackRequestVo body,OrderInfoReqs orderInfoReqs) {
private Boolean filterPushOrder(OrderCallBackRequestVo body, OrderInfoReqs orderInfoReqs) {
// 订单所有状态正常变化通知通知开放平台
if ((!ObjectUtils.equals("1", body.getMsgType()) && !ObjectUtils.equals("3", body.getMsgType())) || body.getOperateType() == null || body.getOperateType() == 0) {
return false;
......@@ -185,7 +198,7 @@ public class OrderCallBackMQService {
return false;
}
// 点餐业务和卖券业务推送开放平台(卖券业务后续到虚拟门店感觉可以去除)
if (ObjectUtils.equals(1, orderInfoReqs.getBizType()) || ObjectUtils.equals(6, orderInfoReqs.getBizType())){
if (ObjectUtils.equals(1, orderInfoReqs.getBizType()) || ObjectUtils.equals(6, orderInfoReqs.getBizType())) {
return true;
}
//停车场订单关闭状态不通知开放平台
......@@ -246,12 +259,12 @@ public class OrderCallBackMQService {
}
// 混合支付
Integer userAmount = 0;
if (orderInfoReqs.getOrderPayItemCreateReqList()!=null && orderInfoReqs.getOrderPayItemCreateReqList().size()>0) {
if (orderInfoReqs.getOrderPayItemCreateReqList() != null && orderInfoReqs.getOrderPayItemCreateReqList().size() > 0) {
OrderPayItemResp orderPayItemReqs = orderInfoReqs.getOrderPayItemCreateReqList()
.stream()
.filter(s -> s.getPayChannelType().equals(PayChannelType.WECHAT.getIndex().intValue()) || s.getPayChannelType().equals(PayChannelType.ALIPAY.getIndex().intValue()))
.findFirst().orElse(null);
if (orderPayItemReqs!=null) {
if (orderPayItemReqs != null) {
userAmount = orderPayItemReqs.getPayAmount().intValue();
}
}
......@@ -260,7 +273,7 @@ public class OrderCallBackMQService {
wechatReportOrderDto.setOutShopNo(orderInfoReqs.getStoreId());
wechatReportOrderDto.setSubOpenId(userLoginInfoDto.getOpenId());
wechatReportOrderDto.setLoginToken(userLoginInfoDto.getSessionKey());
wechatReportOrderDto.setUserAmount(userAmount >0 ? userAmount :orderInfoReqs.getSettlementAmount().intValue());
wechatReportOrderDto.setUserAmount(userAmount > 0 ? userAmount : orderInfoReqs.getSettlementAmount().intValue());
wechatReportOrderDto.setOutOrderNo(orderInfoReqs.getOrderCode());
wechatReportOrderDto.setTransactionId(orderExtInfoDto.getPaid_no());
wechatReportOrderDto.setOutTradeNo(orderExtInfoDto.getPayTransId());
......@@ -268,18 +281,18 @@ public class OrderCallBackMQService {
// 计算优惠金额
int discountAmount = 0;
List<OrderSettlementResp> accountList = orderInfoReqs.getOrderSettlementDetailList();
if(accountList != null && !CollectionUtils.isEmpty(accountList)) {
for(OrderSettlementResp accountBean : accountList) {
if (accountList != null && !CollectionUtils.isEmpty(accountList)) {
for (OrderSettlementResp accountBean : accountList) {
try {
Long price = accountBean.getSettlementAmount() == null ? 0 : accountBean.getSettlementAmount().longValue();
if(price < 0) {
if (price < 0) {
discountAmount = discountAmount - price.intValue();
}
} catch (Exception e) {
}
}
}
wechatReportOrderDto.setTotalAmount(discountAmount+(userAmount >0 ? userAmount : orderInfoReqs.getSettlementAmount().intValue()));
wechatReportOrderDto.setTotalAmount(discountAmount + (userAmount > 0 ? userAmount : orderInfoReqs.getSettlementAmount().intValue()));
wechatReportOrderDto.setDiscountAmount(discountAmount);
//订单状态 (2—用户下单;1—支付完成)
wechatReportOrderDto.setStatus(NewOrderStatus.PENDING_PAYMENT.getIndex().equals(orderInfoReqs.getOrderState()) ? 2 : 1);
......@@ -287,7 +300,7 @@ public class OrderCallBackMQService {
List<WechatReportOrderDto.DishInfo> dishList = new ArrayList<>();
//【ID1040698】【数据上报】如果是套餐商品,只上报套餐,不上报明细, 解决数据上报商品数量(20)超限制报错
for (OrderItemResp item : orderInfoReqs.getOrderItemList()) {
if(StringUtils.isNotEmpty(item.getParentProductId()) && !"0".equals(item.getParentProductId())){
if (StringUtils.isNotEmpty(item.getParentProductId()) && !"0".equals(item.getParentProductId())) {
continue;
}
WechatReportOrderDto.DishInfo dishInfo = new WechatReportOrderDto.DishInfo();
......@@ -298,28 +311,29 @@ public class OrderCallBackMQService {
dishInfo.setUrl(item.getProductPicUrl());
dishList.add(dishInfo);
}
if(dishList.size() >20){
dishList.subList(0,20);
if (dishList.size() > 20) {
dishList.subList(0, 20);
}
wechatReportOrderDto.setDishList(dishList);
return wechatReportOrderDto;
}
/**
* 上报指定商户已支付的订单到MQ
* 只上报普通订单
* 上报指定商户已支付的订单到MQ
* 只上报普通订单
*
* @param body
*/
private void sendInvoiceReportMQ(OrderCallBackRequestVo body) {
ApiLog.infoMessage("callback sendInvoiceReportMQ start orderCode:{}",body.getOrderCode());
ApiLog.infoMessage("callback sendInvoiceReportMQ start orderCode:{}", body.getOrderCode());
if (!ObjectUtils.equals("1", body.getMsgType()) || body.getOperateType() == null || body.getOperateType() == 2) {
return ;
return;
}
OrderInfoReqs orderInfoReqs = JSONObject.parseObject(body.getContent(), OrderInfoReqs.class);
if (orderInfoReqs==null
if (orderInfoReqs == null
|| !Arrays.asList(invoicePartnerIds.split(",")).contains(orderInfoReqs.getPartnerId())
|| !NewOrderStatus.PLACE_AN_ORDER.getIndex().equals(orderInfoReqs.getOrderState())
|| orderInfoReqs.getBizType()!=1) {
|| orderInfoReqs.getBizType() != 1) {
return;
}
try {
......@@ -328,7 +342,7 @@ public class OrderCallBackMQService {
MQMessage<OrderInfoReqs> message = new MQMessage<>(header, orderInfoReqs);
mqService.convertAndSend(OrderCallBackConfig.TOPIC_EXCHANGE_NAME, OrderCallBackConfig.INVOICE_ROUTE_KEY, message);
ApiLog.infoMessage("callback sendInvoiceReportMQ end orderCode={}",body.getOrderCode());
ApiLog.infoMessage("callback sendInvoiceReportMQ end orderCode={}", body.getOrderCode());
} catch (Exception e) {
ApiLog.infoMessage("callback sendInvoiceReportMQ Error orderCode:{} e:{}", body.getOrderCode(), ExceptionUtils.getFullStackTrace(e));
}
......@@ -336,10 +350,11 @@ public class OrderCallBackMQService {
/**
* 冲正库存、券码等
*
* @param body
*/
public void revertParkingOrders(OrderCallBackRequestVo body){
String orderCode=body.getOrderCode();
public void revertParkingOrders(OrderCallBackRequestVo body) {
String orderCode = body.getOrderCode();
OrderStatusChangeRequestDto requestDto = new OrderStatusChangeRequestDto();
requestDto.setOid(orderCode);
//2:未支付
......@@ -356,11 +371,12 @@ public class OrderCallBackMQService {
/**
* 检查是否符合停车场订单
*
* @param orderInfoReqs
* @return
*/
private boolean checkParkingOrders(OrderInfoReqs orderInfoReqs){
if (orderInfoReqs.getOrderClient().equals(OrderClientType.PARKING.getIndex()) && orderInfoReqs.getBizType() == 99 && orderInfoReqs.getPayState() ==3 && orderInfoReqs.getOrderState() == 7) {
private boolean checkParkingOrders(OrderInfoReqs orderInfoReqs) {
if (orderInfoReqs.getOrderClient().equals(OrderClientType.PARKING.getIndex()) && orderInfoReqs.getBizType() == 99 && orderInfoReqs.getPayState() == 3 && orderInfoReqs.getOrderState() == 7) {
return true;
}
return false;
......@@ -369,8 +385,10 @@ public class OrderCallBackMQService {
/**
* 有数上报MQ
*
* @param body
*/
@Deprecated
private void sendYoushuReportMQ(OrderCallBackRequestVo body) {
try {
if (Objects.isNull(body) || StringUtils.isEmpty(body.getContent())) {
......@@ -385,11 +403,34 @@ public class OrderCallBackMQService {
mqService.convertAndSend(OrderCallBackConfig.TOPIC_EXCHANGE_NAME, OrderCallBackConfig.SEND_YOUSHU_REPORT_QUEUE_ROUTING_KEY, message);
ApiLog.infoMessage("send sendYoushuReportMQ end orderCode:{}", body.getOrderCode());
}
}catch (Exception e){
} catch (Exception e) {
ApiLog.infoMessage("send sendYoushuReportMQ Error orderCode:{} e:{}", body.getOrderCode(), ExceptionUtils.getFullStackTrace(e));
}
}
/**
* 订单状态公共处理中心 queue
*
* @param body
*/
private void sendOrderStatusProcessCenterMQ(OrderCallBackRequestVo body) {
try {
if (Objects.isNull(body) || StringUtils.isEmpty(body.getContent())) {
return;
}
// 正常变化 订单正向操作
if (body.getOperateType() == 1 && "1".equals(body.getMsgType())) {
Header header = new Header(MQAction.UPDATE.getAction(), "call-back-service-api",
OrderCallBackConfig.ORDER_STATUS_PROCESS_CENTER_QUEUE_ROUTING_KEY, OrderCallBackConfig.ORDER_STATUS_PROCESS_CENTER_QUEUE);
MQMessage<OrderCallBackRequestVo> message = new MQMessage<>(header, body);
mqService.convertAndSend(OrderCallBackConfig.TOPIC_EXCHANGE_NAME, OrderCallBackConfig.ORDER_STATUS_PROCESS_CENTER_QUEUE_ROUTING_KEY, message);
ApiLog.infoMessage("send order_status_process_center_queue end orderCode:{}", body.getOrderCode());
}
} catch (Exception e) {
ApiLog.infoMessage("send order_status_process_center_queue Error orderCode:{} e:{}", body.getOrderCode(), ExceptionUtils.getFullStackTrace(e));
}
}
private void sendzfbOrderMQ(OrderCallBackRequestVo body) {
try {
if (Objects.isNull(body) || StringUtils.isEmpty(body.getContent())) {
......@@ -407,8 +448,8 @@ public class OrderCallBackMQService {
MQMessage<OrderCallBackRequestVo> message = new MQMessage<>(header, body);
mqService.convertAndSend(OrderCallBackConfig.TOPIC_EXCHANGE_NAME, OrderCallBackConfig.ZFB_ORDER_SEND_QUEUE_ROUTING_KEY, message);
}
}catch (Exception e){
logUtil.error("","sendzfbOrderMQ orderCode:{} ", e,body.getOrderCode());
} catch (Exception e) {
logUtil.error("", "sendzfbOrderMQ orderCode:{} ", e, body.getOrderCode());
}
}
}
......@@ -35,10 +35,10 @@ public class CallBackController {
private OrderCallBackService orderCallBackService;
@PostMapping("/order")
@ApiAnnotation(logMessage = "/callback/order",printRequestLog = false)
@ApiAnnotation(logMessage = "/callback/order", printRequestLog = false)
public BaseResponse orderCallBackHandle(@Valid @RequestBody @LogParams OrderCallBackRequestVo requestVo) {
ApiLog.infoMessage("orderCallBackHandle start url:{} orderCode:{} requestId:{}","/callback/order",
requestVo.getOrderCode(),requestVo.getRequestId());
ApiLog.infoMessage("orderCallBackHandle start url:{} orderCode:{} requestId:{} orderstate:{}", "/callback/order",
requestVo.getOrderCode(), requestVo.getRequestId(), requestVo.getOrderState());
return orderCallBackService.orderCallBackHandle(requestVo);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment