记得上下班打卡 | git大法好,push需谨慎

Commit bfeb89b8 authored by jiangxiulong's avatar jiangxiulong

超时支付完善

parent 341be41b
...@@ -28,6 +28,7 @@ db.createCollection("GoblinOrderSkuVo"); ...@@ -28,6 +28,7 @@ db.createCollection("GoblinOrderSkuVo");
db.createCollection("GoblinSelfMarketingVo"); db.createCollection("GoblinSelfMarketingVo");
db.createCollection("GoblinStoreOrderVo"); db.createCollection("GoblinStoreOrderVo");
db.createCollection("GoblinNftOrderVo"); db.createCollection("GoblinNftOrderVo");
db.createCollection("GoblinNftOrderCallBackVo");
// ================================================== 创建索引 // ================================================== 创建索引
...@@ -76,6 +77,11 @@ db.GoblinNftOrderVo.createIndex({orderId:"hashed"}); ...@@ -76,6 +77,11 @@ db.GoblinNftOrderVo.createIndex({orderId:"hashed"});
db.GoblinNftOrderVo.createIndex({orderCode:"hashed"}); db.GoblinNftOrderVo.createIndex({orderCode:"hashed"});
db.GoblinNftOrderVo.createIndex({skuId:"hashed"}); db.GoblinNftOrderVo.createIndex({skuId:"hashed"});
db.GoblinNftOrderVo.createIndex({userId:"hashed"}); db.GoblinNftOrderVo.createIndex({userId:"hashed"});
db.GoblinNftOrderCallBackVo.createIndex({orderRefundId:"hashed"});
db.GoblinNftOrderCallBackVo.createIndex({refundCode:"hashed"});
db.GoblinNftOrderCallBackVo.createIndex({orderId:"hashed"});
db.GoblinNftOrderCallBackVo.createIndex({orderCode:"hashed"});
db.GoblinNftOrderCallBackVo.createIndex({userId:"hashed"});
...@@ -109,3 +115,4 @@ sh.shardCollection("test_ln_scene.GoblinOrderSkuVo",{"orderSkuId":"hashed"}); ...@@ -109,3 +115,4 @@ sh.shardCollection("test_ln_scene.GoblinOrderSkuVo",{"orderSkuId":"hashed"});
sh.shardCollection("test_ln_scene.GoblinStoreOrderVo",{"orderId":"hashed"}); sh.shardCollection("test_ln_scene.GoblinStoreOrderVo",{"orderId":"hashed"});
sh.shardCollection("test_ln_scene.GoblinSelfMarketingVo",{"selfMarketId":"hashed"}); sh.shardCollection("test_ln_scene.GoblinSelfMarketingVo",{"selfMarketId":"hashed"});
sh.shardCollection("test_ln_scene.GoblinNftOrderVo",{"orderId":"hashed"}); sh.shardCollection("test_ln_scene.GoblinNftOrderVo",{"orderId":"hashed"});
sh.shardCollection("test_ln_scene.GoblinNftOrderCallBackVo",{"orderRefundId":"hashed"});
...@@ -23,7 +23,7 @@ public class GoblinNftOrderController { ...@@ -23,7 +23,7 @@ public class GoblinNftOrderController {
IGoblinNftOrderService iGoblinNftOrderService; IGoblinNftOrderService iGoblinNftOrderService;
@PostMapping("pre") @PostMapping("pre")
@ApiOperation("下单(加密)") // @ApiOperation("下单(加密)")
@ApiResponse(code = 200, message = "接口返回对象参数") @ApiResponse(code = 200, message = "接口返回对象参数")
public ResponseDto<GoblinNftPayResultVo> checkOrder(@RequestBody EncryptedReq<GoblinNftOrderPayParam> payParam) { public ResponseDto<GoblinNftPayResultVo> checkOrder(@RequestBody EncryptedReq<GoblinNftOrderPayParam> payParam) {
return iGoblinNftOrderService.checkOrder(payParam.getData()); return iGoblinNftOrderService.checkOrder(payParam.getData());
......
...@@ -414,7 +414,11 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService { ...@@ -414,7 +414,11 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
log.error("Nft订单payCode不匹配 param:[orderCode:{}, payCode:{}, code:{}]", orderCode, orderVo.getPayCode(), syncOrderParam.getCode()); log.error("Nft订单payCode不匹配 param:[orderCode:{}, payCode:{}, code:{}]", orderCode, orderVo.getPayCode(), syncOrderParam.getCode());
return "fail"; return "fail";
} }
if (!Objects.equals(orderVo.getStatus(), GoblinStatusConst.NftStatus.ORDER_STATUS_1.getValue())) { if (
!Objects.equals(orderVo.getStatus(), GoblinStatusConst.NftStatus.ORDER_STATUS_1.getValue())
&&
!Objects.equals(orderVo.getStatus(), GoblinStatusConst.NftStatus.ORDER_STATUS_3.getValue())
) {
log.error("Nft订单当前状态不能支付回调 param:[orderCode:{}, status:{}]", orderCode, orderVo.getStatus()); log.error("Nft订单当前状态不能支付回调 param:[orderCode:{}, status:{}]", orderCode, orderVo.getStatus());
return "fail"; return "fail";
} }
......
...@@ -120,7 +120,7 @@ public class GoblinNftOrderUtils { ...@@ -120,7 +120,7 @@ public class GoblinNftOrderUtils {
// 退款订单vo // 退款订单vo
public void setBackOrderVo(GoblinNftOrderCallBackVo vo) { public void setBackOrderVo(GoblinNftOrderCallBackVo vo) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_NFT_ORDER_REFUND_INFO.concat(vo.getOrderRefundId()); String redisKey = GoblinRedisConst.REDIS_GOBLIN_NFT_ORDER_REFUND_INFO.concat(vo.getOrderId());
redisUtil.set(redisKey, vo); redisUtil.set(redisKey, vo);
} }
...@@ -240,65 +240,65 @@ public class GoblinNftOrderUtils { ...@@ -240,65 +240,65 @@ public class GoblinNftOrderUtils {
//超时支付自动退款 //超时支付自动退款
public Boolean refundOrderSku(String orderId, String paymentId, String paymentType) { public Boolean refundOrderSku(String orderId, String paymentId, String paymentType) {
String uid = CurrentUtil.getCurrentUid();
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
String nowStr = DateUtil.getNowTime(); GoblinNftOrderVo nftOrder = getNftOrder(orderId);
GoblinNftOrderVo NftOrder = getNftOrder(orderId); BigDecimal refundPrice = nftOrder.getPriceActual();
BigDecimal refundPrice = NftOrder.getPriceActual();
//记录退款单 //记录退款单
String refundCode = IDGenerator.storeRefundCode(NftOrder.getOrderCode()); String refundCode = IDGenerator.storeRefundCode(nftOrder.getOrderCode());
GoblinNftOrderRefund nftBackOrder = GoblinNftOrderRefund.getNew(); GoblinNftOrderRefund nftBackOrder = GoblinNftOrderRefund.getNew();
nftBackOrder.setOrderRefundId(IDGenerator.nextTimeId2()); nftBackOrder.setOrderRefundId(IDGenerator.nextTimeId2());
nftBackOrder.setRefundCode(refundCode); nftBackOrder.setRefundCode(refundCode);
nftBackOrder.setOrderId(orderId); nftBackOrder.setOrderId(orderId);
nftBackOrder.setOrderCode(NftOrder.getOrderCode()); nftBackOrder.setOrderCode(nftOrder.getOrderCode());
nftBackOrder.setStoreId(NftOrder.getStoreId()); nftBackOrder.setStoreId(nftOrder.getStoreId());
nftBackOrder.setUserId(NftOrder.getUserId()); nftBackOrder.setUserId(nftOrder.getUserId());
nftBackOrder.setSkuIdNums(NftOrder.getSkuId()); nftBackOrder.setSkuIdNums(nftOrder.getSkuId());
nftBackOrder.setRealBackPrice(refundPrice); nftBackOrder.setRealBackPrice(refundPrice);
nftBackOrder.setStatus(GoblinStatusConst.NftStatus.ORDER_REFUND_STATUS_1.getValue()); nftBackOrder.setStatus(GoblinStatusConst.NftStatus.ORDER_REFUND_STATUS_1.getValue());
nftBackOrder.setCreatedAt(now); nftBackOrder.setCreatedAt(now);
nftBackOrder.setUpdatedAt(now); nftBackOrder.setUpdatedAt(now);
nftBackOrder.setRefundAt(LocalDateTime.now());
nftBackOrder.setErrorReason("");
GoblinNftOrderCallBackVo backOrderVo = GoblinNftOrderCallBackVo.getNew().copy(nftBackOrder); GoblinNftOrderCallBackVo backOrderVo = GoblinNftOrderCallBackVo.getNew().copy(nftBackOrder);
//调用退款 // 调用退款
NftOrder.setPaymentId(paymentId); nftOrder.setPaymentId(paymentId);
NftOrder.setPaymentType(paymentType); nftOrder.setPaymentType(paymentType);
String returnString = initRefund(NftOrder, refundPrice, refundCode); String returnString = initRefund(nftOrder, refundPrice, refundCode);
HashMap hashMapResult = JsonUtils.fromJson(returnString, HashMap.class); HashMap hashMapResult = JsonUtils.fromJson(returnString, HashMap.class);
Boolean success = (Boolean) hashMapResult.get("success"); Boolean success = (Boolean) hashMapResult.get("success");
String message = (String) hashMapResult.get("message"); String message = (String) hashMapResult.get("message");
if (!success) { if (!success) {
if (!Objects.equals(backOrderVo.getStatus(), GoblinStatusConst.NftStatus.ORDER_REFUND_STATUS_2.getValue())) { if (!Objects.equals(backOrderVo.getStatus(), GoblinStatusConst.NftStatus.ORDER_REFUND_STATUS_2.getValue())) {
backOrderVo.setStatus(GoblinStatusConst.NftStatus.ORDER_REFUND_STATUS_3.getValue()); backOrderVo.setStatus(GoblinStatusConst.NftStatus.ORDER_REFUND_STATUS_3.getValue());
backOrderVo.setErrorReason(backOrderVo.getErrorReason() + ",失败原因:" + message); backOrderVo.setErrorReason(message);
log.error("REFUND DATA = " + returnString);
} }
} }
// redis
setBackOrderVo(backOrderVo); /**
// mongo * 退款表数据处理
goblinMongoUtils.insertGoblinNftOrderRefundVo(backOrderVo); */
// 添加退款 setBackOrderVo(backOrderVo);// redis
queueUtils.sendMsgByRedis( goblinMongoUtils.insertGoblinNftOrderRefundVo(backOrderVo);// mongo
queueUtils.sendMsgByRedis(// mysql
MQConst.GoblinQueue.GOBLIN_STORE_ORDER_OPERA.getKey(), MQConst.GoblinQueue.GOBLIN_STORE_ORDER_OPERA.getKey(),
SqlMapping.get("goblin_nft_order_refund.insert", SqlMapping.get("goblin_nft_order_refund.insert",
nftBackOrder.getOrderRefundId(), nftBackOrder.getRefundCode(), nftBackOrder.getOrderId(), nftBackOrder.getOrderRefundId(), nftBackOrder.getRefundCode(), nftBackOrder.getOrderId(),
nftBackOrder.getOrderCode(), nftBackOrder.getStoreId(), nftBackOrder.getUserId(), nftBackOrder.getOrderCode(), nftBackOrder.getStoreId(), nftBackOrder.getUserId(),
nftBackOrder.getSkuIdNums(), nftBackOrder.getRealBackPrice(), nftBackOrder.getStatus(), nftBackOrder.getSkuIdNums(), nftBackOrder.getRealBackPrice(), backOrderVo.getStatus(),
nftBackOrder.getRefundAt(), nftBackOrder.getErrorReason() nftBackOrder.getRefundAt(), backOrderVo.getErrorReason()
) )
); );
if (success) { if (success) {
return true; return true;
} else { } else {
log.error("退款失败:" + message);
return false; return false;
} }
} }
private String initRefund(GoblinNftOrderVo orderVo, BigDecimal price, String refundCode) { private String initRefund(GoblinNftOrderVo orderVo, BigDecimal price, String refundCode) {
log.info("NFT退款请求 参数:[orderVo:{}, price:{}, refundCode:{}]", orderVo, price, refundCode);
MultiValueMap<String, String> params = CollectionUtil.linkedMultiValueMapStringString(); MultiValueMap<String, String> params = CollectionUtil.linkedMultiValueMapStringString();
params.add("code", orderVo.getPayCode()); params.add("code", orderVo.getPayCode());
params.add("notifyUrl", synUrl); params.add("notifyUrl", synUrl);
...@@ -312,7 +312,7 @@ public class GoblinNftOrderUtils { ...@@ -312,7 +312,7 @@ public class GoblinNftOrderUtils {
MultiValueMap<String, String> headers = CollectionUtil.linkedMultiValueMapStringString(); MultiValueMap<String, String> headers = CollectionUtil.linkedMultiValueMapStringString();
headers.add("Accept", "application/json;charset=UTF-8"); headers.add("Accept", "application/json;charset=UTF-8");
String returnString = HttpUtil.post(refundApply, params, headers); String returnString = HttpUtil.post(refundApply, params, headers);
log.debug("REFUND DATA = " + returnString); log.info("NFT退款请求 结果:[returnString:{}]", returnString);
return returnString; return returnString;
} }
......
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