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

Commit 38ecbf84 authored by anjiabin's avatar anjiabin

实现百度链转让

parent 82758980
......@@ -19,7 +19,6 @@ public class GalaxyConstant {
public static final String REDIS_KEY_GALAXY_SERIES_NFT="galaxy:series:nft:";
public static final String REDIS_KEY_GALAXY_TRADE_ORDER="galaxy:trade:order:";
public static final String REDIS_KEY_GALAXY_PUBLISH_ORDER="galaxy:publish:order:";//订单与索引绑定信息
public static final String REDIS_KEY_GALAXY_TRANSFER_NFTID = "galaxy:transfer:nft:";//
public static final String REDIS_KEY_GALAXY_TRANSFER_ORDER= "galaxy:transfer:order:";//
//以下禁止删除
public static final String REDIS_KEY_GALAXY_PUBLISH_NFT="galaxy:publish:nft:"; //nft索引递增记录
......
......@@ -21,6 +21,14 @@ import java.io.Serializable;
@ApiModel(value = "GalaxyNftTransferQueryReqDto", description = "NFT转让结果查询")
@Data
public class GalaxyNftTransferQueryReqDto extends GalaxyBaseReqDto implements Serializable,Cloneable {
/**
* nft转让流水号
*/
@ApiModelProperty(position = 1, required = true, value = "nft转让流水号(保证唯一),不超过30个字符")
@NotBlank(message = "nft转让流水号(平台订单id)不能为空")
@Size(min = 2, max = 30, message = "nft转让流水号(平台订单id)限制2-30位且不能包含特殊字符")
private String transOrderId;
/**
* 用户id
*/
......
......@@ -580,14 +580,12 @@ public abstract class AbstractDataUtils {
public void updateTransferNftInfoBo(String routerType,String transOrderId, GalaxyTransferNftInfoBo transferNftInfoBo) {
this.getRedisUtil().set(GalaxyConstant.REDIS_KEY_GALAXY_TRANSFER_ORDER.concat(routerType).concat(":") + transOrderId,transferNftInfoBo);
// 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.nft_id = ?
try{
this.getQueueUtil().sendMySqlRedis(
SqlMapping.get("galaxy_nft_transfer_info.updateNftTransferInfo"),
new Object[]{transferNftInfoBo.getTransOrderId(),transferNftInfoBo.getNftId(),transferNftInfoBo.getUserId(),transferNftInfoBo.getAddress(),transferNftInfoBo.getReceiveUserId(),transferNftInfoBo.getReceiveAddress(),
transferNftInfoBo.getOwnerUserId(),transferNftInfoBo.getOwnerAddress(),transferNftInfoBo.getTransferHash(),transferNftInfoBo.getSeriesId(),transferNftInfoBo.getRouterType(),
transferNftInfoBo.getTransferStatus(),transferNftInfoBo.getErrorCode(),transferNftInfoBo.getErrorMsg(),transferNftInfoBo.getCreatedAt(),transferNftInfoBo.getUpdatedAt()}
new Object[]{transferNftInfoBo.getOwnerUserId(),transferNftInfoBo.getOwnerAddress(),transferNftInfoBo.getTransferHash(),
transferNftInfoBo.getTransferStatus(),transferNftInfoBo.getErrorCode(),transferNftInfoBo.getErrorMsg()
,transferNftInfoBo.getUpdatedAt(),transferNftInfoBo.getTransOrderId()}
, MQConst.GalaxyQueue.SQL_NFT_TRADE_INFO.getKey()
);
}catch(Exception e){
......
......@@ -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_transfer_info.insert=insert into galaxy_nft_transfer_info (trans_order_id,user_id, nft_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, 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 = ?
......
......@@ -258,18 +258,18 @@ public class XuperTradeBiz {
xuper008TransferShardRespDto = transferResponseDto.getParseData(Xuper008TransferShardRespDto.class);
if(String.valueOf(xuper008TransferShardRespDto.getErrNo()).equalsIgnoreCase(ErrorCode.SUCCESS.getCode())){
//查询获取交易hash
String transferHash = this.getTransferHash(receiveUserInfoBo,reqDto.getNftId(),assetId,shardId);
String transferHash = this.getTransferHash(receiveUserInfoBo,reqDto.getNftId());
//更新转让状态和拥有者信息(只有成功才更新拥有者信息)
transferNftInfoBo.setOwnerUserId(transferNftInfoBo.getReceiveUserId());
transferNftInfoBo.setOwnerAddress(transferNftInfoBo.getReceiveAddress());
transferNftInfoBo.setSeriesId(null);
transferNftInfoBo.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.SUCCESS.getCode());
transferNftInfoBo.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.PROCESSING.getCode());
transferNftInfoBo.setTransferHash(transferHash);
transferNftInfoBo.setErrorCode(null);
transferNftInfoBo.setErrorMsg(null);
transferNftInfoBo.setUpdatedAt(DateUtil.getNowTime());
dataUtils.updateTransferNftInfoBo(reqDto.getRouterType(),reqDto.getNftId(),transferNftInfoBo);
dataUtils.updateTransferNftInfoBo(reqDto.getRouterType(),reqDto.getTransOrderId(),transferNftInfoBo);
//构造返回结果
GalaxyNftTransferRespDto galaxyNftTransferRespDto = galaxyBeanTransferBiz.buildNftTransferRespDto(reqDto,userInfoBo,receiveUserInfoBo,transferNftInfoBo);
......@@ -293,7 +293,7 @@ public class XuperTradeBiz {
* @return
*/
public ResponseDto<GalaxyNftTransferQueryRespDto> nftTransferQuery(GalaxyNftTransferQueryReqDto reqDto) {
GalaxyTransferNftInfoBo transferNftInfoBo = dataUtils.getGalaxyTransferNftInfoBo(reqDto.getRouterType(),reqDto.getNftId());
GalaxyTransferNftInfoBo transferNftInfoBo = dataUtils.getGalaxyTransferNftInfoBo(reqDto.getRouterType(),reqDto.getTransOrderId());
//初始化转让信息
if(transferNftInfoBo==null){
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.getCode(),GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.getMessage());
......@@ -309,7 +309,38 @@ public class XuperTradeBiz {
nftTransferQueryRespDto.setRouterType(transferNftInfoBo.getRouterType());
nftTransferQueryRespDto.setTransferHash(transferNftInfoBo.getTransferHash());
return ResponseDto.success(nftTransferQueryRespDto);
}else{
}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());
}
//查询获取交易hash
String transferHash = this.getTransferHash(receiveUserInfoBo,reqDto.getNftId());
//更新转让成功信息
transferNftInfoBo.setOwnerUserId(transferNftInfoBo.getReceiveUserId());
transferNftInfoBo.setOwnerAddress(transferNftInfoBo.getReceiveAddress());
transferNftInfoBo.setSeriesId(null);
transferNftInfoBo.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.SUCCESS.getCode());
transferNftInfoBo.setTransferHash(transferHash);
transferNftInfoBo.setErrorCode(null);
transferNftInfoBo.setErrorMsg(null);
transferNftInfoBo.setUpdatedAt(DateUtil.getNowTime());
dataUtils.updateTransferNftInfoBo(reqDto.getRouterType(),reqDto.getTransOrderId(),transferNftInfoBo);
GalaxyNftTransferQueryRespDto nftTransferQueryRespDto = GalaxyNftTransferQueryRespDto.getNew();
nftTransferQueryRespDto.setNftId(transferNftInfoBo.getNftId());
nftTransferQueryRespDto.setOwnerUserId(transferNftInfoBo.getOwnerUserId());
nftTransferQueryRespDto.setOwnerAddress(transferNftInfoBo.getOwnerAddress());
nftTransferQueryRespDto.setFromUserId(transferNftInfoBo.getUserId());
nftTransferQueryRespDto.setFromAddress(transferNftInfoBo.getAddress());
nftTransferQueryRespDto.setTransferTime(transferNftInfoBo.getCreatedAt());
nftTransferQueryRespDto.setRouterType(transferNftInfoBo.getRouterType());
nftTransferQueryRespDto.setTransferHash(transferHash);
return ResponseDto.success(nftTransferQueryRespDto);
}else {
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.getCode(),GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.getMessage());
}
}
......@@ -348,13 +379,21 @@ public class XuperTradeBiz {
/**
* 获取转让成功后的hash值
* @param userInfoBo
* @param receiveUserInfoBo
* @param nftId
* @param assetId
* @param shardId
* @return
*/
private String getTransferHash(GalaxyUserInfoBo userInfoBo,String nftId,Long assetId,Long shardId){
private String getTransferHash(GalaxyUserInfoBo receiveUserInfoBo,String nftId){
//资产id
Long assetId = null;
//碎片id
Long shardId = null;
if(StringUtil.isNotEmpty(nftId)){
assetId = Long.parseLong(nftId.substring(0,nftId.lastIndexOf("_")));
shardId = Long.parseLong(nftId.substring(nftId.lastIndexOf("_")+1,nftId.length()));
}
String transferHash = null;
//判断nftid是否状态正常
Xuper010QuerySdsReqDto xuper010QuerySdsReqDto = Xuper010QuerySdsReqDto.getNew();
......@@ -368,7 +407,8 @@ public class XuperTradeBiz {
Xuper010QuerySdsRespDto.ShardMeta shardMeta = xuper010QuerySdsRespDto.getMeta();
//已上链
if(shardMeta.getStatus() == Integer.parseInt(XuperEnum.AssetGrantStatusEnum.GRANT_SUCCESS.getCode())){
if(shardMeta.getOwnerAddr().equalsIgnoreCase(userInfoBo.getBlockChainAddress())){
//转让成功后,拥有者已变更为接收者的地址,但是交易hash未变
if(shardMeta.getOwnerAddr().equalsIgnoreCase(receiveUserInfoBo.getBlockChainAddress())){
transferHash = shardMeta.getTxId();
}
}
......
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