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

Commit b8a1ba38 authored by anjiabin's avatar anjiabin

至信链按订单切换

parent 4251bfc2
package com.liquidnet.service.galaxy.biz;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.galaxy.dto.bo.GalaxyNftOrderBindBo;
import com.liquidnet.service.galaxy.dto.bo.GalaxySeriesNftInfoBo;
import com.liquidnet.service.galaxy.dto.param.GalaxyNftPublishAndBuyReqDto;
import com.liquidnet.service.galaxy.dto.param.GalaxyNftPublishAndBuyRespDto;
import com.liquidnet.service.galaxy.service.IGalaxyTradeService;
import com.liquidnet.service.galaxy.utils.GalaxyDataUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: GalaxyTradeBiz
* @Package com.liquidnet.service.galaxy.biz
* @Copyright: LightNet @ Copyright (c) 2022
* @date 2022/7/11 15:47
*/
@Slf4j
@Component
public class GalaxyTradeBiz {
@Autowired
private GalaxyDataUtils dataUtils;
@Resource(name = "galaxyTradeServiceImpl")
private IGalaxyTradeService galaxyTradeService;
/**
* 根据skuid和nftIndex判断是否切换nft购买订单
* @param skuid
* @param nftIndex
*/
public boolean isNeedSwitch(String skuid,String nftIndex){
String nums = dataUtils.getGoblinNumList(skuid);
if(StringUtil.isNotEmpty(nums)){
String[] numsArray = nums.split(",");
if(numsArray.length>0){
List<String> numsList = Arrays.asList(numsArray);
if(numsList.contains(nftIndex)){
return true;
}
}
}
return false;
}
/**
* 根据skuid和nftIndex判断是否切换nft购买订单
* @param skuid
* @param nftIndex
*/
public void switchBuyRouterBySkuId(String skuid, String nftIndex, GalaxySeriesNftInfoBo seriesNftInfoBo){
GalaxyNftPublishAndBuyReqDto reqDto = dataUtils.getGoblinNumDetails(skuid,nftIndex);
//设置绑定信息
GalaxyNftOrderBindBo nftOrderBindBo = GalaxyNftOrderBindBo.getNew();
nftOrderBindBo.setNftOrderPayId(reqDto.getNftOrderPayId());
nftOrderBindBo.setSeriesId(seriesNftInfoBo.getSeriesId());
nftOrderBindBo.setSeriesCode(seriesNftInfoBo.getSeriesCode());
nftOrderBindBo.setNftIdIndex(Integer.valueOf(nftIndex));
nftOrderBindBo.setRouterType(reqDto.getRouterType());
String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(LocalDateTime.now());
nftOrderBindBo.setCreatedAt(nowTimeStr);
dataUtils.setGalaxyNftOrderBindBo(reqDto.getRouterType(),reqDto.getNftOrderPayId(),nftOrderBindBo);
//执行nft购买订单切换
log.info("开始执行nft购买订单切换===>>>>> reqParam:{}", JsonUtils.toJson(reqDto));
ResponseDto<GalaxyNftPublishAndBuyRespDto> responseDto = galaxyTradeService.nftPublishAndBuy(reqDto);
log.info("执行nft购买订单切换结果===>>>>> response:{}",JsonUtils.toJson(responseDto));
}
}
......@@ -9,6 +9,7 @@ import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.galaxy.biz.GalaxyBeanTransferBiz;
import com.liquidnet.service.galaxy.biz.GalaxyEnumBiz;
import com.liquidnet.service.galaxy.biz.GalaxyTradeBiz;
import com.liquidnet.service.galaxy.constant.GalaxyEnum;
import com.liquidnet.service.galaxy.constant.GalaxyErrorEnum;
import com.liquidnet.service.galaxy.dto.bo.GalaxyNftOrderBindBo;
......@@ -29,6 +30,8 @@ import org.springframework.stereotype.Component;
import java.io.UnsupportedEncodingException;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
......@@ -57,6 +60,11 @@ public class ZxinTradeCommonBiz {
@Autowired
private GalaxyBeanTransferBiz galaxyBeanTransferBiz;
@Autowired
private GalaxyTradeBiz galaxyTradeBiz;
private ExecutorService executorService = Executors.newFixedThreadPool(10);
public ResponseDto<GalaxyNftPublishAndBuyRespDto> nftPublishAndBuy(GalaxyNftPublishAndBuyReqDto reqDto) {
log.info("开始执行nftPublishAndBuy 请求参数:{}",reqDto.toString());
//获取用户信息
......@@ -141,6 +149,17 @@ public class ZxinTradeCommonBiz {
//发行失败
throw new GalaxyNftPublishException(GalaxyErrorEnum.NFT_PUBLISH_ERROR.getCode(),"该sku:"+reqDto.getSkuId()+" 总共"+seriesNftInfoBo.getNftTotalCount()+"个NFT已经发行完毕,没有剩余库存!");
}
//判断是否切换订单
while(galaxyTradeBiz.isNeedSwitch(reqDto.getSkuId(),String.valueOf(nftIdNo))){
long finalNftIdNo = nftIdNo;
//开启新线程去执行购买
executorService.submit(() -> {
galaxyTradeBiz.switchBuyRouterBySkuId(reqDto.getSkuId(),String.valueOf(finalNftIdNo),seriesNftInfoBo);
});
nftIdNo = dataUtils.incrNftIdNo(reqDto.getRouterType(),reqDto.getSkuId());
}
nftOrderBindBo = GalaxyNftOrderBindBo.getNew();
nftOrderBindBo.setNftOrderPayId(reqDto.getNftOrderPayId());
nftOrderBindBo.setSeriesId(seriesNftInfoBo.getSeriesId());
......
......@@ -8,8 +8,10 @@ import com.liquidnet.service.galaxy.biz.GalaxyBeanTransferBiz;
import com.liquidnet.service.galaxy.constant.GalaxyConstant;
import com.liquidnet.service.galaxy.constant.GalaxyEnum;
import com.liquidnet.service.galaxy.dto.bo.*;
import com.liquidnet.service.galaxy.dto.param.GalaxyNftPublishAndBuyReqDto;
import com.liquidnet.service.galaxy.dto.vo.mongo.GalaxyNftOrderFailLogVo;
import com.liquidnet.service.galaxy.dto.vo.mongo.GalaxyNftTradeVo;
import com.liquidnet.service.goblin.constant.GoblinRedisConst;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.mongodb.core.MongoTemplate;
......@@ -478,4 +480,25 @@ public abstract class AbstractDataUtils {
return null;
}
}
//获取sku对应预留号码list
public String getGoblinNumList(String skuId){
String redisKey = GoblinRedisConst.GOBLIN_NUM_LIST.concat(":").concat(skuId);
Object obj = this.getRedisUtil().get(redisKey);
if(obj!=null){
return obj.toString();
}
return null;
}
//$key+$num+$skuId 根据num+skuId获取DTO
public GalaxyNftPublishAndBuyReqDto getGoblinNumDetails(String skuId, String nftIndex){
String redisKey = GoblinRedisConst.GOBLIN_NUM_DETAILS.concat(nftIndex).concat(skuId);
Object obj = this.getRedisUtil().get(redisKey);
if(obj!=null){
return (GalaxyNftPublishAndBuyReqDto)obj;
}
return null;
}
}
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