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

Commit ba9f16cb authored by 张国柄's avatar 张国柄

Merge remote-tracking branch 'origin/pre' into pre

parents ad649625 a3187d8d
package com.liquidnet.service.galaxy.dto.bo; package com.liquidnet.service.galaxy.dto.bo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.commons.lang.util.JsonUtils; import com.liquidnet.commons.lang.util.JsonUtils;
import lombok.Data; import lombok.Data;
...@@ -15,6 +16,7 @@ import java.io.Serializable; ...@@ -15,6 +16,7 @@ import java.io.Serializable;
* @date 2022/8/12 13:36 * @date 2022/8/12 13:36
*/ */
@Data @Data
@JsonIgnoreProperties(value = {"nftOrderPayId", "nftOrderPayId2"}, ignoreUnknown = true)
public class GalaxyTransferNftInfoBo implements Serializable,Cloneable{ public class GalaxyTransferNftInfoBo implements Serializable,Cloneable{
/** /**
* 转让流水号(平台转让订单id) * 转让流水号(平台转让订单id)
...@@ -48,6 +50,14 @@ public class GalaxyTransferNftInfoBo implements Serializable,Cloneable{ ...@@ -48,6 +50,14 @@ public class GalaxyTransferNftInfoBo implements Serializable,Cloneable{
* nft当前拥有者addr(转让成功后更新) * nft当前拥有者addr(转让成功后更新)
*/ */
private String ownerAddress; private String ownerAddress;
/**
* nft转让任务ID
*/
private String nftTransferTaskId;
/**
* nft转让时间
*/
private String nftTransferChainTimestamp;
/** /**
* 转让hash * 转让hash
*/ */
......
...@@ -161,6 +161,8 @@ public class GalaxyBeanTransferBiz { ...@@ -161,6 +161,8 @@ public class GalaxyBeanTransferBiz {
transferNftInfoBo.setSeriesId(null); transferNftInfoBo.setSeriesId(null);
transferNftInfoBo.setRouterType(reqDto.getRouterType()); transferNftInfoBo.setRouterType(reqDto.getRouterType());
transferNftInfoBo.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.INIT.getCode()); transferNftInfoBo.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.INIT.getCode());
transferNftInfoBo.setNftTransferTaskId(null);
transferNftInfoBo.setNftTransferChainTimestamp(null);
transferNftInfoBo.setTransferHash(null); transferNftInfoBo.setTransferHash(null);
transferNftInfoBo.setErrorCode(null); transferNftInfoBo.setErrorCode(null);
transferNftInfoBo.setErrorMsg(null); transferNftInfoBo.setErrorMsg(null);
...@@ -184,6 +186,7 @@ public class GalaxyBeanTransferBiz { ...@@ -184,6 +186,7 @@ public class GalaxyBeanTransferBiz {
respDto.setFromUserId(userInfoBo.getUserId()); respDto.setFromUserId(userInfoBo.getUserId());
respDto.setFromAddress(userInfoBo.getBlockChainAddress()); respDto.setFromAddress(userInfoBo.getBlockChainAddress());
respDto.setTransferTime(DateUtil.getNowTime()); respDto.setTransferTime(DateUtil.getNowTime());
respDto.setRouterType(transferNftInfoBo.getRouterType());
respDto.setTransferHash(transferNftInfoBo.getTransferHash()); respDto.setTransferHash(transferNftInfoBo.getTransferHash());
return respDto; return respDto;
} }
......
...@@ -84,6 +84,9 @@ public class XuperTradeCommonBiz { ...@@ -84,6 +84,9 @@ public class XuperTradeCommonBiz {
return ResponseDto.failure(GalaxyErrorEnum.SERIES_NFT_INFO_NOT_EXIST.getCode(), GalaxyErrorEnum.SERIES_NFT_INFO_NOT_EXIST.getMessage()); return ResponseDto.failure(GalaxyErrorEnum.SERIES_NFT_INFO_NOT_EXIST.getCode(), GalaxyErrorEnum.SERIES_NFT_INFO_NOT_EXIST.getMessage());
} }
//生成nftId
String nftId = this.createNftId(reqDto,seriesNftInfoBo);
//获取订单信息 //获取订单信息
GalaxyNftOrderBo nftOrderBo = dataUtils.getNftOrderBo(reqDto.getRouterType(),reqDto.getNftOrderPayId()); GalaxyNftOrderBo nftOrderBo = dataUtils.getNftOrderBo(reqDto.getRouterType(),reqDto.getNftOrderPayId());
//初始化订单数据 //初始化订单数据
...@@ -92,6 +95,11 @@ public class XuperTradeCommonBiz { ...@@ -92,6 +95,11 @@ public class XuperTradeCommonBiz {
nftOrderBo.setNftPublishTaskId(seriesNftInfoBo.getSeriesId()); nftOrderBo.setNftPublishTaskId(seriesNftInfoBo.getSeriesId());
nftOrderBo.setNftPublishFromAddress(xuperConfig.getNftPlatformAddress()); nftOrderBo.setNftPublishFromAddress(xuperConfig.getNftPlatformAddress());
nftOrderBo.setNftBuyFromAddress(xuperConfig.getNftPlatformAddress()); nftOrderBo.setNftBuyFromAddress(xuperConfig.getNftPlatformAddress());
//设置购买标志
nftOrderBo.setNftId(nftId);
nftOrderBo.setNftPublishChainTimestamp(seriesNftInfoBo.getUpdatedAt().toString());
nftOrderBo.setNftPublishTradeHash(seriesNftInfoBo.getNftPublishTradeHash());
nftOrderBo.setNftPublishStatus(seriesNftInfoBo.getNftPublishStatus());
dataUtils.setNftOrderBo(reqDto.getRouterType(),reqDto.getNftOrderPayId(),nftOrderBo); dataUtils.setNftOrderBo(reqDto.getRouterType(),reqDto.getNftOrderPayId(),nftOrderBo);
}else if(StringUtil.isNotNull(nftOrderBo)){ }else if(StringUtil.isNotNull(nftOrderBo)){
if(nftOrderBo.getNftPublishStatus().equalsIgnoreCase(GalaxyEnum.TaskStatusEnum.TASK_SUCCESS.getCode()) if(nftOrderBo.getNftPublishStatus().equalsIgnoreCase(GalaxyEnum.TaskStatusEnum.TASK_SUCCESS.getCode())
...@@ -116,14 +124,7 @@ public class XuperTradeCommonBiz { ...@@ -116,14 +124,7 @@ public class XuperTradeCommonBiz {
} }
} }
//开始索引
Integer seriesBeginIndex = null;
/**
* 根据sku获取系列Id
*/
String seriesId = seriesNftInfoBo.getSeriesId();
//返回参数nftId //返回参数nftId
String nftId = null;
String publishTaskId = null; String publishTaskId = null;
Long nftPublishChainTimestamp = null; Long nftPublishChainTimestamp = null;
Integer nftPublishStatus = null; Integer nftPublishStatus = null;
...@@ -135,46 +136,6 @@ public class XuperTradeCommonBiz { ...@@ -135,46 +136,6 @@ public class XuperTradeCommonBiz {
boolean isPublishSuccess = false; boolean isPublishSuccess = false;
try{ try{
/**
* 获取订单和nft绑定信息
*/
GalaxyNftOrderBindBo nftOrderBindBo = dataUtils.getGalaxyNftOrderBindBo(reqDto.getRouterType(),reqDto.getNftOrderPayId());
if(StringUtil.isNull(nftOrderBindBo)){
//获取发行索引
long nftIdNo = dataUtils.incrNftIdNo(reqDto.getRouterType(),reqDto.getSkuId());
//如果发行数大于最大发行数量
if(nftIdNo > seriesNftInfoBo.getNftTotalCount()){
//发行失败
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());
nftOrderBindBo.setSeriesCode(seriesNftInfoBo.getSeriesCode());
nftOrderBindBo.setNftIdIndex(Integer.valueOf(String.valueOf(nftIdNo)));
nftOrderBindBo.setRouterType(reqDto.getRouterType());
String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(LocalDateTime.now());
nftOrderBindBo.setCreatedAt(nowTimeStr);
dataUtils.setGalaxyNftOrderBindBo(reqDto.getRouterType(),reqDto.getNftOrderPayId(),nftOrderBindBo);
}
seriesBeginIndex = nftOrderBindBo.getNftIdIndex();
//设置nftId
nftId = seriesId.concat("_").concat(seriesBeginIndex.toString());
//设置购买标志
nftOrderBo.setNftId(nftId);
/** /**
* 如果已经发行成功 * 如果已经发行成功
*/ */
...@@ -367,6 +328,61 @@ public class XuperTradeCommonBiz { ...@@ -367,6 +328,61 @@ public class XuperTradeCommonBiz {
return nftPublishAndBuyRespDto; return nftPublishAndBuyRespDto;
} }
/**
* 生成nftId
* @param reqDto
* @param seriesNftInfoBo
* @return
*/
private String createNftId(GalaxyNftPublishAndBuyReqDto reqDto,GalaxySeriesNftInfoBo seriesNftInfoBo){
//开始索引
Integer seriesBeginIndex = null;
/**
* 根据sku获取系列Id
*/
String seriesId = seriesNftInfoBo.getSeriesId();
//返回参数nftId
String nftId = null;
/**
* 获取订单和nft绑定信息
*/
GalaxyNftOrderBindBo nftOrderBindBo = dataUtils.getGalaxyNftOrderBindBo(reqDto.getRouterType(),reqDto.getNftOrderPayId());
if(StringUtil.isNull(nftOrderBindBo)){
//获取发行索引
long nftIdNo = dataUtils.incrNftIdNo(reqDto.getRouterType(),reqDto.getSkuId());
//如果发行数大于最大发行数量
if(nftIdNo > seriesNftInfoBo.getNftTotalCount()){
//发行失败
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());
nftOrderBindBo.setSeriesCode(seriesNftInfoBo.getSeriesCode());
nftOrderBindBo.setNftIdIndex(Integer.valueOf(String.valueOf(nftIdNo)));
nftOrderBindBo.setRouterType(reqDto.getRouterType());
String nowTimeStr = DateUtil.Formatter.yyyyMMddHHmmss.format(LocalDateTime.now());
nftOrderBindBo.setCreatedAt(nowTimeStr);
dataUtils.setGalaxyNftOrderBindBo(reqDto.getRouterType(),reqDto.getNftOrderPayId(),nftOrderBindBo);
}
seriesBeginIndex = nftOrderBindBo.getNftIdIndex();
//设置nftId
nftId = seriesId.concat("_").concat(seriesBeginIndex.toString());
return nftId;
}
/** /**
* 保持线程循环查询 * 保持线程循环查询
* @param nftId * @param nftId
......
...@@ -545,8 +545,11 @@ public abstract class AbstractDataUtils { ...@@ -545,8 +545,11 @@ public abstract class AbstractDataUtils {
try{ try{
this.getQueueUtil().sendMySqlRedis( this.getQueueUtil().sendMySqlRedis(
SqlMapping.get("galaxy_nft_transfer_info.insert"), SqlMapping.get("galaxy_nft_transfer_info.insert"),
new Object[]{transferNftInfoBo.getTransOrderId(),transferNftInfoBo.getNftId(),transferNftInfoBo.getUserId(),transferNftInfoBo.getAddress(),transferNftInfoBo.getReceiveUserId(),transferNftInfoBo.getReceiveAddress(), new Object[]{transferNftInfoBo.getTransOrderId(),transferNftInfoBo.getNftId(),transferNftInfoBo.getUserId(),transferNftInfoBo.getAddress()
transferNftInfoBo.getOwnerUserId(),transferNftInfoBo.getOwnerAddress(),transferNftInfoBo.getTransferHash(),transferNftInfoBo.getSeriesId(),transferNftInfoBo.getRouterType(), ,transferNftInfoBo.getReceiveUserId(),transferNftInfoBo.getReceiveAddress()
,transferNftInfoBo.getOwnerUserId(),transferNftInfoBo.getOwnerAddress()
,transferNftInfoBo.getNftTransferTaskId(),transferNftInfoBo.getNftTransferChainTimestamp()
,transferNftInfoBo.getTransferHash(),transferNftInfoBo.getSeriesId(),transferNftInfoBo.getRouterType(),
transferNftInfoBo.getTransferStatus(),transferNftInfoBo.getErrorCode(),transferNftInfoBo.getErrorMsg(),transferNftInfoBo.getCreatedAt(),transferNftInfoBo.getUpdatedAt()} transferNftInfoBo.getTransferStatus(),transferNftInfoBo.getErrorCode(),transferNftInfoBo.getErrorMsg(),transferNftInfoBo.getCreatedAt(),transferNftInfoBo.getUpdatedAt()}
, MQConst.GalaxyQueue.SQL_NFT_TRADE_INFO.getKey() , MQConst.GalaxyQueue.SQL_NFT_TRADE_INFO.getKey()
); );
...@@ -583,8 +586,10 @@ public abstract class AbstractDataUtils { ...@@ -583,8 +586,10 @@ public abstract class AbstractDataUtils {
try{ try{
this.getQueueUtil().sendMySqlRedis( this.getQueueUtil().sendMySqlRedis(
SqlMapping.get("galaxy_nft_transfer_info.updateNftTransferInfo"), SqlMapping.get("galaxy_nft_transfer_info.updateNftTransferInfo"),
new Object[]{transferNftInfoBo.getOwnerUserId(),transferNftInfoBo.getOwnerAddress(),transferNftInfoBo.getTransferHash(), new Object[]{transferNftInfoBo.getOwnerUserId(),transferNftInfoBo.getOwnerAddress()
transferNftInfoBo.getTransferStatus(),transferNftInfoBo.getErrorCode(),transferNftInfoBo.getErrorMsg() ,transferNftInfoBo.getNftTransferTaskId(),transferNftInfoBo.getNftTransferChainTimestamp()
,transferNftInfoBo.getTransferHash()
,transferNftInfoBo.getTransferStatus(),transferNftInfoBo.getErrorCode(),transferNftInfoBo.getErrorMsg()
,transferNftInfoBo.getUpdatedAt(),transferNftInfoBo.getTransOrderId()} ,transferNftInfoBo.getUpdatedAt(),transferNftInfoBo.getTransOrderId()}
, MQConst.GalaxyQueue.SQL_NFT_TRADE_INFO.getKey() , MQConst.GalaxyQueue.SQL_NFT_TRADE_INFO.getKey()
); );
......
...@@ -11,7 +11,7 @@ galaxy_nft_trade_info.insert=insert into galaxy_nft_trade_info (user_id, nft_id, ...@@ -11,7 +11,7 @@ galaxy_nft_trade_info.insert=insert into galaxy_nft_trade_info (user_id, nft_id,
# ------------------------数字藏品发行购买失败记录---------------------------- # ------------------------数字藏品发行购买失败记录----------------------------
galaxy_nft_order_fail_log.insert=insert into galaxy_nft_order_fail_log (nft_order_pay_id, user_id, nft_id, nft_name, series_name, series_id,series_code, taskId, fail_reason_desc, fail_reason_desc_second, deal_with_status, trade_type,router_type, created_at, updated_at)values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) galaxy_nft_order_fail_log.insert=insert into galaxy_nft_order_fail_log (nft_order_pay_id, user_id, nft_id, nft_name, series_name, series_id,series_code, taskId, fail_reason_desc, fail_reason_desc_second, deal_with_status, trade_type,router_type, created_at, updated_at)values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
# ------------------------数字藏品转让记录---------------------------- # ------------------------数字藏品转让记录----------------------------
galaxy_nft_transfer_info.insert=insert into galaxy_nft_transfer_info (trans_order_id,nft_id,user_id, address, receive_user_id, receive_address, owner_user_id,owner_address, transfer_hash, series_id, router_type, transfer_status, error_code,error_msg, created_at, updated_at) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) galaxy_nft_transfer_info.insert=insert into galaxy_nft_transfer_info (trans_order_id,nft_id,user_id, address, receive_user_id, receive_address, owner_user_id,owner_address,nft_transfer_task_id,nft_transfer_chain_timestamp,transfer_hash, series_id, router_type, transfer_status, error_code,error_msg, created_at, updated_at) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
# ------------------------更新用户注册信息---------------------------- # ------------------------更新用户注册信息----------------------------
galaxy_user_info.update=update galaxy_user_info set user_name = ?,id_card_type = ?,id_card = ?,mobile = ?,block_chain_address = ?,user_identification = ?,updated_at =? where router_type = ? and user_id = ? galaxy_user_info.update=update galaxy_user_info set user_name = ?,id_card_type = ?,id_card = ?,mobile = ?,block_chain_address = ?,user_identification = ?,updated_at =? where router_type = ? and user_id = ?
...@@ -34,4 +34,4 @@ galaxy_series_nft_info.updateSeriesNftPublishStatus=update galaxy_series_nft_inf ...@@ -34,4 +34,4 @@ galaxy_series_nft_info.updateSeriesNftPublishStatus=update galaxy_series_nft_inf
# ------------------------同步用户数字账户信息到adam--------------------------- # ------------------------同步用户数字账户信息到adam---------------------------
adam_user_busi_acct.add=INSERT INTO adam_user_busi_acct (`uid`, busi, uuid, `work`, ppwd, `state`, created_at) VALUES (?,?,?,?,?,?,?) adam_user_busi_acct.add=INSERT INTO adam_user_busi_acct (`uid`, busi, uuid, `work`, ppwd, `state`, created_at) VALUES (?,?,?,?,?,?,?)
# ------------------------更新nft转让信息---------------------------- # ------------------------更新nft转让信息----------------------------
galaxy_nft_transfer_info.updateNftTransferInfo=update galaxy_nft_transfer_info t set t.owner_user_id = ?,t.owner_address = ?,t.transfer_hash =?,t.transfer_status =?,t.error_code =?,t.error_msg =? ,t.updated_at =? where t.trans_order_id = ? galaxy_nft_transfer_info.updateNftTransferInfo=update galaxy_nft_transfer_info t set t.owner_user_id = ?,t.owner_address = ?,t.nft_transfer_task_id =?,t.nft_transfer_chain_timestamp =?,t.transfer_hash =?,t.transfer_status =?,t.error_code =?,t.error_msg =? ,t.updated_at =? where t.trans_order_id = ?
alter table galaxy_nft_transfer_info
add nft_transfer_task_id varchar(100) null comment 'nft转让任务id' after owner_address;
alter table galaxy_nft_transfer_info
add nft_transfer_chain_timestamp varchar(30) null comment 'nft转让时间' after nft_transfer_task_id;
...@@ -3,8 +3,10 @@ package com.liquidnet.service.galaxy.router.zxin.biz; ...@@ -3,8 +3,10 @@ package com.liquidnet.service.galaxy.router.zxin.biz;
import com.liquidnet.common.exception.LiquidnetServiceException; import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.common.third.zxlnft.biz.ZxlnftBiz; import com.liquidnet.common.third.zxlnft.biz.ZxlnftBiz;
import com.liquidnet.common.third.zxlnft.config.ZxlnftConfig; import com.liquidnet.common.third.zxlnft.config.ZxlnftConfig;
import com.liquidnet.common.third.zxlnft.constant.ZxlErrorEnum;
import com.liquidnet.common.third.zxlnft.constant.ZxlnftEnum; import com.liquidnet.common.third.zxlnft.constant.ZxlnftEnum;
import com.liquidnet.common.third.zxlnft.dto.*; import com.liquidnet.common.third.zxlnft.dto.*;
import com.liquidnet.common.third.zxlnft.exception.ZxlNftException;
import com.liquidnet.common.third.zxlnft.util.ZxlnftSdkUtil; import com.liquidnet.common.third.zxlnft.util.ZxlnftSdkUtil;
import com.liquidnet.commons.lang.util.*; import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
...@@ -14,8 +16,10 @@ import com.liquidnet.service.galaxy.constant.GalaxyEnum; ...@@ -14,8 +16,10 @@ import com.liquidnet.service.galaxy.constant.GalaxyEnum;
import com.liquidnet.service.galaxy.constant.GalaxyErrorEnum; import com.liquidnet.service.galaxy.constant.GalaxyErrorEnum;
import com.liquidnet.service.galaxy.dto.bo.GalaxyNftOrderBo; import com.liquidnet.service.galaxy.dto.bo.GalaxyNftOrderBo;
import com.liquidnet.service.galaxy.dto.bo.GalaxySeriesNftInfoBo; import com.liquidnet.service.galaxy.dto.bo.GalaxySeriesNftInfoBo;
import com.liquidnet.service.galaxy.dto.bo.GalaxyTransferNftInfoBo;
import com.liquidnet.service.galaxy.dto.bo.GalaxyUserInfoBo; import com.liquidnet.service.galaxy.dto.bo.GalaxyUserInfoBo;
import com.liquidnet.service.galaxy.dto.param.*; import com.liquidnet.service.galaxy.dto.param.*;
import com.liquidnet.service.galaxy.exception.GalaxyNftPublishException;
import com.liquidnet.service.galaxy.utils.GalaxyDataUtils; import com.liquidnet.service.galaxy.utils.GalaxyDataUtils;
import com.liquidnet.service.galaxy.utils.QueueUtil; import com.liquidnet.service.galaxy.utils.QueueUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -329,4 +333,308 @@ public class ZxinTradeBiz { ...@@ -329,4 +333,308 @@ public class ZxinTradeBiz {
public ResponseDto<GalaxyNftPublishAndBuyRespDto> nftPublishAndBuy(GalaxyNftPublishAndBuyReqDto reqDto) { public ResponseDto<GalaxyNftPublishAndBuyRespDto> nftPublishAndBuy(GalaxyNftPublishAndBuyReqDto reqDto) {
return zxinTradeCommonBiz.nftPublishAndBuy(reqDto); return zxinTradeCommonBiz.nftPublishAndBuy(reqDto);
} }
/**
* nft转让
* @param reqDto
* @return
*/
public ResponseDto<GalaxyNftTransferRespDto> nftTransfer(GalaxyNftTransferReqDto reqDto) {
log.info("nftTransfer request param:{}",JsonUtils.toJson(reqDto));
//获取用户信息
GalaxyUserInfoBo userInfoBo = dataUtils.getGalaxyUserInfo(reqDto.getRouterType(),reqDto.getUserId());
if(StringUtil.isNull(userInfoBo)){
log.error("开始执行 nftTransfer nft owner not exist error msg:{}",GalaxyErrorEnum.NFT_TRANSFER_FAIL_OWNER_NOT_EXIST.getMessage());
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_FAIL_OWNER_NOT_EXIST.getCode(), GalaxyErrorEnum.NFT_TRANSFER_FAIL_OWNER_NOT_EXIST.getMessage());
}
//获取用户信息
GalaxyUserInfoBo receiveUserInfoBo = dataUtils.getGalaxyUserInfo(reqDto.getRouterType(),reqDto.getReceiveUserId());
if(StringUtil.isNull(userInfoBo)){
log.error("开始执行 nftTransfer nft receiver not exist error msg:{}",GalaxyErrorEnum.NFT_TRANSFER_FAIL_RECEIVER_NOT_EXIST.getMessage());
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_FAIL_RECEIVER_NOT_EXIST.getCode(), GalaxyErrorEnum.NFT_TRANSFER_FAIL_RECEIVER_NOT_EXIST.getMessage());
}
try{
GalaxyTransferNftInfoBo transferNftInfoBo = dataUtils.getGalaxyTransferNftInfoBo(reqDto.getRouterType(),reqDto.getTransOrderId());
//初始化转让信息
if(transferNftInfoBo==null){
transferNftInfoBo = galaxyBeanTransferBiz.buildTransferNftInfoBo(reqDto,userInfoBo,receiveUserInfoBo);
dataUtils.setGalaxyTransferNftInfoBo(reqDto.getRouterType(),reqDto.getTransOrderId(),transferNftInfoBo);
}else{
//判断藏品当前拥有者是否匹配
if(transferNftInfoBo.getUserId().equalsIgnoreCase(reqDto.getUserId())){
if(transferNftInfoBo.getTransferStatus().equalsIgnoreCase(GalaxyEnum.NftTransferStatusEnum.PROCESSING.getCode())){
transferNftInfoBo.setErrorCode(GalaxyErrorEnum.NFT_TRANSFERING_ERROR.getCode());
transferNftInfoBo.setErrorMsg(GalaxyErrorEnum.NFT_TRANSFERING_ERROR.getMessage());
transferNftInfoBo.setUpdatedAt(DateUtil.getNowTime());
dataUtils.updateTransferNftInfoBo(reqDto.getRouterType(),reqDto.getTransOrderId(),transferNftInfoBo);
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFERING_ERROR.getCode(), GalaxyErrorEnum.NFT_TRANSFERING_ERROR.getMessage());
}else if(transferNftInfoBo.getTransferStatus().equalsIgnoreCase(GalaxyEnum.NftTransferStatusEnum.SUCCESS.getCode())){
GalaxyNftTransferRespDto galaxyNftTransferRespDto = galaxyBeanTransferBiz.buildNftTransferRespDto(reqDto,userInfoBo,receiveUserInfoBo,transferNftInfoBo);
return ResponseDto.success(galaxyNftTransferRespDto);
}else if(transferNftInfoBo.getTransferStatus().equalsIgnoreCase(GalaxyEnum.NftTransferStatusEnum.FAIL.getCode())){
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_FAIL.getCode(), GalaxyErrorEnum.NFT_TRANSFER_FAIL.getMessage());
}
}else{
transferNftInfoBo.setErrorCode(GalaxyErrorEnum.NFT_TRANSFER_OWNER_MATCH_ERROR.getCode());
transferNftInfoBo.setErrorMsg(GalaxyErrorEnum.NFT_TRANSFER_OWNER_MATCH_ERROR.getMessage());
transferNftInfoBo.setUpdatedAt(DateUtil.getNowTime());
dataUtils.updateTransferNftInfoBo(reqDto.getRouterType(),reqDto.getTransOrderId(),transferNftInfoBo);
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_OWNER_MATCH_ERROR.getCode(), GalaxyErrorEnum.NFT_TRANSFER_OWNER_MATCH_ERROR.getMessage());
}
}
//nft信息核对
if(StringUtil.isNotEmpty(reqDto.getNftId())){
boolean checkNftOwnerFlag = this.checkNftOwner(userInfoBo,reqDto.getNftId());
log.info("nftTransfer checkNftOwnerFlag:{}",checkNftOwnerFlag);
//拥有者匹配 可以转让
if(checkNftOwnerFlag){
//定义返回参数
String nftTransferTaskId = null;
Long nftTransferChainTimestamp = null;
Integer nftTransferStatus = null;
String nftTransferTradeHash = null;
try {
//操作者的公钥和私钥
String pubKey = BASE64Util.decode(userInfoBo.getUserPubKey());
String priKey = BASE64Util.decode(userInfoBo.getUserPriKey());
//nft接收者的地址
String receiverAddr = receiveUserInfoBo.getBlockChainAddress();
//要转移的nftId
String nftId = reqDto.getNftId();
//请求ID,每个请求需要填唯一的ID,重复请求用相同的id
String operateId = IDGenerator.get32UUID();
/**
* 操作者的私钥签名,签名对象是(pubKey_receiverAddr_接口名_nftId_operateId)
* 接口名:nft_transfer
*/
String signMetaData = pubKey
.concat("_").concat(receiverAddr)
.concat("_").concat("nft_transfer")
.concat("_").concat(nftId)
.concat("_").concat(operateId);
//操作者的私钥签名,签名对象是(pubKey_receiverAddr_接口名_nftId_operateId)
String signature = zxlnftBiz.createSign(priKey,signMetaData);
Nft046TransferReqDto nft046TransferReqDto = Nft046TransferReqDto.getNew();
nft046TransferReqDto.setPubKey(pubKey);
nft046TransferReqDto.setReceiverAddr(receiverAddr);
nft046TransferReqDto.setNftId(nftId);
nft046TransferReqDto.setOperateId(operateId);
nft046TransferReqDto.setSignature(signature);
ZxlnftResponseDto<Nft046TransferRespDto> nft046TransferResp = zxlnftSdkUtil.nft046TransferV2(nft046TransferReqDto);
Nft046TransferRespDto nft046TransferRespDto = null;
if(nft046TransferResp.isSuccess()){
nft046TransferRespDto = nft046TransferResp.getParseData(Nft046TransferRespDto.class);
if(StringUtil.isNotNull(nft046TransferRespDto)&&StringUtil.isNotEmpty(nft046TransferRespDto.getTaskId())){
//获取任务id
nftTransferTaskId = nft046TransferRespDto.getTaskId();
transferNftInfoBo.setNftTransferTaskId(nftTransferTaskId);
}
}else{
//更新转让状态和拥有者信息(只有成功才更新拥有者信息)
transferNftInfoBo.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.FAIL.getCode());
transferNftInfoBo.setErrorCode(nft046TransferResp.getCode());
transferNftInfoBo.setErrorMsg(nft046TransferResp.getMessage());
transferNftInfoBo.setUpdatedAt(DateUtil.getNowTime());
dataUtils.updateTransferNftInfoBo(reqDto.getRouterType(),reqDto.getTransOrderId(),transferNftInfoBo);
}
if (StringUtil.isNotEmpty(nftTransferTaskId)){
try{
Nft049TransferResultReqDto nft049TransferResultReqDto = Nft049TransferResultReqDto.getNew();
nft049TransferResultReqDto.setOperatorPubKey(BASE64Util.decode(userInfoBo.getUserPubKey()));
nft049TransferResultReqDto.setTaskId(nftTransferTaskId);
int count = 0;
long timeStart = System.currentTimeMillis();
while (StringUtil.isEmpty(nftTransferTradeHash)) {
Thread.sleep(500l);
count++;
ZxlnftResponseDto<Nft049TransferResultRespDto> nft049ZxlnftRespDto = zxlnftSdkUtil.nft049TransferResult(nft049TransferResultReqDto);
if(!nft049ZxlnftRespDto.isSuccess()){
throw new ZxlNftException(ZxlErrorEnum.SYSTEM_ERROR.getCode(),ZxlErrorEnum.SYSTEM_ERROR.getMsg());
}
log.info("=======执行第{}次查询,taskId:{}", count, nft049TransferResultReqDto.getTaskId());
if (nft049ZxlnftRespDto.getData().getTaskStatus().toString().equals(ZxlnftEnum.TaskStatusEnum.TASK_SUCCESS.getCode())) {
nftTransferChainTimestamp = nft049ZxlnftRespDto.getData().getChainTimestamp();
nftTransferStatus = nft049ZxlnftRespDto.getData().getTaskStatus();
nftTransferTradeHash = nft049ZxlnftRespDto.getData().getTxHash();
} else if (nft049ZxlnftRespDto.getData().getTaskStatus().toString().equals(ZxlnftEnum.TaskStatusEnum.TASK_FAIL.getCode())) {
log.info("任务执行失败!taskId:{}", nft049TransferResultReqDto.getTaskId());
nftTransferStatus = nft049ZxlnftRespDto.getData().getTaskStatus();
//转让失败
throw new GalaxyNftPublishException(GalaxyErrorEnum.NFT_TRANSFER_FAIL.getCode(), "nft049TransferResult_resp:"+GalaxyErrorEnum.NFT_TRANSFER_FAIL.getMessage());
}else if(nft049ZxlnftRespDto.getData().getTaskStatus().toString().equals(ZxlnftEnum.TaskStatusEnum.PROCESSING.getCode())){
log.info("任务执行中!taskId:{}", nft049TransferResultReqDto.getTaskId());
nftTransferStatus = nft049ZxlnftRespDto.getData().getTaskStatus();
}
if (count == 20) {
log.info("=======查询共20次,跳出循环!taskId:{}", nft049TransferResultReqDto.getTaskId());
break;
}
}
log.info("总共执行了{}次查询 总耗时:{} MS", count, (System.currentTimeMillis() - timeStart));
}catch (GalaxyNftPublishException e){
throw new GalaxyNftPublishException(e.getCode(),e.getMessage());
}catch(Exception e){
log.error(e.getMessage(),e);
throw new GalaxyNftPublishException(GalaxyErrorEnum.NFT_TRANSFER_ERROR.getCode(),"nft049TransferResult_exception:"+e.getMessage());
}
//更新转让状态和拥有者信息(只有成功才更新拥有者信息)
if(StringUtil.isNotNull(nftTransferChainTimestamp)){
//设置时间
String nftTransferChainTimestampStr = DateUtil.format(new Date(nftTransferChainTimestamp*1000),DateUtil.Formatter.yyyyMMddHHmmss);
transferNftInfoBo.setNftTransferChainTimestamp(nftTransferChainTimestampStr);
}
if(StringUtil.isNotNull(nftTransferStatus)){
//转换任务状态
String nftTransferStatusStr = GalaxyEnumBiz.getTransStatusEnum(reqDto.getRouterType(),nftTransferStatus.toString()).getCode();
transferNftInfoBo.setTransferStatus(nftTransferStatusStr);
}
transferNftInfoBo.setTransferHash(nftTransferTradeHash);
transferNftInfoBo.setOwnerUserId(transferNftInfoBo.getReceiveUserId());
transferNftInfoBo.setOwnerAddress(transferNftInfoBo.getReceiveAddress());
transferNftInfoBo.setUpdatedAt(DateUtil.getNowTime());
dataUtils.updateTransferNftInfoBo(reqDto.getRouterType(),reqDto.getTransOrderId(),transferNftInfoBo);
//构造返回结果
GalaxyNftTransferRespDto galaxyNftTransferRespDto = galaxyBeanTransferBiz.buildNftTransferRespDto(reqDto,userInfoBo,receiveUserInfoBo,transferNftInfoBo);
return ResponseDto.success(galaxyNftTransferRespDto);
}else{
throw new GalaxyNftPublishException(GalaxyErrorEnum.NFT_TRANSFER_ERROR.getCode(),"nft049TransferResult_resp:taskId : "+nftTransferTaskId);
}
}catch (ZxlNftException e) {
log.error("biz error msg "+e.getMessage(),e);
}catch (Exception e) {
log.error("sys error msg "+e.getMessage(),e);
}
}else{
//更新转让状态和拥有者信息(只有成功才更新拥有者信息)
transferNftInfoBo.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.FAIL.getCode());
transferNftInfoBo.setErrorCode(GalaxyErrorEnum.NFT_TRANSFER_OWNER_MATCH_ERROR.getCode());
transferNftInfoBo.setErrorMsg(GalaxyErrorEnum.NFT_TRANSFER_OWNER_MATCH_ERROR.getMessage());
transferNftInfoBo.setUpdatedAt(DateUtil.getNowTime());
dataUtils.updateTransferNftInfoBo(reqDto.getRouterType(),reqDto.getTransOrderId(),transferNftInfoBo);
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_OWNER_MATCH_ERROR.getCode(), GalaxyErrorEnum.NFT_TRANSFER_OWNER_MATCH_ERROR.getMessage());
}
}
}catch (ZxlNftException e) {
log.error("biz error msg "+e.getMessage(),e);
}catch (Exception e) {
log.error("sys error msg "+e.getMessage(),e);
}
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_FAIL.getCode(), GalaxyErrorEnum.NFT_TRANSFER_FAIL.getMessage());
}
/**
* nft转让结果查询
* @param reqDto
* @return
*/
public ResponseDto<GalaxyNftTransferQueryRespDto> nftTransferQuery(GalaxyNftTransferQueryReqDto reqDto) {
GalaxyTransferNftInfoBo transferNftInfoBo = dataUtils.getGalaxyTransferNftInfoBo(reqDto.getRouterType(),reqDto.getTransOrderId());
//初始化转让信息
if(transferNftInfoBo==null||StringUtil.isEmpty(transferNftInfoBo.getNftTransferTaskId())){
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.getCode(),GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.getMessage());
}
//获取用户信息
GalaxyUserInfoBo userInfoBo = dataUtils.getGalaxyUserInfo(reqDto.getRouterType(),transferNftInfoBo.getUserId());
if(StringUtil.isNull(userInfoBo)){
log.error("开始执行 nftTransfer nft owner not exist error msg:{}",GalaxyErrorEnum.NFT_TRANSFER_FAIL_OWNER_NOT_EXIST.getMessage());
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_FAIL_OWNER_NOT_EXIST.getCode(), GalaxyErrorEnum.NFT_TRANSFER_FAIL_OWNER_NOT_EXIST.getMessage());
}
if(transferNftInfoBo.getTransferStatus().equalsIgnoreCase(GalaxyEnum.NftTransferStatusEnum.SUCCESS.getCode())){
GalaxyNftTransferQueryRespDto nftTransferQueryRespDto = galaxyBeanTransferBiz.buildNftTransferQueryRespDto(transferNftInfoBo);
nftTransferQueryRespDto.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.SUCCESS.getCode());
return ResponseDto.success(nftTransferQueryRespDto);
}else if(transferNftInfoBo.getTransferStatus().equalsIgnoreCase(GalaxyEnum.NftTransferStatusEnum.PROCESSING.getCode())){
//获取用户信息
GalaxyUserInfoBo receiveUserInfoBo = dataUtils.getGalaxyUserInfo(reqDto.getRouterType(),transferNftInfoBo.getReceiveUserId());
if(StringUtil.isNull(receiveUserInfoBo)){
log.error("开始执行 nftTransfer nft receiver not exist error msg:{}",GalaxyErrorEnum.NFT_TRANSFER_FAIL_RECEIVER_NOT_EXIST.getMessage());
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_FAIL_RECEIVER_NOT_EXIST.getCode(), GalaxyErrorEnum.NFT_TRANSFER_FAIL_RECEIVER_NOT_EXIST.getMessage());
}
//链上查询转让结果
Nft049TransferResultReqDto nft049TransferResultReqDto = Nft049TransferResultReqDto.getNew();
nft049TransferResultReqDto.setOperatorPubKey(userInfoBo.getUserPubKey());
nft049TransferResultReqDto.setTaskId(transferNftInfoBo.getNftTransferTaskId());
ZxlnftResponseDto<Nft049TransferResultRespDto> nft049ZxlnftRespDto = zxlnftSdkUtil.nft049TransferResult(nft049TransferResultReqDto);
if(!nft049ZxlnftRespDto.isSuccess()){
throw new ZxlNftException(ZxlErrorEnum.SYSTEM_ERROR.getCode(),ZxlErrorEnum.SYSTEM_ERROR.getMsg());
}
Long nftTransferChainTimestamp = null;
Integer nftTransferStatus = null;
String nftTransferTradeHash = null;
GalaxyNftTransferQueryRespDto nftTransferQueryRespDto = galaxyBeanTransferBiz.buildNftTransferQueryRespDto(transferNftInfoBo);
if (nft049ZxlnftRespDto.getData().getTaskStatus().toString().equals(ZxlnftEnum.TaskStatusEnum.TASK_SUCCESS.getCode())) {
nftTransferChainTimestamp = nft049ZxlnftRespDto.getData().getChainTimestamp();
nftTransferStatus = nft049ZxlnftRespDto.getData().getTaskStatus();
nftTransferTradeHash = nft049ZxlnftRespDto.getData().getTxHash();
if(StringUtil.isNotEmpty(nft049ZxlnftRespDto.getData().getTxHash())){
//更新转让成功信息
transferNftInfoBo.setOwnerUserId(transferNftInfoBo.getReceiveUserId());
transferNftInfoBo.setOwnerAddress(transferNftInfoBo.getReceiveAddress());
transferNftInfoBo.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.SUCCESS.getCode());
transferNftInfoBo.setTransferHash(nftTransferTradeHash);
transferNftInfoBo.setUpdatedAt(DateUtil.getNowTime());
dataUtils.updateTransferNftInfoBo(reqDto.getRouterType(),reqDto.getTransOrderId(),transferNftInfoBo);
nftTransferQueryRespDto.setOwnerUserId(transferNftInfoBo.getReceiveUserId());
nftTransferQueryRespDto.setOwnerAddress(transferNftInfoBo.getReceiveAddress());
nftTransferQueryRespDto.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.SUCCESS.getCode());
nftTransferQueryRespDto.setTransferHash(nftTransferTradeHash);
}else{
nftTransferQueryRespDto.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.PROCESSING.getCode());
}
}
return ResponseDto.success(nftTransferQueryRespDto);
}else {
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.getCode(),GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.getMessage());
}
}
/**
* 核对nft当前拥有者是否匹配
* @param userInfoBo
* @param nftId
* @return
*/
private Boolean checkNftOwner(GalaxyUserInfoBo userInfoBo,String nftId){
Boolean checkNftOwner = false;
Nft036InfoReqDto reqDto = Nft036InfoReqDto.getNew();
reqDto.setNftId(nftId);
ZxlnftResponseDto<Nft036InfoRespDto> resp = zxlnftSdkUtil.nft036Info(reqDto);
Nft036InfoRespDto nft036InfoRespDto = null;
if(resp.isSuccess()){
nft036InfoRespDto = resp.getParseData(Nft036InfoRespDto.class);
String ownerAddress = nft036InfoRespDto.getNftInfo().getOwnerAddr();
//已上链
if(ownerAddress.equalsIgnoreCase(userInfoBo.getBlockChainAddress())){
checkNftOwner = true;
}
}else{
log.error("nftTransfer error : nftId:{} not exits on xuper blockchain :{} ",nftId,JsonUtils.toJson(nft036InfoRespDto));
}
return checkNftOwner;
}
} }
...@@ -62,11 +62,11 @@ public class GalaxyRouterStrategyZxlTradeImpl implements IGalaxyRouterStrategyTr ...@@ -62,11 +62,11 @@ public class GalaxyRouterStrategyZxlTradeImpl implements IGalaxyRouterStrategyTr
@Override @Override
public ResponseDto<GalaxyNftTransferRespDto> nftTransfer(GalaxyNftTransferReqDto reqDto) { public ResponseDto<GalaxyNftTransferRespDto> nftTransfer(GalaxyNftTransferReqDto reqDto) {
return null; return zxinTradeBiz.nftTransfer(reqDto);
} }
@Override @Override
public ResponseDto<GalaxyNftTransferQueryRespDto> nftTransferQuery(GalaxyNftTransferQueryReqDto reqDto) { public ResponseDto<GalaxyNftTransferQueryRespDto> nftTransferQuery(GalaxyNftTransferQueryReqDto reqDto) {
return null; return zxinTradeBiz.nftTransferQuery(reqDto);
} }
} }
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