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

Commit bfeb89b8 authored by jiangxiulong's avatar jiangxiulong

超时支付完善

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