|
@@ -16,12 +16,15 @@ import com.fire.supplier.dto.*;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
|
|
import org.springframework.messaging.support.MessageBuilder;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
import redis.clients.jedis.JedisCluster;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
|
+import java.util.Date;
|
|
|
+
|
|
|
import static com.fire.common.constants.RocketTags.FAIL_TAG;
|
|
|
import static com.fire.common.constants.RocketTags.SUCCESS_TAG;
|
|
|
import static com.fire.common.constants.RocketTopic.CHILD_ORDER_TOPIC;
|
|
@@ -55,9 +58,10 @@ public class GetOrderSupplierServiceImpl implements GetOrderSupplierService {
|
|
|
private SupplierAuth supplierAuth;
|
|
|
|
|
|
@Override
|
|
|
- public void getOrder(FlowOrderInfo orderInfo) {
|
|
|
+ @Async
|
|
|
+ public void getOrder(MobileFlowDispatchRec childOrder) {
|
|
|
//根据通道提取供应商信息
|
|
|
- ChannelSupplier supplier = DataPool.supplierHashMap.get(orderInfo.getChannelId());
|
|
|
+ ChannelSupplier supplier = DataPool.supplierHashMap.get(childOrder.getChannelId());
|
|
|
//组装请求参数
|
|
|
QueryOrderRequest queryOrderRequest = new QueryOrderRequest();
|
|
|
RequestHeader header = new RequestHeader();
|
|
@@ -70,7 +74,7 @@ public class GetOrderSupplierServiceImpl implements GetOrderSupplierService {
|
|
|
header.setTimestamp((int) (System.currentTimeMillis() / 1000));
|
|
|
header.setSign("MD5");
|
|
|
//组装请求参数body 这里发送的是子订单id,规则为主订单id+发送次数sendCount
|
|
|
- body.setMerchantOrderNo(String.valueOf(orderInfo.getOrderId() + orderInfo.getSendCount()));
|
|
|
+ body.setMerchantOrderNo(String.valueOf(childOrder.getOrderId() + childOrder.getSendCount()));
|
|
|
//code取值是供应商的passwd 用code和header中的值进行md5加密得到原版本1的 签名
|
|
|
String code = supplier.getPasswd();
|
|
|
|
|
@@ -102,18 +106,18 @@ public class GetOrderSupplierServiceImpl implements GetOrderSupplierService {
|
|
|
//如果充值中不操作 所以非充值中都需要更改状态
|
|
|
if (!supplierOrderStatus.equals(SUPPLIER_ORDER_PROCESS)) {
|
|
|
//分发记录修改 只要不是充值中,子订单就进入终态 todo redis中获取分发记录
|
|
|
- MobileFlowDispatchRec newChildOrder = orderInfo.getNewChildOrder();
|
|
|
- newChildOrder.setGwErrorMsg(businessStatus.message());
|
|
|
- newChildOrder.setGwErrorCode(String.valueOf(businessStatus.status()));
|
|
|
+
|
|
|
+ childOrder.setGwErrorMsg(businessStatus.message());
|
|
|
+ childOrder.setGwErrorCode(String.valueOf(businessStatus.status()));
|
|
|
switch (supplierOrderStatus) {
|
|
|
- case SUPPLIER_ORDER_FAILED -> newChildOrder.setSendStatus(ORDER_FAIL.status());
|
|
|
- case SUPPLIER_ORDER_SUCCESS -> newChildOrder.setSendStatus(ORDER_SUCCESS.status());
|
|
|
+ case SUPPLIER_ORDER_FAILED -> childOrder.setSendStatus(ORDER_FAIL.status());
|
|
|
+ case SUPPLIER_ORDER_SUCCESS -> childOrder.setSendStatus(ORDER_SUCCESS.status());
|
|
|
}
|
|
|
- Long recId = newChildOrder.getRecId();
|
|
|
+ Long recId = childOrder.getRecId();
|
|
|
String childOrderStr;
|
|
|
ObjectMapper om = new ObjectMapper();
|
|
|
try {
|
|
|
- childOrderStr = om.writeValueAsString(newChildOrder);
|
|
|
+ childOrderStr = om.writeValueAsString(childOrder);
|
|
|
//订单转换为json更新入redis
|
|
|
long hKey = recId / 10000000;
|
|
|
jedisCluster.hset(CHILD_ORDER_INFO.key() + hKey, String.valueOf(recId), childOrderStr);
|
|
@@ -129,35 +133,37 @@ public class GetOrderSupplierServiceImpl implements GetOrderSupplierService {
|
|
|
log.error("子订单在分发的时候转换成json失败:", e);
|
|
|
}
|
|
|
|
|
|
- String orderStr;
|
|
|
- try {
|
|
|
- orderStr = om.writeValueAsString(orderInfo);
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("订单重入优先级队列失败:", e);
|
|
|
- //todo 进入兜底订单
|
|
|
- return;
|
|
|
- }
|
|
|
+
|
|
|
+ long orderId = childOrder.getOrderId();
|
|
|
+ //订单转换为json更新入redis
|
|
|
+ long hKey = orderId / 10000000;
|
|
|
+ String orderStr = jedisCluster.hget(ORDER_INFO.key() + hKey, String.valueOf(orderId));
|
|
|
+
|
|
|
//子订单成功 那么主订单就成功了 子订单成功 那么主订单重入队列
|
|
|
switch (supplierOrderStatus) {
|
|
|
case SUPPLIER_ORDER_SUCCESS -> {
|
|
|
- long orderId = orderInfo.getOrderId();
|
|
|
- //订单转换为json更新入redis
|
|
|
- long hKey = orderId / 10000000;
|
|
|
- jedisCluster.hset(ORDER_INFO.key() + hKey, String.valueOf(orderId), orderStr);
|
|
|
- //订单入队列
|
|
|
- rocketMQTemplate.syncSendOrderly(ORDER_TOPIC + ":" + SUCCESS_TAG, MessageBuilder.withPayload(orderStr).build(), String.valueOf(orderId));
|
|
|
- }
|
|
|
- case SUPPLIER_ORDER_FAILED -> {
|
|
|
- //入优先级队列
|
|
|
- redisPriorityQueueScript.addContent(orderInfo.getOrderId(), orderStr);
|
|
|
+ try {
|
|
|
+ FlowOrderInfo orderInfo = om.readValue(orderStr, FlowOrderInfo.class);
|
|
|
+ orderInfo.setStatus(ORDER_SUCCESS.status());
|
|
|
+ orderInfo.setChannelId(childOrder.getChannelId());
|
|
|
+ orderInfo.setNote("成功");
|
|
|
+ orderInfo.setOperatorBalancePrice(childOrder.getOperatorBalancePrice());
|
|
|
+ orderInfo.setCallbackTime(new Date());
|
|
|
+ orderStr = om.writeValueAsString(orderInfo);
|
|
|
+ jedisCluster.hset(ORDER_INFO.key() + hKey, String.valueOf(orderId), orderStr);
|
|
|
+ //订单入队列
|
|
|
+ rocketMQTemplate.syncSendOrderly(ORDER_TOPIC + ":" + SUCCESS_TAG, MessageBuilder.withPayload(orderStr).build(), String.valueOf(orderId));
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
+ log.error("通道返回成功,但是订单代码异常", e);
|
|
|
+ //todo 这里是成功异常
|
|
|
+ }
|
|
|
}
|
|
|
+ //子订单失败
|
|
|
+ case SUPPLIER_ORDER_FAILED -> redisPriorityQueueScript.addContent(orderId, orderStr);
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
}
|
|
|
|
|
|
}
|