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

Commit 75b9fa29 authored by 胡佳晨's avatar 胡佳晨

dragon 平台 保存订单id

parent 1ee545a6
package com.liquidnet.service.goblin.param;
import com.liquidnet.service.goblin.dto.vo.GoblinFrontGoodDetailVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
@ApiModel(value = "GoblinOrderPreParam")
@Data
public class GoblinOrderPreParam implements Cloneable{
@ApiModelProperty(required = false, value = "实际支付价格")
private BigDecimal priceActual;
@ApiModelProperty(required = true, value = "商铺名称")
private String storeName;
@ApiModelProperty(required = true, value = "sku名称")
private String skuName;
@ApiModelProperty(required = true, value = "总订单号")
private String orderMasterCode;
@ApiModelProperty(required = true, value = "订单id[逗号隔开]")
private String orderIdList;
@ApiModelProperty(required = true, value = "订单过期时间")
private int expireTime;
private String deviceFrom;
private String payType;
private String openId;
private String returnUrl;
private String showUrl;
private static final GoblinOrderPreParam obj = new GoblinOrderPreParam();
public static GoblinOrderPreParam getNew() {
try {
return (GoblinOrderPreParam) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinOrderPreParam();
}
}
}
......@@ -2,7 +2,7 @@ package com.liquidnet.service.goblin.service;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.manage.GoblinOrderParam;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinPayInnerResultVo;
import com.liquidnet.service.goblin.dto.vo.GoblinPayInnerResultVo;
import com.liquidnet.service.goblin.param.PayAgainParam;
import com.liquidnet.service.goblin.param.SyncOrderParam;
......
......@@ -3,7 +3,7 @@ package com.liquidnet.service.goblin.controller;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.codec.vo.EncryptedReq;
import com.liquidnet.service.goblin.dto.manage.GoblinOrderParam;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinPayInnerResultVo;
import com.liquidnet.service.goblin.dto.vo.GoblinPayInnerResultVo;
import com.liquidnet.service.goblin.param.PayAgainParam;
import com.liquidnet.service.goblin.param.SyncOrderParam;
import com.liquidnet.service.goblin.service.IGoblinAppOrderService;
......
......@@ -14,10 +14,11 @@ import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.manage.GoblinOrderParam;
import com.liquidnet.service.goblin.dto.manage.GoblinOrderSkuParam;
import com.liquidnet.service.goblin.dto.manage.GoblinOrderStoreParam;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinPayInnerResultVo;
import com.liquidnet.service.goblin.dto.vo.GoblinPayInnerResultVo;
import com.liquidnet.service.goblin.dto.vo.GoblinOrderAttrVo;
import com.liquidnet.service.goblin.dto.vo.GoblinOrderSkuVo;
import com.liquidnet.service.goblin.dto.vo.GoblinStoreOrderVo;
import com.liquidnet.service.goblin.param.GoblinOrderPreParam;
import com.liquidnet.service.goblin.param.PayAgainParam;
import com.liquidnet.service.goblin.param.SyncOrderParam;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo;
......@@ -63,8 +64,19 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService {
public ResponseDto<GoblinPayInnerResultVo> checkOrder(GoblinOrderParam param) {
String uid = CurrentUtil.getCurrentUid();
List<String> skuAndPreListAndNumber = CollectionUtil.arrayListString();
try {
String orderMasterCode = IDGenerator.storeMasterCode();//总订单id
GoblinOrderPreParam preParam = GoblinOrderPreParam.getNew();
preParam.setPayType(param.getPayType());
preParam.setDeviceFrom(param.getPayType());
preParam.setOpenId(param.getOpenId());
preParam.setReturnUrl(param.getReturnUrl());
preParam.setShowUrl(param.getShowUrl());
preParam.setOrderMasterCode(orderMasterCode);
preParam.setExpireTime(5);
preParam.setStoreName("");
preParam.setSkuName("");
preParam.setOrderIdList("");
try {
List<GoblinOrderStoreParam> goblinOrderStoreParamList = param.getGoblinOrderStoreParamList();//分订单
//获取用户相关
String addressId;
......@@ -96,23 +108,11 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService {
String orderCode = IDGenerator.storeCode(orderId);
for (GoblinOrderSkuParam skuParam : storeParam.getGoblinOrderSkuParamArrayList()) {//商品维度循环
String skuId = skuParam.getSkuId();
// String spuId = skuParam.getSpuId();
// GoblinGoodsInfoVo goblinGoodsInfoVo = redisUtils.getGoodsInfoVo(spuId);
// if (goblinGoodsInfoVo == null) {
// return null;//参数异常
// }
// if (!(goblinGoodsInfoVo.getStatus().equals("3") && goblinGoodsInfoVo.getShelvesStatus().equals("3"))) {
// return null;//该spu不可购买
// }
// if (!goblinGoodsInfoVo.getSkuIdList().contains(skuId)) {
// return null;//参数异常
// }
int number = skuParam.getNumber();
GoblinGoodsSkuInfoVo skuVo = redisUtils.getGoodsSkuInfoVo(skuId);
if (!(skuVo.getStatus().equals("3") && skuVo.getShelvesStatus().equals("3"))) {
throw new Exception("不可购买");
}
// 判断库存
String pre = GoblinStatusConst.MarketPreStatus.getPre(skuId);
int limitCount = skuVo.getBuyLimit() == 0 ? Integer.MAX_VALUE : skuVo.getBuyLimit();
......@@ -129,9 +129,16 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService {
}
}//GoblinOrderSkuParam
//下单
return order(param, storeParam, uid, isMember, addressesVo, orderMasterCode, orderId, orderCode);
GoblinOrderPreParam pre = order(param, storeParam, uid, isMember, addressesVo, orderMasterCode, orderId, orderCode);
preParam.setPriceActual(preParam.getPriceActual().add(pre.getPriceActual()));
preParam.setStoreName(pre.getStoreName()+","+pre.getStoreName());
preParam.setSkuName(pre.getSkuName()+","+pre.getSkuName());
preParam.setOrderIdList(pre.getOrderIdList()+","+pre.getOrderIdList());
}//GoblinOrderStoreParam
if(preParam.getOrderIdList().equals("")){
throw new Exception("参数异常");
}
return payOrder(preParam);
} catch (Exception e) {
log.error("Kylin Order Pay Error = {}", e);
//回顾限购 回滚库存
......@@ -162,7 +169,7 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService {
}
}
private ResponseDto<GoblinPayInnerResultVo> order(GoblinOrderParam param, GoblinOrderStoreParam storeParam, String uid, boolean isMember, AdamAddressesVo addressesVo, String orderMasterCode, String orderId, String orderCode) throws Exception {
private GoblinOrderPreParam order(GoblinOrderParam param, GoblinOrderStoreParam storeParam, String uid, boolean isMember, AdamAddressesVo addressesVo, String orderMasterCode, String orderId, String orderCode) throws Exception {
String platVoucherCode = storeParam.getPlatVoucherCode();
String storeId = storeParam.getStoreId();
LinkedList<String> sqls = CollectionUtil.linkedListString();
......@@ -280,61 +287,7 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService {
orderAttr.setExpressPhone(addressesVo.getPhone());
orderAttr.setExpressType(1);
orderAttr.setCreatedAt(now);
//是否免费
boolean isFree = false;
GoblinPayInnerResultVo payInnerResultVo;
if (storeOrder.getPriceActual().compareTo(BigDecimal.valueOf(0)) > 0) {
// 调用支付
LinkedMultiValueMap<String, String> httpData = CollectionUtil.linkedMultiValueMapStringString();
httpData.add("type", "PRODUCT");
httpData.add("price", storeOrder.getPriceActual().toString());
httpData.add("name", redisUtils.getStoreInfoVo(storeParam.getStoreId()).getStoreName());
httpData.add("detail", skuName);
httpData.add("orderCode", storeOrder.getOrderCode());
httpData.add("orderId", storeOrder.getOrderId());
httpData.add("clientIp", storeOrder.getIpAddress());
httpData.add("notifyUrl", synUrl);
httpData.add("createDate", storeOrder.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
httpData.add("expireTime", storeOrder.getPayCountdownMinute().toString());
httpData.add("payType", storeOrder.getPayType());
httpData.add("deviceFrom", param.getDeviceFrom());
if (param.getDeviceFrom().equals("js") || param.getDeviceFrom().equals("applet")) {
httpData.add("openId", param.getOpenId());
}
if (param.getPayType().equals("alipay") && param.getDeviceFrom().equals("wap")) {
httpData.add("showUrl", param.getShowUrl() + storeOrder.getOrderId());
httpData.add("returnUrl", param.getReturnUrl() + storeOrder.getOrderId());
}
if (param.getPayType().equals("douyinpay")) {
httpData.add("showUrl", param.getShowUrl() + storeOrder.getOrderId());
httpData.add("returnUrl", param.getReturnUrl() + storeOrder.getOrderId());
}
if (param.getPayType().equals("unionpay")) {
httpData.add("returnUrl", param.getReturnUrl() + storeOrder.getOrderId());
}
String returnData = HttpUtil.post(payUrl, httpData);
log.info("调用 DRAGON 结果 = " + returnData);
ResponseDto<GoblinPayInnerResultVo> dto = JsonUtils.fromJson(returnData, new TypeReference<ResponseDto<GoblinPayInnerResultVo>>() {
});
payInnerResultVo = GoblinPayInnerResultVo.getNew();
payInnerResultVo.setCode(dto.getData().getCode());
payInnerResultVo.setOrderCode(dto.getData().getOrderCode());
payInnerResultVo.setPayData(dto.getData().getPayData());
payInnerResultVo.setOrderId(storeOrder.getOrderId());
payInnerResultVo.setPayType(storeOrder.getPayType());
payInnerResultVo.setPrice(storeOrder.getPriceActual());
storeOrder.setPayCode(payInnerResultVo.getCode());
payInnerResultVo.setShowUrl(param.getShowUrl() + storeOrder.getOrderId());
payInnerResultVo.setReturnUrl(param.getReturnUrl() + storeOrder.getOrderId());
} else {
isFree = true;
storeOrder.setPayType("FREE");
storeOrder.setPayCode("FREE_PAY_CODE");
payInnerResultVo = GoblinPayInnerResultVo.getNew();
payInnerResultVo.setPrice(BigDecimal.valueOf(0));
payInnerResultVo.setOrderId(storeOrder.getOrderId());
payInnerResultVo.setPayType(storeOrder.getPayType());
}
LinkedList<Object[]> sqlDataOrder = CollectionUtil.linkedListObjectArr();
sqlDataOrder.add(new Object[]{
......@@ -364,13 +317,77 @@ public class GoblinAppOrderServiceImpl implements IGoblinAppOrderService {
//mysql 执行sql
String sqlData = SqlMapping.gets(sqls, sqlDataSku, sqlDataOrder, sqlDataAttr);
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.GOBLIN_ORDER_CREATE_PAY.getKey(), sqlData);
log.info(UserPathDto.setData("下单(唤起支付)", param, payInnerResultVo));
GoblinOrderPreParam preParam = GoblinOrderPreParam.getNew();
preParam.setPriceActual(orderVo.getPriceActual());
preParam.setStoreName(redisUtils.getStoreInfoVo(storeId).getStoreName());
preParam.setSkuName(skuName);
preParam.setOrderIdList(orderVo.getOrderId());
return preParam;
}
private ResponseDto<GoblinPayInnerResultVo> payOrder(GoblinOrderPreParam preParam){
//是否免费
boolean isFree = false;
GoblinPayInnerResultVo payInnerResultVo;
String payCode;
if (preParam.getPriceActual().compareTo(BigDecimal.valueOf(0)) > 0) {
// 调用支付
LinkedMultiValueMap<String, String> httpData = CollectionUtil.linkedMultiValueMapStringString();
httpData.add("type", "PRODUCT");
httpData.add("price", preParam.getPriceActual().toString());
httpData.add("name", preParam.getStoreName());
httpData.add("detail", preParam.getSkuName());
httpData.add("orderCode", preParam.getOrderMasterCode());
httpData.add("orderId", preParam.getOrderIdList());
httpData.add("clientIp", CurrentUtil.getCliIpAddr());
httpData.add("notifyUrl", synUrl);
httpData.add("createDate", LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
httpData.add("expireTime", preParam.getExpireTime()+"");
httpData.add("payType", preParam.getPayType());
httpData.add("deviceFrom", preParam.getDeviceFrom());
if (preParam.getDeviceFrom().equals("js") || preParam.getDeviceFrom().equals("applet")) {
httpData.add("openId", preParam.getOpenId());
}
if (preParam.getPayType().equals("alipay") && preParam.getDeviceFrom().equals("wap")) {
httpData.add("showUrl", preParam.getShowUrl());
httpData.add("returnUrl", preParam.getReturnUrl());
}
if (preParam.getPayType().equals("douyinpay")) {
httpData.add("showUrl", preParam.getShowUrl());
httpData.add("returnUrl", preParam.getReturnUrl());
}
if (preParam.getPayType().equals("unionpay")) {
httpData.add("returnUrl", preParam.getReturnUrl());
}
String returnData = HttpUtil.post(payUrl, httpData);
log.info("调用 DRAGON 结果 = " + returnData);
ResponseDto<GoblinPayInnerResultVo> dto = JsonUtils.fromJson(returnData, new TypeReference<ResponseDto<GoblinPayInnerResultVo>>() {
});
payInnerResultVo = GoblinPayInnerResultVo.getNew();
payInnerResultVo.setCode(dto.getData().getCode());
payInnerResultVo.setOrderCode(dto.getData().getOrderCode());
payInnerResultVo.setPayData(dto.getData().getPayData());
payInnerResultVo.setPayType(preParam.getPayType());
payInnerResultVo.setPrice(preParam.getPriceActual());
payCode = payInnerResultVo.getCode();
payInnerResultVo.setShowUrl(preParam.getShowUrl());
payInnerResultVo.setReturnUrl( preParam.getReturnUrl());
} else {
isFree = true;
preParam.setPayType("FREE");
payCode = "FREE_PAY_CODE";
payInnerResultVo = GoblinPayInnerResultVo.getNew();
payInnerResultVo.setPrice(BigDecimal.valueOf(0));
payInnerResultVo.setPayType(preParam.getPayType());
}
log.info(UserPathDto.setData("下单(唤起支付)", preParam, payInnerResultVo));
if (isFree) {
SyncOrderParam syncOrderParam = SyncOrderParam.getNew();
syncOrderParam.setOrderCode(storeOrder.getOrderCode());
syncOrderParam.setOrderCode(preParam.getOrderMasterCode());
syncOrderParam.setPaymentAt(DateUtil.format(LocalDateTime.now(), DateUtil.Formatter.yyyyMMddHHmmss));
syncOrderParam.setCode(storeOrder.getPayCode());
syncOrderParam.setPrice(storeOrder.getPriceActual());
syncOrderParam.setCode(payCode);
syncOrderParam.setPrice(preParam.getPriceActual());
syncOrderParam.setPaymentId("FREE_PAYMENT_ID");
syncOrderParam.setPaymentType(null);
syncOrderParam.setStatus(1);
......
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