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

Commit 3d0d7f5a authored by 胡佳晨's avatar 胡佳晨

提交接口

parent a402d6c1
......@@ -573,7 +573,7 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
sqlDataOrder.add(new Object[]{
storeOrder.getMasterOrderCode(), storeOrder.getOrderId(), storeOrder.getStoreId(), storeOrder.getStoreName(), storeOrder.getOrderCode(), storeOrder.getUserId(), storeOrder.getUserName(), storeOrder.getUserMobile(), storeOrder.getPriceTotal(), storeOrder.getPayCode(),
storeOrder.getPriceActual(), storeOrder.getPriceRefund(), storeOrder.getPriceExpress(), storeOrder.getPriceCoupon(), storeOrder.getStorePriceCoupon(), storeOrder.getPriceVoucher(), storeOrder.getStatus(), storeOrder.getUcouponId(), storeOrder.getStoreCouponId(), storeOrder.getPayType(), storeOrder.getDeviceFrom(),
storeOrder.getSource(), storeOrder.getVersion(), storeOrder.getIsMember(), storeOrder.getOrderType(), storeOrder.getWriteOffCode(), storeOrder.getPayCountdownMinute(), storeOrder.getIpAddress(), storeOrder.getMarketId(), storeOrder.getMarketType(), storeOrder.getCreatedAt(),""
storeOrder.getSource(), storeOrder.getVersion(), storeOrder.getIsMember(), storeOrder.getOrderType(), storeOrder.getWriteOffCode(), storeOrder.getPayCountdownMinute(), storeOrder.getIpAddress(), storeOrder.getMarketId(), storeOrder.getMarketType(), storeOrder.getCreatedAt(), ""
});
GoblinOrderAttr orderAttr = item.getOrderAttr();
sqlDataAttr.add(new Object[]{
......@@ -585,7 +585,7 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
GoblinOrderAttrVo orderAttrVo = GoblinOrderAttrVo.getNew().copy(orderAttr);
//待支付发送队列
queueUtils.sendMsgByRedisGoblinStock(orderVo.getMasterOrderCode(), storeOrder.getCreatedAt(), "GOBLIN",5);
queueUtils.sendMsgByRedisGoblinStock(orderVo.getMasterOrderCode(), storeOrder.getCreatedAt(), "GOBLIN", 5);
//redis 赋值
orderVo.setOrderAttrVo(orderAttrVo);
orderVo.setOrderSkuVoIds(goblinOrderSkuIdList);
......@@ -983,9 +983,12 @@ public class GoblinOrderServiceImpl implements IGoblinOrderService {
String pre = GoblinStatusConst.MarketPreStatus.getPre(orderSkuVo.getSkuId());
String skuId = orderSkuVo.getSkuId();
//需要判断是否超时支付
if (!"超时支付自动退款".equals(backOrderVo.getDescribes())) {
redisUtils.incrSkuStock(pre, skuId, orderSkuVo.getNum());
redisUtils.decrSkuCountByUid(orderVo.getUserId(), skuId, orderSkuVo.getNum());
}
}
redisUtils.setGoblinOrderSku(backOrderSkuVo.getOrderSkuId(), orderSkuVo);
mongoUtils.updateGoblinOrderSkuVo(backOrderSkuVo.getOrderSkuId(), orderSkuVo);
sqlsOrderSku.add(new Object[]{
......
......@@ -20,6 +20,7 @@ import com.liquidnet.service.goblin.entity.GoblinNftOrder;
import com.liquidnet.service.goblin.entity.GoblinOrderAttr;
import com.liquidnet.service.goblin.entity.GoblinOrderSku;
import com.liquidnet.service.goblin.entity.GoblinStoreOrder;
import com.liquidnet.service.goblin.param.GoblinNftOrderPayCallbackParam;
import com.liquidnet.service.goblin.param.GoblinOrderPreParam;
import com.liquidnet.service.goblin.param.SyncOrderParam;
import com.liquidnet.service.goblin.service.IMixOrderService;
......@@ -38,6 +39,7 @@ import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Objects;
import static com.liquidnet.commons.lang.util.DateUtil.DTF_YMD_HMS;
import static com.liquidnet.commons.lang.util.DateUtil.getNowTime;
......@@ -524,12 +526,277 @@ public class MixOrderServiceImpl implements IMixOrderService {
@Override
public String syncOrder(SyncOrderParam syncOrderParam) {
return null;
log.info("NFT支付回调 参数: " + syncOrderParam.toString());
String orderCode = syncOrderParam.getOrderCode();
HashMap<String, String[]> map = redisUtils.getMixMasterCode(orderCode);
String[] nft = map.get("nft");
String[] goblin = map.get("goblin");
String code = syncOrderParam.getCode(), paymentType = syncOrderParam.getPaymentType(), paymentId = syncOrderParam.getPaymentId(), paymentAt = syncOrderParam.getPaymentAt();
int status = syncOrderParam.getStatus();
boolean isSuccess = true;
for (String orderId : nft) {
String nftR = syncNft(orderId, code, status, paymentType, paymentId, paymentAt);
if ("fail".equals(nftR)) {
isSuccess = false;
}
}
for (String orderId : goblin) {
String goblinR = syncGoblin(orderId, code, status, paymentType, paymentId, paymentAt);
if ("fail".equals(goblinR)) {
isSuccess = false;
}
}
if (isSuccess) {
return "success";
} else {
return "fail";
}
}
public String syncGoblin(String orderId, String code, int status, String paymentType, String paymentId, String paymentAt) {
//支付时间
LocalDateTime now = LocalDateTime.now();
BigDecimal priceActual = BigDecimal.ZERO;
GoblinStoreOrderVo orderVo = redisUtils.getGoblinOrder(orderId);
if (orderVo == null) {
log.error("mix订单Id:" + orderId + " 订单不存在");
return "fail";//订单不存在
}
if (orderVo.getStatus() == GoblinStatusConst.Status.ORDER_STATUS_2.getValue()) {
if (orderVo.getPayCode().equals(code)) {
log.error("Mix订单Id:" + orderId + " 重复支付");
return "success";//重复支付
}
}
priceActual = priceActual.add(orderVo.getPriceActual());
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlDataOrder = CollectionUtil.linkedListObjectArr();
LinkedList<Object[]> sqlDataSku = CollectionUtil.linkedListObjectArr();
GoblinStoreOrder storeOrder = GoblinStoreOrder.getNew();
if (orderVo.getStatus() == GoblinStatusConst.Status.ORDER_STATUS_5.getValue() && status == 1) {
log.error("Mix订单Id {} 的订单超时支付", orderId);
// 商铺退款逻辑
orderUtils.refundOrderSku(orderId, paymentId, paymentType);
} else if ((orderVo.getStatus() == GoblinStatusConst.Status.ORDER_STATUS_6.getValue() || orderVo.getStatus() == GoblinStatusConst.Status.ORDER_STATUS_7.getValue()) && status == 1) {
log.error("Mix订单Id为 {} 的订单正在退款 或者已退款", orderId);
} else if (status == 1) {
log.error("Mix订单Id {} 的订单正常流程", orderId);
storeOrder.setPaymentType(paymentType);
storeOrder.setPaymentId(paymentId);
storeOrder.setPayCode(code);
LocalDateTime payTime = LocalDateTime.parse(paymentAt, DTF_YMD_HMS);
storeOrder.setPayTime(payTime);
storeOrder.setWriteOffCode("");
storeOrder.setStatus(GoblinStatusConst.Status.ORDER_STATUS_2.getValue());
storeOrder.setUpdatedAt(now);
sqls.add(SqlMapping.get("goblin_order.pay.order"));
sqlDataOrder.add(new Object[]{
storeOrder.getPaymentType(), storeOrder.getPaymentId(), storeOrder.getPayCode(), storeOrder.getPayTime(), storeOrder.getWriteOffCode(), storeOrder.getStatus(), storeOrder.getUpdatedAt(),
orderId, now, now
});
sqls.add(SqlMapping.get("goblin_order.pay.sku"));
List<String> skuList = orderVo.getOrderSkuVoIds();
for (String orderSkuVoIds : skuList) {
GoblinOrderSkuVo orderSkuVo = redisUtils.getGoblinOrderSkuVo(orderSkuVoIds);
//增加销量
log.debug("增加销量 spuId=" + orderSkuVo.getSpuId() + ",skuId=" + orderSkuVo.getSkuId());
redisUtils.incrSkuSaleCount(orderSkuVo.getSpuId(), orderSkuVo.getSkuId(), orderSkuVo.getNum());
orderSkuVo.setStatus(GoblinStatusConst.Status.ORDER_STATUS_2.getValue());
//redis
redisUtils.setGoblinOrderSku(orderSkuVo.getOrderSkuId(), orderSkuVo);
//mongo
mongoUtils.updateGoblinOrderSkuVo(orderSkuVo.getOrderSkuId(), orderSkuVo);
//mongo 添加操作日志
GoblinOrderLogVo logVo = GoblinOrderLogVo.getNew();
logVo.setOrderId(orderVo.getOrderId());
logVo.setOrderCode(orderVo.getOrderCode());
logVo.setPayCode(orderVo.getPayCode());
logVo.setStoreId(orderVo.getStoreId());
logVo.setOrderType("order");
logVo.setSpuId(orderSkuVo.getSpuId());
logVo.setSkuId(orderSkuVo.getSkuId());
logVo.setSkuPriceActual(orderSkuVo.getSkuPriceActual().multiply(new BigDecimal(100)).longValue());
logVo.setStatus(GoblinStatusConst.Status.ORDER_LOG_STATUS_11.getValue());
logVo.setRemark(GoblinStatusConst.Status.ORDER_LOG_STATUS_11.getDesc());
logVo.setOperationId(orderVo.getUserId());
logVo.setOperationName(orderVo.getUserName());
logVo.setOperationType(GoblinStatusConst.Type.OPERATION_TYPE_1.getValue());
logVo.setCreatedAt(LocalDateTime.now());
mongoUtils.insertGoblinOrderLogVo(logVo);
//mysql
sqlDataSku.add(new Object[]{
GoblinStatusConst.Status.ORDER_STATUS_2.getValue(), now,
orderSkuVo.getOrderSkuId(), now, now
});
}
//redis
orderVo.setPayCode(storeOrder.getPayCode());
orderVo.setPayTime(paymentAt);
orderVo.setWriteOffCode(storeOrder.getWriteOffCode());
orderVo.setStatus(storeOrder.getStatus());
orderVo.setPaymentId(paymentId);
orderVo.setPaymentType(paymentType);
orderVo.setOrderSkuVoIds(skuList);
redisUtils.setGoblinOrder(orderId, orderVo);
redisUtils.setOffCode(orderVo.getWriteOffCode(), orderVo.getMasterOrderCode());
//mongo
mongoUtils.updateGoblinStoreOrderVo(orderId, orderVo);
//mysql
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.GOBLIN_ORDER_CREATE_PAY.getKey(),
SqlMapping.gets(sqls, sqlDataOrder, sqlDataSku));
}
//添加列表
redisUtils.addOrderList(orderVo.getUserId(), orderVo.getOrderId());
//加分
orderUtils.integral(orderVo.getUserId(), priceActual, "购买商品", 1);
return "success";
}
public String syncNft(String orderId, String code, int status, String paymentType, String paymentId, String paymentAt) {
if (orderId.isEmpty()) {
log.error("MIX Nft订单不存在1 param:[orderId:{}]", orderId);
return "fail";
}
GoblinNftOrderVo orderVo = nftOrderUtils.getNftOrder(orderId);
if (null == orderVo) {
log.error("MIX Nft订单不存在2 param:[orderId:{}]", orderId);
return "fail";
}
// 苹果支付下单时候没有PayCode
if (!orderVo.getPayType().equals("applepay") && !orderVo.getPayCode().equals(code)) {
log.error("MIX Nft订单payCode不匹配 param:[orderId:{}, payCode:{}, code:{}]", orderId, orderVo.getPayCode(), code);
return "fail";
}
if (!Objects.equals(orderVo.getStatus(), GoblinStatusConst.NftStatus.ORDER_STATUS_1.getValue()) && !Objects.equals(orderVo.getStatus(), GoblinStatusConst.NftStatus.ORDER_STATUS_3.getValue())) {
log.error("MIX Nft订单当前状态不能支付回调 param:[orderId:{}, status:{}]", orderId, orderVo.getStatus());
return "success";
}
if (Objects.equals(1, status)) {
String uid = orderVo.getUserId();
Integer orderStatusOld = orderVo.getStatus();
LocalDateTime now = LocalDateTime.now();
// 更新订单信息
if (StringUtil.isEmpty(paymentType)) {
orderVo.setPaymentType("");
} else {
orderVo.setPaymentType(paymentType);
}
if (StringUtil.isEmpty(paymentId)) {
orderVo.setPaymentId("");
} else {
orderVo.setPaymentId(paymentId);
}
if (StringUtil.isEmpty(code)) {
orderVo.setPayCode("");
} else {
orderVo.setPayCode(code);
}
if (StringUtil.isEmpty(paymentAt)) {
orderVo.setPayTime(now);
} else {
LocalDateTime payTime = LocalDateTime.parse(paymentAt, DTF_YMD_HMS);
orderVo.setPayTime(payTime);
}
orderVo.setUpdatedAt(now);
if (Objects.equals(orderStatusOld, GoblinStatusConst.NftStatus.ORDER_STATUS_3.getValue())) {// 超时支付 退款中状态
orderVo.setStatus(GoblinStatusConst.NftStatus.ORDER_STATUS_4.getValue());
} else {// 正常流程 已付款状态
orderVo.setStatus(GoblinStatusConst.NftStatus.ORDER_STATUS_2.getValue());
}
// redis
nftOrderUtils.setNftOrder(orderVo);
// mongo
queueUtils.setMongoList(GoblinNftOrderVo.class.getSimpleName(), "orderId", orderVo.getOrderId(), GoblinRedisConst.REDIS_GOBLIN_NFT_ORDER_INFO, 2);
// mysql
LinkedList<String> sqls = CollectionUtil.linkedListString();
LinkedList<Object[]> sqlDataOrder = CollectionUtil.linkedListObjectArr();
sqls.add(SqlMapping.get("goblin_nft_order.update.pay"));
sqlDataOrder.add(new Object[]{
orderVo.getPaymentType(), orderVo.getPaymentId(), orderVo.getPayCode(),
orderVo.getPayTime(), orderVo.getStatus(), orderVo.getUpdatedAt(),
orderId, now, now
});
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.GOBLIN_NFT_ORDER.getKey(),
SqlMapping.gets(sqls, sqlDataOrder));
// 加积分
orderUtils.integral(uid, orderVo.getPriceActual(), "购买数字藏品", 1);
// 处理订单退款和其他流程
if (Objects.equals(orderStatusOld, GoblinStatusConst.NftStatus.ORDER_STATUS_3.getValue())) {// 超时支付 退款
log.info("Nft订单超时支付 param:[orderId:{}]", orderId);
nftOrderUtils.refundOrderSku(orderId, paymentId, paymentType, orderVo.getPayType());
} else {// 正常流程
nftOrderUtils.generateUserArtwork(orderVo, 1);
// 增加销量
redisUtils.incrSkuSaleCount(orderVo.getSpuId(), orderVo.getSkuId(), orderVo.getNum());
}
// 写入用户订单列表 因取消的订单不展示 所以放在这里
nftOrderUtils.addNftOrderList(uid, orderVo.getOrderId());
}
return "success";
}
@Override
public ResponseDto<Integer> checkOrderResultMaterCode(String materCode) {
return null;
String uid = CurrentUtil.getCurrentUid();
HashMap<String, String[]> map = redisUtils.getMixMasterCode(materCode);
String[] nft = map.get("nft");
String[] goblin = map.get("goblin");
for (String orderId : nft) {
String nftR = nftCheck(uid, orderId);
if ("订单不存在".equals(nftR)) {
return ResponseDto.failure("订单不存在");
} else if ("0".equals(nftR)) {
return ResponseDto.success(0);
}
}
for (String orderId : goblin) {
String goblinR = goblinCheck(uid, orderId);
if ("订单不存在".equals(goblinR)) {
return ResponseDto.failure("订单不存在");
} else if ("0".equals(goblinR)) {
return ResponseDto.success(0);
}
}
return ResponseDto.success(1);
}
private String nftCheck(String uid, String orderId) {
GoblinNftOrderVo nftOrder = nftOrderUtils.getNftOrder(orderId);
if (null == nftOrder || !nftOrder.getUserId().equals(uid)) {
return "订单不存在";
} else {
String returnCheckData = HttpUtil.get(checkUrl + "?code=" + nftOrder.getPayCode(), null);
ResponseDto<SyncOrderParam> syncOrderDtoParam = JsonUtils.fromJson(returnCheckData, new TypeReference<ResponseDto<SyncOrderParam>>() {
});
if (syncOrderDtoParam.getData().getStatus() == 1) {
//处理订单
syncOrder(syncOrderDtoParam.getData());
return "1";
} else {
return "0";
}
}
}
private String goblinCheck(String uid, String orderId) {
GoblinStoreOrderVo storeOrderVo = redisUtils.getGoblinOrder(orderId);
if (null == storeOrderVo || !storeOrderVo.getUserId().equals(uid)) {
return "订单不存在";
}
String returnCheckData = HttpUtil.get(checkUrl + "?code=" + storeOrderVo.getPayCode(), null);
ResponseDto<SyncOrderParam> syncOrderDtoParam = JsonUtils.fromJson(returnCheckData, new TypeReference<ResponseDto<SyncOrderParam>>() {
});
if (syncOrderDtoParam.getData().getStatus() == 1) {
//处理订单
syncOrder(syncOrderDtoParam.getData());
return "1";
} else {
return "0";
}
}
}
package com.liquidnet.service.order.utils;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.ResponseDto;
......@@ -569,4 +570,62 @@ public class GoblinNftOrderUtils {
return null;
}
}
/**
* 生成我的藏品
*
* @param orderVo
*/
public void generateUserArtwork(GoblinNftOrderVo orderVo, Integer source) {
String uid = orderVo.getUserId(), skuId = orderVo.getSkuId(), orderId = orderVo.getOrderId(), spuId = orderVo.getSpuId();
if (goblinRedisUtils.hasGenUserDigitalArtwork(uid, skuId, orderId)) {// 已生成
log.warn("#GEN_ARTWORK EXIST_ART[uid={},skuId={},orderId={},source={}]", uid, skuId, orderId, source);
return;
}
GoblinGoodsInfoVo goodsInfoVo = goblinRedisUtils.getGoodsInfoVo(spuId);
LocalDateTime now = LocalDateTime.now();
GoblinUserDigitalArtworkVo digitalArtworkVo = GoblinUserDigitalArtworkVo.getNew();
// String artworkId = IDGenerator.nextMilliId2();
String artworkId = IDGenerator.nextSnowId();
digitalArtworkVo.setArtworkId(artworkId);
digitalArtworkVo.setSkuId(skuId);
digitalArtworkVo.setUid(uid);
digitalArtworkVo.setOrderId(orderId);
digitalArtworkVo.setSource(source);
digitalArtworkVo.setState(source == 31 ? 5 : 0);
digitalArtworkVo.setDelFlg("0");
digitalArtworkVo.setCreatedAt(now);
digitalArtworkVo.setAuthor(goodsInfoVo.getAuthor());
digitalArtworkVo.setPublisher(goodsInfoVo.getPublisher());
// Redis记录VO
goblinRedisUtils.setGoblinUserDigitalArtworkVo(digitalArtworkVo);
// Redis更新藏品ID列表
goblinRedisUtils.addGoblinUserDigitalArtworkIds(uid, artworkId);
// 缓存用户藏品数
goblinRedisUtils.incrGoblinUserDigitalArtworks(uid);
// Redis生成标记(缓存三天),用于上面的生成检查
goblinRedisUtils.markGenUserDigitalArtwork(uid, skuId, orderId);
// Mongo记录VO
goblinOrderUtils.setMongoList(GoblinUserDigitalArtworkVo.class.getSimpleName(), "artworkId", digitalArtworkVo.getArtworkId(), GoblinRedisConst.USER_DIGITAL_ARTWORK, 1);
// goblinMongoUtils.insertGoblinUserDigitalArtworkVo(digitalArtworkVo);
if (source != 31) {// 空投需要领取再发行
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(skuId);
if ("0".equals(goodsSkuInfoVo.getUnbox())) {// 非盲盒,NFT发行购买
ObjectNode bizNftBuyNode = JsonUtils.OM().createObjectNode().put("nftOrderPayId", orderId).put("routerType", goodsSkuInfoVo.getRouteType())
.put("skuId", skuId).put("userId", uid).put("buyTimestamp", DateUtil.Formatter.yyyyMMddHHmmss.format(now));
queueUtils.sendMsgByRedis(MQConst.GalaxyQueue.JSON_NFT_PUBLISH_AND_BUY.getKey(), bizNftBuyNode.toString());
}
}
// Mysql持久化
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
toMqSqls.add(SqlMapping.get("goblin_user_digital_artwork.insert"));
LinkedList<Object[]> initUserDigitalArtworkObjs = CollectionUtil.linkedListObjectArr();
initUserDigitalArtworkObjs.add(new Object[]{digitalArtworkVo.getArtworkId(), skuId, uid, orderId, source, digitalArtworkVo.getState(), now});
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(), SqlMapping.gets(toMqSqls, initUserDigitalArtworkObjs));
}
}
......@@ -461,6 +461,22 @@ public class GoblinRedisUtils {
}
}
public HashMap<String, String[]> getMixMasterCode(String masterCode) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_ORDER_MASTER.concat(masterCode);
Object obj = redisUtil.get(redisKey);
if (obj == null) {
return null;
} else {
String[] a = ((String) obj).split("&&");
String[] nftA = a[0].split(",");
String[] goblinA = a[1].split(",");
HashMap<String, String[]> map = ObjectUtil.mixIdMap();
map.put("nft", nftA);
map.put("goblin", goblinA);
return map;
}
}
//主订单对应的出货吗
public void setOffCode(String writeOffCode, String masterCode) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_ORDER_OFFCODE.concat(writeOffCode);
......
......@@ -57,10 +57,16 @@ public class ObjectUtil {
private static final ArrayList<GoblinGoodsSkuInfoVo> goblinGoodsSkuInfoVos = new ArrayList<>();
private static final HashMap<String, List<GoblinStoreOrder>> hashMapSp = new HashMap();
private static final HashMap<String, List<GoblinGoodsSkuInfoVo>> goblinGoodsSkuInfoVoMap = new HashMap();
private static final HashMap<String, String[]> mixIdMap = new HashMap();
public static Object[] objectsArray;
public static final Integer[] integerArray2 = new Integer[2];
public static HashMap<String, String[]> mixIdMap() {
return (HashMap<String, String[]>) mixIdMap.clone();
}
public static ArrayList<GoblinGoodsSkuInfoVo> goblinGoodsSkuInfoVos() {
return (ArrayList<GoblinGoodsSkuInfoVo>) goblinGoodsSkuInfoVos.clone();
}
......
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