Commit 0b80707f by 李学兴

opt@feature/20210810_callbackUrgentPlan_lxx:# 紧急方案打开直接调用callback 逻辑

parent 6d252664
...@@ -22,7 +22,7 @@ import cn.freemud.entities.dto.OrderExtInfoDto; ...@@ -22,7 +22,7 @@ import cn.freemud.entities.dto.OrderExtInfoDto;
import cn.freemud.entities.dto.OrderStatusChangeRequestDto; import cn.freemud.entities.dto.OrderStatusChangeRequestDto;
import cn.freemud.entities.dto.UserLoginInfoDto; import cn.freemud.entities.dto.UserLoginInfoDto;
import cn.freemud.entities.dto.WechatReportOrderDto; import cn.freemud.entities.dto.WechatReportOrderDto;
import cn.freemud.entities.vo.OrderCallBackRequestVo; import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo;
import cn.freemud.redis.RedisCache; import cn.freemud.redis.RedisCache;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformWxapp; import com.freemud.api.assortment.datamanager.entity.db.AssortmentOpenPlatformWxapp;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
package cn.freemud.controller; package cn.freemud.controller;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.OrderCallBackRequestVo; import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo;
import cn.freemud.service.OrderCallBackService; import cn.freemud.service.OrderCallBackService;
import com.freemud.application.sdk.api.log.ApiAnnotation; import com.freemud.application.sdk.api.log.ApiAnnotation;
import com.freemud.application.sdk.api.log.ApiLog; import com.freemud.application.sdk.api.log.ApiLog;
......
package cn.freemud.service; package cn.freemud.service;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.OrderCallBackRequestVo; import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo;
/** /**
* All rights Reserved, Designed By www.freemud.cn * All rights Reserved, Designed By www.freemud.cn
......
...@@ -14,21 +14,65 @@ package cn.freemud.service.impl; ...@@ -14,21 +14,65 @@ package cn.freemud.service.impl;
import cn.freemud.amp.service.OrderCallBackMQService; import cn.freemud.amp.service.OrderCallBackMQService;
import cn.freemud.base.entity.BaseResponse; import cn.freemud.base.entity.BaseResponse;
import cn.freemud.entities.vo.OrderCallBackRequestVo;
import cn.freemud.service.OrderCallBackService; import cn.freemud.service.OrderCallBackService;
import com.freemud.api.assortment.datamanager.util.RedisLock;
import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@Service @Service
public class OrderCallBackServiceImpl implements OrderCallBackService{ public class OrderCallBackServiceImpl implements OrderCallBackService{
/**
* cn.freemud.shared.order.enums.config.MsgOperateType.FORWARD(1, "订单正向操作"),
*/
public static final int OPERATE_TYPE_1 = 1;
/**
* cn.freemud.shared.order.enums.MsgType.UPDATE_REMIND("1", "订单信息变化通知通知")
*/
public static final String MSG_TYPE_1 = "1";
@Autowired @Autowired
private OrderCallBackMQService mqService; private OrderCallBackMQService mqService;
@Value("${order.callback.urgent.plan.open:false}")
private boolean urgentCallbackOpen;
@Value("${order.callback.urgent.plan.open.lock.minutes:30}")
private long urgentCallbackLockMinutes;
@Autowired
private RedisTemplate redisTemplate;
@Override @Override
public BaseResponse orderCallBackHandle(OrderCallBackRequestVo requestVo) { public BaseResponse orderCallBackHandle(OrderCallBackRequestVo requestVo) {
mqService.sendOrderMQ(requestVo); //紧急方案打开 且是正向单时步入 锁控制代码
return new BaseResponse("1","100","success"); if (urgentCallbackOpen && Objects.equals(OPERATE_TYPE_1, requestVo.getOperateType()) &&
Objects.equals(MSG_TYPE_1, requestVo.getMsgType())) {
this.urgentCallbackHandle(requestVo);
} else {
mqService.sendOrderMQ(requestVo);
}
return new BaseResponse("1", "100", "success");
}
private void urgentCallbackHandle(OrderCallBackRequestVo requestVo) {
RedisLock redisLock = RedisLock.getInstance(redisTemplate);
String lockKey = new StringBuilder().append(requestVo.getOrderCode()).append("_").append(requestVo.getOperateType())
.append("_").append(requestVo.getMsgType()).toString();
try {
//简单控制,不考虑解他锁问题
if (!redisLock.lock(lockKey, Long.valueOf(TimeUnit.MINUTES.toSeconds(urgentCallbackLockMinutes)).intValue())) {
ApiLog.infoMessage("订单orderCode:{} callback获取锁失败,lockKey:{}", requestVo.getOrderCode(), lockKey);
return;
}
mqService.sendOrderMQ(requestVo);
} finally {
redisLock.unlock(lockKey);
}
} }
} }
package cn.freemud.controller; package cn.freemud.controller;
import cn.freemud.ApiApplication; import cn.freemud.ApiApplication;
import cn.freemud.entities.vo.OrderCallBackRequestVo; import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
......
...@@ -50,7 +50,9 @@ import cn.freemud.management.entities.dto.request.BatchOrderRefundV2Request; ...@@ -50,7 +50,9 @@ import cn.freemud.management.entities.dto.request.BatchOrderRefundV2Request;
import cn.freemud.management.entities.dto.response.activity.GroupWorkRefundResponse; import cn.freemud.management.entities.dto.response.activity.GroupWorkRefundResponse;
import cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse; import cn.freemud.management.entities.dto.response.pay.PayBatchRefundResponse;
import cn.freemud.management.service.handle.ActivityHandle; import cn.freemud.management.service.handle.ActivityHandle;
import cn.freemud.management.service.handle.SaasOrderHandle;
import cn.freemud.management.thirdparty.MulitiPaymentClient; import cn.freemud.management.thirdparty.MulitiPaymentClient;
import cn.freemud.management.thirdparty.OrderCallbackClient;
import cn.freemud.manager.BuyProductOnceManager; import cn.freemud.manager.BuyProductOnceManager;
import cn.freemud.manager.OrderTackCodeManager; import cn.freemud.manager.OrderTackCodeManager;
import cn.freemud.manager.SpellGroupOrderDataManager; import cn.freemud.manager.SpellGroupOrderDataManager;
...@@ -77,9 +79,12 @@ import com.freemud.api.assortment.datamanager.meal.MealCacheManager; ...@@ -77,9 +79,12 @@ import com.freemud.api.assortment.datamanager.meal.MealCacheManager;
import com.freemud.application.sdk.api.constant.ResponseConstant; import com.freemud.application.sdk.api.constant.ResponseConstant;
import com.freemud.application.sdk.api.constant.ResponseResultEnum; import com.freemud.application.sdk.api.constant.ResponseResultEnum;
import com.freemud.application.sdk.api.couponcenter.offline.service.OfflineCouponSdkService; import com.freemud.application.sdk.api.couponcenter.offline.service.OfflineCouponSdkService;
import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.log.ErrorLog; import com.freemud.application.sdk.api.log.ErrorLog;
import com.freemud.application.sdk.api.log.LogThreadLocal; import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.config.OrderCenterProperties;
import com.freemud.application.sdk.api.ordercenter.entities.PayItem; import com.freemud.application.sdk.api.ordercenter.entities.PayItem;
import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType; import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType; import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.enums.PayChannelType; import com.freemud.application.sdk.api.ordercenter.enums.PayChannelType;
...@@ -318,6 +323,12 @@ public class OrderServiceImpl implements Orderservice { ...@@ -318,6 +323,12 @@ public class OrderServiceImpl implements Orderservice {
@Autowired @Autowired
private BuyProductOnceManager buyProductOnceManager; private BuyProductOnceManager buyProductOnceManager;
@Autowired
private OrderCallbackClient orderCallbackClient;
@Autowired
private OrderCenterProperties orderCenterProperties;
@Autowired
private SaasOrderHandle saasOrderHandle;
@Override @Override
...@@ -619,6 +630,14 @@ public class OrderServiceImpl implements Orderservice { ...@@ -619,6 +630,14 @@ public class OrderServiceImpl implements Orderservice {
} }
//支付成功后 //支付成功后
// buriedPointService.paySuccessBuridPoint(partnerId, storeId, orderBean); // buriedPointService.paySuccessBuridPoint(partnerId, storeId, orderBean);
// 增加全局开关,当紧急方案打开时进行直接处理callBack消息
if (orderCenterProperties.isUrgentCallbackOpen()) {
// 查询
OrderCallBackRequestVo requestVo = saasOrderHandle.convert2CallbackReq(orderBean.getOid(),2,null,null);
ApiLog.infoMessage("紧急方案 支付成功直接调用callback,orderCode:{},requestId:{}",requestVo.getOrderCode(),requestVo.getRequestId());
orderCallbackClient.callbackOrder(requestVo);
}
return sendPaySuccessNoticeMessage(); return sendPaySuccessNoticeMessage();
} }
......
...@@ -6,10 +6,15 @@ import cn.freemud.management.entities.dto.response.pay.PayRefundResponse; ...@@ -6,10 +6,15 @@ import cn.freemud.management.entities.dto.response.pay.PayRefundResponse;
import cn.freemud.management.enums.ResponseResult; import cn.freemud.management.enums.ResponseResult;
import cn.freemud.management.intercept.OrderServiceException; import cn.freemud.management.intercept.OrderServiceException;
import cn.freemud.management.util.ResponseUtil; import cn.freemud.management.util.ResponseUtil;
import com.alibaba.fastjson.JSON;
import com.freemud.application.sdk.api.log.LogThreadLocal; import com.freemud.application.sdk.api.log.LogThreadLocal;
import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType; import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType; import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.request.OrderModifyRelatingCodeReq; import com.freemud.application.sdk.api.ordercenter.request.OrderModifyRelatingCodeReq;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.OrderInfoReqs;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.QueryByCodeResponse;
import com.freemud.application.sdk.api.ordercenter.service.OrderSdkService;
import com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter; import com.freemud.sdk.api.assortment.order.adapter.OrderSdkAdapter;
import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus; import com.freemud.sdk.api.assortment.order.enums.PayRefundStatus;
import com.freemud.sdk.api.assortment.order.enums.RefundStatus; import com.freemud.sdk.api.assortment.order.enums.RefundStatus;
...@@ -20,11 +25,13 @@ import com.freemud.sdk.api.assortment.order.response.order.BaseOrderResponse; ...@@ -20,11 +25,13 @@ import com.freemud.sdk.api.assortment.order.response.order.BaseOrderResponse;
import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse; import com.freemud.sdk.api.assortment.order.response.order.QueryOrdersResponse;
import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService; import com.freemud.sdk.api.assortment.order.service.OrderCenterSdkService;
import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.util.List; import java.util.List;
import java.util.UUID;
//import com.freemud.application.sdk.api.log.LogThreadLocal; //import com.freemud.application.sdk.api.log.LogThreadLocal;
...@@ -52,6 +59,8 @@ public class SaasOrderHandle { ...@@ -52,6 +59,8 @@ public class SaasOrderHandle {
private Integer wmDeliveryTimeOut; private Integer wmDeliveryTimeOut;
@Value("#{'${order.not.automatic.twist.partnerId}'.split(',')}") @Value("#{'${order.not.automatic.twist.partnerId}'.split(',')}")
private List<String> notAutomaticTwistPartnerId; private List<String> notAutomaticTwistPartnerId;
@Autowired
private OrderSdkService orderSdkService;
/** /**
* 确认接单 * 确认接单
...@@ -318,5 +327,37 @@ public class SaasOrderHandle { ...@@ -318,5 +327,37 @@ public class SaasOrderHandle {
return ResponseUtil.success(); return ResponseUtil.success();
} }
/**
* 转换成callback消息体
* @param orderCode 订单编号
* @param orderState cn.freemud.shared.order.enums.order.OrderStatus.API_DESC="订单状态 1:待支付 2:下单 3:已接单 4:制作完成(待发货) 5:配送中 6:已完 7:已关闭";
* @param operateType 操作类型 0= 其他信息修改,1=订单正向操作,2=订单逆向操作,3=通知消息
* @param msgType 消息类型 MsgType() 1:订单信息变化通知通知
* @return
*/
public OrderCallBackRequestVo convert2CallbackReq(String orderCode, Integer orderState, Integer operateType, String msgType) {
OrderCallBackRequestVo notifyDto = new OrderCallBackRequestVo();
//直接查询基础服务获取订单信息
QueryByCodeResponse orderInfo = orderSdkService.getOrderInfo(null, orderCode, null,
null, LogThreadLocal.getTrackingNo());
if (orderInfo == null) {
return null;
}
OrderInfoReqs orderResp = orderInfo.getResult();
// @see cn.freemud.shared.order.enums.order.OrderStatus.API_DESC = "订单状态 1:待支付 2:下单 3:已接单 4:制作完成(待发货) 5:配送中 6:已完 7:已关闭";
if (orderState != null && orderState > 0) {
orderResp.setOrderState(orderState);
}
notifyDto.setContent(JSON.toJSONString(orderResp));
notifyDto.setPartnerId(orderResp.getPartnerId());
notifyDto.setRequestId(UUID.randomUUID().toString().replaceAll("-", ""));
notifyDto.setOperateType(operateType != null ? operateType : 1);
// @see cn.freemud.shared.order.enums.MsgType() 1:订单信息变化通知通知
notifyDto.setMsgType(StringUtils.isNotBlank(msgType) ? msgType : "1");
notifyDto.setStoreId(orderResp.getStoreId());
notifyDto.setOrderCode(orderResp.getOrderCode());
notifyDto.setOrderClient(orderResp.getOrderClient() != null ? orderResp.getOrderClient().intValue() : null);
return notifyDto;
}
} }
...@@ -12,8 +12,12 @@ import cn.freemud.management.intercept.OrderServiceException; ...@@ -12,8 +12,12 @@ import cn.freemud.management.intercept.OrderServiceException;
import cn.freemud.management.service.OrderBaseService; import cn.freemud.management.service.OrderBaseService;
import cn.freemud.management.service.OrderManagerService; import cn.freemud.management.service.OrderManagerService;
import cn.freemud.management.service.handle.*; import cn.freemud.management.service.handle.*;
import cn.freemud.management.thirdparty.OrderCallbackClient;
import cn.freemud.management.util.ResponseUtil; import cn.freemud.management.util.ResponseUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.freemud.application.sdk.api.log.ApiLog;
import com.freemud.application.sdk.api.ordercenter.config.OrderCenterProperties;
import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo;
import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType; import com.freemud.application.sdk.api.ordercenter.enums.AfterSalesType;
import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType; import com.freemud.application.sdk.api.ordercenter.enums.OrderClientType;
import com.freemud.application.sdk.api.ordercenter.request.OrderCancelReq; import com.freemud.application.sdk.api.ordercenter.request.OrderCancelReq;
...@@ -37,10 +41,6 @@ import org.springframework.stereotype.Service; ...@@ -37,10 +41,6 @@ import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import static cn.freemud.management.enums.OperateType.ORDER_AGREE_REFUND; import static cn.freemud.management.enums.OperateType.ORDER_AGREE_REFUND;
...@@ -84,6 +84,10 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -84,6 +84,10 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
* 8200201 商户余额不足 * 8200201 商户余额不足
*/ */
public static final Set<String> PAY_RETURN_FILTER_CODES = Stream.of("8200201").collect(Collectors.toSet()); public static final Set<String> PAY_RETURN_FILTER_CODES = Stream.of("8200201").collect(Collectors.toSet());
@Autowired
private OrderCenterProperties orderCenterProperties;
@Autowired
private OrderCallbackClient orderCallbackClient;
/** /**
* 接单 * 接单
...@@ -104,6 +108,12 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService { ...@@ -104,6 +108,12 @@ public class SaasOrderMangerServiceImpl implements OrderManagerService {
if(baseResponse != null && baseResponse.getResult() == null){ if(baseResponse != null && baseResponse.getResult() == null){
orderBaseService.sendMessage(orderBean, OperateType.ORDER_CONFIRM, request.getReason()); orderBaseService.sendMessage(orderBean, OperateType.ORDER_CONFIRM, request.getReason());
} }
// 增加全局开关,当紧急方案打开时进行直接处理callBack消息
if (orderCenterProperties.isUrgentCallbackOpen()) {
OrderCallBackRequestVo requestVo = saasOrderHandle.convert2CallbackReq(orderBean.getOid(),3,null,null);
ApiLog.infoMessage("紧急方案 接单成功直接调用callback,orderCode:{},requestId:{}",requestVo.getOrderCode(),requestVo.getRequestId());
orderCallbackClient.callbackOrder(requestVo);
}
return ResponseUtil.success(new OrderManagerResponse(storeInfo.getBizVO().getOrderPrintConfig(), orderBean.getGmtExpect(), return ResponseUtil.success(new OrderManagerResponse(storeInfo.getBizVO().getOrderPrintConfig(), orderBean.getGmtExpect(),
CollectionUtils.isEmpty(orderBean.getRefundList()) ? null : RefundStatus.getByCode(orderBean.getRefundList().get(0).getStatus()))); CollectionUtils.isEmpty(orderBean.getRefundList()) ? null : RefundStatus.getByCode(orderBean.getRefundList().get(0).getStatus())));
} }
......
/**
* All rights Reserved, Designed By www.freemud.cn
*
* @Title: CustomerExtendClient
* @Package cn.freemud.service.thirdparty
* @Description:
* @author: song.cai
* @date: 2019/2/20 16:42
* @version V1.0
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/
package cn.freemud.management.thirdparty;
import com.freemud.application.sdk.api.ordercenter.entities.vo.OrderCallBackRequestVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(name = "CALL-BACK-SERVICE", url = "${saas.callbackService.feign.url}")
@RequestMapping(produces = { "application/json;charset=UTF-8" })
public interface OrderCallbackClient {
/**
* callback订单
* @param requestVo
* @return 无返回值,只有成功或失败
*/
@PostMapping(value = "/callback/order")
void callbackOrder(@RequestBody OrderCallBackRequestVo requestVo);
}
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
package com.freemud.application.sdk.api.ordercenter.config; package com.freemud.application.sdk.api.ordercenter.config;
import com.freemud.application.sdk.api.config.CenterConfigProperties; import com.freemud.application.sdk.api.config.CenterConfigProperties;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -32,6 +33,14 @@ public class OrderCenterProperties extends CenterConfigProperties { ...@@ -32,6 +33,14 @@ public class OrderCenterProperties extends CenterConfigProperties {
private List<String> redisToEsPartnerIds = new ArrayList<>(); private List<String> redisToEsPartnerIds = new ArrayList<>();
/**
* 紧急方案 直接调用callback接口
* 同时在 cn.freemud.service.impl.OrderCallBackServiceImpl.urgentCallbackOpen 同样使用此配置
*/
@Getter
@Value("${order.callback.urgent.plan.open:false}")
private boolean urgentCallbackOpen;
public List<String> getRedisToEsPartnerIds() { public List<String> getRedisToEsPartnerIds() {
return redisToEsPartnerIds; return redisToEsPartnerIds;
} }
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* @Copyright: 2019 www.freemud.cn Inc. All rights reserved. * @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
* 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目 * 注意:本内容仅限于上海非码科技内部传阅,禁止外泄以及用于其他的商业目
*/ */
package cn.freemud.entities.vo; package com.freemud.application.sdk.api.ordercenter.entities.vo;
import lombok.Data; import lombok.Data;
......
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