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

Commit 505c1cdb authored by 张禹's avatar 张禹

Merge branch 'pre' into 'master'

Pre

See merge request !299
parents 12e0d45b 03a6701c
package com.liquidnet.service.adam.dto.vo;
import com.liquidnet.commons.lang.util.DESUtils;
import com.liquidnet.commons.lang.util.SensitizeUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel(value = "AdamUserIdentityVo", description = "用户身份信息")
@Data
public class AdamUserIdentityInfoVo implements Serializable, Cloneable {
private static final long serialVersionUID = -5828611827493373384L;
@ApiModelProperty(position = 10, value = "用户ID[30]")
private String uid;
@ApiModelProperty(position = 11, value = "脱敏姓名[30]")
private String name;
@ApiModelProperty(position = 12, value = "脱敏手机号[11]")
private String mobile;
@ApiModelProperty(position = 15, value = "数据包")
private String packet;
private static final AdamUserIdentityInfoVo obj = new AdamUserIdentityInfoVo();
public static AdamUserIdentityInfoVo getNew() {
return obj.clone();
}
@Override
public AdamUserIdentityInfoVo clone() {
try {
return (AdamUserIdentityInfoVo) super.clone();
} catch (CloneNotSupportedException e) {
return new AdamUserIdentityInfoVo();
}
}
/**
* 脱敏处理
*
* @return AdamUserIdentityVo
*/
public AdamUserIdentityInfoVo desensitize() {
try {
this.packet = DESUtils.DES().encrypt(uid.concat(",").concat(name).concat(",").concat(mobile));
} catch (Exception e) {
this.packet = "Nil";
}
this.setName(SensitizeUtil.custom(this.getName(), 0, 1));
this.setMobile(SensitizeUtil.custom(this.getMobile(), 3, 4));
return this;
}
}
......@@ -19,6 +19,7 @@ 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_ORDER= "galaxy:transfer:order:";//
//以下禁止删除
public static final String REDIS_KEY_GALAXY_PUBLISH_NFT="galaxy:publish:nft:"; //nft索引递增记录
......
......@@ -336,4 +336,41 @@ public class GalaxyEnum {
System.out.println("支付成功");
}
}
/**
* nft转让状态
*/
public enum NftTransferStatusEnum{
INIT("-1","数据初始化"),
PROCESSING("0","转让中"),
SUCCESS("1","转让成功"),
FAIL("2","转让失败");
private String code;
private String message;
NftTransferStatusEnum(String code, String message) {
this.code = code;
this.message = message;
}
public NftTransferStatusEnum getEnumByCode(String code){
NftTransferStatusEnum[] arry = NftTransferStatusEnum.values();
for (int i = 0; i < arry.length; i++) {
if (arry[i].getCode().equals(code)) {
return arry[i];
}
}
return null;
}
public String getCode() {
return code;
}
public String getMessage(){
return message;
}
}
}
......@@ -34,7 +34,15 @@ public enum GalaxyErrorEnum {
NFT_QUERY_FAIL_SERIES_NOT_EXIST("NFT0010022","系列信息查询不存在!"),
NFT_USER_HAS_OPEN_ACCOUNT("NFT0010023","用户已经开通过数字账户!"),
SERIES_NFT_INFO_NOT_EXIST("NFT0010024","系列NFT信息查询不存在!"),
SERIES_NFT_HASH_CREATE_FAIL("NFT0010025","系列NFT的介质hash生成失败!");
SERIES_NFT_HASH_CREATE_FAIL("NFT0010025","系列NFT的介质hash生成失败!"),
NFT_TRANSFER_FAIL("NFT0010026","NFT转让失败!"),
NFT_TRANSFER_FAIL_OWNER_NOT_EXIST("NFT0010027","NFT转让失败,拥有者不存在!"),
NFT_TRANSFER_FAIL_RECEIVER_NOT_EXIST("NFT0010028","NFT转让失败,接收者不存在!"),
NFT_TRANSFER_OWNER_MATCH_ERROR("NFT0010029","NFT转让失败,拥有者不匹配"),
NFT_TRANSFERING_ERROR("NFT0010030","NFT正在转让中,不允许再次操作!"),
NFT_TRANSFER_NFTID_FORMAT_ERROR("NFT0010031","NFT转让失败,nftid格式错误!"),
NFT_TRANSFER_QUERY_ERROR("NFT0010032","NFT转让结果查询失败,nft信息不存在!"),
NFT_TRANSFER_ERROR("NFT0010033","NFT转让异常,允许再次发起!");
private String code;
......
package com.liquidnet.service.galaxy.dto;
import com.liquidnet.service.galaxy.dto.param.GalaxyQueryUserTradeAllListRespDto;
import lombok.Data;
/**
......@@ -61,4 +62,14 @@ public class TradeInfoDto {
* 交易类别, 1:发行 2:购买 3:转移 4:设置价格 5:设置状态
*/
private Integer txType;
private static final TradeInfoDto obj = new TradeInfoDto();
public static TradeInfoDto getNew() {
try {
return (TradeInfoDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new TradeInfoDto();
}
}
}
package com.liquidnet.service.galaxy.dto.bo;
import com.liquidnet.commons.lang.util.JsonUtils;
import lombok.Data;
import java.io.Serializable;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: nft转让最新记录
* @class: GalaxyTransferNftInfoBo
* @Package com.liquidnet.service.galaxy.dto.bo
* @Copyright: LightNet @ Copyright (c) 2022
* @date 2022/8/12 13:36
*/
@Data
public class GalaxyTransferNftInfoBo implements Serializable,Cloneable{
/**
* 转让流水号(平台转让订单id)
*/
private String transOrderId;
/**
* nft唯一资产碎片id
*/
private String nftId;
/**
* 转让发起人用户id
*/
private String userId;
/**
* 转让发起人区块链地址
*/
private String address;
/**
* 接收者userId
*/
private String receiveUserId;
/**
* 接收者区块链地址
*/
private String receiveAddress;
/**
* nft当前拥有者用户id(转让成功后更新)
*/
private String ownerUserId;
/**
* nft当前拥有者addr(转让成功后更新)
*/
private String ownerAddress;
/**
* 转让hash
*/
private String transferHash;
/**
* 系列的唯一Id
*/
private String seriesId;
/**
* 路由类型
*/
private String routerType;
/**
* 转让状态(0转让中 1转让成功 2转让失败 )
*/
private String transferStatus;
/**
* 错误码
*/
private String errorCode;
/**
* 错误信息
*/
private String errorMsg;
/**
* 创建时间
*/
private String createdAt;
/**
* 修改时间
*/
private String updatedAt;
@Override
public String toString(){
return JsonUtils.toJson(this);
}
private static final GalaxyTransferNftInfoBo obj = new GalaxyTransferNftInfoBo();
public static GalaxyTransferNftInfoBo getNew() {
try {
return (GalaxyTransferNftInfoBo) obj.clone();
} catch (CloneNotSupportedException e) {
return new GalaxyTransferNftInfoBo();
}
}
}
......@@ -20,9 +20,9 @@ import java.io.Serializable;
@Data
public class GalaxyBaseReqDto implements Serializable,Cloneable{
/**
* 路由类型(至信链zxinchain、以太坊eth)
* 路由类型(至信链zxinchain、百度链xuper)
*/
@ApiModelProperty(position = 1, required = true, value = "路由类型(至信链zxinchain、以太坊eth)")
@ApiModelProperty(position = 1, required = true, value = "路由类型(至信链zxinchain、百度链xuper)")
@NotBlank(message = "路由类型不能为空!")
private String routerType = GalaxyEnum.RouterTypeEnum.ZXINCHAIN.getCode();
......
package com.liquidnet.service.galaxy.dto.param;
import com.liquidnet.commons.lang.util.JsonUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: NFT转让结果查询
* @class: GalaxyNftTransferReqDto
* @Package com.liquidnet.service.galaxy.dto.param
* @Copyright: LightNet @ Copyright (c) 2022
* @date 2022/8/15 14:42
*/
@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;
@Override
public String toString(){
return JsonUtils.toJson(this);
}
private static final GalaxyNftTransferQueryReqDto obj = new GalaxyNftTransferQueryReqDto();
public static GalaxyNftTransferQueryReqDto getNew() {
try {
return (GalaxyNftTransferQueryReqDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new GalaxyNftTransferQueryReqDto();
}
}
}
package com.liquidnet.service.galaxy.dto.param;
import com.liquidnet.commons.lang.util.JsonUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: NFT转让结果查询
* @class: GalaxyNftTransferQueryRespDto
* @Package com.liquidnet.service.galaxy.dto.param;
* @Copyright: LightNet @ Copyright (c) 2022
* @date 2022/8/4 18:51
*/
@ApiModel(value = "GalaxyNftTransferQueryRespDto", description = "NFT转让结果查询")
@Data
public class GalaxyNftTransferQueryRespDto implements Serializable,Cloneable {
@ApiModelProperty(position = 1, required = true, value = "nft唯一id")
private String nftId;
@ApiModelProperty(position = 1, required = true, value = "拥有者用户ID")
private String ownerUserId;
@ApiModelProperty(position = 1, required = true, value = "拥有者地址")
private String ownerAddress;
@ApiModelProperty(position = 1, required = true, value = "转出者用户ID")
private String fromUserId;
@ApiModelProperty(position = 1, required = true, value = "转出者地址")
private String fromAddress;
@ApiModelProperty(position = 1, required = true, value = "转让时间")
private String transferTime;
@ApiModelProperty(position = 3, required = true, value = "路由类型")
private String routerType;
@ApiModelProperty(position = 4, required = true, value = "转让hash")
private String transferHash;
@ApiModelProperty(position = 5, required = true, value = "转让状态(-1初始化 0转让中 1转让成功 2转让失败 )")
private String transferStatus;
@Override
public String toString(){
return JsonUtils.toJson(this);
}
private static final GalaxyNftTransferQueryRespDto obj = new GalaxyNftTransferQueryRespDto();
public static GalaxyNftTransferQueryRespDto getNew() {
try {
return (GalaxyNftTransferQueryRespDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new GalaxyNftTransferQueryRespDto();
}
}
}
package com.liquidnet.service.galaxy.dto.param;
import com.liquidnet.commons.lang.util.JsonUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.io.Serializable;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: NFT转让
* @class: GalaxyNftTransferReqDto
* @Package com.liquidnet.service.galaxy.dto.param
* @Copyright: LightNet @ Copyright (c) 2022
* @date 2022/8/12 18:42
*/
@ApiModel(value = "GalaxyNftTransferReqDto", description = "NFT转让")
@Data
public class GalaxyNftTransferReqDto 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
*/
@ApiModelProperty(position = 1, required = true, value = "用户ID[30]")
@NotBlank(message = "用户ID不能为空!")
@Size(min = 1, max = 30, message = "用户ID限制2-30位且不能包含特殊字符")
private String userId;
/**
* 接收用户id
*/
@ApiModelProperty(position = 1, required = true, value = "接收用户ID[30]")
@NotBlank(message = "接收用户ID不能为空!")
@Size(min = 1, max = 30, message = "用户ID限制2-30位且不能包含特殊字符")
private String receiveUserId;
/**
* nftId
*/
@ApiModelProperty(position = 1, required = true, value = "nft唯一id")
@NotBlank(message = "nft唯一id不能为空!")
private String nftId;
/**
* reqTimestamp
*/
@ApiModelProperty(position = 3, required = true, value = "请求时间戳(格式为:2022-04-07 12:12:12)")
@NotBlank(message = "请求时间戳不能为空!")
private String reqTimestamp;
@Override
public String toString(){
return JsonUtils.toJson(this);
}
private static final GalaxyNftTransferReqDto obj = new GalaxyNftTransferReqDto();
public static GalaxyNftTransferReqDto getNew() {
try {
return (GalaxyNftTransferReqDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new GalaxyNftTransferReqDto();
}
}
}
package com.liquidnet.service.galaxy.dto.param;
import com.liquidnet.commons.lang.util.JsonUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: NFT转让返回
* @class: GalaxyNftTransferRespDto
* @Package com.liquidnet.service.galaxy.dto.param;
* @Copyright: LightNet @ Copyright (c) 2022
* @date 2022/8/12 18:51
*/
@ApiModel(value = "GalaxyNftTransferRespDto", description = "NFT转让结果")
@Data
public class GalaxyNftTransferRespDto implements Serializable,Cloneable {
@ApiModelProperty(position = 1, required = true, value = "nft唯一id")
private String nftId;
@ApiModelProperty(position = 1, required = true, value = "拥有者用户ID")
private String ownerUserId;
@ApiModelProperty(position = 1, required = true, value = "拥有者地址")
private String ownerAddress;
@ApiModelProperty(position = 1, required = true, value = "转出者用户ID")
private String fromUserId;
@ApiModelProperty(position = 1, required = true, value = "转出者地址")
private String fromAddress;
@ApiModelProperty(position = 1, required = true, value = "转让时间")
private String transferTime;
@ApiModelProperty(position = 3, required = true, value = "路由类型")
private String routerType;
@ApiModelProperty(position = 4, required = true, value = "转让hash")
private String transferHash;
@Override
public String toString(){
return JsonUtils.toJson(this);
}
private static final GalaxyNftTransferRespDto obj = new GalaxyNftTransferRespDto();
public static GalaxyNftTransferRespDto getNew() {
try {
return (GalaxyNftTransferRespDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new GalaxyNftTransferRespDto();
}
}
}
......@@ -20,9 +20,9 @@ import java.io.Serializable;
@ApiModel(value = "GalaxyQueryNftTradeListReqDto", description = "单个NFT交易信息查询")
@Data
public class GalaxyQueryNftTradeListReqDto extends GalaxyBaseReqDto implements Serializable,Cloneable{
@ApiModelProperty(position = 1, required = true, value = "NFT购买订单ID")
@ApiModelProperty(position = 1, required = true, value = "NFTId")
@NotBlank
private String nftOrderPayId;
private String nftId;
@Override
public String toString(){
......
......@@ -61,11 +61,28 @@ public class GalaxyQueryNftTradeListRespDto implements Serializable,Cloneable {
*/
@ApiModelProperty(position = 1, required = true, value = "链上成交时间")
private Long dealTimestamp;
/**
* 链上成交时间
*/
@ApiModelProperty(position = 1, required = true, value = "链上成交时间(北京时间)")
private String dealTimestampStr;
/**
* 交易类别, 1:发行 2:购买 3:转移 4:设置价格 5:设置状态
*/
@ApiModelProperty(position = 1, required = true, value = "交易类别, 1:发行 2:购买 3:转移 4:设置价格 5:设置状态")
private Integer txType;
private static final TransInfoDto obj = new TransInfoDto();
public static TransInfoDto getNew() {
try {
return (TransInfoDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new TransInfoDto();
}
}
}
@Override
......
package com.liquidnet.service.galaxy.dto.param;
import com.liquidnet.commons.lang.util.JsonUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: nft转让信息查询
* @class: GalaxyQueryNftInfoReqDto
* @Package com.liquidnet.service.galaxy.dto.param
* @Copyright: LightNet @ Copyright (c) 2022
* @date 2022/4/8 16:27
*/
@ApiModel(value = "GalaxyQueryTransNftInfoReqDto", description = "nft转让信息查询")
@Data
public class GalaxyQueryTransNftInfoReqDto extends GalaxyBaseReqDto implements Serializable,Cloneable{
@ApiModelProperty(position = 1, required = true, value = "NFTId")
@NotBlank
private String nftId;
@Override
public String toString(){
return JsonUtils.toJson(this);
}
private static final GalaxyQueryTransNftInfoReqDto obj = new GalaxyQueryTransNftInfoReqDto();
public static GalaxyQueryTransNftInfoReqDto getNew() {
try {
return (GalaxyQueryTransNftInfoReqDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new GalaxyQueryTransNftInfoReqDto();
}
}
}
package com.liquidnet.service.galaxy.dto.param;
import com.liquidnet.commons.lang.util.JsonUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: GalaxyQueryNftInfoRespDto
* @Package com.liquidnet.service.galaxy.dto.param
* @Copyright: LightNet @ Copyright (c) 2022
* @date 2022/4/8 16:27
*/
@ApiModel(value = "GalaxyQueryTransNftInfoRespDto", description = "NFT信息查询")
@Data
public class GalaxyQueryTransNftInfoRespDto{
/**
* nftId
*/
@ApiModelProperty(position = 1, required = true, value = "nftId")
private String nftId;
/**
* 所有者地址
*/
@ApiModelProperty(position = 1, required = true, value = "所有者地址")
private String ownerAddr;
/**
* 发行地址
*/
@ApiModelProperty(position = 1, required = true, value = "发行地址")
private String publishAddr;
/**
* 作品名字,中英文数字均可,不超过256个字符
*/
@ApiModelProperty(position = 1, required = true, value = "作品名字")
private String name;
/**
* 作品简介,500个字符以内
*/
@ApiModelProperty(position = 1, required = true, value = "作品简介")
private String desc;
/**
* 作品url,不超过2048个字符 疑问:应该是发行的1024吧?
*/
@ApiModelProperty(position = 1, required = true, value = "作品url")
private String url;
/**
* 预览图url
*/
@ApiModelProperty(position = 1, required = true, value = "预览图url")
private String displayUrl;
/**
* 交易时间
*/
@ApiModelProperty(position = 1, required = true, value = "交易时间")
private String tradeTime;
/**
* 交易hash
*/
@ApiModelProperty(position = 1, required = true, value = "交易hash")
private String tradeHash;
/**
* 转让状态(-1初始化 0转让中 1转让成功 2转让失败 )
*/
@ApiModelProperty(position = 1, required = true, value = "-1初始化 0转让中 1转让成功 2转让失败")
private String tradeStatus;
@Override
public String toString(){
return JsonUtils.toJson(this);
}
private static final GalaxyQueryTransNftInfoRespDto obj = new GalaxyQueryTransNftInfoRespDto();
public static GalaxyQueryTransNftInfoRespDto getNew() {
try {
return (GalaxyQueryTransNftInfoRespDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new GalaxyQueryTransNftInfoRespDto();
}
}
}
\ No newline at end of file
......@@ -24,6 +24,9 @@ public class GalaxyQueryUserTradeAllListReqDto extends GalaxyBaseReqDto implemen
@NotBlank(message = "区块链地址不能为空!")
private String blockChainAddress;
@ApiModelProperty(position = 1, required = true, value = "seriesId(可选,默认为0查询全部)")
private String seriesId = "0";
@Override
public String toString(){
return JsonUtils.toJson(this);
......
......@@ -14,6 +14,7 @@ import com.liquidnet.service.galaxy.dto.param.*;
*/
public interface IGalaxyTradeQueryService {
ResponseDto<GalaxyQueryNftInfoRespDto> queryNftInfo(GalaxyQueryNftInfoReqDto reqDto);
ResponseDto<GalaxyQueryTransNftInfoRespDto> queryTransNftInfo(GalaxyQueryTransNftInfoReqDto reqDto);
ResponseDto<GalaxyQueryNftTradeListRespDto> queryNftTradeList(GalaxyQueryNftTradeListReqDto reqDto);
ResponseDto<GalaxyQuerySeriesInfoRespDto> querySeriesInfo(GalaxyQuerySeriesInfoReqDto reqDto);
ResponseDto<GalaxyQueryUserSeriesNftListRespDto> queryUserSeriesNftList(GalaxyQueryUserSeriesNftListReqDto reqDto);
......
......@@ -25,4 +25,8 @@ public interface IGalaxyTradeService {
ResponseDto<GalaxyNftPublishAndBuyResultQueryRespDto> nftPublishAndBuyResultQuery(GalaxyNftPublishAndBuyResultQueryReqDto reqDto);
ResponseDto<GalaxyNftPublishAndBuyRouterBatchQueryRespDto> nftPublishAndBuyResultBatchQuery(GalaxyNftPublishAndBuyRouterBatchQueryReqDto reqDto);
ResponseDto<GalaxyNftTransferRespDto> nftTransfer(GalaxyNftTransferReqDto reqDto);
ResponseDto<GalaxyNftTransferQueryRespDto> nftTransferQuery(GalaxyNftTransferQueryReqDto reqDto);
}
......@@ -3,6 +3,8 @@ package com.liquidnet.service.goblin.constant;
public class GoblinRedisConst {
public static final String PREFIX = "goblin:";
/* ----------------------------------------------------------------- */
public static final String VALID_SMS_CODE_MOBILE = PREFIX.concat("valid:sms:code:mobile:");
/* ----------------------------------------------------------------- */
/**
* IOS商品价格集
* {goblin:bsc:lib:ios_products, JsonNode}
......@@ -187,13 +189,13 @@ public class GoblinRedisConst {
/**
* 我的藏品ID列表(首页)
* {goblin:u_d_art:${uid}, JsonUtils.toJson(List<String:artwork_id>)}
* {goblin:u_d_art:${uid}, List<String:artwork_id>}
*/
public static final String USER_DIGITAL_ARTWORK_IDS = PREFIX.concat("u_d_art_ids:");
/**
* 我的藏品信息
* {goblin:u_d_art:${artwork_id}, JsonUtils.toJson(com.liquidnet.service.goblin.dto.vo.GoblinDigitalArtworkVo)}
* {goblin:u_d_art:${artwork_id}, com.liquidnet.service.goblin.dto.vo.GoblinUserDigitalArtworkVo}
*/
public static final String USER_DIGITAL_ARTWORK = PREFIX.concat("u_d_art:");
......@@ -351,4 +353,23 @@ public class GoblinRedisConst {
public static final String GOBLIN_NUM_LIST = PREFIX.concat("nft:num:");//$key+":"+$skuId 根据skuId获取序号list
public static final String GOBLIN_NUM_DETAILS = PREFIX.concat("nft:num:details:");//$key+$num+$skuId 根据num+skuId获取DTO
/* ----------------------------------------------------------------- */
/**
* NFT用户安全配置
* {goblin:u_safe_c:${uid}, com.liquidnet.service.goblin.dto.GoblinUserSafeConfigDto}
*/
public static final String USER_SAFE_CONFIG = PREFIX.concat("u_safe_c:");
/**
* NFT转赠约束配置
* {goblin:nft_trans_conf, "${timeLimit},${routeType:1},${routeType:2}..."}
*/
public static final String NFT_TRANSFER_CONF = PREFIX.concat("nft_trans_conf");
/* ----------------------------------------------------------------- */
/* ----------------------------------------------------------------- */
/* ----------------------------------------------------------------- */
/* ----------------------------------------------------------------- */
/* ----------------------------------------------------------------- */
}
......@@ -220,7 +220,14 @@ public class GoblinStatusConst {
}
}
/**
* 数字藏品:转赠状态[PENDING|SUCCESS]
*/
public enum TransferState {
PENDING,
SUCCESS,
;
}
/* ----------------------------------------------------------------- */
}
package com.liquidnet.service.goblin.dto;
import com.liquidnet.commons.lang.util.JsonUtils;
import lombok.Data;
import java.io.Serializable;
/**
* 购买藏品、开启盲盒后,生成藏品队列消息体
*
* @author zhanggb
* Created by IntelliJ IDEA at 2022/3/31
*/
@Data
public class GoblinQueueBizArtworkGenDto implements Serializable, Cloneable {
private static final long serialVersionUID = 8267639695935038399L;
private String uid;
private String skuId;
private String orderId;
private Integer source;
private String fromArtId;
private static final GoblinQueueBizArtworkGenDto obj = new GoblinQueueBizArtworkGenDto();
public static GoblinQueueBizArtworkGenDto getNew() {
try {
return (GoblinQueueBizArtworkGenDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinQueueBizArtworkGenDto();
}
}
public String toJson() {
return JsonUtils.toJson(this);
}
}
package com.liquidnet.service.goblin.dto;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.util.DigestUtils;
import java.io.Serializable;
import java.nio.charset.StandardCharsets;
@ApiModel(value = "GoblinUserSafeConfigDto", description = "NFT:用户安全配置")
@Data
@JsonIgnoreProperties(value = {"uid"}, ignoreUnknown = true)
public class GoblinUserSafeConfigDto implements Serializable, Cloneable {
private static final long serialVersionUID = -141364364882594556L;
@ApiModelProperty(position = 11, value = "安全密码")
private String passwd;
private static final GoblinUserSafeConfigDto obj = new GoblinUserSafeConfigDto();
public static GoblinUserSafeConfigDto getNew() {
return obj.clone();
}
@Override
public GoblinUserSafeConfigDto clone() {
try {
return (GoblinUserSafeConfigDto) super.clone();
} catch (CloneNotSupportedException e) {
return new GoblinUserSafeConfigDto();
}
}
public boolean validPasswd(String saltPasswd) {
return this.passwd.equals(DigestUtils.md5DigestAsHex(saltPasswd.getBytes(StandardCharsets.UTF_8)));
}
}
......@@ -111,7 +111,7 @@ public class GoblinGoodsSkuInfoVo implements Serializable, Cloneable {
private LocalDateTime openingTime;
@ApiModelProperty(position = 33, value = "盲盒开启时限[单位秒]")
private Integer openingLimit;
@ApiModelProperty(position = 33, value = "NFT路由")
@ApiModelProperty(position = 33, value = "NFT路由[zxinchain-至信链|xuper-百度超级链]")
private String routeType;
@ApiModelProperty(position = 33, value = "NFT上传声明状态[0-待上传|1-已声明|2-声明失败|9-声明中]")
private Integer upchain;
......
......@@ -113,6 +113,13 @@ public class GoblinNftGoodsSkuInfoVo implements Serializable, Cloneable {
@ApiModelProperty(position = 72, value = "下个分段购开始时间,如果为null则没有")
private LocalDateTime nextSaleStartTime;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
@ApiModelProperty(position = 73, value = "第一个分批购开始时间")
private LocalDateTime firstSaleStartTime;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
@ApiModelProperty(position = 74, value = "第一个分批购结束时间")
private LocalDateTime firstSaleEndTime;
private static final GoblinNftGoodsSkuInfoVo obj = new GoblinNftGoodsSkuInfoVo();
public static GoblinNftGoodsSkuInfoVo getNew() {
......
package com.liquidnet.service.goblin.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.liquidnet.commons.lang.util.DateUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang.StringUtils;
import java.io.Serializable;
import java.time.LocalDateTime;
@ApiModel(value = "GoblinNftOrderArtworkInfoVo", description = "NFT订单中藏品信息")
@Data
public class GoblinNftOrderArtworkInfoVo implements Serializable, Cloneable {
private static final long serialVersionUID = 5307265664272864863L;
@ApiModelProperty(position = 10, value = "商品单品ID")
private String artworkId;
@ApiModelProperty(position = 11, value = "是否盲盒[0-否|1-是]")
private String unbox;
@ApiModelProperty(position = 12, value = "藏品状态,根据`unbox`区分盲盒来判断[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败|5-待收取]")
private Integer state;
@ApiModelProperty(position = 13, value = "转赠状态[PENDING|SUCCESS],为空代表未发生转赠")
private String transferState;
@ApiModelProperty(position = 14, value = "受赠人信息")
private String receiverUser;
@ApiModelProperty(position = 15, value = "藏品转赠时间[yyyy-MM-dd HH:mm:ss]")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime transferTime;
private static final GoblinNftOrderArtworkInfoVo obj = new GoblinNftOrderArtworkInfoVo();
public static GoblinNftOrderArtworkInfoVo getNew() {
return obj.clone();
}
@Override
public GoblinNftOrderArtworkInfoVo clone() {
try {
return (GoblinNftOrderArtworkInfoVo) super.clone();
} catch (CloneNotSupportedException e) {
return new GoblinNftOrderArtworkInfoVo();
}
}
public GoblinNftOrderArtworkInfoVo copy(GoblinUserDigitalArtworkVo source) {
if (null == source) return this;
this.setArtworkId(source.getArtworkId());
this.setState(source.getState());
this.setTransferState(source.getTransferState());
if (StringUtils.isNotEmpty(source.getTransferState())) {
this.setReceiverUser(source.getReceiverUser());
this.setTransferTime(source.getUpdatedAt());
}
return this;
}
}
......@@ -68,6 +68,9 @@ public class GoblinNftOrderDetailsVo implements Serializable, Cloneable {
@ApiModelProperty(value = " 混合售名称")
private String mixName;
@ApiModelProperty(value = "订单藏品信息")
GoblinNftOrderArtworkInfoVo artworkInfoVo;
private static final GoblinNftOrderDetailsVo obj = new GoblinNftOrderDetailsVo();
public static GoblinNftOrderDetailsVo getNew() {
......
......@@ -67,6 +67,9 @@ public class GoblinNftOrderVo implements Serializable, Cloneable {
@ApiModelProperty(value = "兑换码")
private String exCode;
@ApiModelProperty(value = "藏品ID")
private String artworkId;
@ApiModelProperty(value = "应付金额")
private BigDecimal priceTotal;
......
package com.liquidnet.service.goblin.dto.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.commons.lang.util.DateUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@ApiModel(value = "GoblinUserDigitalArtworkInfoVo", description = "我的藏品详情")
@Data
......@@ -33,7 +36,7 @@ public class GoblinUserDigitalArtworkInfoVo implements Serializable, Cloneable {
@ApiModelProperty(position = 18, value = "藏品生成时间[yyyy-MM-dd HH:mm:ss]")
private String generateTime;
@ApiModelProperty(position = 19, value = "获得方式[1-购买|2-兑换|3-赠送|5-赠|31-空投赠送]")
@ApiModelProperty(position = 19, value = "获得方式[1-购买|2-兑换|3-赠送|5-大美|6-转赠|31-空投赠送]")
private Integer source;
@ApiModelProperty(position = 20, value = "藏品状态,根据`unbox`区分盲盒来判断[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败|5-待收取]")
private Integer state;
......@@ -53,6 +56,23 @@ public class GoblinUserDigitalArtworkInfoVo implements Serializable, Cloneable {
private String skuId;
@ApiModelProperty(position = 27, value = "展示预览图片URL[256]")
private String skuWatchPic;
@ApiModelProperty(position = 27, value = "区块链路由[zxinchain-至信链|xuper-百度超级链]")
private String routeType;
@ApiModelProperty(position = 28, value = "转赠状态[PENDING|SUCCESS]")
private String transferState;
@ApiModelProperty(position = 25, value = "转赠允许时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime transferAllowTime;
@ApiModelProperty(position = 30, value = "系统当前时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime systime;
@ApiModelProperty(position = 31, value = "受赠人信息")
private String receiverUser;
@ApiModelProperty(position = 32, value = "藏品转赠时间[yyyy-MM-dd HH:mm:ss]")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime transferTime;
private static final GoblinUserDigitalArtworkInfoVo obj = new GoblinUserDigitalArtworkInfoVo();
......@@ -77,10 +97,12 @@ public class GoblinUserDigitalArtworkInfoVo implements Serializable, Cloneable {
this.setGenerateTime(source.getTradingAt());
this.setSource(source.getSource());
this.setState(source.getState());
// this.setAuthor();
// this.setPublisher();
this.setAuthor(source.getAuthor());
this.setPublisher(source.getPublisher());
// this.setDetails();
this.setSkuId(source.getSkuId());
this.setTransferState(source.getTransferState());
this.setReceiverUser(source.getReceiverUser());
return this;
}
}
......@@ -28,7 +28,7 @@ public class GoblinUserDigitalArtworkListVo implements Serializable, Cloneable {
private Integer editionSn;
@ApiModelProperty(position = 16, value = "藏品发行量")
private Integer edition;
@ApiModelProperty(position = 17, value = "获得方式[1-购买|2-兑换|3-赠送|5-赠|31-空投赠送]")
@ApiModelProperty(position = 17, value = "获得方式[1-购买|2-兑换|3-赠送|5-大美|6-转赠|31-空投赠送]")
private Integer source;
@ApiModelProperty(position = 18, value = "藏品状态,根据`unbox`区分盲盒来判断[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败|5-待收取]")
......@@ -37,7 +37,6 @@ public class GoblinUserDigitalArtworkListVo implements Serializable, Cloneable {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime createdAt;
@ApiModelProperty(position = 20, value = "是否盲盒[0-否|1-是]")
private String unbox;
@ApiModelProperty(position = 21, value = "盲盒开启时间")
......@@ -46,6 +45,13 @@ public class GoblinUserDigitalArtworkListVo implements Serializable, Cloneable {
@ApiModelProperty(position = 22, value = "创作者")
private String author;
@ApiModelProperty(position = 23, value = "区块链路由[zxinchain-至信链|xuper-百度超级链]")
private String routeType;
@ApiModelProperty(position = 24, value = "转赠状态[PENDING|SUCCESS]")
private String transferState;
@ApiModelProperty(position = 25, value = "转赠允许时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime transferAllowTime;
private static final GoblinUserDigitalArtworkListVo obj = new GoblinUserDigitalArtworkListVo();
......@@ -59,6 +65,7 @@ public class GoblinUserDigitalArtworkListVo implements Serializable, Cloneable {
}
public GoblinUserDigitalArtworkListVo copy(GoblinUserDigitalArtworkVo source) {
if (null == source) return this;
this.setArtworkId(source.getArtworkId());
// this.setName();
// this.setSubtitle();
......@@ -72,6 +79,7 @@ public class GoblinUserDigitalArtworkListVo implements Serializable, Cloneable {
// this.setOpeningTime();
this.setAuthor(source.getAuthor());
this.setTransferState(source.getTransferState());
return this;
}
}
......@@ -17,7 +17,7 @@ public class GoblinUserDigitalArtworkPageVo implements Cloneable {
@ApiModelProperty(position = 12, value = "藏品列表分页数据")
private PagedResult<GoblinUserDigitalArtworkListVo> pagedResult;
@ApiModelProperty(position = 13, value = "系统时间")
@ApiModelProperty(position = 13, value = "系统当前时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime systime;
......
......@@ -20,6 +20,9 @@ public class GoblinUserDigitalArtworkVo implements Serializable, Cloneable {
private String releaseAt;
private String tradingTxhash;
private String tradingAt;
private String receiverUid;
private String transferOrderId;
private String transferState;
private Integer source;
private Integer state;
private String delFlg;
......@@ -28,10 +31,11 @@ public class GoblinUserDigitalArtworkVo implements Serializable, Cloneable {
private LocalDateTime updatedAt;
private LocalDateTime deletedAt;
/* ---------------------- 冗余SPU信息 ---------------------- */
/* ---------------------- 冗余的关联信息 ---------------------- */
private String author;
private String publisher;
private String hitArtworkId;
private String receiverUser;
private static final GoblinUserDigitalArtworkVo obj = new GoblinUserDigitalArtworkVo();
......
package com.liquidnet.service.goblin.service;
import com.liquidnet.service.goblin.dto.vo.GoblinUserDigitalArtworkInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUserDigitalArtworkListVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUserDigitalArtworkPageVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUserDigitalArtworkVo;
import com.liquidnet.service.goblin.dto.vo.*;
public interface IGoblinUserDigitalArtworkService {
......@@ -14,4 +11,6 @@ public interface IGoblinUserDigitalArtworkService {
GoblinUserDigitalArtworkListVo unboxingForBuyOrExchange(String uid, GoblinUserDigitalArtworkVo userDigitalArtworkVo);
boolean accept(String uid, GoblinUserDigitalArtworkVo userDigitalArtworkVo);
boolean transfer(GoblinUserDigitalArtworkVo userDigitalArtworkVo, String routerType, String[] receiverArr);
}
package com.liquidnet.service.goblin.service;
public interface IGoblinUserSafeConfigService {
/**
* 设置安全密码(首次)
*
* @param passwd 安全密码:MD5(******)
* @param uid UID
* @return boolean:true|false
*/
boolean initSafePasswd(String passwd, String uid);
}
......@@ -11,6 +11,7 @@ public class CollectionUtil {
private static final HashMap<String, Object> STRING_OBJECT_HASH_MAP = new HashMap<>();
private static final HashMap<String, List<String>> STRING_LIST_HASH_MAP = new HashMap<>();
private static final HashMap<String, Integer> STRING_INTEGER_HASH_MAP = new HashMap<>();
private static final HashMap<String, Long> STRING_LONG_HASH_MAP = new HashMap<>();
private static final HashMap<String, BigDecimal> STRING_BIG_DECIMAL_HASH_MAP = new HashMap<>();
private static final HashMap<String, Map<String, Object>> STRING_MAP_HASH_MAP = new HashMap<>();
private static final LinkedList<String> STRING_LINKED_LIST = new LinkedList<>();
......@@ -42,6 +43,10 @@ public class CollectionUtil {
return (HashMap<String, Integer>) STRING_INTEGER_HASH_MAP.clone();
}
public static HashMap<String, Long> mapStringLong() {
return (HashMap<String, Long>) STRING_LONG_HASH_MAP.clone();
}
public static HashMap<String, BigDecimal> mapStringBigDecimal() {
return (HashMap<String, BigDecimal>) STRING_BIG_DECIMAL_HASH_MAP.clone();
}
......
......@@ -44,6 +44,17 @@ public abstract class AbstractRedisUtil {
// =============================common============================
/**
* 指定缓存失效时间
*
* @param key 键
* @param time 时间(秒)
* @return
*/
public boolean expireSet(String key, long time) {
return expire(this.fillingKey(key), time);
}
/**
* 指定缓存失效时间
*
......@@ -54,10 +65,10 @@ public abstract class AbstractRedisUtil {
private boolean expire(String key, long time) {
if (time > 0) {
this.getRedisConfig().getRedisTemplateByDb(this.getIndex(key)).expire(key, time, TimeUnit.SECONDS);
return this.getRedisConfig().getRedisTemplateByDb(this.getIndex(key)).expire(key, time, TimeUnit.SECONDS);
}
return true;
return false;
}
......
......@@ -32,8 +32,13 @@ public class MdbMessage implements Serializable, Cloneable {
private static final MdbMessage obj = new MdbMessage();
public static MdbMessage getNew() {
return obj.clone();
}
@Override
public MdbMessage clone() {
try {
return (MdbMessage) obj.clone();
return (MdbMessage) super.clone();
} catch (CloneNotSupportedException e) {
return new MdbMessage();
}
......
......@@ -42,8 +42,13 @@ public class SmsMessage implements Serializable, Cloneable {
private final static SmsMessage instance = new SmsMessage();
public static SmsMessage builder() {
return instance.clone();
}
@Override
public SmsMessage clone() {
try {
return (SmsMessage) instance.clone();
return (SmsMessage) super.clone();
} catch (CloneNotSupportedException e) {
return new SmsMessage();
}
......
......@@ -290,7 +290,7 @@ public class MQConst {
BIZ_ARTWORK_UPL("goblin:stream:biz_art:upl", "group.biz.artwork", "藏品上传声明"),
BIZ_ARTWORK_CLQ("goblin:stream:biz_art:clq", "group.biz.artwork", "藏品声明查询"),
BIZ_ARTWORK_GEN("goblin:stream:biz_art:gen", "group.biz.artwork", "藏品生成"),
BIZ_ARTWORK_TRANS_QUERY("goblin:stream:biz_art:trans_query", "group.biz.artwork", "藏品转赠查询"),
SQL_ARTWORK_GEN("goblin:stream:sql_art:gen", "group.biz.artwork", "藏品生成"),
GOBLIN_NFT_ORDER("goblin:stream:nftOrder:create", "group.nftOrder:create", "NFT订单处理"),
......@@ -329,7 +329,8 @@ public class MQConst {
SQL_NFT_TRADE_INFO("galaxy:stream:rk.sql.nftTradeInfo", "group.sql.nftTradeInfo", "交易信息"),
SQL_NFT_ORDER_FAIL_LOG("galaxy:stream:rk.sql.nftOrderFailLog", "group.sql.nftOrderFailLog", "交易发行购买失败记录"),
JSON_NFT_PUBLISH_AND_BUY("galaxy:stream:rk.json.nftPublishAndBuy", "group.json.nftPublishAndBuy", "NFT发行和购买"),
JSON_NFT_USER_REGISTER("galaxy:stream:rk.json.userRegister", "group.json.userRegister", "NFT用户注册");
JSON_NFT_USER_REGISTER("galaxy:stream:rk.json.userRegister", "group.json.userRegister", "NFT用户注册"),
JSON_NFT_TRANSFER("galaxy:stream:rk.json.nftTransfer", "group.json.nftTransfer", "NFT转让");
private final String key;
private final String group;
private final String desc;
......
......@@ -35,7 +35,7 @@
<dependency>
<groupId>com.baidu.xuper</groupId>
<artifactId>xasset-sdk-java</artifactId>
<version>1.0.4</version>
<version>1.0.7</version>
</dependency>
<dependency>
<groupId>com.baidu.xuper</groupId>
......
package com.baidu.xasset.client.base;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: BaseDef
* @Package com.baidu.xasset.client.base
* @Copyright: LightNet @ Copyright (c) 2022
* @date 2022/8/17 10:59
*/
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
public class BaseDef {
public static final int ERRNOSUCC = 0;
public static final int MAXLIMIT = 50;
public BaseDef() {
}
public static class ListAddrResp<T> {
public long requestId;
public int errNo;
public String errMsg;
public T list;
public ListAddrResp(long requestId, int errNo, String errMsg, T list) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
this.list = list;
}
}
public static class ListPageResp<T> {
public long requestId;
public int errNo;
public String errMsg;
public T list;
public int totalCnt;
public ListPageResp(long requestId, int errNo, String errMsg, T list, int totalCnt) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
this.list = list;
this.totalCnt = totalCnt;
}
public long getRequestId() {
return requestId;
}
public void setRequestId(long requestId) {
this.requestId = requestId;
}
public int getErrNo() {
return errNo;
}
public void setErrNo(int errNo) {
this.errNo = errNo;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public T getList() {
return list;
}
public void setList(T list) {
this.list = list;
}
public int getTotalCnt() {
return totalCnt;
}
public void setTotalCnt(int totalCnt) {
this.totalCnt = totalCnt;
}
}
public static class ListCursorResp<T> {
public long requestId;
public int errNo;
public String errMsg;
public T list;
public int hasMore;
public String cursor;
public ListCursorResp(long requestId, int errNo, String errMsg, T list, int hasMore, String cursor) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
this.list = list;
this.hasMore = hasMore;
this.cursor = cursor;
}
public long getRequestId() {
return requestId;
}
public void setRequestId(long requestId) {
this.requestId = requestId;
}
public int getErrNo() {
return errNo;
}
public void setErrNo(int errNo) {
this.errNo = errNo;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public T getList() {
return list;
}
public void setList(T list) {
this.list = list;
}
public int getHasMore() {
return hasMore;
}
public void setHasMore(int hasMore) {
this.hasMore = hasMore;
}
public String getCursor() {
return cursor;
}
public void setCursor(String cursor) {
this.cursor = cursor;
}
}
public static class Resp<T> {
public T apiResp;
public RequestRes res;
public Resp(T resp, RequestRes res) {
this.apiResp = resp;
this.res = res;
}
}
public static class BaseResp {
public long requestId;
public int errNo;
public String errMsg;
public BaseResp(long requestId, int errNo, String errMsg) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
}
}
public static class RequestRes {
public int httpCode;
public String reqUrl;
public String traceId;
public String body;
RequestRes(int httpCode, String reqUrl, String traceId, String body) {
this.httpCode = httpCode;
this.reqUrl = reqUrl;
this.traceId = traceId;
this.body = body;
}
}
}
package com.baidu.xasset.client.xasset;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: XassetDef
* @Package com.baidu.xasset.client.xasset
* @Copyright: LightNet @ Copyright (c) 2022
* @date 2022/8/17 11:52
*/
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.annotation.JSONField;
import com.baidu.xasset.client.base.BaseDef.RequestRes;
import java.util.Map;
public class XassetDef {
public static final int ASSETCATEART = 1;
public static final int ASSETCATECOLLECT = 2;
public static final int ASSETCATETICKET = 3;
public static final int ASSETCATEHOTEL = 4;
public XassetDef() {
}
public static class SceneQueryShardsResp {
public long requestId;
public int errNo;
public String errMsg;
public SceneShardMeta meta;
SceneQueryShardsResp(long requestId, int errNo, String errMsg, SceneShardMeta meta) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
this.meta = meta;
}
}
public static class SceneShardMeta {
public long assetId;
public long shardId;
public String ownerAddr;
public long price;
public int status;
public String txId;
public long ctime;
public String jumpLink;
public String title;
public Thumb[] thumb;
public JSONArray assetUrl;
public JSONArray imgDesc;
public String shortDesc;
public String createAddr;
SceneShardMeta(long assetId, long shardId, String ownerAddr, long price, int status, String txId, long ctime, String jumbLink, String title, Thumb[] thumb, JSONArray assetUrl, JSONArray imgDesc, String shortDesc, String createAddr) {
this.assetId = assetId;
this.shardId = shardId;
this.ownerAddr = ownerAddr;
this.price = price;
this.status = status;
this.txId = txId;
this.ctime = ctime;
this.jumpLink = jumbLink;
this.title = title;
this.thumb = thumb;
this.assetUrl = assetUrl;
this.imgDesc = imgDesc;
this.shortDesc = shortDesc;
this.createAddr = createAddr;
}
}
public static class HasAssetByAddrResp {
public long requestId;
public int errNo;
public String errMsg;
public Map<String, Integer> result;
HasAssetByAddrResp(long requestId, int errNo, String errMsg, Map<String, Integer> result) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
this.result = result;
}
}
public static class SceneShardInfo {
public long assetId;
public long shardId;
public String title;
public Thumb[] thumb;
public long ctime;
SceneShardInfo(long assetId, long shardId, String title, Thumb[] thumb, long ctime) {
this.assetId = assetId;
this.shardId = shardId;
this.title = title;
this.thumb = thumb;
this.ctime = ctime;
}
}
public static class AddrMeta {
public String addr;
public String token;
public long groupId;
AddrMeta(String addr, String token, long groupId) {
this.addr = addr;
this.token = token;
this.groupId = groupId;
}
}
public static class GetEvidenceInfoResp {
public long requestId;
public int errNo;
public String errMsg;
public String createAddr;
public String txId;
public JSONObject assetInfo;
public long cTime;
GetEvidenceInfoResp(long requestId, int errNo, String errMsg, String createAddr, String txId, JSONObject assetInfo, long cTime) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
this.createAddr = createAddr;
this.txId = txId;
this.assetInfo = assetInfo;
this.cTime = cTime;
}
}
public static class History {
long assetId;
int type;
long shardId;
long price;
String txId;
String from;
String to;
long ctime;
public History(long assetId, int type, long shardId, long price, String txId, String from, String to, long ctime) {
this.assetId = assetId;
this.type = type;
this.shardId = shardId;
this.price = price;
this.txId = txId;
this.from = from;
this.to = to;
this.ctime = ctime;
}
public long getAssetId() {
return assetId;
}
public void setAssetId(long assetId) {
this.assetId = assetId;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public long getShardId() {
return shardId;
}
public void setShardId(long shardId) {
this.shardId = shardId;
}
public long getPrice() {
return price;
}
public void setPrice(long price) {
this.price = price;
}
public String getTxId() {
return txId;
}
public void setTxId(String txId) {
this.txId = txId;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public long getCtime() {
return ctime;
}
public void setCtime(long ctime) {
this.ctime = ctime;
}
}
public static class ShardDiffInfo {
public long assetId;
public long shardId;
public int operate;
public String title;
public Thumb[] thumb;
public long ctime;
ShardDiffInfo(long assetId, long shardId, int operate, String title, Thumb[] thumb, long ctime) {
this.assetId = assetId;
this.shardId = shardId;
this.operate = operate;
this.title = title;
this.thumb = thumb;
this.ctime = ctime;
}
}
public static class ShardAssetInfo {
public String title;
public int assetCate;
public Thumb[] thumb;
public String shortDesc;
public String createAddr;
public long groupId;
ShardAssetInfo(String title, int assetCate, Thumb[] thumb, String shortDesc, String createAddr, long groupId) {
this.title = title;
this.assetCate = assetCate;
this.thumb = thumb;
this.shortDesc = shortDesc;
this.createAddr = createAddr;
this.groupId = groupId;
}
}
public static class ShardMeta {
public long assetId;
public long shardId;
public String ownerAddr;
public long uid;
public long price;
public int status;
public String txId;
public ShardAssetInfo assetInfo;
public long ctime;
ShardMeta(long assetId, long shardId, String ownerAddr, long uid, long price, int status, String txId, ShardAssetInfo assetInfo, long ctime) {
this.assetId = assetId;
this.shardId = shardId;
this.ownerAddr = ownerAddr;
this.uid = uid;
this.price = price;
this.status = status;
this.txId = txId;
this.assetInfo = assetInfo;
this.ctime = ctime;
}
}
public static class QueryShardsResp {
public long requestId;
public int errNo;
public String errMsg;
public ShardMeta meta;
QueryShardsResp(long requestId, int errNo, String errMsg, ShardMeta meta) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
this.meta = meta;
}
}
public static class GrantShardResp {
public long requestId;
public int errNo;
public String errMsg;
public long assetId;
public long shardId;
GrantShardResp(long requestId, int errNo, String errMsg, long assetId, long shardId) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
this.assetId = assetId;
this.shardId = shardId;
}
}
public static class Urls {
public String icon;
public String url1;
public String url2;
public String url3;
Urls(String icon, String url1, String url2, String url3) {
this.icon = icon;
this.url1 = url1;
this.url2 = url2;
this.url3 = url3;
}
}
public static class Thumb {
public Urls urls;
public String width;
public String height;
Thumb(Urls urls, String width, String height) {
this.urls = urls;
this.width = width;
this.height = height;
}
}
public static class AssetMeta {
public long assetId;
public int assetCate;
public String title;
public Thumb[] thumb;
public String shortDesc;
public String longDesc;
public JSONArray imgDesc;
public JSONArray assetUrl;
public int amount;
public long price;
public int status;
public String assetExt;
public String createAddr;
public long groupId;
public String txId;
AssetMeta(long assetId, int assetCate, String title, Thumb[] thumb, String shortDesc, String longDesc, JSONArray imgDesc, JSONArray assetUrl, int amount, long price, int status, String assetExt, String createAddr, long groupId, String txId) {
this.assetId = assetId;
this.assetCate = assetCate;
this.title = title;
this.thumb = thumb;
this.shortDesc = shortDesc;
this.longDesc = longDesc;
this.imgDesc = imgDesc;
this.assetUrl = assetUrl;
this.amount = amount;
this.price = price;
this.status = status;
this.assetExt = assetExt;
this.createAddr = createAddr;
this.groupId = groupId;
this.txId = txId;
}
}
public static class QueryAssetResp {
public long requestId;
public int errNo;
public String errMsg;
public AssetMeta meta;
QueryAssetResp(long requestId, int errNo, String errMsg, AssetMeta meta) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
this.meta = meta;
}
}
public static class CreateAssetResp {
public long requestId;
public int errNo;
public String errMsg;
public long assetId;
CreateAssetResp(long requestId, int errNo, String errMsg, long assetId) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
this.assetId = assetId;
}
}
public static class UploadFile {
public String link;
public GetStokenResp resp;
public RequestRes res;
UploadFile(String link, GetStokenResp resp, RequestRes res) {
this.link = link;
this.resp = resp;
this.res = res;
}
}
public static class AccessInfo {
public String bucket;
public String endPoint;
public String objectPath;
public String accessKeyId;
public String secreteAccessKey;
public String sessionToken;
public String createTime;
public String expiration;
AccessInfo(String bucket, String endPoint, String objectPath, String accessKeyId, String secreteAccessKey, String sessionToken, String createTime, String expiration) {
this.bucket = bucket;
this.endPoint = endPoint;
this.objectPath = objectPath;
this.accessKeyId = accessKeyId;
this.secreteAccessKey = secreteAccessKey;
this.sessionToken = sessionToken;
this.createTime = createTime;
this.expiration = expiration;
}
}
public static class GetStokenResp {
public long requestId;
public int errNo;
public String errMsg;
public AccessInfo accessInfo;
GetStokenResp(long requestId, int errNo, String errMsg, AccessInfo accessInfo) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
this.accessInfo = accessInfo;
}
}
public static class GetAddrByUnionIdResp {
public long requestId;
public int errNo;
public String errMsg;
public String address;
GetAddrByUnionIdResp(long requestId, int errNo, String errMsg, String address) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
this.address = address;
}
}
public static class BdBoxRegisterResp {
public long requestId;
public int errNo;
public String errMsg;
public String address;
public String mnemonic;
public int isNew;
BdBoxRegisterResp(long requestId, int errNo, String errMsg, String address, String mnemonic, int isNew) {
this.requestId = requestId;
this.errNo = errNo;
this.errMsg = errMsg;
this.address = address;
this.mnemonic = mnemonic;
this.isNew = isNew;
}
}
public static class AssetInfo {
@JSONField(
name = "asset_cate"
)
public int assetCate;
@JSONField(
name = "title"
)
public String title;
@JSONField(
name = "thumb"
)
public String[] thumb;
@JSONField(
name = "short_desc"
)
public String shortDesc;
@JSONField(
name = "img_desc"
)
public String[] imgDesc;
@JSONField(
name = "asset_url"
)
public String[] assetUrl;
@JSONField(
name = "long_desc"
)
public String longDesc;
@JSONField(
name = "asset_ext"
)
public String assetExt;
@JSONField(
name = "group_id"
)
public long groupId;
public AssetInfo(int assetCate, String title, String[] thumb, String shortDesc, String[] imgDesc, String[] assetUrl, String longDesc, String assetExt, long groupId) {
this.assetCate = assetCate;
this.title = title;
this.thumb = thumb;
this.shortDesc = shortDesc;
this.imgDesc = imgDesc;
this.assetUrl = assetUrl;
this.longDesc = longDesc;
this.assetExt = assetExt;
this.groupId = groupId;
}
}
}
......@@ -42,13 +42,13 @@ public class XuperConfig {
@PostConstruct
public void init(){
long _appId = Long.parseLong(appId);
//生产
String ak = accessKeyID;
String sk = secretAccessKey;
//测试环境
// String ak = MD5Utils.md5(accessKeyID);
// String sk = MD5Utils.md5(secretAccessKey);
// //测试环境
// String ak2 = MD5Utils.md5(accessKeyID);
// String sk2 = MD5Utils.md5(secretAccessKey);
// System.out.println("test==ak=="+ak2);
// System.out.println("test==sk=="+sk2);
Config.XassetCliConfig cfg = new Config.XassetCliConfig();
cfg.setCredentials(_appId, ak, sk);
cfg.setEndPoint(nftApiUrl);
......
......@@ -25,7 +25,7 @@ public class Xuper010QuerySdsRespDto {
public String ownerAddr;
public long uid;
public long price;
public int status;
public int status; //0:已上链 1:授予中 4:转移中 5: 核销中 6: 已核销 10:异常详情参考错误码和状态码
public String txId;
public ShardAssetInfo assetInfo;
public long ctime;
......
......@@ -16,9 +16,11 @@ public class Xuper011ListSdsByAddrReqDto {
//要拉取的区块链账户地址
private String addr = "";
//要拉取页数,第一页为1
private int page = 1;
private Integer page = 1;
//每页拉取数量,默认20,最大50(可选)
private int limit = 50;
private Integer limit = 50;
//资产id
private Long assetId;
private static final Xuper011ListSdsByAddrReqDto obj = new Xuper011ListSdsByAddrReqDto();
public static Xuper011ListSdsByAddrReqDto getNew() {
......
......@@ -6,7 +6,7 @@ import lombok.Data;
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: 拉取数字商品历史登记记录
* @class: Xuper001GetStokenReqDto
* @class: Xuper013HistoryReqDto
* @Package com.liquidnet.common.third.xuper.dto
* @Copyright: LightNet @ Copyright (c) 2022
* @date 2022/4/18 15:10
......@@ -14,11 +14,15 @@ import lombok.Data;
@Data
public class Xuper013HistoryReqDto {
//资产id
private long assetId;
private Long assetId;
//要拉取页数,第一页为1
private int page = 1;
private Integer page = 1;
//每页拉取数量,默认20,最大50(可选)
private int limit = 20;
private Integer limit = 20;
/**
* 碎片id
*/
private Long shardId;
private static final Xuper013HistoryReqDto obj = new Xuper013HistoryReqDto();
public static Xuper013HistoryReqDto getNew() {
......
......@@ -8,21 +8,20 @@ import java.util.ArrayList;
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: 拉取数字商品历史登记记录
* @class: Xuper001GetStokenReqDto
* @class: Xuper013HistoryRespDto
* @Package com.liquidnet.common.third.xuper.dto
* @Copyright: LightNet @ Copyright (c) 2022
* @date 2022/4/18 15:10
* @date 2022/8/12 17:50
*/
@Data
public class Xuper013HistoryRespDto {
public long requestId;
public int errNo;
public String errMsg;
public ArrayList<AssetInfo> list;
public ArrayList<History> list;
public int totalCnt;
@Data
public static class AssetInfo {
public static class History {
public long assetId;
public long type;
public long shardId;
......@@ -31,6 +30,70 @@ public class Xuper013HistoryRespDto {
public String from;
public String to;
public long ctime;
public long getAssetId() {
return assetId;
}
public void setAssetId(long assetId) {
this.assetId = assetId;
}
public long getType() {
return type;
}
public void setType(long type) {
this.type = type;
}
public long getShardId() {
return shardId;
}
public void setShardId(long shardId) {
this.shardId = shardId;
}
public long getPrice() {
return price;
}
public void setPrice(long price) {
this.price = price;
}
public String getTxId() {
return txId;
}
public void setTxId(String txId) {
this.txId = txId;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public long getCtime() {
return ctime;
}
public void setCtime(long ctime) {
this.ctime = ctime;
}
}
......
......@@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.type.TypeReference;
import com.liquidnet.common.third.xuper.config.XuperConfig;
import com.liquidnet.common.third.xuper.constant.XuperErrorEnum;
import com.liquidnet.common.third.xuper.dto.*;
import com.liquidnet.common.third.xuper.exception.XupterException;
import com.liquidnet.commons.lang.util.JsonUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -62,13 +61,13 @@ public class XuperSdkUtil {
XassetDef.UploadFile uploadFile = getAsset().uploadFile(account, fileName, filePath, dataByte, property);
BaseDef.RequestRes requestRes = uploadFile.res;
if(requestRes.httpCode==200){
log.debug("xuperUploadFile resp : "+ JsonUtils.toJson(uploadFile));
log.info("xuperUploadFile resp : "+ JsonUtils.toJson(uploadFile));
respDto = JsonUtils.fromJson(JsonUtils.toJson(uploadFile),new TypeReference<XuperUploadFileRespDto>(){});
}
log.debug("xuperUploadFile resp : "+ JsonUtils.toJson(respDto));
log.info("xuperUploadFile resp : "+ JsonUtils.toJson(respDto));
}catch(Exception e){
log.error("error msg "+e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -88,10 +87,10 @@ public class XuperSdkUtil {
respDto.setPriKeyStr(acc.getKeyPair().getJSONPrivateKey());
respDto.setAddress(acc.getAddress());
respDto.setMnemonic(acc.getMnemonic());
log.debug("xuper000CreateAccount resp : "+ JsonUtils.toJson(respDto));
log.info("xuper000CreateAccount resp : "+ JsonUtils.toJson(respDto));
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -106,19 +105,19 @@ public class XuperSdkUtil {
try{
Account acc = this.getAccount(reqDto.getMnemonic());
BaseDef.Resp<XassetDef.GetStokenResp> getStokenResp = getAsset().getStoken(acc);
log.debug("pubKeyStr ===> {}",acc.getKeyPair().getJSONPublicKey());
log.debug("priKeyStr ===> {}",acc.getKeyPair().getJSONPrivateKey());
log.debug("address ===> {}",acc.getAddress());
log.debug("address ===> {}",acc.getMnemonic());
log.info("pubKeyStr ===> {}",acc.getKeyPair().getJSONPublicKey());
log.info("priKeyStr ===> {}",acc.getKeyPair().getJSONPrivateKey());
log.info("address ===> {}",acc.getAddress());
log.info("address ===> {}",acc.getMnemonic());
BaseDef.RequestRes requestRes = getStokenResp.res;
if(requestRes.httpCode==200){
log.debug("xuper001GetStoken resp : "+ JsonUtils.toJson(getStokenResp));
log.debug("xuper001GetStoken apiResp : "+ JsonUtils.toJson(getStokenResp.apiResp));
log.info("xuper001GetStoken resp : "+ JsonUtils.toJson(getStokenResp));
log.info("xuper001GetStoken apiResp : "+ JsonUtils.toJson(getStokenResp.apiResp));
respDto = JsonUtils.fromJson(JsonUtils.toJson(getStokenResp.apiResp),new TypeReference<Xuper001GetStokenRespDto>(){});
}
}catch(Exception e){
log.error("error msg "+e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -158,13 +157,13 @@ public class XuperSdkUtil {
BaseDef.Resp<XassetDef.CreateAssetResp> createAssetResp = getAsset().createAsset(account, amount, assetInfo, userId, price);
BaseDef.RequestRes requestRes = createAssetResp.res;
if(requestRes.httpCode==200){
log.debug("xuper002CreateAsset resp : "+ JsonUtils.toJson(createAssetResp));
log.debug("xuper002CreateAsset apiResp : "+ JsonUtils.toJson(createAssetResp.apiResp));
log.info("xuper002CreateAsset resp : "+ JsonUtils.toJson(createAssetResp));
log.info("xuper002CreateAsset apiResp : "+ JsonUtils.toJson(createAssetResp.apiResp));
respDto = JsonUtils.fromJson(JsonUtils.toJson(createAssetResp.apiResp),new TypeReference<Xuper002CreateAssetRespDto>(){});
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -206,13 +205,13 @@ public class XuperSdkUtil {
BaseDef.Resp<BaseDef.BaseResp> alterAssetResp = getAsset().alterAsset(account, assetId, amount, assetInfo, price);
BaseDef.RequestRes requestRes = alterAssetResp.res;
if(requestRes.httpCode==200){
log.debug("xuper003AlterAsset resp : "+ JsonUtils.toJson(alterAssetResp));
log.debug("xuper003AlterAsset apiResp : "+ JsonUtils.toJson(alterAssetResp.apiResp));
log.info("xuper003AlterAsset resp : "+ JsonUtils.toJson(alterAssetResp));
log.info("xuper003AlterAsset apiResp : "+ JsonUtils.toJson(alterAssetResp.apiResp));
respDto = JsonUtils.fromJson(JsonUtils.toJson(alterAssetResp.apiResp),new TypeReference<Xuper003AlterAssetRespDto>(){});
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -233,15 +232,15 @@ public class XuperSdkUtil {
int isEvidence = 0;
BaseDef.Resp<BaseDef.BaseResp> publishAssetResp = getAsset().publishAsset(account, assetId, isEvidence);
log.debug("xuper004PublishAsset resp : "+ JsonUtils.toJson(publishAssetResp));
log.info("xuper004PublishAsset resp : "+ JsonUtils.toJson(publishAssetResp));
BaseDef.RequestRes requestRes = publishAssetResp.res;
if(requestRes.httpCode==200){
log.debug("xuper004PublishAsset apiResp : "+ JsonUtils.toJson(publishAssetResp.apiResp));
log.info("xuper004PublishAsset apiResp : "+ JsonUtils.toJson(publishAssetResp.apiResp));
respDto = JsonUtils.fromJson(JsonUtils.toJson(publishAssetResp.apiResp),new TypeReference<Xuper004PublishAssetRespDto>(){});
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -257,15 +256,15 @@ public class XuperSdkUtil {
//资产id
long assetId = reqDto.getAssetId();
BaseDef.Resp<XassetDef.QueryAssetResp> queryAssetResp = getAsset().queryAsset(assetId);
log.debug("xuper005QueryAsset resp : "+ JsonUtils.toJson(queryAssetResp));
log.info("xuper005QueryAsset resp : "+ JsonUtils.toJson(queryAssetResp));
BaseDef.RequestRes requestRes = queryAssetResp.res;
if(requestRes.httpCode==200){
log.debug("xuper005QueryAsset apiResp : "+ JsonUtils.toJson(queryAssetResp.apiResp));
log.info("xuper005QueryAsset apiResp : "+ JsonUtils.toJson(queryAssetResp.apiResp));
respDto = JsonUtils.fromJson(JsonUtils.toJson(queryAssetResp.apiResp),new TypeReference<Xuper005QueryAssetRespDto>(){});
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -288,15 +287,15 @@ public class XuperSdkUtil {
int limit = reqDto.getLimit();
BaseDef.Resp<BaseDef.ListPageResp> listPageResp = getAsset().listAssetsByAddr(status, addr, page, limit);
log.debug("xuper006ListAssetByAddr resp : "+ JsonUtils.toJson(listPageResp));
log.info("xuper006ListAssetByAddr resp : "+ JsonUtils.toJson(listPageResp));
BaseDef.RequestRes requestRes = listPageResp.res;
if(requestRes.httpCode==200){
log.debug("xuper006ListAssetByAddr apiResp : "+ JsonUtils.toJson(listPageResp.apiResp));
log.info("xuper006ListAssetByAddr apiResp : "+ JsonUtils.toJson(listPageResp.apiResp));
respDto = JsonUtils.fromJson(JsonUtils.toJson(listPageResp.apiResp),new TypeReference<Xuper006ListAssetByAddrRespDto>(){});
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -323,15 +322,15 @@ public class XuperSdkUtil {
long price = reqDto.getPrice();
BaseDef.Resp<XassetDef.GrantShardResp> grantShardResp = getAsset().grantShard(account, assetId, shardId, toAddr, toUserId, price);
log.debug("xuper007GrantShard resp : "+ JsonUtils.toJson(grantShardResp));
log.info("xuper007GrantShard resp : "+ JsonUtils.toJson(grantShardResp));
BaseDef.RequestRes requestRes = grantShardResp.res;
if(requestRes.httpCode==200){
log.debug("xuper007GrantShard apiResp : "+ JsonUtils.toJson(grantShardResp.apiResp));
log.info("xuper007GrantShard apiResp : "+ JsonUtils.toJson(grantShardResp.apiResp));
respDto = JsonUtils.fromJson(JsonUtils.toJson(grantShardResp.apiResp),new TypeReference<Xuper007GrantShardRespDto>(){});
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -358,15 +357,15 @@ public class XuperSdkUtil {
long price = reqDto.getPrice();
BaseDef.Resp<BaseDef.BaseResp> transferShardResp = getAsset().transferShard(account, assetId, shardId, toAddr, toUserId, price);
log.debug("xuper008TransferShard resp : "+ JsonUtils.toJson(transferShardResp));
log.info("xuper008TransferShard resp : "+ JsonUtils.toJson(transferShardResp));
BaseDef.RequestRes requestRes = transferShardResp.res;
if(requestRes.httpCode==200){
log.debug("xuper008TransferShard apiResp : "+ JsonUtils.toJson(transferShardResp.apiResp));
log.info("xuper008TransferShard apiResp : "+ JsonUtils.toJson(transferShardResp.apiResp));
respDto = JsonUtils.fromJson(JsonUtils.toJson(transferShardResp.apiResp),new TypeReference<Xuper008TransferShardRespDto>(){});
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -388,15 +387,15 @@ public class XuperSdkUtil {
//碎片id
long shardId = 123;
BaseDef.Resp<BaseDef.BaseResp> consumeShardResp = getAsset().consumeShard(cAccount, uAccount, assetId, shardId);
log.debug("xuper009Consume resp : "+ JsonUtils.toJson(consumeShardResp));
log.info("xuper009Consume resp : "+ JsonUtils.toJson(consumeShardResp));
BaseDef.RequestRes requestRes = consumeShardResp.res;
if(requestRes.httpCode==200){
log.debug("xuper009Consume apiResp : "+ JsonUtils.toJson(consumeShardResp.apiResp));
log.info("xuper009Consume apiResp : "+ JsonUtils.toJson(consumeShardResp.apiResp));
respDto = JsonUtils.fromJson(JsonUtils.toJson(consumeShardResp.apiResp),new TypeReference<Xuper009ConsumeRespDto>(){});
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -414,15 +413,15 @@ public class XuperSdkUtil {
//碎片id
long shardId = reqDto.getShardId();
BaseDef.Resp<XassetDef.QueryShardsResp> queryShardsResp = getAsset().queryShards(assetId, shardId);
log.debug("xuper010QuerySds resp : "+ JsonUtils.toJson(queryShardsResp));
log.info("xuper010QuerySds resp : "+ JsonUtils.toJson(queryShardsResp));
BaseDef.RequestRes requestRes = queryShardsResp.res;
if(requestRes.httpCode==200){
log.debug("xuper010QuerySds apiResp : "+ JsonUtils.toJson(queryShardsResp.apiResp));
log.info("xuper010QuerySds apiResp : "+ JsonUtils.toJson(queryShardsResp.apiResp));
respDto = JsonUtils.fromJson(JsonUtils.toJson(queryShardsResp.apiResp),new TypeReference<Xuper010QuerySdsRespDto>(){});
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -441,16 +440,19 @@ public class XuperSdkUtil {
int page = reqDto.getPage();
//每页拉取数量,默认20,最大50(可选)
int limit = reqDto.getLimit();
BaseDef.Resp<BaseDef.ListPageResp> listPageResp = getAsset().listShardsAddr(addr, page, limit);
log.debug("xuper011ListSdsByAddr resp : "+ JsonUtils.toJson(listPageResp));
//资产id
long assetId = reqDto.getAssetId();
BaseDef.Resp<BaseDef.ListPageResp> listPageResp = getAsset().listShardsByAddr(addr, page, limit,assetId);
log.info("xuper011ListSdsByAddr resp : "+ JsonUtils.toJson(listPageResp));
BaseDef.RequestRes requestRes = listPageResp.res;
if(requestRes.httpCode==200){
log.debug("xuper011ListSdsByAddr apiResp : "+ JsonUtils.toJson(listPageResp.apiResp));
log.info("xuper011ListSdsByAddr apiResp : "+ JsonUtils.toJson(listPageResp.apiResp));
respDto = JsonUtils.fromJson(JsonUtils.toJson(listPageResp.apiResp),new TypeReference<Xuper011ListSdsByAddrRespDto>(){});
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -478,7 +480,7 @@ public class XuperSdkUtil {
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -497,7 +499,10 @@ public class XuperSdkUtil {
int page = reqDto.getPage();
//每页拉取数量,默认20,最大50(可选)
int limit = reqDto.getLimit();
BaseDef.Resp<BaseDef.ListPageResp> listPageResp = getAsset().history(assetId, page, limit);
//碎片id
long shardId = reqDto.getShardId();
BaseDef.Resp<BaseDef.ListPageResp> listPageResp = getAsset().history(assetId, page, limit,shardId);
log.info("xuper013History resp : "+ JsonUtils.toJson(listPageResp));
BaseDef.RequestRes requestRes = listPageResp.res;
if(requestRes.httpCode==200){
......@@ -506,7 +511,7 @@ public class XuperSdkUtil {
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -532,7 +537,7 @@ public class XuperSdkUtil {
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......@@ -556,7 +561,7 @@ public class XuperSdkUtil {
}
}catch(Exception e){
log.error(e.getMessage(),e);
XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
return XuperResponseDto.failure(XuperErrorEnum.SERVER_INNER_ERROR.getCode(),XuperErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return XuperResponseDto.success(respDto);
}
......
......@@ -8,6 +8,7 @@ import com.liquidnet.common.third.zxlnft.exception.ZxlNftException;
import com.liquidnet.common.third.zxlnft.service.WalletSdkService;
import com.liquidnet.commons.lang.util.BeanUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.UUIDUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.NameValuePair;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -59,6 +60,7 @@ public class ZxlnftBiz {
commonHeader.add("Signature-Time", resp.getSignData().getSignatureTime());
commonHeader.add("Nonce", resp.getSignData().getNonce());
commonHeader.add("Content-Type", "application/json;charset=utf-8");
commonHeader.add("Cloud-Trace-Id", UUIDUtil.randomUUID());
log.debug("buildHeader ---> {}",JsonUtils.toJson(commonHeader));
}
......@@ -79,6 +81,7 @@ public class ZxlnftBiz {
commonHeader.add("Signature-Time", resp.getSignData().getSignatureTime());
commonHeader.add("Nonce", resp.getSignData().getNonce());
commonHeader.add("Content-Type", "application/json;charset=utf-8");
commonHeader.add("Cloud-Trace-Id", UUIDUtil.randomUUID());
log.debug("buildPlatFormHeader ---> {}",JsonUtils.toJson(commonHeader));
}
......@@ -90,7 +93,7 @@ public class ZxlnftBiz {
* 构造返回结果
*/
resp = this.buildNftRespObj(response,tClass,true);
log.info(tClass.getName()+"--->>> return result : {} ",resp.toString());
// log.info(tClass.getName()+"--->>> return result : {} ",resp.toString());
} catch (ZxlNftException e){
log.error("buildNftRespObj biz error response: {}", JsonUtils.toJson(response),e);
throw new ZxlNftException(e.getCode(),e.getMsg());
......
......@@ -212,6 +212,7 @@ public class ZxlnftConstant {
* NFT 转移(方案二)
*/
public static String ZXL_NFT_046_TRANSFER_URL = "/api/v1/nft/transfer";
public static String ZXL_NFT_046_TRANSFER_URL_V2 = "/api/v2/nft/transfer";
/**
* NFT 同名转移(方案一)
*/
......
......@@ -334,6 +334,13 @@ public interface ZxlnftSdkService {
*/
Nft046TransferResp nft046Transfer(Nft046TransferReq req);
/**
* 46.NFT 转移 v2
* @param req
* @return
*/
Nft046TransferResp nft046TransferV2(Nft046TransferReq req);
/**
* 47.NFT 同名转移
* @param req
......
......@@ -210,7 +210,7 @@ public class WalletSdkServiceImpl implements WalletSdkService {
}catch (Exception e) {
log.error("pubKey2Address error",e);
}
log.debug("pubKey2Address--->>> response : {} ",response);
log.info("pubKey2Address--->>> response : {} ",response);
if (StringUtils.isEmpty(response)) {
return null;
......
......@@ -2,16 +2,13 @@ package com.liquidnet.common.third.zxlnft.service.impl;
import com.liquidnet.common.third.zxlnft.biz.ZxlnftBiz;
import com.liquidnet.common.third.zxlnft.config.ZxlnftConfig;
import com.liquidnet.common.third.zxlnft.constant.ZxlErrorEnum;
import com.liquidnet.common.third.zxlnft.constant.ZxlnftConstant;
import com.liquidnet.common.third.zxlnft.dto.nft.*;
import com.liquidnet.common.third.zxlnft.exception.ZxlNftException;
import com.liquidnet.common.third.zxlnft.service.ZxlnftSdkService;
import com.liquidnet.commons.lang.util.BeanUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
......@@ -1088,6 +1085,7 @@ public class ZxlnftSdkServiceImpl implements ZxlnftSdkService
@Override
public Nft035PublishResultResp nft035PublishResult(Nft035PublishResultReq req) {
zxlnftBiz.buildPlatFormHeader(commonHeader);
log.info("nft035PublishResult header ---> {}", JsonUtils.toJson(commonHeader));
String requestUrl = zxlnftConfig.getNftApiUrl() + ZxlnftConstant.ZXL_NFT_035_PUBLISH_RESULT_URL;
log.info("nft035PublishResult--->>> request url : {} body : {} ",requestUrl, req.toString());
......@@ -1166,14 +1164,14 @@ public class ZxlnftSdkServiceImpl implements ZxlnftSdkService
}catch (Exception e) {
log.error("nft037AddressList error",e);
}
log.info("nft037AddressList--->>> response : {} ",response);
log.warn("nft037AddressList--->>> response : {} ",response);
/**
* 构造返回结果
*/
Nft037AddressListResp resp = zxlnftBiz.buildNftRespObj(response,Nft037AddressListResp.class);
log.info("nft037AddressList--->>> return result : {} ",resp.toString());
log.warn("nft037AddressList--->>> return result : {} ",resp.toString());
return resp;
}
......@@ -1364,6 +1362,7 @@ public class ZxlnftSdkServiceImpl implements ZxlnftSdkService
@Override
public Nft044BuyResultResp nft044BuyResult(Nft044BuyResultReq req) {
zxlnftBiz.buildPlatFormHeader(commonHeader);
log.info("nft044BuyResult header ---> {}", JsonUtils.toJson(commonHeader));
String requestUrl = zxlnftConfig.getNftApiUrl() + ZxlnftConstant.ZXL_NFT_044_BUY_RESULT_URL;
log.info("nft044BuyResult--->>> request url : {} body : {} ",requestUrl, req.toString());
......@@ -1452,6 +1451,35 @@ public class ZxlnftSdkServiceImpl implements ZxlnftSdkService
return resp;
}
@Override
public Nft046TransferResp nft046TransferV2(Nft046TransferReq req) {
zxlnftBiz.buildPlatFormHeader(commonHeader);
//构造请求参数
String reqJsonStr = BeanUtil.convertBeanToJsonString(req);
String requestUrl = zxlnftConfig.getNftApiUrl() + ZxlnftConstant.ZXL_NFT_046_TRANSFER_URL_V2;
log.info("nft046TransferV2--->>> request url : {} body : {} ",requestUrl, reqJsonStr);
String response = null;
try {
response = HttpUtil.postJson(requestUrl,reqJsonStr,commonHeader);
} catch(HttpClientErrorException e) {
log.error("nft046TransferV2 error", e);
}catch (Exception e) {
log.error("nft046TransferV2 error",e);
}
log.info("nft046TransferV2--->>> response : {} ",response);
/**
* 构造返回结果
*/
Nft046TransferResp resp = zxlnftBiz.buildNftRespObj(response,Nft046TransferResp.class);
log.info("nft046TransferV2--->>> return result : {} ",resp.toString());
return resp;
}
@Override
public Nft047SelfTransferResp nft047SelfTransfer(Nft047SelfTransferReq req) {
zxlnftBiz.buildPlatFormHeader(commonHeader);
......
......@@ -8,7 +8,6 @@ import com.liquidnet.common.third.zxlnft.dto.nft.*;
import com.liquidnet.common.third.zxlnft.exception.ZxlNftException;
import com.liquidnet.common.third.zxlnft.service.ZxlnftSdkService;
import com.liquidnet.commons.lang.util.BeanUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -1075,6 +1074,25 @@ public class ZxlnftSdkUtil {
return ZxlnftResponseDto.success(respDto);
}
public ZxlnftResponseDto<Nft046TransferRespDto> nft046TransferV2(Nft046TransferReqDto reqDto){
/**
* 构造请求
*/
Nft046TransferReq req = Nft046TransferReq.getNew();
BeanUtil.copy(reqDto,req);
Nft046TransferRespDto respDto = Nft046TransferRespDto.getNew();
try{
Nft046TransferResp resp = zxlnftSdkService.nft046TransferV2(req);
BeanUtil.copy(resp,respDto);
}catch(ZxlNftException e){
return ZxlnftResponseDto.failure(e.getCode()+","+e.getMessage());
}catch(Exception e){
return ZxlnftResponseDto.failure(ZxlErrorEnum.SERVER_INNER_ERROR.getCode(),ZxlErrorEnum.SERVER_INNER_ERROR.getMsg());
}
return ZxlnftResponseDto.success(respDto);
}
public ZxlnftResponseDto<Nft047SelfTransferRespDto> nft047SelfTransfer(Nft047SelfTransferReqDto reqDto){
/**
* 构造请求
......
......@@ -95,6 +95,11 @@ public class GoblinNftOrder implements Serializable, Cloneable {
*/
private String exCode;
/**
* 藏品ID
*/
private String artworkId;
/**
* 应付金额
*/
......
......@@ -80,7 +80,12 @@ public class GoblinUserDigitalArtwork implements Serializable {
private String tradingAt;
/**
* 获得方式[1-购买|2-兑换|3-赠送|5-受赠|31-空投赠送]
* 转赠状态[PENDING|SUCCESS]
*/
private String transferState;
/**
* 获得方式[1-购买|2-兑换|3-赠送|5-大美|6-转赠|31-空投赠送]
*/
private Integer source;
......
package com.liquidnet.service.goblin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 用户安全设置
* </p>
*
* @author liquidnet
* @since 2022-08-16
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class GoblinUserSafeConfig implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* UID
*/
private String uid;
/**
* 安全密码
*/
private String pwsswd;
/**
* 0-INIT,1-NORMAL,2-INVALID
*/
private Integer state;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private String comment;
}
package com.liquidnet.service.goblin.mapper;
import com.liquidnet.service.goblin.entity.GoblinUserSafeConfig;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 用户安全设置 Mapper 接口
* </p>
*
* @author liquidnet
* @since 2022-08-16
*/
public interface GoblinUserSafeConfigMapper extends BaseMapper<GoblinUserSafeConfig> {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.goblin.mapper.GoblinUserSafeConfigMapper">
</mapper>
......@@ -499,6 +499,10 @@ alter table adam_addresses add town varchar(50) null comment '街道/镇' after
alter table adam_addresses add town_id varchar(20) null comment '街道行政编码' after town;
alter table adam_addresses modify address varchar(255) not null comment '详细地址';
alter table adam_addresses add full_address varchar(500) null comment '完整地址' after address;
-- >>------------------------------------------------------------------------------------ |20220323三要素实名
alter table adam_real_name add node tinyint default 2 not null comment '认证节点[2-二要素|3-三要素]' after type;
-- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------
-- >>------------------------------------------------------------------------------------
\ No newline at end of file
......@@ -33,6 +33,7 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.util.Arrays;
import java.util.List;
......@@ -467,41 +468,41 @@ public class AdamUserController {
}
}
// @ApiOperationSupport(order = 11)
// @ApiOperation(value = "业务账号开通")
// @ApiImplicitParams({
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "bizCode", value = "业务码[NFT_ZX]", allowableValues = "NFT_ZX"),
// @ApiImplicitParam(type = "form", required = false, dataType = "String", name = "name", value = "姓名"),
// @ApiImplicitParam(type = "form", required = false, dataType = "String", name = "idCard", value = "身份证号"),
// })
// @PostMapping(value = "open/account")
// public ResponseDto<AdamUserBizAcctVo> openAccount(@Pattern(regexp = "\\b(NFT_ZX)\\b", message = "业务码无效")
// @RequestParam String bizCode,
// @RequestParam(required = false) String name,
// @RequestParam(required = false) String idCard) {
// if (StringUtils.isNotBlank(name) && !name.contains("*")) {
// if (!java.util.regex.Pattern.matches(LnsRegex.Valid.CN_HANZI, name)) {
// return ResponseDto.failure(ErrorMapping.get("10103"));
// }
// if (!java.util.regex.Pattern.matches(LnsRegex.Valid.CN_ID_CARD_REF, idCard)) {
// return ResponseDto.failure(ErrorMapping.get("10104"));
// }
// if (IDCardUtil.getAge(idCard) < 18) {
// return ResponseDto.failure(ErrorMapping.get("10100"));
// }
// }
// String currentUid = CurrentUtil.getCurrentUid();
// String mobile = (String) CurrentUtil.getTokenClaims().get(CurrentUtil.TOKEN_MOBILE);
// try {
// return adamUserBusiAcctService.openAccount(currentUid, bizCode, name, idCard, mobile);
// } catch (Exception e) {
// if (e instanceof LiquidnetServiceException) {
// LiquidnetServiceException lsEx = (LiquidnetServiceException) e;
// return ResponseDto.failure(lsEx.getCode(), lsEx.getMessage());
// }
// return ResponseDto.failure(ErrorMapping.get("10113"));
// }
// }
@ApiOperationSupport(order = 11)
@ApiOperation(value = "用户身份信息")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "mobile", value = "手机号"),
})
@GetMapping(value = "info/identity")
public ResponseDto<AdamUserIdentityInfoVo> identityInfoByMobile(@Pattern(regexp = "\\d{11}", message = "手机号格式有误")
@RequestParam(required = false) String mobile) {
String uid = null == mobile ? CurrentUtil.getCurrentUid() : adamRdmService.getUidByMobile(mobile);
AdamUserInfoVo userInfoVo;
if (uid == null || null == (userInfoVo = adamRdmService.getUserInfoVoByUid(uid))) {
log.warn("###用户不存在[MOBILE:{},UID:{},TOKEN:{}]", mobile, uid, CurrentUtil.getToken());
return ResponseDto.failure(ErrorMapping.get("10114"));
}
AdamRealInfoVo realInfoVoByUidPlain = adamRdmService.getRealInfoVoByUidPlain(uid);
if (null == realInfoVoByUidPlain || 3 != realInfoVoByUidPlain.getNode()) {
return ResponseDto.failure(ErrorMapping.get("10115"));
}
AdamUserIdentityInfoVo userIdentityInfoVo = AdamUserIdentityInfoVo.getNew();
userIdentityInfoVo.setUid(uid);
userIdentityInfoVo.setName(realInfoVoByUidPlain.getName());
userIdentityInfoVo.setMobile(mobile);
return ResponseDto.success(userIdentityInfoVo.desensitize());
}
@ApiOperationSupport(order = 12)
@ApiOperation(value = "验证手机号")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "mobile", value = "手机号[用于验证当前账户所绑定手机号]"),
})
@PostMapping(value = {"check/mobile"})
public ResponseDto<Object> checkMobile(@NotBlank(message = "手机号不能为空") @Pattern(regexp = "\\d{11}", message = "手机号格式有误") @RequestParam String mobile) {
String currentMobile = (String) CurrentUtil.getTokenClaims().get(CurrentUtil.TOKEN_MOBILE);
return mobile.equals(currentMobile) ? ResponseDto.success() : ResponseDto.failure(ErrorMapping.get("10003"));
}
/* ---------------------------- Internal Method ---------------------------- */
......
......@@ -20,6 +20,7 @@ import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.feign.adam.rsc.FeignAdamChimeClient;
import com.liquidnet.service.feign.adam.rsc.FeignAdamStoneClient;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
......@@ -158,8 +159,8 @@ public class AdamUserInfoServiceImpl implements IAdamUserInfoService {
) {
updateProvinceCityCountyFlg = true;
existUserInfoVo.setProvince(province);
existUserInfoVo.setCity(parameter.getCity());
existUserInfoVo.setCounty(parameter.getCounty());
existUserInfoVo.setCity(city);
existUserInfoVo.setCounty(county);
existUserInfoVo.setArea(province.concat("-").concat(city).concat("-").concat(county));
}
}
......@@ -278,13 +279,14 @@ public class AdamUserInfoServiceImpl implements IAdamUserInfoService {
String[] mobileLocateArr = adamRdmService.getMobileLocateArr(mobile);
toMqSqls.add(SqlMapping.get("adam_user_mobile_locate.modify_mobile"));
if (null != mobileLocateArr && mobileLocateArr.length > 0) {
// if (null != mobileLocateArr && mobileLocateArr.length > 0) {
updateUserMobileLocateObjs.add(new Object[]{
mobile,
mobileLocateArr[0], mobileLocateArr[1], mobileLocateArr[2], mobileLocateArr[3], mobileLocateArr[4],
// mobileLocateArr[0], mobileLocateArr[1], mobileLocateArr[2], mobileLocateArr[3], mobileLocateArr[4],
ArrayUtils.isEmpty(mobileLocateArr) ? null : mobileLocateArr[2],
now, uid
});
}
// }
s = System.currentTimeMillis();
queueUtils.sendMsgByRedis(MQConst.AdamQueue.SQL_UCENTER.getKey(),
......
......@@ -6,8 +6,8 @@
10000=\u64CD\u4F5C\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5
10001=\u6388\u6743\u5931\u8D25
10002=\u9A8C\u8BC1\u7801\u53D1\u9001\u5931\u8D25
10003=\u8BF7\u8F93\u5165\u6B63\u786E\u624B\u673A\u53F7
10004=\u8BF7\u8F93\u5165\u6B63\u786E\u9A8C\u8BC1\u7801
10003=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u624B\u673A\u53F7
10004=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u9A8C\u8BC1\u7801
10005=\u624B\u673A\u53F7\u83B7\u53D6\u5931\u8D25\uFF0C\u8BF7\u66F4\u6362\u767B\u5F55\u65B9\u5F0F
10006=\u7B2C\u4E09\u65B9\u8D26\u53F7\u672A\u6CE8\u518C
10007=\u8BE5\u7B2C\u4E09\u65B9\u8D26\u53F7\u5DF2\u7ECF\u88AB\u5176\u4ED6\u7528\u6237\u7ED1\u5B9A
......@@ -47,6 +47,8 @@
10111=\u519B\u5B98\u8BC1\u53F7\u4E0D\u5408\u89C4
10112=\u8BC1\u4EF6\u4FE1\u606F\u6216\u624B\u673A\u53F7\u4E0D\u4E00\u81F4
10113=\u5B9E\u540D\u8BA4\u8BC1\u5931\u8D25
10114=\u8BE5\u7528\u6237\u4E0D\u5B58\u5728
10115=\u8BE5\u7528\u6237\u672A\u8FDB\u884C\u5B9E\u540D\u8BA4\u8BC1
10200=\u4EC5\u9650\u4ECE\u672A\u8D2D\u4E70\u8FC7\u4F1A\u5458\u7684\u7528\u6237\u4F7F\u7528
......
......@@ -73,7 +73,8 @@ adam_user_busi_acct.add=INSERT INTO adam_user_busi_acct (`uid`, busi, uuid, `wor
# ----------------------------------------------------
adam_user_mobile_locate.add=INSERT INTO adam_user_mobile_locate (`uid`, mobile, `state`, province, city, corp, area_code, post_code, regist_mobile, regist_addr, regist_source, regist_at, latest_addr, latest_source, latest_at, updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
adam_user_mobile_locate.modify_mobile=UPDATE adam_user_mobile_locate SET mobile=?, province=?, city=?, corp=?, area_code=?, post_code=?, updated_at=? WHERE uid=? AND `state`=1
#adam_user_mobile_locate.modify_mobile=UPDATE adam_user_mobile_locate SET mobile=?, province=?, city=?, corp=?, area_code=?, post_code=?, updated_at=? WHERE uid=? AND `state`=1
adam_user_mobile_locate.modify_mobile=UPDATE adam_user_mobile_locate SET mobile=?,corp=?,updated_at=? WHERE uid=? AND `state`=1
adam_user_mobile_locate.real_name=UPDATE adam_user_mobile_locate SET name=?, id_card=?, updated_at=? WHERE uid=? AND `state`=1
adam_user_mobile_locate.update_province=UPDATE adam_user_mobile_locate SET province=?, city=?, county=?, updated_at=? WHERE uid=? AND `state`=1
adam_user_mobile_locate.close=UPDATE adam_user_mobile_locate SET `state`=2, updated_at=? WHERE uid=? AND `state`=1
......
......@@ -37,10 +37,15 @@ public class ConsumerCommonBizRedisStreamConfig extends RedisStreamConfig {
@Autowired
ConsumerGoblinBizArtworkClqReceiver consumerGoblinBizArtworkClqReceiver;
@Autowired
ConsumerGoblinBizArtworkTransQueryReceiver consumerGoblinBizArtworkTransQueryReceiver;
/*------galaxy------*/
@Autowired
ConsumerGalaxyJsonNftPublishAndBuyReceiver jsonNftPublishAndBuyReceiver;
@Autowired
ConsumerGalaxyJsonNftUserRegisterReceiver jsonNftUserRegisterReceiver;
@Autowired
ConsumerGalaxyJsonNftTransferReceiver jsonNftTransferReceiver;
@Autowired
ConsumerGoblinBizIntegralReceiver consumerGoblinBizIntegralReceiver;
/*------sweet------*/
@Autowired
......@@ -133,6 +138,22 @@ public class ConsumerCommonBizRedisStreamConfig extends RedisStreamConfig {
return subscriptionList;
}
@Bean
public List<Subscription> subscriptionGoblinBizArtworkTransQuery(RedisConnectionFactory factory) {
List<Subscription> subscriptionList = new ArrayList<>();
MQConst.GoblinQueue stream = MQConst.GoblinQueue.BIZ_ARTWORK_TRANS_QUERY;
this.initStream(stringRedisTemplate, stream.getKey(), stream.getGroup());
for (int i = 0; i < 1; i++) {
StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer = this.buildStreamMessageListenerContainer(factory);
subscriptionList.add(listenerContainer.receiveAutoAck(
Consumer.from(stream.getGroup(), getConsumerName(stream.name() + i)),
StreamOffset.create(stream.getKey(), ReadOffset.lastConsumed()), consumerGoblinBizArtworkTransQueryReceiver
));
listenerContainer.start();
}
return subscriptionList;
}
/**
* galaxy发行和购买
* @param factory
......@@ -177,6 +198,28 @@ public class ConsumerCommonBizRedisStreamConfig extends RedisStreamConfig {
return subscriptionList;
}
/**
* Galaxy nft转让
* @param factory
* @return
*/
@Bean
public List<Subscription> subscriptionGalaxyJsonNftTransfer(RedisConnectionFactory factory) {
List<Subscription> subscriptionList = new ArrayList<>();
MQConst.GalaxyQueue stream = MQConst.GalaxyQueue.JSON_NFT_TRANSFER;
this.initStream(stringRedisTemplate, stream.getKey(), stream.getGroup());
for (int i = 0; i < 10; i++) {
StreamMessageListenerContainer<String, MapRecord<String, String, String>> listenerContainer = this.buildStreamMessageListenerContainer(factory);
subscriptionList.add(listenerContainer.receiveAutoAck(
Consumer.from(stream.getGroup(), getConsumerName(stream.name() + i)),
StreamOffset.create(stream.getKey(), ReadOffset.lastConsumed()), jsonNftTransferReceiver
));
listenerContainer.start();
}
return subscriptionList;
}
@Bean // 增减积分
public List<Subscription> subscriptionGoblinBizIntegral(RedisConnectionFactory factory) {
List<Subscription> subscriptionList = new ArrayList<>();
......
......@@ -71,6 +71,7 @@ public class ConsumerCommonSqlRedisStreamConfig extends RedisStreamConfig {
ConsumerSlimeSqlLineReceiver consumerSlimeSqlLineReceiver;
@Autowired
ConsumerSlimeSqlPerformanceInsertReceiver consumerSlimeSqlPerformanceInsertReceiver;
/*------galaxy------*/
@Autowired
ConsumerGalaxySqlUserInfoReceiver consumerGalaxySqlUserInfoReceiver;
@Autowired
......
package com.liquidnet.service.consumer.base.receiver;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.codec.util.CodecUtil;
import com.liquidnet.service.base.codec.vo.EncryptedReq;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.galaxy.dto.param.GalaxyNftTransferReqDto;
import com.liquidnet.service.galaxy.dto.param.GalaxyNftTransferRespDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.connection.stream.StreamRecords;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.HashMap;
@Slf4j
@Component
public class ConsumerGalaxyJsonNftTransferReceiver extends AbstractBizRedisReceiver {
@Value("${liquidnet.service.goblin.url}")
private String serviceGoblinUrl;
@Override
protected boolean consumerMessageHandler(String msg) {
boolean aBoolean = false;
try {
GalaxyNftTransferReqDto textMessage = JsonUtils.fromJson(msg, GalaxyNftTransferReqDto.class);
if (textMessage == null) {
aBoolean = true;
} else {
//执行计数
ResponseDto<GalaxyNftTransferRespDto> responseDto = this.nftTransfer(textMessage);
if(responseDto.isSuccess()){
aBoolean = true;
}
}
} catch (Exception e) {
log.error("CONSUMER MSG EX_HANDLE ==> [{}]:{}", this.getRedisStreamKey(), msg, e);
} finally {
if (!aBoolean) {
HashMap<String, String> map = CollectionUtil.mapStringString();
map.put("message", msg);
stringRedisTemplate.opsForStream().add(StreamRecords.mapBacked(map).withStreamKey(this.getRedisStreamKey()));
}
}
return aBoolean;
}
@Override
protected String getRedisStreamKey() {
return MQConst.GalaxyQueue.JSON_NFT_TRANSFER.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.GalaxyQueue.JSON_NFT_TRANSFER.getGroup();
}
// /**
// * 执行nft转让
// * @param reqDto
// * @return
// */
// private ResponseDto<GalaxyNftTransferRespDto> nftTransfer(GalaxyNftTransferReqDto reqDto) {
// String postUrl = serviceGoblinUrl + "/goblin/nftTrade/que/nftTransfer";
// try {
// String postRespStr = HttpUtil.postJson(postUrl, JsonUtils.toJson(reqDto));
// ResponseDto responseDto = JsonUtils.fromJson(postRespStr, ResponseDto.class);
// return responseDto;
// } catch (Exception e) {
// log.error("Ex.NFT转让:请求异常[url={},paramsStr={}],ex:{}", postUrl, JsonUtils.toJson(reqDto), e.getMessage());
// return ResponseDto.failure();
// }
// }
/**
* 执行nft转让
* @param reqDto
* @return
*/
private ResponseDto<GalaxyNftTransferRespDto> nftTransfer(GalaxyNftTransferReqDto reqDto) {
log.info("nftTransfer request queue message:{}", JsonUtils.toJson(reqDto));
String postUrl = serviceGoblinUrl + "/goblin/nftTrade/que/nftTransfer";
try {
//获取摘要
Long timeStamp = DateUtil.asDate(LocalDateTime.now()).getTime();
String encryptedData = CodecUtil.aesEncrypt(JsonUtils.toJson(reqDto));
log.info("加密后的数据:" + encryptedData);
String sign = CodecUtil.sha1Encrypt(encryptedData + timeStamp);
log.info("签名:" + sign);
// //设置header
// MultiValueMap<String, String> header = CollectionUtil.linkedMultiValueMapStringString();
// header.add("signData",sign);
EncryptedReq<GalaxyNftTransferReqDto> encryptedReq = new EncryptedReq<>();
encryptedReq.setEncryptedData(encryptedData);
encryptedReq.setTimestamp(timeStamp);
encryptedReq.setSign(sign);
encryptedReq.setData(reqDto);
String postRespStr = HttpUtil.postJson(postUrl, JsonUtils.toJson(encryptedReq));
ResponseDto responseDto = JsonUtils.fromJson(postRespStr, ResponseDto.class);
return responseDto;
} catch (Exception e) {
log.error("Ex.NFT转让:请求异常[url={},paramsStr={}],ex:{}", postUrl, JsonUtils.toJson(reqDto), e.getMessage());
return ResponseDto.failure();
}
}
}
package com.liquidnet.service.consumer.base.receiver;
import com.fasterxml.jackson.databind.JsonNode;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.constant.MQConst;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -77,12 +75,12 @@ public class ConsumerGoblinBizArtworkClqReceiver extends AbstractBizRedisReceive
// 失败重新入队逻辑改至`被调用API`实现
// JsonNode postRespJNode = JsonUtils.fromJson(postRespStr, JsonNode.class), postRespCode;
// if (null == postRespJNode || null == (postRespCode = postRespJNode.get("code")) || !postRespCode.asText().equals("0")) {
// log.warn("#NFT声明查询:处理失败[paramsStr={},postRespStr={}]", postDataMap, postRespStr);
// log.warn("#藏品声明查询:处理失败[paramsStr={},postRespStr={}]", postDataMap, postRespStr);
// return false;
// }
return true;
} catch (Exception e) {
log.error("Ex.NFT声明查询:处理异常[url={},paramsStr={}],ex:{}", postUrl, postDataMap, e.getMessage());
log.error("Ex.藏品声明查询:处理异常[url={},paramsStr={}],ex:{}", postUrl, postDataMap, e.getMessage());
return false;
}
}
......
package com.liquidnet.service.consumer.base.receiver;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.service.base.constant.MQConst;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.connection.stream.StreamRecords;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.HashMap;
@Slf4j
@Component
public class ConsumerGoblinBizArtworkTransQueryReceiver extends AbstractBizRedisReceiver {
@Value("${liquidnet.service.goblin.url}")
private String serviceGoblinUrl;
@Override
protected boolean consumerMessageHandler(String msg) {
boolean aBoolean = false;
try {
if (StringUtils.isEmpty(msg)) {
log.warn("CONSUMER MSG NULL_MSG ==> [{}]:{}", this.getRedisStreamKey(), msg);
aBoolean = true;
} else {
String[] msgArr = msg.split(",");
String bizId = msgArr[0], time = msgArr.length == 2 ? msgArr[1] : null;
LocalDateTime now = LocalDateTime.now(), checkTime = now.minusSeconds(15);
LocalDateTime createAt = StringUtils.isEmpty(time) ? checkTime : LocalDateTime.parse(time);
long durationToMillis = Duration.between(createAt, checkTime).toMillis();
if (durationToMillis >= 0) {
aBoolean = this.bizArtworkTransQueryProcessing(bizId);
} else {
try {
Thread.sleep(Math.abs(durationToMillis));
} catch (InterruptedException ignored) {
}
aBoolean = this.bizArtworkTransQueryProcessing(bizId);
}
}
} catch (Exception e) {
log.error("CONSUMER MSG EX_HANDLE ==> [{}]:{}", this.getRedisStreamKey(), msg, e);
} finally {
if (!aBoolean) {
HashMap<String, String> map = CollectionUtil.mapStringString();
map.put(MQConst.QUEUE_MESSAGE_KEY, msg);
stringRedisTemplate.opsForStream().add(StreamRecords.mapBacked(map).withStreamKey(this.getRedisStreamKey()));
}
}
return aBoolean;
}
@Override
protected String getRedisStreamKey() {
return MQConst.GoblinQueue.BIZ_ARTWORK_TRANS_QUERY.getKey();
}
@Override
protected String getRedisStreamGroup() {
return MQConst.GoblinQueue.BIZ_ARTWORK_TRANS_QUERY.getGroup();
}
private boolean bizArtworkTransQueryProcessing(String artworkId) {
String postUrl = serviceGoblinUrl + "/goblin/que/artwork/transQuery";
LinkedMultiValueMap<String, String> postDataMap = CollectionUtil.linkedMultiValueMapStringString();
try {
postDataMap.add("artworkId", artworkId);
String postRespStr = HttpUtil.post(postUrl, postDataMap);
// 失败重新入队逻辑改至`被调用API`实现
// JsonNode postRespJNode = JsonUtils.fromJson(postRespStr, JsonNode.class), postRespCode;
// if (null == postRespJNode || null == (postRespCode = postRespJNode.get("code")) || !postRespCode.asText().equals("0")) {
// log.warn("#藏品转赠结果查询:处理失败[paramsStr={},postRespStr={}]", postDataMap, postRespStr);
// return false;
// }
return true;
} catch (Exception e) {
log.error("Ex.藏品转赠结果查询:处理异常[url={},paramsStr={}],ex:{}", postUrl, postDataMap, e.getMessage());
return false;
}
}
/* ------------------------------------------------------------------------------------ */
/* ------------------------------------------------------------------------------------ */
/* ------------------------------------------------------------------------------------ */
}
package com.liquidnet.service.consumer.base.receiver;
import com.fasterxml.jackson.databind.JsonNode;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.constant.MQConst;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
......@@ -61,12 +59,12 @@ public class ConsumerGoblinBizArtworkUplReceiver extends AbstractBizRedisReceive
// 失败重新入队逻辑改至`被调用API`实现
// JsonNode postRespJNode = JsonUtils.fromJson(postRespStr, JsonNode.class), postRespCode;
// if (null == postRespJNode || null == (postRespCode = postRespJNode.get("code")) || !postRespCode.asText().equals("0")) {
// log.warn("#NFT素材上传:处理失败[paramsStr={},postRespStr={}]", postDataMap, postRespStr);
// log.warn("#藏品素材上传:处理失败[paramsStr={},postRespStr={}]", postDataMap, postRespStr);
// return false;
// }
return true;
} catch (Exception e) {
log.error("Ex.NFT素材上传:处理异常[url={},paramsStr={}],ex:{}", postUrl, postDataMap, e.getMessage());
log.error("Ex.藏品素材上传:处理异常[url={},paramsStr={}],ex:{}", postUrl, postDataMap, e.getMessage());
return false;
}
}
......
......@@ -6,8 +6,12 @@ import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.galaxy.constant.GalaxyEnum;
import com.liquidnet.service.galaxy.dto.bo.GalaxyNftOrderBo;
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.param.GalaxyNftPublishAndBuyReqDto;
import com.liquidnet.service.galaxy.dto.param.GalaxyNftTransferQueryRespDto;
import com.liquidnet.service.galaxy.dto.param.GalaxyNftTransferReqDto;
import com.liquidnet.service.galaxy.dto.param.GalaxyNftTransferRespDto;
import com.liquidnet.service.galaxy.dto.vo.mongo.GalaxyNftOrderFailLogVo;
import com.liquidnet.service.galaxy.dto.vo.mongo.GalaxyNftTradeVo;
import com.liquidnet.service.galaxy.utils.GalaxyDataUtils;
......@@ -136,4 +140,69 @@ public class GalaxyBeanTransferBiz {
nftTradeVo.setCreatedAt(DateUtil.getNowTime());
return nftTradeVo;
}
/**
* 构造nft转让信息
* @param reqDto
* @param userInfoBo
* @param receiveUserInfoBo
* @return
*/
public GalaxyTransferNftInfoBo buildTransferNftInfoBo(GalaxyNftTransferReqDto reqDto,GalaxyUserInfoBo userInfoBo,GalaxyUserInfoBo receiveUserInfoBo){
GalaxyTransferNftInfoBo transferNftInfoBo = GalaxyTransferNftInfoBo.getNew();
transferNftInfoBo.setTransOrderId(reqDto.getTransOrderId());
transferNftInfoBo.setNftId(reqDto.getNftId());
transferNftInfoBo.setUserId(reqDto.getUserId());
transferNftInfoBo.setAddress(userInfoBo.getBlockChainAddress());
transferNftInfoBo.setReceiveUserId(reqDto.getReceiveUserId());
transferNftInfoBo.setReceiveAddress(receiveUserInfoBo.getBlockChainAddress());
transferNftInfoBo.setOwnerUserId(null);
transferNftInfoBo.setOwnerAddress(null);
transferNftInfoBo.setSeriesId(null);
transferNftInfoBo.setRouterType(reqDto.getRouterType());
transferNftInfoBo.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.INIT.getCode());
transferNftInfoBo.setTransferHash(null);
transferNftInfoBo.setErrorCode(null);
transferNftInfoBo.setErrorMsg(null);
transferNftInfoBo.setCreatedAt(DateUtil.getNowTime());
transferNftInfoBo.setUpdatedAt(null);
return transferNftInfoBo;
}
/**
* 构造nft转让返回结果
* @param reqDto
* @param userInfoBo
* @param receiveUserInfoBo
* @return
*/
public GalaxyNftTransferRespDto buildNftTransferRespDto(GalaxyNftTransferReqDto reqDto,GalaxyUserInfoBo userInfoBo,GalaxyUserInfoBo receiveUserInfoBo,GalaxyTransferNftInfoBo transferNftInfoBo){
GalaxyNftTransferRespDto respDto = GalaxyNftTransferRespDto.getNew();
respDto.setNftId(reqDto.getNftId());
respDto.setOwnerUserId(receiveUserInfoBo.getUserId());
respDto.setOwnerAddress(receiveUserInfoBo.getBlockChainAddress());
respDto.setFromUserId(userInfoBo.getUserId());
respDto.setFromAddress(userInfoBo.getBlockChainAddress());
respDto.setTransferTime(DateUtil.getNowTime());
respDto.setTransferHash(transferNftInfoBo.getTransferHash());
return respDto;
}
/**
* 构造nft转让结果查询
* @param transferNftInfoBo
* @return
*/
public GalaxyNftTransferQueryRespDto buildNftTransferQueryRespDto(GalaxyTransferNftInfoBo 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(transferNftInfoBo.getTransferHash());
return nftTransferQueryRespDto;
}
}
......@@ -179,4 +179,53 @@ public class GalaxyEnumBiz {
}
return taskStatusEnum;
}
/**
* 资产转让状态转换
* @param routerType
* @param code
* @return
*/
public static GalaxyEnum.NftTransferStatusEnum getTransStatusEnum(String routerType, String code){
GalaxyEnum.NftTransferStatusEnum rsStatusEnum = null;
switch (routerType){
case "zxinchain":
if(code.equalsIgnoreCase(ZxlnftEnum.TaskStatusEnum.PROCESSING.getCode())){
rsStatusEnum = GalaxyEnum.NftTransferStatusEnum.PROCESSING;
break;
}else if(code.equalsIgnoreCase(ZxlnftEnum.TaskStatusEnum.TASK_SUCCESS.getCode())){
rsStatusEnum = GalaxyEnum.NftTransferStatusEnum.SUCCESS;
break;
}else if(code.equalsIgnoreCase(ZxlnftEnum.TaskStatusEnum.TASK_FAIL.getCode())){
rsStatusEnum = GalaxyEnum.NftTransferStatusEnum.FAIL;
break;
}
case "antchain":
if(code.equalsIgnoreCase(AntchainEnum.TaskStatusEnum.PROCESSING.getCode())){
rsStatusEnum = GalaxyEnum.NftTransferStatusEnum.PROCESSING;
break;
}else if(code.equalsIgnoreCase(AntchainEnum.TaskStatusEnum.TASK_SUCCESS.getCode())){
rsStatusEnum = GalaxyEnum.NftTransferStatusEnum.SUCCESS;
break;
}else if(code.equalsIgnoreCase(AntchainEnum.TaskStatusEnum.TASK_FAIL.getCode())){
rsStatusEnum = GalaxyEnum.NftTransferStatusEnum.FAIL;
break;
}
case "xuper":
if(code.equalsIgnoreCase(XuperEnum.AssetGrantStatusEnum.TRANSFERING.getCode())){
rsStatusEnum = GalaxyEnum.NftTransferStatusEnum.PROCESSING;
break;
}else if(code.equalsIgnoreCase(XuperEnum.AssetGrantStatusEnum.GRANT_SUCCESS.getCode())){
rsStatusEnum = GalaxyEnum.NftTransferStatusEnum.SUCCESS;
break;
}else if(code.equalsIgnoreCase(XuperEnum.AssetGrantStatusEnum.CANCELING.getCode())
||code.equalsIgnoreCase(XuperEnum.AssetGrantStatusEnum.CANCELED.getCode())
||code.equalsIgnoreCase(XuperEnum.AssetGrantStatusEnum.OTHER_ERROR.getCode())
){
rsStatusEnum = GalaxyEnum.NftTransferStatusEnum.FAIL;
break;
}
}
return rsStatusEnum;
}
}
\ No newline at end of file
......@@ -532,4 +532,65 @@ public abstract class AbstractDataUtils {
}
return null;
}
/**
* 创建nft转让信息
* @param routerType
* @param transOrderId
* @param transferNftInfoBo
*/
public void setGalaxyTransferNftInfoBo(String routerType,String transOrderId, GalaxyTransferNftInfoBo transferNftInfoBo) {
this.getRedisUtil().set(GalaxyConstant.REDIS_KEY_GALAXY_TRANSFER_ORDER.concat(routerType).concat(":") + transOrderId,transferNftInfoBo);
try{
this.getQueueUtil().sendMySqlRedis(
SqlMapping.get("galaxy_nft_transfer_info.insert"),
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()}
, MQConst.GalaxyQueue.SQL_NFT_TRADE_INFO.getKey()
);
}catch(Exception e){
log.error(e.getMessage(),e);
log.error("#setGalaxyTransferNftInfoBo error ==> MESSAGE:{}",e.getMessage());
}
}
/**
* 获取nft转让信息
* @param routerType
* @param transOrderId
* @return
*/
public GalaxyTransferNftInfoBo getGalaxyTransferNftInfoBo(String routerType,String transOrderId) {
String redisKey = GalaxyConstant.REDIS_KEY_GALAXY_TRANSFER_ORDER.concat(routerType).concat(":") + transOrderId;
Object obj = this.getRedisUtil().get(redisKey);
if(obj!=null){
return (GalaxyTransferNftInfoBo) obj;
}
return null;
}
/**
* 更新nft转移信息
* @param routerType
* @param transOrderId
* @param transferNftInfoBo
*/
public void updateTransferNftInfoBo(String routerType,String transOrderId, GalaxyTransferNftInfoBo transferNftInfoBo) {
this.getRedisUtil().set(GalaxyConstant.REDIS_KEY_GALAXY_TRANSFER_ORDER.concat(routerType).concat(":") + transOrderId,transferNftInfoBo);
try{
this.getQueueUtil().sendMySqlRedis(
SqlMapping.get("galaxy_nft_transfer_info.updateNftTransferInfo"),
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){
log.error(e.getMessage(),e);
log.error("#setGalaxyTransferNftInfoBo error ==> MESSAGE:{}",e.getMessage());
}
}
}
......@@ -10,6 +10,8 @@ galaxy_nft_order_info.insert=insert into galaxy_nft_order_info (nft_order_pay_id
galaxy_nft_trade_info.insert=insert into galaxy_nft_trade_info (user_id, nft_id, nft_name, series_name, series_id, series_code, trade_hash,chain_timestamp, from_address, to_address, trade_price, 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_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 = ?
......@@ -31,3 +33,5 @@ galaxy_nft_order_fail_log.updateDealWithStatus=update galaxy_nft_order_fail_log
galaxy_series_nft_info.updateSeriesNftPublishStatus=update galaxy_series_nft_info t set t.publish_status = ?,t.publish_trade_hash = ?,t.updated_at =? where t.sku_id = ?
# ------------------------同步用户数字账户信息到adam---------------------------
adam_user_busi_acct.add=INSERT INTO adam_user_busi_acct (`uid`, busi, uuid, `work`, ppwd, `state`, created_at) VALUES (?,?,?,?,?,?,?)
# ------------------------更新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 = ?
use dev_ln_scene;
# -- >>------------------------------------------------------------------------------------
alter table adam_real_name add node tinyint default 2 not null comment '认证节点[2-二要素|3-三要素]' after type;
/*alter table adam_real_name add node tinyint default 2 not null comment '认证节点[2-二要素|3-三要素]' after type;
alter table goblin_goods add spu_type tinyint default 0 not null comment '商品类型[0-常规|1-数字藏品]' after spu_no;
alter table goblin_goods add attention varchar(256) null comment '注意事项' after details;
......@@ -105,7 +105,7 @@ create table goblin_user_digital_artwork
updated_at datetime null,
deleted_at datetime null,
comment varchar(500)
) engine = InnoDB comment '用户数字藏品信息';
) engine = InnoDB comment '用户数字藏品信息';*/
# -- >>------------------------------------------------------------------------------------
# drop table if exists goblin_goods_sku_excode;
# create table goblin_goods_sku_excode
......@@ -184,7 +184,14 @@ CREATE TABLE goblin_nft_order
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT 'NFT订单表';
alter table goblin_nft_order add sku_title varchar(255) default null comment '商品标题+副标题' after sku_id;
ALTER TABLE goblin_nft_order
ADD sku_title VARCHAR(255) DEFAULT NULL COMMENT '商品标题+副标题' AFTER sku_id;
ALTER TABLE goblin_nft_order
ADD list_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '分批购ID' AFTER user_mobile;
ALTER TABLE goblin_nft_order
ADD ex_code VARCHAR(64) NOT NULL DEFAULT '' COMMENT '兑换码' AFTER list_id;
ALTER TABLE goblin_nft_order
ADD artwork_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '藏品ID' AFTER ex_code;
# -- >>------------------------------------------------------------------------------------
DROP TABLE IF EXISTS goblin_nft_order_refund;
......@@ -214,9 +221,10 @@ CREATE TABLE goblin_nft_order_refund
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT 'NFT订单退款表';
# -- >>------------------------------------------------------------------------------------
# -- >>------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `goblin_goods_anticipate_user`;
CREATE TABLE `goblin_goods_anticipate_user` (
CREATE TABLE `goblin_goods_anticipate_user`
(
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键id',
`uid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户id',
`phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '手机号',
......@@ -224,12 +232,16 @@ CREATE TABLE `goblin_goods_anticipate_user` (
`state` int NOT NULL DEFAULT 0 COMMENT '状态(0:正常(默认))',
`created_date` datetime NULL DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '预约表关联user表' ROW_FORMAT = Dynamic;
) ENGINE = InnoDB
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = '预约表关联user表'
ROW_FORMAT = Dynamic;
# -- >>------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `goblin_goods_anticipate_value`;
CREATE TABLE `goblin_goods_anticipate_value` (
CREATE TABLE `goblin_goods_anticipate_value`
(
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键id',
`uid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'uid',
`ant_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '预约id 对应(goblin_goods_anticipate.id)',
......@@ -245,12 +257,16 @@ CREATE TABLE `goblin_goods_anticipate_value` (
`update_date` datetime NULL DEFAULT NULL COMMENT '修改时间',
`del_tag` int NOT NULL DEFAULT 0 COMMENT '删除(0:未删除1:已删除)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '预约关联sku和spu表' ROW_FORMAT = Dynamic;
) ENGINE = InnoDB
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = '预约关联sku和spu表'
ROW_FORMAT = Dynamic;
# -- >>------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `goblin_goods_anticipate`;
CREATE TABLE `goblin_goods_anticipate` (
CREATE TABLE `goblin_goods_anticipate`
(
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增主键id',
`ant_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'ant_id',
`people` bigint NOT NULL COMMENT '预约人数(达到一定人数可以预约)',
......@@ -259,32 +275,44 @@ CREATE TABLE `goblin_goods_anticipate` (
`created_date` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
`del_tag` int NOT NULL DEFAULT 0 COMMENT '删除(0:未删除1:已删除)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '预约规则表' ROW_FORMAT = Dynamic;
) ENGINE = InnoDB
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = '预约规则表'
ROW_FORMAT = Dynamic;
# -- >>------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `goblin_goods_anticipate_help`;
CREATE TABLE `goblin_goods_anticipate_help` (
CREATE TABLE `goblin_goods_anticipate_help`
(
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
`sid` varbinary(255) NOT NULL COMMENT '分享sid',
`help_uid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '助力人uid',
`created_date` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '预约他人助力记录表' ROW_FORMAT = Dynamic;
) ENGINE = InnoDB
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = '预约他人助力记录表'
ROW_FORMAT = Dynamic;
# -- >>------------------------------------------------------------------------------------
DROP TABLE IF EXISTS `goblin_goods_anticipate_share`;
CREATE TABLE `goblin_goods_anticipate_share` (
CREATE TABLE `goblin_goods_anticipate_share`
(
`sid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '主键ID',
`uid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户uid',
`sku_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'sku_Id',
`created_date` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`sid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '预约创建助力表' ROW_FORMAT = Dynamic;
) ENGINE = InnoDB
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT = '预约创建助力表'
ROW_FORMAT = Dynamic;
# -- >>------------------------------------------------------------------------------------
# -- >>------------------------------------------------------------------------------------
# -- >>------------------------------------------------------------------------------------
alter table dragon_orders add receipt_data text comment '苹果支付回调的code';
alter table dragon_orders
add receipt_data text comment '苹果支付回调的code';
#---- NFT——galaxy ----
......
USE dev_ln_scene;
ALTER TABLE goblin_nft_order ADD list_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '分批购ID' after user_mobile;
ALTER TABLE goblin_nft_order ADD ex_code VARCHAR(64) NOT NULL DEFAULT '' COMMENT '兑换码' after list_id;
\ No newline at end of file
......@@ -13,3 +13,30 @@ alter table galaxy_nft_order_fail_log modify series_name varchar(30) not null co
alter table galaxy_nft_order_info modify series_name varchar(30) not null comment '系列的唯一名称(前缀+skuid)';
alter table galaxy_nft_trade_info modify series_name varchar(30) not null comment '系列的唯一名称';
-- nft转让新增表galaxy_nft_transfer_info
drop TABLE if exists `galaxy_nft_transfer_info`;
create table galaxy_nft_transfer_info
(
mid bigint unsigned NOT NULL AUTO_INCREMENT,
trans_order_id varchar(100) NOT NULL COMMENT '转让订单id',
nft_id varchar(200) COMMENT 'nftId',
user_id varchar(200) NOT NULL COMMENT '用户ID',
address varchar(200) COMMENT '转出方地址',
receive_user_id varchar(200) NOT NULL COMMENT '接收者用户id',
receive_address varchar(200) NOT NULL COMMENT '接收者地址',
owner_user_id varchar(200) COMMENT '拥有者用户id',
owner_address varchar(200) COMMENT '拥有者地址',
transfer_hash varchar(200) COMMENT '转让hash',
series_id varchar(200) COMMENT '系列的唯一Id',
router_type varchar(20) NOT NULL COMMENT '路由类型(zxinchain、eth、antchain)',
transfer_status varchar(30) NOT NULL COMMENT '转让状态(-1初始化 0转让中 1转让成功 2转让失败 )',
error_code varchar(200) COMMENT '错误code',
error_msg varchar(200) COMMENT '错误信息',
created_at timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`mid`)
) ENGINE = InnoDB comment '数字藏品转让信息';
create index gntri_idx_trans_order_id on galaxy_nft_transfer_info (trans_order_id);
create index gntri_idx_user_id on galaxy_nft_transfer_info (user_id);
create index gntri_idx_nft_id on galaxy_nft_transfer_info (nft_id);
......@@ -1060,10 +1060,121 @@ create table goblin_user_coupon
) engine = InnoDB comment '商城用户券信息';
create unique index uidx_guc_ucoupon_id on goblin_user_coupon (ucoupon_id);
# -- >>------------------------------------------------------------------------------------ |20220323数字藏品NFT
alter table goblin_goods add spu_type tinyint default 0 not null comment '商品类型[0-常规|1-数字藏品]' after spu_no;
alter table goblin_goods add attention varchar(256) null comment '注意事项' after details;
alter table goblin_goods add sale_start_time datetime null comment '开售时间' after shelves_time;
alter table goblin_goods add sale_stop_time datetime null comment '停售时间' after sale_start_time;
alter table goblin_goods add author varchar(100) null comment '创作者' after spu_appear;
alter table goblin_goods add spu_canbuy char null comment '是否购买[0-否|1-是]' after spu_appear;
alter table goblin_goods add publisher varchar(100) null comment '发行方' after author;
# alter table goblin_goods add has_box tinyint default 0 null comment '存在盲盒[0-否|1-是]' after spu_appear;
alter table goblin_goods_sku add sku_type tinyint default 0 not null comment '商品类型[0-常规|1-数字藏品]' after sku_no;
alter table goblin_goods_sku add sku_watch varchar(256) null comment '展示文件URL' after sku_pic;
alter table goblin_goods_sku add watch_type char null comment '展示文件类型[1-图片|2-视频|3-模型]' after sku_watch;
alter table goblin_goods_sku add sku_watch_pic varchar(256) null comment '展示预览图片' after watch_type;
alter table goblin_goods_sku add intro varchar(256) null comment '简介' after weight;
alter table goblin_goods_sku add details text null comment '详情' after intro;
# alter table goblin_goods_sku add gift_stock int null comment '兑换库存' after sku_stock;
alter table goblin_goods_sku add price_v decimal(20, 2) null comment '苹果商品价格' after price;
alter table goblin_goods_sku add product_id varchar(20) null comment '苹果商品价格ID' after price_v;
alter table goblin_goods_sku add shelves_handle char default '1' comment '上架处理方式[1-等待手动上架|2-直接上架售卖|3-预约定时上架]' after store_id;
alter table goblin_goods_sku add shelves_time datetime null comment '预约上架时间[上架处理方式为3-预约定时上架时需要指定]' after shelves_handle;
alter table goblin_goods_sku add sale_start_time datetime null comment '开售时间' after shelves_time;
alter table goblin_goods_sku add sale_stop_time datetime null comment '停售时间' after sale_start_time;
alter table goblin_goods_sku add soldout_status char default '0' not null comment '是否售罄[0-否|1-是]' after shelves_status;
alter table goblin_goods_sku add sku_canbuy char null comment '是否购买[0-否|1-是]' after sku_appear;
alter table goblin_goods_sku add unbox char default '0' not null null comment '是否盲盒[0-否|1-是]' after sku_canbuy;
alter table goblin_goods_sku add hit_ratio decimal(8, 2) null comment '盲盒命中率[0.00~100%],0标识不参与盲盒,null标识均摊' after unbox;
alter table goblin_goods_sku add opening_time datetime null comment '盲盒开启时间' after hit_ratio;
alter table goblin_goods_sku add opening_limit int default 0 comment '盲盒开启时限[单位秒]' after opening_time;
drop table if exists goblin_goods_sku_nft;
create table goblin_goods_sku_nft
(
mid bigint auto_increment primary key,
sku_id varchar(64) not null comment '单品id',
route_type varchar(20) null comment 'NFT路由',
material_type char null comment '素材原始文件类型[1-图片|2-视频|3-模型]',
material_url varchar(256) null comment '素材原始文件URL',
upchain tinyint default 0 comment 'NFT上传声明状态[0-待上传|1-已声明|2-声明失败|9-声明中]',
display_url varchar(500) null comment 'NFT预览图URL',
nft_url varchar(500) null comment 'NFT素材访问URL',
series_id varchar(256) null comment 'NFT系列ID',
series_hash varchar(256) null comment 'NFT系列HASH',
nft_hash varchar(256) null comment 'NFT藏品HASH',
declare_at varchar(25) null comment 'NFT系列声明时间',
created_at datetime not null,
updated_at datetime null,
comment varchar(255)
) engine = InnoDB comment '商品NFT信息';
create unique index uidx_ggsn_sku_id on goblin_goods_sku_nft (sku_id);
drop table if exists goblin_goods_sku_tag;
create table goblin_goods_sku_tag
(
mid bigint auto_increment primary key,
sku_id varchar(64) not null comment '商品id',
tag_id varchar(30) not null comment '标签id,对应 goblin_self_tag.tag_id',
sort int default 0 comment '排序[数值越小,排序越前]',
tag_belong char default '0' comment '标签所属[0-普通标签|1-专属标签]',
del_flg char default '0' comment '删除标记[0-未删除|1-删除]',
comment varchar(255)
) engine = InnoDB comment '商品关联标签';
create unique index uidx_ggst_sku_tag on goblin_goods_sku_tag (sku_id, tag_id);
drop table if exists goblin_user_digital_artwork;
create table goblin_user_digital_artwork
(
mid bigint auto_increment primary key,
artwork_id varchar(64) not null comment '藏品ID',
uid varchar(64) not null comment '用户UID',
sku_id varchar(64) not null comment '单品ID',
order_id varchar(64) not null comment '藏品订单号',
edition_sn int null comment '序列号',
nft_id varchar(256) null comment '藏品NFT ID',
release_txhash varchar(256) null comment '发行HASH',
release_at varchar(25) null comment '发行时间',
trading_txhash varchar(256) null comment '发放HASH',
trading_at varchar(25) null comment '交易时间',
source tinyint null comment '获得方式[1-购买|2-兑换|3-赠送|5-受赠|31-空投赠送]',
state tinyint default 0 comment '藏品状态[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败|5-待收取]',
del_flg char default '0' comment '删除标记[0-未删除|1-删除]',
opening_at datetime null comment '盲盒开启时间',
created_at datetime not null,
updated_at datetime null,
deleted_at datetime null,
comment varchar(500)
) engine = InnoDB comment '用户数字藏品信息';
# -- >>------------------------------------------------------------------------------------ |20220817数字藏品转赠安全密码
alter table goblin_user_digital_artwork
add receiver_uid varchar(20) null comment '受赠人UID' after trading_at;
alter table goblin_user_digital_artwork
add transfer_order_id varchar(20) null comment '转赠订单号' after receiver_uid;
alter table goblin_user_digital_artwork
add transfer_state varchar(20) null comment '转赠状态[PENDING|SUCCESS]' after transfer_order_id;
alter table goblin_user_digital_artwork
modify source tinyint null comment '获得方式[1-购买|2-兑换|3-赠送|5-大美|6-转赠|31-空投赠送]';
drop table if exists goblin_user_safe_config;
create table goblin_user_safe_config
(
mid bigint auto_increment primary key,
uid varchar(64) not null comment 'UID',
passwd varchar(100) comment '安全密码',
state tinyint default 1 comment '0-INIT,1-NORMAL,2-INVALID',
created_at datetime not null,
updated_at datetime null,
comment varchar(500)
) engine = InnoDB comment '用户安全设置';
create unique index idx_gusc_uid on goblin_user_safe_config (uid);
# -- >>------------------------------------------------------------------------------------
# -- >>------------------------------------------------------------------------------------
# -- >>------------------------------------------------------------------------------------
# -- >>------------------------------------------------------------------------------------
# -- >>------------------------------------------------------------------------------------
\ No newline at end of file
package com.liquidnet.service.galaxy.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.codec.annotation.DecryptAndVerify;
import com.liquidnet.service.base.codec.vo.EncryptedReq;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.galaxy.aop.annotation.ControllerLog;
import com.liquidnet.service.galaxy.constant.GalaxyErrorEnum;
import com.liquidnet.service.galaxy.dto.param.*;
import com.liquidnet.service.galaxy.service.IGalaxyTradeService;
import com.liquidnet.service.galaxy.utils.QueueUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -32,6 +39,9 @@ import javax.validation.Valid;
@Validated
@Slf4j
public class GalaxyTradeController {
@Autowired
private QueueUtil queueUtil;
@Resource(name = "galaxyTradeServiceImpl")
private IGalaxyTradeService galaxyTradeService;
......@@ -64,14 +74,59 @@ public class GalaxyTradeController {
@ApiOperation(value = "NFT发行购买结果查询")
@PostMapping(value = {"nftPublishAndBuyResultQuery"})
public ResponseDto<GalaxyNftPublishAndBuyResultQueryRespDto> nftPublishAndBuyResultQuery(@Valid @RequestBody GalaxyNftPublishAndBuyResultQueryReqDto reqDto){
try {
Thread.sleep(2000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
return galaxyTradeService.nftPublishAndBuyResultQuery(reqDto);
}
// @ControllerLog(description = "NFT转让")
// @ApiOperationSupport(order = 2)
// @ApiOperation(value = "NFT转让")
// @PostMapping(value = {"/que/nftTransfer"})
// public ResponseDto<GalaxyNftTransferRespDto> nftTransfer(@Valid @RequestBody GalaxyNftTransferReqDto reqDto, HttpServletRequest request){
//
//
// ResponseDto<GalaxyNftTransferRespDto> responseDto = galaxyTradeService.nftTransfer(reqDto);
// if(!responseDto.isSuccess()){
// //系统异常允许重试
// if(responseDto.getCode().equalsIgnoreCase(GalaxyErrorEnum.NFT_TRANSFER_ERROR.getCode())){
// queueUtil.sendMsgByRedis(MQConst.GalaxyQueue.JSON_NFT_TRANSFER.getKey(), JsonUtils.toJson(reqDto));
// }
// }
// return ResponseDto.success();
// }
@ControllerLog(description = "NFT转让")
@DecryptAndVerify(decryptedClass = GalaxyNftTransferReqDto.class)
@ApiOperationSupport(order = 2)
@ApiOperation(value = "NFT转让")
@PostMapping(value = {"/que/nftTransfer"})
public ResponseDto<GalaxyNftTransferRespDto> nftTransfer(@Valid @RequestBody EncryptedReq<GalaxyNftTransferReqDto> encryptedReq){
GalaxyNftTransferReqDto reqDto = encryptedReq.getData();
ResponseDto<GalaxyNftTransferRespDto> responseDto = galaxyTradeService.nftTransfer(reqDto);
if(!responseDto.isSuccess()){
//系统异常允许重试
if(responseDto.getCode().equalsIgnoreCase(GalaxyErrorEnum.NFT_TRANSFER_ERROR.getCode())){
queueUtil.sendMsgByRedis(MQConst.GalaxyQueue.JSON_NFT_TRANSFER.getKey(), JsonUtils.toJson(reqDto));
}
}
return ResponseDto.success();
}
@ControllerLog(description = "NFT转让结果查询")
@ApiOperationSupport(order = 3)
@ApiOperation(value = "NFT转让结果查询")
@PostMapping(value = {"nftTransferResultQuery"})
public ResponseDto<GalaxyNftTransferQueryRespDto> nftTransferResultQuery(@Valid @RequestBody GalaxyNftTransferQueryReqDto reqDto){
return galaxyTradeService.nftTransferQuery(reqDto);
}
@ControllerLog(description = "NFT手工转让调试")
@ApiOperationSupport(order = 2)
@ApiOperation(value = "NFT手工转让调试")
@PostMapping(value = {"/manual/nftTransfer"})
public ResponseDto<GalaxyNftTransferRespDto> nftManualTransfer(@Valid @RequestBody GalaxyNftTransferReqDto reqDto){
return galaxyTradeService.nftTransfer(reqDto);
}
// @ControllerLog(description = "NFT发行购买结果批量查询")
// @ApiOperationSupport(order = 1)
// @ApiOperation(value = "NFT发行购买结果批量查询")
......
......@@ -35,18 +35,26 @@ public class GalaxyTradeQueryController {
@Resource(name = "galaxyTradeQueryService")
private IGalaxyTradeQueryService galaxyTradeQueryService;
@ControllerLog(description = "NFT信息查询")
@ControllerLog(description = "NFT购买订单查询")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "NFT信息查询")
@ApiOperation(value = "NFT购买订单查询")
@PostMapping(value = {"queryNftInfo"})
public ResponseDto<GalaxyQueryNftInfoRespDto> queryNftInfo(@Valid @RequestBody GalaxyQueryNftInfoReqDto reqDto){
return galaxyTradeQueryService.queryNftInfo(reqDto);
}
@ControllerLog(description = "NFT转让订单查询")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "NFT转让订单查询(xuper)")
@PostMapping(value = {"queryTransNftInfo"})
public ResponseDto<GalaxyQueryTransNftInfoRespDto> queryTransNftInfo(@Valid @RequestBody GalaxyQueryTransNftInfoReqDto reqDto){
return galaxyTradeQueryService.queryTransNftInfo(reqDto);
}
@ControllerLog(description = "单个NFT交易信息查询")
@ControllerLog(description = "NFT交易历史记录查询")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "单个NFT交易信息查询")
@ApiOperation(value = "NFT交易历史记录查询")
@PostMapping(value = {"queryNftTradeList"})
ResponseDto<GalaxyQueryNftTradeListRespDto> queryNftTradeList(@Valid @RequestBody GalaxyQueryNftTradeListReqDto reqDto){
return galaxyTradeQueryService.queryNftTradeList(reqDto);
......@@ -62,7 +70,7 @@ public class GalaxyTradeQueryController {
@ControllerLog(description = "用户系列NFT查询")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "用户系列NFT查询")
@ApiOperation(value = "用户系列NFT查询(zxinchain)")
@PostMapping(value = {"queryUserSeriesNftList"})
ResponseDto<GalaxyQueryUserSeriesNftListRespDto> queryUserSeriesNftList(@Valid @RequestBody GalaxyQueryUserSeriesNftListReqDto reqDto){
return galaxyTradeQueryService.queryUserSeriesNftList(reqDto);
......@@ -78,7 +86,7 @@ public class GalaxyTradeQueryController {
@ControllerLog(description = "用户所有进NFT信息查询")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "用户所有进NFT信息查询")
@ApiOperation(value = "用户所有进NFT信息查询(zxinchain)")
@PostMapping(value = {"queryUserTradeInList"})
ResponseDto<GalaxyQueryUserTradeInListRespDto> queryUserTradeInList(@Valid @RequestBody GalaxyQueryUserTradeInListReqDto reqDto){
return galaxyTradeQueryService.queryUserTradeInList(reqDto);
......@@ -86,7 +94,7 @@ public class GalaxyTradeQueryController {
@ControllerLog(description = "用户所有出NFT信息查询")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "用户所有出NFT信息查询")
@ApiOperation(value = "用户所有出NFT信息查询(zxinchain)")
@PostMapping(value = {"queryUserTradeOutList"})
ResponseDto<GalaxyQueryUserTradeOutListRespDto> queryUserTradeOutList(@Valid @RequestBody GalaxyQueryUserTradeOutListReqDto reqDto){
return galaxyTradeQueryService.queryUserTradeOutList(reqDto);
......
......@@ -51,4 +51,14 @@ public class GalaxyRouterStrategyEthTradeImpl implements IGalaxyRouterStrategyTr
public ResponseDto<GalaxyNftPublishAndBuyRouterBatchQueryRespDto> nftPublishAndBuyResultBatchQuery(GalaxyNftPublishAndBuyRouterBatchQueryReqDto reqDto) {
return null;
}
@Override
public ResponseDto<GalaxyNftTransferRespDto> nftTransfer(GalaxyNftTransferReqDto reqDto) {
return null;
}
@Override
public ResponseDto<GalaxyNftTransferQueryRespDto> nftTransferQuery(GalaxyNftTransferQueryReqDto reqDto) {
return null;
}
}
package com.liquidnet.service.galaxy.router.xuper.biz;
import com.liquidnet.common.exception.constant.ErrorCode;
import com.liquidnet.common.third.xuper.config.XuperConfig;
import com.liquidnet.common.third.xuper.dto.Xuper010QuerySdsReqDto;
import com.liquidnet.common.third.xuper.dto.Xuper010QuerySdsRespDto;
import com.liquidnet.common.third.xuper.dto.XuperResponseDto;
import com.liquidnet.common.third.xuper.constant.XuperEnum;
import com.liquidnet.common.third.xuper.dto.*;
import com.liquidnet.common.third.xuper.exception.XupterException;
import com.liquidnet.common.third.xuper.util.XuperSdkUtil;
import com.liquidnet.commons.lang.util.BeanUtil;
......@@ -18,9 +16,10 @@ import com.liquidnet.service.galaxy.constant.GalaxyEnum;
import com.liquidnet.service.galaxy.constant.GalaxyErrorEnum;
import com.liquidnet.service.galaxy.dto.bo.GalaxyNftOrderBindBo;
import com.liquidnet.service.galaxy.dto.bo.GalaxyNftOrderBo;
import com.liquidnet.service.galaxy.dto.bo.GalaxyTransferNftInfoBo;
import com.liquidnet.service.galaxy.dto.bo.GalaxyUserInfoBo;
import com.liquidnet.service.galaxy.dto.param.*;
import com.liquidnet.service.galaxy.utils.GalaxyDataUtils;
import com.liquidnet.service.galaxy.utils.QueueUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -52,6 +51,9 @@ public class XuperTradeBiz {
@Autowired
private XuperPublishBiz xuperPublishBiz;
@Autowired
private GalaxyBeanTransferBiz galaxyBeanTransferBiz;
/**
* 发行和购买
* @param reqDto
......@@ -170,4 +172,247 @@ public class XuperTradeBiz {
}
return ResponseDto.failure(GalaxyErrorEnum.NFT_PUBLISH_AND_BUY_QUERY_FAIL.getCode(),GalaxyErrorEnum.NFT_PUBLISH_AND_BUY_QUERY_FAIL.getMessage());
}
/**
* 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());
}
}
//资产id
Long assetId = null;
//碎片id
Long shardId = null;
//拆分nftId 格式 {assetId_shardId}
if(StringUtil.isNotEmpty(transferNftInfoBo.getNftId())){
assetId = Long.parseLong(transferNftInfoBo.getNftId().substring(0,reqDto.getNftId().lastIndexOf("_")));
shardId = Long.parseLong(transferNftInfoBo.getNftId().substring(reqDto.getNftId().lastIndexOf("_")+1,reqDto.getNftId().length()));
}else{
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_NFTID_FORMAT_ERROR.getCode(), GalaxyErrorEnum.NFT_TRANSFER_NFTID_FORMAT_ERROR.getMessage());
}
//nft信息核对
if(StringUtil.isNotNull(assetId)&&StringUtil.isNotNull(shardId)){
boolean checkNftOwnerFlag = this.checkNftOwner(userInfoBo,reqDto.getNftId(),assetId,shardId);
log.info("nftTransfer checkNftOwnerFlag:{}",checkNftOwnerFlag);
//拥有者匹配 可以转让
if(checkNftOwnerFlag){
Xuper008TransferShardReqDto xuper008TransferShardReqDto = Xuper008TransferShardReqDto.getNew();
// 定义返回结果对象
Xuper008TransferShardRespDto xuper008TransferShardRespDto = null;
try {
xuper008TransferShardReqDto.setMnemonic(userInfoBo.getMnemonic());
xuper008TransferShardReqDto.setAssetId(assetId);
xuper008TransferShardReqDto.setShardId(shardId);
xuper008TransferShardReqDto.setToAddr(xuperSdkUtil.getAccount(receiveUserInfoBo.getMnemonic()).getAddress());
xuper008TransferShardReqDto.setToUserId(Long.parseLong(String.valueOf(receiveUserInfoBo.getUserId().hashCode())));
xuper008TransferShardReqDto.setPrice(0l);
XuperResponseDto<Xuper008TransferShardRespDto> transferResponseDto = xuperSdkUtil.xuper008TransferShard(xuper008TransferShardReqDto);
if(transferResponseDto.isSuccess()){
xuper008TransferShardRespDto = transferResponseDto.getParseData(Xuper008TransferShardRespDto.class);
if(String.valueOf(xuper008TransferShardRespDto.getErrNo()).equalsIgnoreCase(ErrorCode.SUCCESS.getCode())){
//更新转让状态和拥有者信息(只有成功才更新拥有者信息)
transferNftInfoBo.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.PROCESSING.getCode());
transferNftInfoBo.setUpdatedAt(DateUtil.getNowTime());
dataUtils.updateTransferNftInfoBo(reqDto.getRouterType(),reqDto.getTransOrderId(),transferNftInfoBo);
//构造返回结果
GalaxyNftTransferRespDto galaxyNftTransferRespDto = galaxyBeanTransferBiz.buildNftTransferRespDto(reqDto,userInfoBo,receiveUserInfoBo,transferNftInfoBo);
return ResponseDto.success(galaxyNftTransferRespDto);
}
}
}catch (XupterException e) {
log.error("biz error msg "+e.getMessage(),e);
}catch (Exception e) {
log.error("sys error msg "+e.getMessage(),e);
}
log.info("testXuper008TransferShard resp : "+ JsonUtils.toJson(xuper008TransferShardRespDto));
}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 (XupterException 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){
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.getCode(),GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.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());
}
//查询获取交易hash
String transferHash = this.getTransferHash(receiveUserInfoBo,transferNftInfoBo.getNftId());
GalaxyNftTransferQueryRespDto nftTransferQueryRespDto = galaxyBeanTransferBiz.buildNftTransferQueryRespDto(transferNftInfoBo);
if(StringUtil.isNotEmpty(transferHash)){
//更新转让成功信息
transferNftInfoBo.setOwnerUserId(transferNftInfoBo.getReceiveUserId());
transferNftInfoBo.setOwnerAddress(transferNftInfoBo.getReceiveAddress());
transferNftInfoBo.setTransferStatus(GalaxyEnum.NftTransferStatusEnum.SUCCESS.getCode());
transferNftInfoBo.setTransferHash(transferHash);
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(transferHash);
}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
* @param assetId
* @param shardId
* @return
*/
private Boolean checkNftOwner(GalaxyUserInfoBo userInfoBo,String nftId,Long assetId,Long shardId){
Boolean checkNftOwner = false;
//判断nftid是否状态正常
Xuper010QuerySdsReqDto xuper010QuerySdsReqDto = Xuper010QuerySdsReqDto.getNew();
xuper010QuerySdsReqDto.setAssetId(assetId);
xuper010QuerySdsReqDto.setShardId(shardId);
XuperResponseDto<Xuper010QuerySdsRespDto> xuperResponseDto = xuperSdkUtil.xuper010QuerySds(xuper010QuerySdsReqDto);
Xuper010QuerySdsRespDto xuper010QuerySdsRespDto = null;
if(xuperResponseDto.isSuccess()){
xuper010QuerySdsRespDto = xuperResponseDto.getParseData(Xuper010QuerySdsRespDto.class);
Xuper010QuerySdsRespDto.ShardMeta shardMeta = xuper010QuerySdsRespDto.getMeta();
//已上链
if(shardMeta.getStatus() == Integer.parseInt(XuperEnum.AssetGrantStatusEnum.GRANT_SUCCESS.getCode())){
if(shardMeta.getOwnerAddr().equalsIgnoreCase(userInfoBo.getBlockChainAddress())){
checkNftOwner = true;
}
}
}else{
log.error("nftTransfer error : nftId:{} not exits on xuper blockchain :{} ",nftId,JsonUtils.toJson(xuperResponseDto));
}
return checkNftOwner;
}
/**
* 获取转让成功后的hash值
* @param receiveUserInfoBo
* @param nftId
* @return
*/
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();
xuper010QuerySdsReqDto.setAssetId(assetId);
xuper010QuerySdsReqDto.setShardId(shardId);
XuperResponseDto<Xuper010QuerySdsRespDto> xuperResponseDto = xuperSdkUtil.xuper010QuerySds(xuper010QuerySdsReqDto);
Xuper010QuerySdsRespDto xuper010QuerySdsRespDto = null;
if(xuperResponseDto.isSuccess()){
xuper010QuerySdsRespDto = xuperResponseDto.getParseData(Xuper010QuerySdsRespDto.class);
Xuper010QuerySdsRespDto.ShardMeta shardMeta = xuper010QuerySdsRespDto.getMeta();
//已上链
if(shardMeta.getStatus() == Integer.parseInt(XuperEnum.AssetGrantStatusEnum.GRANT_SUCCESS.getCode())){
//转让成功后,拥有者已变更为接收者的地址,但是交易hash未变
if(shardMeta.getOwnerAddr().equalsIgnoreCase(receiveUserInfoBo.getBlockChainAddress())){
transferHash = shardMeta.getTxId();
}
}
}else{
log.error("getTransferHash error : nftId:{} not exits on xuper blockchain :{} ",nftId,JsonUtils.toJson(xuperResponseDto));
}
return transferHash;
}
}
......@@ -9,15 +9,22 @@ 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.biz.GalaxyEnumBiz;
import com.liquidnet.service.galaxy.constant.GalaxyErrorEnum;
import com.liquidnet.service.galaxy.dto.TradeInfoDto;
import com.liquidnet.service.galaxy.dto.bo.GalaxyNftOrderBo;
import com.liquidnet.service.galaxy.dto.bo.GalaxySeriesNftInfoBo;
import com.liquidnet.service.galaxy.dto.param.*;
import com.liquidnet.service.galaxy.router.strategy.IGalaxyRouterStrategyTradeQuery;
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 java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
......@@ -29,7 +36,7 @@ import org.springframework.stereotype.Component;
*/
@Slf4j
@Component
public class XuperTradeQueryBiz {
public class XuperTradeQueryBiz implements IGalaxyRouterStrategyTradeQuery {
@Autowired
private XuperSdkUtil xuperSdkUtil;
@Autowired
......@@ -112,26 +119,131 @@ public class XuperTradeQueryBiz {
}
}
public ResponseDto<GalaxyQueryTransNftInfoRespDto> queryTransNftInfo(GalaxyQueryTransNftInfoReqDto reqDto) {
if(StringUtil.isEmpty(reqDto.getNftId())){
return ResponseDto.failure(GalaxyErrorEnum.NFT_QUERY_FAIL_NFT_NOT_EXIST.getCode(),GalaxyErrorEnum.NFT_QUERY_FAIL_NFT_NOT_EXIST.getMessage());
}
//执行资产碎片授予查询
Xuper010QuerySdsReqDto xuper010QuerySdsReqDto = Xuper010QuerySdsReqDto.getNew();
// 定义返回结果对象
Xuper010QuerySdsRespDto xuper010QuerySdsRespDto = null;
try {
//资产id
Long assetId = null;
//碎片id
Long shardId = null;
String nftId = reqDto.getNftId();
if(StringUtil.isNotEmpty(nftId)){
assetId = Long.parseLong(nftId.substring(0,nftId.lastIndexOf("_")));
shardId = Long.parseLong(nftId.substring(nftId.lastIndexOf("_")+1,nftId.length()));
}
xuper010QuerySdsReqDto.setAssetId(assetId);
xuper010QuerySdsReqDto.setShardId(shardId);
XuperResponseDto<Xuper010QuerySdsRespDto> xuperResponseDto = xuperSdkUtil.xuper010QuerySds(xuper010QuerySdsReqDto);
if(xuperResponseDto.isSuccess()){
xuper010QuerySdsRespDto = xuperResponseDto.getParseData(Xuper010QuerySdsRespDto.class);
}else{
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.getCode(),GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.getMessage()+"nftId:"+nftId);
}
}catch (XupterException e) {
log.error("biz error msg "+e.getMessage(),e);
}catch (Exception e) {
log.error("sys error msg "+e.getMessage(),e);
}
log.info("xuper010QuerySds resp : "+ JsonUtils.toJson(xuper010QuerySdsRespDto));
if(String.valueOf(xuper010QuerySdsRespDto.getErrNo()).equalsIgnoreCase(ErrorCode.SUCCESS.getCode())){
Xuper010QuerySdsRespDto.ShardMeta shardMeta = xuper010QuerySdsRespDto.getMeta();
Xuper010QuerySdsRespDto.ShardAssetInfo assetInfo = shardMeta.getAssetInfo();
//返回结果
GalaxyQueryTransNftInfoRespDto respDto = GalaxyQueryTransNftInfoRespDto.getNew();
respDto.setNftId(shardMeta.getAssetId()+"_"+shardMeta.getShardId());
respDto.setOwnerAddr(shardMeta.getOwnerAddr());
respDto.setPublishAddr(assetInfo.getCreateAddr());
respDto.setName(assetInfo.getTitle());
respDto.setDesc(assetInfo.getShortDesc());
if(assetInfo.getThumb()[0]!=null&&assetInfo.getThumb()[0].getUrls().getUrl3()!=null){
respDto.setUrl(assetInfo.getThumb()[0].getUrls().getUrl3());
respDto.setDisplayUrl(assetInfo.getThumb()[0].getUrls().getUrl3());
}
//获取交易时间
LocalDateTime transTime = DateUtil.ofEpochMilli(shardMeta.getCtime());
respDto.setTradeTime(DateUtil.format(transTime, DateUtil.Formatter.yyyyMMddHHmmss));
respDto.setTradeHash(shardMeta.getTxId());
respDto.setTradeStatus(GalaxyEnumBiz.getTransStatusEnum(reqDto.getRouterType(),String.valueOf(shardMeta.getStatus())).getCode());
return ResponseDto.success(respDto);
}else{
return ResponseDto.failure(GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.getCode(),GalaxyErrorEnum.NFT_TRANSFER_QUERY_ERROR.getMessage());
}
}
public ResponseDto<GalaxyQueryNftTradeListRespDto> queryNftTradeList(GalaxyQueryNftTradeListReqDto reqDto) {
// //获取订单信息
// GalaxyNftOrderBo nftOrderBo = dataUtils.getNftOrderBo(reqDto.getRouterType(),reqDto.getNftOrderPayId());
// if(StringUtil.isNull(nftOrderBo)){
// GalaxyTransferNftInfoBo transferNftInfoBo = dataUtils.getGalaxyTransferNftInfoBo(reqDto.getRouterType(),reqDto.getNftOrderPayId());
//
// if(StringUtil.isNull(transferNftInfoBo)){
// return ResponseDto.failure(GalaxyErrorEnum.NFT_QUERY_FAIL_ORDER_NOT_EXIST.getCode(),GalaxyErrorEnum.NFT_QUERY_FAIL_ORDER_NOT_EXIST.getMessage());
// }
// if(StringUtil.isEmpty(nftOrderBo.getNftId())){
// if(StringUtil.isEmpty(transferNftInfoBo.getNftId())){
// return ResponseDto.failure(GalaxyErrorEnum.NFT_QUERY_FAIL_NFT_NOT_EXIST.getCode(),GalaxyErrorEnum.NFT_QUERY_FAIL_NFT_NOT_EXIST.getMessage());
// }
//
// Nft039TradeListReqDto nft039TradeListReqDto = Nft039TradeListReqDto.getNew();
// nft039TradeListReqDto.setNftId(nftOrderBo.getNftId());
// nft039TradeListReqDto.setLimit(1000l);
// ZxlnftResponseDto<Nft039TradeListRespDto> zxlnftResponseDto = zxlnftSdkUtil.nft039TradeList(nft039TradeListReqDto);
// //查询结果
// GalaxyQueryNftTradeListRespDto queryNftTradeListRespDto = GalaxyQueryNftTradeListRespDto.getNew();
// if(zxlnftResponseDto.isSuccess()){
// BeanUtil.copy(zxlnftResponseDto.getData(),queryNftTradeListRespDto);
// return ResponseDto.success(queryNftTradeListRespDto);
// }
Xuper013HistoryReqDto xuper013HistoryReqDto = Xuper013HistoryReqDto.getNew();
// 定义返回结果对象
Xuper013HistoryRespDto respDto = null;
try {
//资产id
Long assetId = null;
//碎片id
Long shardId = null;
String nftId = reqDto.getNftId();
if(StringUtil.isNotEmpty(nftId)){
assetId = Long.parseLong(nftId.substring(0,nftId.lastIndexOf("_")));
shardId = Long.parseLong(nftId.substring(nftId.lastIndexOf("_")+1,nftId.length()));
}
xuper013HistoryReqDto.setAssetId(assetId);
xuper013HistoryReqDto.setShardId(shardId);
xuper013HistoryReqDto.setPage(1);
xuper013HistoryReqDto.setLimit(50);
XuperResponseDto<Xuper013HistoryRespDto> xuperResponseDto = xuperSdkUtil.xuper013History(xuper013HistoryReqDto);
if(xuperResponseDto.isSuccess()){
respDto = xuperResponseDto.getParseData(Xuper013HistoryRespDto.class);
GalaxyQueryNftTradeListRespDto nftTradeListRespDto =GalaxyQueryNftTradeListRespDto.getNew();
if(respDto.getList().size()>0){
List<GalaxyQueryNftTradeListRespDto.TransInfoDto> tradeList = new ArrayList<>();
nftTradeListRespDto.setTransList(tradeList);
nftTradeListRespDto.setTotal(Long.parseLong(String.valueOf(respDto.getList().size())));
for(Xuper013HistoryRespDto.History history:respDto.getList()){
GalaxyQueryNftTradeListRespDto.TransInfoDto transInfoDto = GalaxyQueryNftTradeListRespDto.TransInfoDto.getNew();
transInfoDto.setFromAddr(history.getFrom());
transInfoDto.setToAddr(history.getTo());
transInfoDto.setTxType(Integer.parseInt(String.valueOf(history.getType())));
transInfoDto.setTxHash(history.getTxId());
LocalDateTime tradeTime = DateUtil.ofEpochMilli(history.getCtime());
transInfoDto.setDealTimestamp(history.getCtime());
transInfoDto.setDealTimestampStr(DateUtil.format(tradeTime, DateUtil.Formatter.yyyyMMddHHmmss));
nftTradeListRespDto.getTransList().add(transInfoDto);
}
}else{
nftTradeListRespDto.setTransList(null);
nftTradeListRespDto.setTotal(Long.parseLong(String.valueOf(respDto.getList().size())));
}
return ResponseDto.success(nftTradeListRespDto);
}else{
return ResponseDto.failure(GalaxyErrorEnum.NFT_QUERY_FAIL_NFT_NOT_EXIST.getCode(),GalaxyErrorEnum.NFT_QUERY_FAIL_NFT_NOT_EXIST.getMessage()+"nftId:"+nftId);
}
}catch (XupterException e) {
log.error("biz error msg "+e.getMessage(),e);
}catch (Exception e) {
log.error("sys error msg "+e.getMessage(),e);
}
log.info("testXuper013History resp : "+ JsonUtils.toJson(respDto));
return ResponseDto.failure();
}
......@@ -213,18 +325,50 @@ public class XuperTradeQueryBiz {
}
public ResponseDto<GalaxyQueryUserTradeAllListRespDto> queryUserTradeAllList(GalaxyQueryUserTradeAllListReqDto reqDto) {
// Nft042TradeAllListReqDto nft042TradeAllListReqDto = Nft042TradeAllListReqDto.getNew();
// nft042TradeAllListReqDto.setAddr(reqDto.getBlockChainAddress());
// nft042TradeAllListReqDto.setLimit(1000l);
// ZxlnftResponseDto<Nft042TradeAllListRespDto> zxlnftResponseDto = zxlnftSdkUtil.nft042TradeAllList(nft042TradeAllListReqDto);
//
// GalaxyQueryUserTradeAllListRespDto queryUserTradeAllListRespDto = GalaxyQueryUserTradeAllListRespDto.getNew();
// if(zxlnftResponseDto.isSuccess()){
// BeanUtil.copy(zxlnftResponseDto.getData(),queryUserTradeAllListRespDto);
// }else{
// return ResponseDto.failure();
// }
// return ResponseDto.success(queryUserTradeAllListRespDto);
//要查询的区块链账户地址
String addr = reqDto.getBlockChainAddress();
Xuper011ListSdsByAddrReqDto xuper011ListSdsByAddrReqDto = Xuper011ListSdsByAddrReqDto.getNew();
// 定义返回结果对象
Xuper011ListSdsByAddrRespDto respDto = null;
try {
//资产id
Long assetId = Long.parseLong(reqDto.getSeriesId());
xuper011ListSdsByAddrReqDto.setAddr(addr);
xuper011ListSdsByAddrReqDto.setPage(1);
xuper011ListSdsByAddrReqDto.setLimit(50);
xuper011ListSdsByAddrReqDto.setAssetId(assetId);
XuperResponseDto<Xuper011ListSdsByAddrRespDto> xuperResponseDto = xuperSdkUtil.xuper011ListSdsByAddr(xuper011ListSdsByAddrReqDto);
if(xuperResponseDto.isSuccess()){
respDto = xuperResponseDto.getParseData(Xuper011ListSdsByAddrRespDto.class);
GalaxyQueryUserTradeAllListRespDto tradeAllListRespDto = GalaxyQueryUserTradeAllListRespDto.getNew();
if(respDto.getList().size()>0){
List<TradeInfoDto> tradeList = new ArrayList<>();
tradeAllListRespDto.setTradeList(tradeList);
tradeAllListRespDto.setTotal(Long.parseLong(String.valueOf(respDto.getList().size())));
for(Xuper011ListSdsByAddrRespDto.ShardMeta shardMeta:respDto.getList()){
TradeInfoDto tradeInfoDto = TradeInfoDto.getNew();
tradeInfoDto.setNftId(shardMeta.getAssetId()+"_"+shardMeta.getShardId());
tradeInfoDto.setToAddr(shardMeta.getOwnerAddr());
tradeInfoDto.setHash(shardMeta.getTxId());
tradeAllListRespDto.getTradeList().add(tradeInfoDto);
}
}else{
tradeAllListRespDto.setTradeList(null);
tradeAllListRespDto.setTotal(Long.parseLong(String.valueOf(respDto.getList().size())));
}
return ResponseDto.success(tradeAllListRespDto);
}else{
return ResponseDto.failure(GalaxyErrorEnum.SERIES_NFT_INFO_NOT_EXIST.getCode(), GalaxyErrorEnum.SERIES_NFT_INFO_NOT_EXIST.getMessage());
}
}catch (XupterException e) {
log.error("biz error msg "+e.getMessage(),e);
}catch (Exception e) {
log.error("sys error msg "+e.getMessage(),e);
}
log.info("testXuper011ListSdsByAddr resp : "+ JsonUtils.toJson(respDto));
return ResponseDto.failure();
}
......
......@@ -28,9 +28,6 @@ public class GalaxyRouterStrategyXuperTradeImpl implements IGalaxyRouterStrategy
@Override
public ResponseDto<GalaxyNftPublishAndBuyRespDto> nftPublishAndBuy(GalaxyNftPublishAndBuyReqDto reqDto) {
//测试发送队列
// queueUtil.sendMsgByRedis(MQConst.GalaxyQueue.JSON_NFT_PUBLISH_AND_BUY.getKey(), JsonUtils.toJson(reqDto));
// return ResponseDto.success();
return xuperTradeBiz.nftPublishAndBuy(reqDto);
}
......@@ -58,4 +55,14 @@ public class GalaxyRouterStrategyXuperTradeImpl implements IGalaxyRouterStrategy
public ResponseDto<GalaxyNftBuyRespDto> nftBuy(GalaxyNftBuyReqDto reqDto) {
return null;
}
@Override
public ResponseDto<GalaxyNftTransferRespDto> nftTransfer(GalaxyNftTransferReqDto reqDto) {
return xuperTradeBiz.nftTransfer(reqDto);
}
@Override
public ResponseDto<GalaxyNftTransferQueryRespDto> nftTransferQuery(GalaxyNftTransferQueryReqDto reqDto) {
return xuperTradeBiz.nftTransferQuery(reqDto);
}
}
\ No newline at end of file
......@@ -31,6 +31,11 @@ public class GalaxyRouterStrategyXuperTradeQueryImpl implements IGalaxyRouterStr
return xuperTradeQueryBiz.queryNftInfo(reqDto);
}
@Override
public ResponseDto<GalaxyQueryTransNftInfoRespDto> queryTransNftInfo(GalaxyQueryTransNftInfoReqDto reqDto) {
return xuperTradeQueryBiz.queryTransNftInfo(reqDto);
}
@Override
public ResponseDto<GalaxyQueryNftTradeListRespDto> queryNftTradeList(GalaxyQueryNftTradeListReqDto reqDto) {
return xuperTradeQueryBiz.queryNftTradeList(reqDto);
......
......@@ -67,18 +67,23 @@ public class ZxinTradeQueryBiz implements IGalaxyRouterStrategyTradeQuery {
}
@Override
public ResponseDto<GalaxyQueryNftTradeListRespDto> queryNftTradeList(GalaxyQueryNftTradeListReqDto reqDto) {
//获取订单信息
GalaxyNftOrderBo nftOrderBo = dataUtils.getNftOrderBo(reqDto.getRouterType(),reqDto.getNftOrderPayId());
if(StringUtil.isNull(nftOrderBo)){
return ResponseDto.failure(GalaxyErrorEnum.NFT_QUERY_FAIL_ORDER_NOT_EXIST.getCode(),GalaxyErrorEnum.NFT_QUERY_FAIL_ORDER_NOT_EXIST.getMessage());
}
if(StringUtil.isEmpty(nftOrderBo.getNftId())){
return ResponseDto.failure(GalaxyErrorEnum.NFT_QUERY_FAIL_NFT_NOT_EXIST.getCode(),GalaxyErrorEnum.NFT_QUERY_FAIL_NFT_NOT_EXIST.getMessage());
public ResponseDto<GalaxyQueryTransNftInfoRespDto> queryTransNftInfo(GalaxyQueryTransNftInfoReqDto reqDto) {
return null;
}
@Override
public ResponseDto<GalaxyQueryNftTradeListRespDto> queryNftTradeList(GalaxyQueryNftTradeListReqDto reqDto) {
// //获取订单信息
// GalaxyNftOrderBo nftOrderBo = dataUtils.getNftOrderBo(reqDto.getRouterType(),reqDto.());
// if(StringUtil.isNull(nftOrderBo)){
// return ResponseDto.failure(GalaxyErrorEnum.NFT_QUERY_FAIL_ORDER_NOT_EXIST.getCode(),GalaxyErrorEnum.NFT_QUERY_FAIL_ORDER_NOT_EXIST.getMessage());
// }
// if(StringUtil.isEmpty(nftOrderBo.getNftId())){
// return ResponseDto.failure(GalaxyErrorEnum.NFT_QUERY_FAIL_NFT_NOT_EXIST.getCode(),GalaxyErrorEnum.NFT_QUERY_FAIL_NFT_NOT_EXIST.getMessage());
// }
Nft039TradeListReqDto nft039TradeListReqDto = Nft039TradeListReqDto.getNew();
nft039TradeListReqDto.setNftId(nftOrderBo.getNftId());
nft039TradeListReqDto.setNftId(reqDto.getNftId());
nft039TradeListReqDto.setLimit(1000l);
ZxlnftResponseDto<Nft039TradeListRespDto> zxlnftResponseDto = zxlnftSdkUtil.nft039TradeList(nft039TradeListReqDto);
//查询结果
......
package com.liquidnet.service.galaxy.router.zxin.service;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.galaxy.constant.GalaxyEnum;
import com.liquidnet.service.galaxy.dto.param.*;
import com.liquidnet.service.galaxy.router.strategy.IGalaxyRouterStrategyTrade;
import com.liquidnet.service.galaxy.router.strategy.annotation.StrategyGalaxyRouterTradeHandler;
import com.liquidnet.service.galaxy.router.zxin.biz.ZxinTradeBiz;
import com.liquidnet.service.galaxy.utils.QueueUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
......@@ -29,17 +26,9 @@ public class GalaxyRouterStrategyZxlTradeImpl implements IGalaxyRouterStrategyTr
@Autowired
private ZxinTradeBiz zxinTradeBiz;
@Autowired
private QueueUtil queueUtil;
@Override
public ResponseDto<GalaxyNftPublishAndBuyRespDto> nftPublishAndBuy(GalaxyNftPublishAndBuyReqDto reqDto) {
//测试发送队列
ResponseDto<GalaxyNftPublishAndBuyRespDto> responseDto = zxinTradeBiz.nftPublishAndBuy(reqDto);
if(!responseDto.isSuccess()){
queueUtil.sendMsgByRedis(MQConst.GalaxyQueue.JSON_NFT_PUBLISH_AND_BUY.getKey(), JsonUtils.toJson(reqDto));
}
return ResponseDto.success();
return zxinTradeBiz.nftPublishAndBuy(reqDto);
}
@Deprecated
......@@ -70,4 +59,14 @@ public class GalaxyRouterStrategyZxlTradeImpl implements IGalaxyRouterStrategyTr
public ResponseDto<GalaxyNftBuyRespDto> nftBuy(GalaxyNftBuyReqDto reqDto) {
return zxinTradeBiz.nftBuy(reqDto);
}
@Override
public ResponseDto<GalaxyNftTransferRespDto> nftTransfer(GalaxyNftTransferReqDto reqDto) {
return null;
}
@Override
public ResponseDto<GalaxyNftTransferQueryRespDto> nftTransferQuery(GalaxyNftTransferQueryReqDto reqDto) {
return null;
}
}
......@@ -31,6 +31,11 @@ public class GalaxyRouterStrategyZxlTradeQueryImpl implements IGalaxyRouterStrat
return zxinTradeQueryBiz.queryNftInfo(reqDto);
}
@Override
public ResponseDto<GalaxyQueryTransNftInfoRespDto> queryTransNftInfo(GalaxyQueryTransNftInfoReqDto reqDto) {
return null;
}
@Override
public ResponseDto<GalaxyQueryNftTradeListRespDto> queryNftTradeList(GalaxyQueryNftTradeListReqDto reqDto) {
return zxinTradeQueryBiz.queryNftTradeList(reqDto);
......
......@@ -28,6 +28,11 @@ public class GalaxyTradeQueryServiceImpl implements IGalaxyTradeQueryService {
return galaxyRouterStrategyContext.getTradeQueryStrategy(reqDto.getRouterType()).queryNftInfo(reqDto);
}
@Override
public ResponseDto<GalaxyQueryTransNftInfoRespDto> queryTransNftInfo(GalaxyQueryTransNftInfoReqDto reqDto) {
return galaxyRouterStrategyContext.getTradeQueryStrategy(reqDto.getRouterType()).queryTransNftInfo(reqDto);
}
@Override
public ResponseDto<GalaxyQueryNftTradeListRespDto> queryNftTradeList(GalaxyQueryNftTradeListReqDto reqDto) {
return galaxyRouterStrategyContext.getTradeQueryStrategy(reqDto.getRouterType()).queryNftTradeList(reqDto);
......
package com.liquidnet.service.galaxy.service.impl;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.galaxy.dto.param.*;
import com.liquidnet.service.galaxy.router.strategy.GalaxyRouterStrategyContext;
import com.liquidnet.service.galaxy.service.IGalaxyTradeService;
import com.liquidnet.service.galaxy.utils.QueueUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -20,6 +23,9 @@ import org.springframework.stereotype.Service;
@Slf4j
@Service("galaxyTradeServiceImpl")
public class GalaxyTradeServiceImpl implements IGalaxyTradeService {
@Autowired
private QueueUtil queueUtil;
@Autowired
private GalaxyRouterStrategyContext galaxyRouterStrategyContext;
......@@ -31,7 +37,11 @@ public class GalaxyTradeServiceImpl implements IGalaxyTradeService {
@Override
public ResponseDto<GalaxyNftPublishAndBuyRespDto> nftPublishAndBuy(GalaxyNftPublishAndBuyReqDto reqDto) {
return galaxyRouterStrategyContext.getTradeStrategy(reqDto.getRouterType()).nftPublishAndBuy(reqDto);
ResponseDto<GalaxyNftPublishAndBuyRespDto> responseDto = galaxyRouterStrategyContext.getTradeStrategy(reqDto.getRouterType()).nftPublishAndBuy(reqDto);
if(!responseDto.isSuccess()){
queueUtil.sendMsgByRedis(MQConst.GalaxyQueue.JSON_NFT_PUBLISH_AND_BUY.getKey(), JsonUtils.toJson(reqDto));
}
return ResponseDto.success();
}
@Override
......@@ -56,4 +66,14 @@ public class GalaxyTradeServiceImpl implements IGalaxyTradeService {
// return galaxyRouterStrategyContext.getTradeStrategy(reqDto.getRouterType()).nftPublishAndBuyResultBatchQuery(reqDto);
return null;
}
@Override
public ResponseDto<GalaxyNftTransferRespDto> nftTransfer(GalaxyNftTransferReqDto reqDto) {
return galaxyRouterStrategyContext.getTradeStrategy(reqDto.getRouterType()).nftTransfer(reqDto);
}
@Override
public ResponseDto<GalaxyNftTransferQueryRespDto> nftTransferQuery(GalaxyNftTransferQueryReqDto reqDto) {
return galaxyRouterStrategyContext.getTradeStrategy(reqDto.getRouterType()).nftTransferQuery(reqDto);
}
}
......@@ -16,6 +16,7 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
......@@ -97,4 +98,11 @@ public class GoblinNFTUserController {
goblinRedisUtils.setOpenAccountInfo(CurrentUtil.getCurrentUid(), nftAccInfoVo);*/
return ResponseDto.success(goblinRedisUtils.getOpenAccountInfo(CurrentUtil.getCurrentUid()));
}
@ApiOperationSupport(order = 12)
@ApiOperation(value = "业务账号开通信息-指定UID")
@GetMapping(value = "open/account/info2")
public ResponseDto<GoblinUserNftAccInfoVo> openAccountInfoByUid(@RequestParam String uid) {
return ResponseDto.success(StringUtils.isBlank(uid) ? null : goblinRedisUtils.getOpenAccountInfo(uid));
}
}
package com.liquidnet.service.goblin.controller;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.common.sms.constant.SmsEnum;
import com.liquidnet.common.sms.processor.SmsProcessor;
import com.liquidnet.commons.lang.constant.LnsEnum;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.util.Arrays;
@ApiSupport(order = 141000)
@Api(tags = "商城:短信API")
@Slf4j
@Validated
@RestController
@RequestMapping("sms")
public class GoblinSmsController {
@Autowired
Environment env;
@Autowired
SmsProcessor smsProcessor;
@Autowired
GoblinRedisUtils goblinRedisUtils;
@ApiOperationSupport(order = 1)
@ApiOperation(value = "发送验证码", notes = "验证码10分钟内有效,发送频率最短1分钟")
@PostMapping(value = {"code/send"})
public ResponseDto<Object> sendVerificationCode() {
String mobile = (String) CurrentUtil.getTokenClaims().get(CurrentUtil.TOKEN_MOBILE);
String smsCode = goblinRedisUtils.getSmsCodeByMobile(mobile);
if (StringUtils.isEmpty(smsCode)) {
smsCode = RandomStringUtils.randomNumeric(6);
} else {
Long ttl = goblinRedisUtils.ttlSmsCodeByMobile(mobile);
if (null != ttl && ttl != -2 && ttl > 540) {
return ResponseDto.failure(ErrorMapping.get("140000"));
}
}
// if (LnsEnum.ENV.prod.name().equals(env.getProperty(CurrentUtil.CK_ENV_ACTIVE))) {
if (Arrays.asList(LnsEnum.ENV.prod.name(), LnsEnum.ENV.test.name()).contains(env.getProperty(CurrentUtil.CK_ENV_ACTIVE))) {
ObjectNode msgNode = JsonUtils.OM().createObjectNode();
msgNode.put("code", smsCode);
boolean sendRst = smsProcessor.send(mobile, SmsEnum.ADSignName.M02.getVal(), SmsEnum.ADTemplate.SMS_221055862.name(), msgNode.toString());
if (sendRst) {
goblinRedisUtils.setSmsCodeByMobile(mobile, smsCode);
return ResponseDto.success();
}
} else {
goblinRedisUtils.setSmsCodeByMobile(mobile, CurrentUtil.GRAY_LOGIN_SMS_CODE);
return ResponseDto.success();
}
return ResponseDto.failure(ErrorMapping.get("140017"));
}
@ApiOperationSupport(order = 2)
@ApiOperation(value = "校验验证码")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "code", value = "验证码"),
})
@PostMapping(value = {"code/check"})
public ResponseDto<Object> checkVerificationCode(@NotBlank(message = "验证码不能为空") @Pattern(regexp = "\\d{6}", message = "验证码格式有误") @RequestParam String code) {
String mobile = (String) CurrentUtil.getTokenClaims().get(CurrentUtil.TOKEN_MOBILE);
if (!LnsEnum.ENV.prod.name().equals(env.getProperty(CurrentUtil.CK_ENV_ACTIVE))) {
if (CurrentUtil.GRAY_LOGIN_SMS_CODE.equals(code)) return ResponseDto.success();
}
String smsCodeByMobile = goblinRedisUtils.getSmsCodeByMobile(mobile);
if (null == smsCodeByMobile) return ResponseDto.failure(ErrorMapping.get("140018"));
return smsCodeByMobile.equals(code) ? ResponseDto.success() : ResponseDto.failure(ErrorMapping.get("140019"));
}
}
......@@ -3,9 +3,14 @@ package com.liquidnet.service.goblin.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.DESUtils;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.constant.GoblinRedisConst;
import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.GoblinUserNftAccInfoVo;
import com.liquidnet.service.goblin.dto.GoblinUserSafeConfigDto;
import com.liquidnet.service.goblin.dto.vo.*;
import com.liquidnet.service.goblin.service.IGoblinUserDigitalArtworkService;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
......@@ -14,7 +19,9 @@ import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -23,6 +30,8 @@ import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
@ApiSupport(order = 142000)
@Api(tags = "我的藏品管理")
......@@ -31,6 +40,8 @@ import java.time.LocalDateTime;
@RestController
@RequestMapping("artwork")
public class GoblinUserDigitalArtworkController {
@Value("${liquidnet.secret.passwd-salt}")
private String passwdSalt;
@Autowired
GoblinRedisUtils goblinRedisUtils;
@Autowired
......@@ -93,6 +104,7 @@ public class GoblinUserDigitalArtworkController {
} else if (goblinRedisUtils.markUnboxUserDigitalArtwork(artworkId) > 1) {
return ResponseDto.failure(ErrorMapping.get("140000"));
}
goblinRedisUtils.expire(GoblinRedisConst.USER_DIGITAL_ARTWORK_UNBOX.concat(artworkId), 30);
GoblinUserDigitalArtworkListVo unboxingRstVo = null;
try {
switch (userDigitalArtworkVo.getSource()) {
......@@ -106,7 +118,7 @@ public class GoblinUserDigitalArtworkController {
log.warn("Invalid operation[UID={},artworkId={}]", currentUid, artworkId);
}
} catch (Exception e) {
log.error("开启盲盒异常[artworkId={},uid={}]", artworkId, currentUid);
log.error("Ex.开启盲盒异常[artworkId={},uid={}]", artworkId, currentUid);
}
goblinRedisUtils.del(GoblinRedisConst.USER_DIGITAL_ARTWORK_UNBOX.concat(artworkId));
return null == unboxingRstVo ? ResponseDto.failure(ErrorMapping.get("140102")) : ResponseDto.success(unboxingRstVo);
......@@ -132,8 +144,57 @@ public class GoblinUserDigitalArtworkController {
} else if (goblinRedisUtils.markUnboxUserDigitalArtwork(artworkId) > 1) {
return ResponseDto.failure(ErrorMapping.get("140000"));
}
goblinRedisUtils.expire(GoblinRedisConst.USER_DIGITAL_ARTWORK_UNBOX.concat(artworkId), 30);
boolean acceptRstFlg = goblinUserDigitalArtworkService.accept(currentUid, userDigitalArtworkVo);
goblinRedisUtils.del(GoblinRedisConst.USER_DIGITAL_ARTWORK_UNBOX.concat(artworkId));
return acceptRstFlg ? ResponseDto.success(0) : ResponseDto.failure(ErrorMapping.get("140106"));
return acceptRstFlg ? ResponseDto.success(0) : ResponseDto.failure(ErrorMapping.get("140002"));
}
@ApiOperationSupport(order = 5)
@ApiOperation(value = "藏品转赠", notes = "<br />响应【data】值描述:转赠状态[PENDING|SUCCESS]")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "safePasswd", value = "安全密码:MD5(******)"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "artworkId", value = "藏品ID"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "receiver", value = "受赠人"),
})
@PostMapping("transfer")
public ResponseDto<String> transfer(@NotBlank(message = "安全密码不能为空") @RequestParam String safePasswd,
@NotBlank(message = "藏品ID不能为空") @RequestParam String artworkId,
@NotBlank(message = "受赠人不能为空") @RequestParam String receiver) {
String currentUid = CurrentUtil.getCurrentUid();
GoblinUserSafeConfigDto userSafeConfigDto = goblinRedisUtils.getUserSafeConfigDto(currentUid);
if (null == userSafeConfigDto) return ResponseDto.failure(ErrorMapping.get("140021"));// 未设置安全密码
if (!userSafeConfigDto.validPasswd(safePasswd.concat(passwdSalt))) return ResponseDto.failure(ErrorMapping.get("140022"));// 安全密码不正确
GoblinUserDigitalArtworkVo userDigitalArtworkVo = goblinRedisUtils.getUserDigitalArtworkVo(artworkId);
if (null == userDigitalArtworkVo || !currentUid.equals(userDigitalArtworkVo.getUid()) || userDigitalArtworkVo.getDelFlg().equals("1")) {
return ResponseDto.failure(ErrorMapping.get("140105"));
}
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId());
if ("1".equals(goodsSkuInfoVo.getUnbox())) return ResponseDto.failure(ErrorMapping.get("140106"));// 盲盒
if (1 != userDigitalArtworkVo.getState()) return ResponseDto.failure(ErrorMapping.get("140107"));// 未上链
Map<String, Long> artworkTransferConfMap = goblinRedisUtils.getUserDigitalArtworkTransferConfMap();
LocalDateTime transferAllowTime = DateUtil.Formatter.yyyyMMddHHmmss.parse(userDigitalArtworkVo.getTradingAt()).plusSeconds(artworkTransferConfMap.get(goodsSkuInfoVo.getRouteType()));
if (!artworkTransferConfMap.containsKey(goodsSkuInfoVo.getRouteType())) return ResponseDto.failure(ErrorMapping.get("140111"));// 区块链路由未开放转赠
if (transferAllowTime.isAfter(LocalDateTime.now())) return ResponseDto.failure(ErrorMapping.get("140112"));// 转赠过渡期内不可转赠
String transferState = userDigitalArtworkVo.getTransferState();
if (StringUtils.isNotEmpty(transferState)) return ResponseDto.success(transferState);// 转赠状态不为空,标记已转赠或转赠中
String[] receiverArr;
try {
receiverArr = DESUtils.DES().decrypt(receiver).split(",");
} catch (Exception e) {
log.error("Ex.藏品转赠受赠人解析异常[artworkId={},receiver={}]", artworkId, receiver);
return ResponseDto.failure(ErrorMapping.get("140108"));// 受赠人信息有误
}
if (CurrentUtil.getCurrentUid().equals(receiverArr[0])) return ResponseDto.failure(ErrorMapping.get("140109"));// 受赠人不能是本人
GoblinUserNftAccInfoVo receiverAcctInfo = goblinRedisUtils.getOpenAccountInfo(receiverArr[0]);
if (null == receiverAcctInfo || !"2000".equals(receiverAcctInfo.getCode())) return ResponseDto.failure(ErrorMapping.get("140110"));// 未开通数字账户
String lockKey = GoblinRedisConst.USER_DIGITAL_ARTWORK.concat("lk").concat(artworkId);
if (goblinRedisUtils.incr(lockKey, 1) > 1) return ResponseDto.failure(ErrorMapping.get("140000"));
goblinRedisUtils.expire(lockKey, 30);
boolean transferRstFlg = goblinUserDigitalArtworkService.transfer(userDigitalArtworkVo, goodsSkuInfoVo.getRouteType(), receiverArr);
goblinRedisUtils.del(lockKey);
return transferRstFlg ? ResponseDto.success(GoblinStatusConst.TransferState.PENDING.name()) : ResponseDto.failure(ErrorMapping.get("140002"));
}
}
package com.liquidnet.service.goblin.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.commons.lang.constant.LnsEnum;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.constant.GoblinRedisConst;
import com.liquidnet.service.goblin.dto.GoblinUserSafeConfigDto;
import com.liquidnet.service.goblin.service.IGoblinUserSafeConfigService;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
@ApiSupport(order = 142001)
@Api(tags = "用户安全设置")
@Slf4j
@Validated
@RestController
@RequestMapping("user/safe")
public class GoblinUserSafeController {
@Autowired
Environment env;
@Autowired
GoblinRedisUtils goblinRedisUtils;
@Autowired
IGoblinUserSafeConfigService goblinUserAssetConfigService;
@ApiOperationSupport(order = 1)
@ApiOperation(value = "是否设置安全密码", notes = "<br />响应【data】值描述:是否设置[0-未设置|1-已设置]")
@GetMapping(value = {"passwd/had"})
public ResponseDto<String> hadSecurityCode() {
return ResponseDto.success(null == goblinRedisUtils.getUserSafeConfigDto(CurrentUtil.getCurrentUid()) ? "0" : "1");
}
@ApiOperationSupport(order = 2)
@ApiOperation(value = "设置安全密码")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "passwd", value = "安全密码:MD5(******)"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "code", value = "验证码"),
})
@PostMapping(value = {"passwd/set"})
public ResponseDto<Object> setSecurityCode(@NotBlank(message = "安全密码不能为空") @Size(min = 32, max = 32, message = "安全密码无效") @RequestParam String passwd,
@NotBlank(message = "验证码不能为空") @Pattern(regexp = "\\d{6}", message = "验证码格式有误") @RequestParam String code
) {
String currentUid = CurrentUtil.getCurrentUid(), currentMobile = (String) CurrentUtil.getTokenClaims().get(CurrentUtil.TOKEN_MOBILE);
ResponseDto<Object> validResultDto = this.validVerificationCode(code, currentMobile);
if (!validResultDto.isSuccess()) return validResultDto;
GoblinUserSafeConfigDto userSafeConfigDto = goblinRedisUtils.getUserSafeConfigDto(currentUid);
if (null != userSafeConfigDto) {
return ResponseDto.failure(ErrorMapping.get("140020"));
}
String lockKey = GoblinRedisConst.USER_SAFE_CONFIG.concat("lk").concat(currentUid);
if (goblinRedisUtils.incr(lockKey, 1) > 1) return ResponseDto.failure(ErrorMapping.get("140000"));
goblinRedisUtils.expire(lockKey, 30);
boolean resultFlg = goblinUserAssetConfigService.initSafePasswd(passwd, currentUid);
goblinRedisUtils.del(lockKey);
return resultFlg ? ResponseDto.success() : ResponseDto.failure(ErrorMapping.get("140002"));
}
private ResponseDto<Object> validVerificationCode(String code, String mobile) {
if (!LnsEnum.ENV.prod.name().equals(env.getProperty(CurrentUtil.CK_ENV_ACTIVE))) {
if (CurrentUtil.GRAY_LOGIN_SMS_CODE.equals(code)) return ResponseDto.success();
}
String cacheCode = goblinRedisUtils.getSmsCodeByMobile(mobile);
if (StringUtils.isEmpty(cacheCode)) {
return ResponseDto.failure(ErrorMapping.get("140018"));
}
if (!cacheCode.equals(code)) {
return ResponseDto.failure(ErrorMapping.get("140019"));
}
return ResponseDto.success();
}
}
......@@ -2,6 +2,7 @@ package com.liquidnet.service.goblin.controller.Inner;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.service.impl.inner.GoblinQueBizArtworkClqService;
import com.liquidnet.service.goblin.service.impl.inner.GoblinQueBizArtworkTransQueryService;
import com.liquidnet.service.goblin.service.impl.inner.GoblinQueBizArtworkUplService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
......@@ -27,22 +28,33 @@ public class GoblinQueBizArtworkController {
private GoblinQueBizArtworkUplService goblinQueBizArtworkUplService;
@Autowired
private GoblinQueBizArtworkClqService goblinQueBizArtworkClqService;
@Autowired
private GoblinQueBizArtworkTransQueryService goblinQueBizArtworkTransQueryService;
@PostMapping("upl")
@ApiOperation("藏品上传声明")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "skuId", value = "藏品ID", example = "1"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "skuId", value = "藏品SKUID", example = "1"),
})
public ResponseDto<String> bizArtworkUpl(@NotBlank(message = "藏品ID不能为空") @RequestParam String skuId) {
public ResponseDto<String> bizArtworkUpl(@NotBlank(message = "藏品SKUID不能为空") @RequestParam String skuId) {
return goblinQueBizArtworkUplService.bizArtworkUplProcessing(skuId);
}
@PostMapping("clq")
@ApiOperation("藏品声明查询")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "skuId", value = "藏品ID", example = "1"),
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "skuId", value = "藏品SKUID", example = "1"),
})
public ResponseDto<String> bizArtworkClq(@NotBlank(message = "藏品ID不能为空") @RequestParam String skuId) {
public ResponseDto<String> bizArtworkClq(@NotBlank(message = "藏品SKUID不能为空") @RequestParam String skuId) {
return goblinQueBizArtworkClqService.bizArtworkClqProcessing(skuId);
}
@PostMapping("transQuery")
@ApiOperation("藏品转赠结果查询")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "artworkId", value = "藏品ID", example = "1"),
})
public ResponseDto<String> bizArtworkTransQuery(@NotBlank(message = "藏品转赠订单号不能为空") @RequestParam String artworkId) {
return goblinQueBizArtworkTransQueryService.bizArtworkTransQueryProcessing(artworkId);
}
}
......@@ -153,6 +153,8 @@ public class GoblinNftGoodsAppServiceImpl implements IGoblinNftGoodsAppService {
String listId = (String) map.get("listId");
LocalDateTime baseSaleStartTime = (LocalDateTime) map.get("baseSaleStartTime");
LocalDateTime nextSaleStartTime = (LocalDateTime) map.get("nextSaleStartTime");
LocalDateTime firstSaleStartTime = (LocalDateTime) map.get("firstSaleStartTime");
LocalDateTime firstSaleEndTime = (LocalDateTime) map.get("firstSaleEndTime");
if (goblinRedisUtils.getSkuAllStatusShow(skuInfoVo)) {
//获取预约相关
AnticipateValueVo anticipateValueVo = goblinGoodsAnticipateMgService.getAnticipateValueBySkuId(skuId, 1);
......@@ -184,6 +186,8 @@ public class GoblinNftGoodsAppServiceImpl implements IGoblinNftGoodsAppService {
nftGoodsSkuInfoVo.setListId(listId);
nftGoodsSkuInfoVo.setBaseSaleStartTime(baseSaleStartTime);
nftGoodsSkuInfoVo.setNextSaleStartTime(nextSaleStartTime);
nftGoodsSkuInfoVo.setFirstSaleEndTime(firstSaleEndTime);
nftGoodsSkuInfoVo.setFirstSaleStartTime(firstSaleStartTime);
// 是否开启兑换
nftGoodsSkuInfoVo.setIsExchange(goblinRedisUtils.getIsExchange(skuId));
// 待支付订单数量
......
......@@ -80,6 +80,16 @@ public class GoblinNftOrderAppServiceImpl implements IGoblinNftOrderAppService {
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(orderVo.getSkuId());
GoblinNftOrderGoodsSkuInfoVo nftGoodsSkuInfoVo = GoblinNftOrderGoodsSkuInfoVo.getNew().copy(goodsSkuInfoVo);
orderDetails.setGoodsSkuInfoVo(nftGoodsSkuInfoVo);
if (StringUtils.isNotEmpty(orderVo.getArtworkId())) {
GoblinUserDigitalArtworkVo userDigitalArtworkVo = goblinRedisUtils.getUserDigitalArtworkVo(orderVo.getArtworkId());
GoblinNftOrderArtworkInfoVo nftOrderArtworkInfoVo = GoblinNftOrderArtworkInfoVo.getNew().copy(userDigitalArtworkVo);
if (userDigitalArtworkVo.getSkuId().equals(orderVo.getSkuId())) {
nftOrderArtworkInfoVo.setUnbox(goodsSkuInfoVo.getUnbox());
} else {
nftOrderArtworkInfoVo.setUnbox(goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId()).getUnbox());
}
orderDetails.setArtworkInfoVo(nftOrderArtworkInfoVo);
}
return ResponseDto.success(orderDetails);
}
......
package com.liquidnet.service.goblin.service.impl;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.*;
import com.liquidnet.service.base.MdbMessage;
import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.galaxy.dto.param.GalaxyNftPublishAndBuyResultQueryReqDto;
import com.liquidnet.service.galaxy.dto.param.GalaxyNftPublishAndBuyResultQueryRespDto;
import com.liquidnet.service.galaxy.dto.param.GalaxyNftTransferReqDto;
import com.liquidnet.service.galaxy.service.IGalaxyTradeService;
import com.liquidnet.service.goblin.constant.GoblinRedisConst;
import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.GoblinQueueBizMongoDto;
import com.liquidnet.service.goblin.dto.vo.*;
import com.liquidnet.service.goblin.service.IGoblinUserDigitalArtworkService;
......@@ -30,6 +30,7 @@ import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
......@@ -55,10 +56,10 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr
if (artworkNum > 30 && pageNum * pageSize > 30) {// 查询Mongo
// if ((long) pageNum * pageSize > artworkNum) pageNum = Math.toIntExact(artworkNum / pageSize);
subArtworkIdList = goblinMongoUtils.getPageUserDigitalArtworkIds(uid, pageNum, pageSize);
if (CollectionUtils.isEmpty(subArtworkIdList)) {
log.warn("#我的藏品列表:藏品IDS数据为空[uid={},artworkNum={}]", uid, artworkNum);
return pageVo.setArtworkNum((int) artworkNum).setPagedResult(listVoPagedResult).setSystime(LocalDateTime.now());
}
// if (CollectionUtils.isEmpty(subArtworkIdList)) {
// log.warn("#我的藏品列表:藏品IDS数据为空[uid={},artworkNum={}]", uid, artworkNum);
// return pageVo.setArtworkNum((int) artworkNum).setPagedResult(listVoPagedResult).setSystime(LocalDateTime.now());
// }
} else {
List<String> userDigitalArtworkIds = goblinRedisUtils.getUserDigitalArtworkIds(uid);
// if (CollectionUtils.isEmpty(userDigitalArtworkIds)) {
......@@ -72,6 +73,12 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr
int fromIndex = (pageNum - 1) * pageSize;
subArtworkIdList = userDigitalArtworkIds.subList(fromIndex, Math.min(fromIndex + pageSize, cacheSize));
}
if (CollectionUtils.isEmpty(subArtworkIdList)) {
log.warn("#我的藏品列表:藏品IDS数据为空[uid={},artworkNum={}]", uid, artworkNum);
return pageVo.setArtworkNum((int) artworkNum).setPagedResult(listVoPagedResult).setSystime(LocalDateTime.now());
}
Map<String, Long> artworkTransferConfMap = goblinRedisUtils.getUserDigitalArtworkTransferConfMap();
List<GoblinUserDigitalArtworkListVo> list = ObjectUtil.getGoblinUserDigitalArtworkListVoArrayList();
LocalDateTime now = LocalDateTime.now(), toCheckTime = now.minusSeconds(15);
......@@ -89,6 +96,7 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr
listVo.setEdition(goodsSkuInfoVo.getSkuStock());
listVo.setUnbox(goodsSkuInfoVo.getUnbox());
listVo.setOpeningTime(goodsSkuInfoVo.getOpeningTime());
listVo.setRouteType(goodsSkuInfoVo.getRouteType());
// 非盲盒 && 生成中 && 创建时间判断
if ("0".equals(listVo.getUnbox()) && 0 == listVo.getState() && listVo.getCreatedAt().isBefore(toCheckTime)) {// 15秒前创建的藏品,去主动核实发行交易状态
......@@ -100,6 +108,11 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr
// listVo.setCoverPic(goodsSkuInfoVo.getSkuPic());
// }
if (artworkTransferConfMap.containsKey(goodsSkuInfoVo.getRouteType()) && StringUtils.isNotEmpty(userDigitalArtworkVo.getTradingAt())) {
long transferTimeLimit = artworkTransferConfMap.get(goodsSkuInfoVo.getRouteType());
listVo.setTransferAllowTime(DateUtil.Formatter.yyyyMMddHHmmss.parse(userDigitalArtworkVo.getTradingAt()).plusSeconds(transferTimeLimit));
}
list.add(listVo);
}
......@@ -112,7 +125,7 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr
@Override
public GoblinUserDigitalArtworkInfoVo info(String uid, String artworkId) {
GoblinUserDigitalArtworkVo userDigitalArtworkVo = goblinRedisUtils.getUserDigitalArtworkVo(artworkId);
if (null != userDigitalArtworkVo && userDigitalArtworkVo.getUid().equals(uid)) {
/*if (null != userDigitalArtworkVo && userDigitalArtworkVo.getUid().equals(uid)) {
GoblinUserDigitalArtworkInfoVo artworkInfoVo = GoblinUserDigitalArtworkInfoVo.getNew().copy(userDigitalArtworkVo);
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId());
......@@ -136,52 +149,48 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr
// artworkInfoVo.setGenerateTime(goodsSkuInfoVo.getDeclareAt());
artworkInfoVo.setSkuWatchPic(goodsSkuInfoVo.getSkuWatchPic());
return artworkInfoVo;
}*/
if (null != userDigitalArtworkVo && userDigitalArtworkVo.getUid().equals(uid)) {
GoblinUserDigitalArtworkInfoVo artworkInfoVo = GoblinUserDigitalArtworkInfoVo.getNew().copy(userDigitalArtworkVo);
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId());
// GoblinGoodsInfoVo goodsInfoVo = goblinRedisUtils.getGoodsInfoVo(goodsSkuInfoVo.getSpuId());
GoblinNftOrderVo nftOrder = goblinRedisUtils.getGoblinNftOrder(userDigitalArtworkVo.getOrderId());
if (null != nftOrder && StringUtils.isNotBlank(nftOrder.getBoxSkuId())) {
artworkInfoVo.setSkuId(nftOrder.getSkuId());
}
artworkInfoVo.setCoverPic(goodsSkuInfoVo.getSkuPic());
artworkInfoVo.setName(goodsSkuInfoVo.getName());
artworkInfoVo.setSubtitle(goodsSkuInfoVo.getSubtitle());
// artworkInfoVo.setAuthor(goodsInfoVo.getAuthor());
// artworkInfoVo.setPublisher(goodsInfoVo.getPublisher());
artworkInfoVo.setEdition(goodsSkuInfoVo.getSkuStock());
artworkInfoVo.setSkuWatchPic(goodsSkuInfoVo.getSkuWatchPic());
artworkInfoVo.setRouteType(goodsSkuInfoVo.getRouteType());
boolean notTransferFlg = StringUtils.isEmpty(userDigitalArtworkVo.getTransferState());
if (!notTransferFlg) {// 发生转赠
artworkInfoVo.setTransferTime(userDigitalArtworkVo.getUpdatedAt());
}
if ("0".equals(goodsSkuInfoVo.getUnbox()) && 1 == userDigitalArtworkVo.getState() && notTransferFlg) {// 非盲盒 & 已上链 & 非转赠(转赠中、已转赠)
artworkInfoVo.setMaterialType(goodsSkuInfoVo.getMaterialType());
artworkInfoVo.setMaterialUrl(goodsSkuInfoVo.getMaterialUrl());
artworkInfoVo.setDetails(goodsSkuInfoVo.getDetails());
artworkInfoVo.setArUrlIos(goodsSkuInfoVo.getArUrlIos());
artworkInfoVo.setArUrlAndroid(goodsSkuInfoVo.getArUrlAndroid());
Map<String, Long> artworkTransferConfMap = goblinRedisUtils.getUserDigitalArtworkTransferConfMap();
if (artworkTransferConfMap.containsKey(artworkInfoVo.getRouteType()) && StringUtils.isNotEmpty(userDigitalArtworkVo.getTradingAt())) {
long transferTimeLimit = artworkTransferConfMap.get(goodsSkuInfoVo.getRouteType());
artworkInfoVo.setTransferAllowTime(DateUtil.Formatter.yyyyMMddHHmmss.parse(userDigitalArtworkVo.getTradingAt()).plusSeconds(transferTimeLimit));
}
artworkInfoVo.setSystime(LocalDateTime.now());
}
return artworkInfoVo;
}
return null;
}
// @Override
// public GoblinUserDigitalArtworkListVo unboxingForBuyOrExchange(String uid, GoblinUserDigitalArtworkVo userDigitalArtworkVo) {
// String orderId = userDigitalArtworkVo.getOrderId();
// GoblinNftOrderVo goblinNftOrder = goblinRedisUtils.getGoblinNftOrder(orderId);
// GoblinGoodsSkuInfoVo unboxSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(goblinNftOrder.getBoxSkuId());
//
// GoblinUserDigitalArtworkListVo unboxDigitalArtworkListVo = GoblinUserDigitalArtworkListVo.getNew();
//// unboxDigitalArtworkListVo.setArtworkId();
// unboxDigitalArtworkListVo.setName(unboxSkuInfoVo.getName());
// unboxDigitalArtworkListVo.setSubtitle(unboxSkuInfoVo.getSubtitle());
// unboxDigitalArtworkListVo.setCoverPic(unboxSkuInfoVo.getSkuPic());
//// unboxDigitalArtworkListVo.setSource(userDigitalArtworkVo.getSource());
//// unboxDigitalArtworkListVo.setState(0);
//// unboxDigitalArtworkListVo.setCreatedAt();
//// unboxDigitalArtworkListVo.setUnbox("0");
//// unboxDigitalArtworkListVo.setOpeningTime(now);
//
// LocalDateTime now = LocalDateTime.now();
// userDigitalArtworkVo.setState(1);
// userDigitalArtworkVo.setDelFlg("1");// 盲盒开启后直接删除
// userDigitalArtworkVo.setOpeningAt(now);
// userDigitalArtworkVo.setUpdatedAt(now);
// userDigitalArtworkVo.setDeletedAt(now);
//
//// if (goblinMongoUtils.updateUserDigitalArtworkVoByUnboxing(userDigitalArtworkVo)) {
// goblinRedisUtils.setexUserDigitalArtworkVo(userDigitalArtworkVo);
//
// String artworkId = userDigitalArtworkVo.getArtworkId();
// GoblinQueueBizArtworkGenDto queueBizArtworkGenDto = GoblinQueueBizArtworkGenDto.getNew();
// queueBizArtworkGenDto.setUid(uid);
// queueBizArtworkGenDto.setSkuId(unboxSkuInfoVo.getSkuId());
// queueBizArtworkGenDto.setOrderId(orderId);
// queueBizArtworkGenDto.setSource(userDigitalArtworkVo.getSource());
// queueBizArtworkGenDto.setFromArtId(artworkId);
// queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_GEN.getKey(), queueBizArtworkGenDto.toJson());
// queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(),
// SqlMapping.get("goblin_user_digital_artwork.update_for_unboxing", now, now, now, artworkId));
//// }
// return unboxDigitalArtworkListVo;
// }
@Override
public GoblinUserDigitalArtworkListVo unboxingForBuyOrExchange(String uid, GoblinUserDigitalArtworkVo userDigitalArtworkBoxVo) {
LocalDateTime now = LocalDateTime.now();
......@@ -239,11 +248,23 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr
// // Mongo记录VO
// goblinMongoUtils.insertUserDigitalArtworkVo(initUserDigitalArtworkVo);
// Redis更新VO
goblinRedisUtils.setexUserDigitalArtworkVo(userDigitalArtworkBoxVo);
goblinRedisUtils.setexUserDigitalArtworkVo(userDigitalArtworkBoxVo, 48 * 3600);
// Redis记录VO
goblinRedisUtils.setUserDigitalArtworkVo(initUserDigitalArtworkVo);
// Redis更新藏品ID列表
goblinRedisUtils.addUserDigitalArtworkIdsForUnbox(uid, artworkId, userDigitalArtworkBoxVo.getArtworkId());
{// Redis更新藏品订单关联artworkId
orderVo.setArtworkId(artworkId);
goblinRedisUtils.setGoblinNftOrder(orderVo);
// Mongo同步更新藏品订单
MdbMessage mdbMessage = MdbMessage.getNew();
mdbMessage.setCollect(GoblinNftOrderVo.class.getSimpleName());
mdbMessage.setColumn("orderId");
mdbMessage.setBizId(orderVo.getOrderId());
mdbMessage.setPrefix(GoblinRedisConst.REDIS_GOBLIN_NFT_ORDER_INFO);
mdbMessage.setOpType(2);
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_NFT_MONGO.getKey(), mdbMessage.toJson());
}
if ("0".equals(unboxSkuInfoVo.getUnbox())) {// 非盲盒,NFT发行购买
ObjectNode bizNftBuyNode = JsonUtils.OM().createObjectNode().put("nftOrderPayId", orderId).put("routerType", unboxSkuInfoVo.getRouteType())
......@@ -259,7 +280,10 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr
toMqSqls.add(SqlMapping.get("goblin_user_digital_artwork.update_for_unboxing"));
LinkedList<Object[]> updateBoxArtworkObjs = CollectionUtil.linkedListObjectArr();
updateBoxArtworkObjs.add(new Object[]{now, now, now, userDigitalArtworkBoxVo.getArtworkId()});
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(), SqlMapping.gets(toMqSqls, initUserDigitalArtworkObjs, updateBoxArtworkObjs));
toMqSqls.add(SqlMapping.get("goblin_nft_order.update_artwork"));
LinkedList<Object[]> updateNftOrderObjs = CollectionUtil.linkedListObjectArr();
updateNftOrderObjs.add(new Object[]{artworkId, orderId});
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(), SqlMapping.gets(toMqSqls, initUserDigitalArtworkObjs, updateBoxArtworkObjs, updateNftOrderObjs));
// Mongo同步更新
GoblinQueueBizMongoDto goblinQueueBizMongoDto = GoblinQueueBizMongoDto.getNew();
......@@ -319,6 +343,47 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr
// return false;
}
@Override
public boolean transfer(GoblinUserDigitalArtworkVo userDigitalArtworkVo, String routerType, String[] receiverArr) {
userDigitalArtworkVo.setUpdatedAt(LocalDateTime.now());
userDigitalArtworkVo.setReceiverUid(receiverArr[0]);
userDigitalArtworkVo.setTransferOrderId(IDGenerator.nextSnowId());
userDigitalArtworkVo.setTransferState(GoblinStatusConst.TransferState.PENDING.name());
userDigitalArtworkVo.setReceiverUser(SensitizeUtil.custom(receiverArr[1], 0, 1) + String.format(" (%s)", SensitizeUtil.custom(receiverArr[2], 3, 4)));
if (goblinRedisUtils.setUserDigitalArtworkVo(userDigitalArtworkVo)) {
GalaxyNftTransferReqDto galaxyNftTransferReqDto = GalaxyNftTransferReqDto.getNew();
galaxyNftTransferReqDto.setRouterType(routerType);
galaxyNftTransferReqDto.setNftId(userDigitalArtworkVo.getNftId());
galaxyNftTransferReqDto.setUserId(userDigitalArtworkVo.getUid());
galaxyNftTransferReqDto.setReceiveUserId(receiverArr[0]);
galaxyNftTransferReqDto.setTransOrderId(userDigitalArtworkVo.getTransferOrderId());
galaxyNftTransferReqDto.setReqTimestamp(DateUtil.Formatter.yyyyMMddHHmmss.format(userDigitalArtworkVo.getUpdatedAt()));
queueUtils.sendMsgByRedis(MQConst.GalaxyQueue.JSON_NFT_TRANSFER.getKey(), JsonUtils.toJson(galaxyNftTransferReqDto));
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_TRANS_QUERY.getKey(), userDigitalArtworkVo.getArtworkId().concat(",").concat(String.valueOf(LocalDateTime.now())));
// Mongo同步更新
GoblinQueueBizMongoDto goblinQueueBizMongoDto = GoblinQueueBizMongoDto.getNew();
goblinQueueBizMongoDto.setCollect(GoblinUserDigitalArtworkVo.class.getSimpleName());
goblinQueueBizMongoDto.setColumn("artworkId");
goblinQueueBizMongoDto.setBizId(userDigitalArtworkVo.getArtworkId());
goblinQueueBizMongoDto.setPrefix(GoblinRedisConst.USER_DIGITAL_ARTWORK);
goblinQueueBizMongoDto.setOpType(2);
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_NFT_MONGO.getKey(), goblinQueueBizMongoDto.toJson());
// Mysql持久化
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
toMqSqls.add(SqlMapping.get("goblin_user_digital_artwork.update_for_transfer"));
LinkedList<Object[]> updateUserDigitalArtworkObjs = CollectionUtil.linkedListObjectArr();
updateUserDigitalArtworkObjs.add(new Object[]{userDigitalArtworkVo.getReceiverUid(),
userDigitalArtworkVo.getTransferOrderId(), userDigitalArtworkVo.getTransferState(), userDigitalArtworkVo.getUpdatedAt(), userDigitalArtworkVo.getArtworkId()
});
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(), SqlMapping.gets(toMqSqls, updateUserDigitalArtworkObjs));
return true;
}
return false;
}
/* -------------------------------------------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------------------------------------------- */
......
package com.liquidnet.service.goblin.service.impl;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.goblin.dto.GoblinUserSafeConfigDto;
import com.liquidnet.service.goblin.service.IGoblinUserSafeConfigService;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.QueueUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.LinkedList;
@Service
public class GoblinUserSafeConfigServiceImpl implements IGoblinUserSafeConfigService {
@Value("${liquidnet.secret.passwd-salt}")
private String passwdSalt;
@Autowired
private QueueUtils queueUtils;
@Autowired
private GoblinRedisUtils goblinRedisUtils;
@Override
public boolean initSafePasswd(String passwd, String uid) {
GoblinUserSafeConfigDto userSafeConfigDto = GoblinUserSafeConfigDto.getNew();
userSafeConfigDto.setPasswd(DigestUtils.md5DigestAsHex(passwd.concat(passwdSalt).getBytes(StandardCharsets.UTF_8)));
if (goblinRedisUtils.setUserSafeConfigDto(uid, userSafeConfigDto)) {
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
toMqSqls.add(SqlMapping.get("goblin_user_safe_config.set_passwd"));
LinkedList<Object[]> initUserSafeConfigObjs = CollectionUtil.linkedListObjectArr();
LocalDateTime nowDateTime = LocalDateTime.now();
initUserSafeConfigObjs.add(new Object[]{uid, userSafeConfigDto.getPasswd(), nowDateTime, nowDateTime, uid, userSafeConfigDto.getPasswd(), nowDateTime});
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(), SqlMapping.gets(toMqSqls, initUserSafeConfigObjs));
return true;
}
return false;
}
}
......@@ -53,14 +53,14 @@ public class GoblinQueBizArtworkClqService {
try {
GoblinGoodsSkuInfoVo mgtGoodsSkuInfoVo = goblinMongoUtils.getGoodsSkuInfoVo(skuId);
if (null == mgtGoodsSkuInfoVo) {
log.warn("#NFT声明查询:藏品SKU不存在[skuId={}]", skuId);
log.warn("#藏品声明查询:藏品SKU不存在[skuId={}]", skuId);
return ResponseDto.success(String.format("藏品SKU不存在[skuId:%s]", skuId));
}
int skuType = mgtGoodsSkuInfoVo.getSkuType(), upchain = mgtGoodsSkuInfoVo.getUpchain();
String unbox = mgtGoodsSkuInfoVo.getUnbox();
// 非数字藏品 || 盲盒 || 非声明中 || 已有声明系列ID
if (1 != skuType || !"0".equals(unbox) || 9 != upchain || StringUtils.isNotEmpty(mgtGoodsSkuInfoVo.getSeriesId())) {
log.warn("#NFT声明查询:藏品SKU无效或已声明[skuId={},skuType={},unbox={},upchain={},seriesId={}]",
log.warn("#藏品声明查询:藏品SKU无效或已声明[skuId={},skuType={},unbox={},upchain={},seriesId={}]",
skuId, skuType, unbox, upchain, mgtGoodsSkuInfoVo.getSeriesId());
return ResponseDto.success(String.format("藏品SKU无效或已声明[skuId:%s]", skuId));
}
......@@ -93,7 +93,7 @@ public class GoblinQueBizArtworkClqService {
sqlUpdateMap.put(MQConst.QUEUE_MESSAGE_KEY, SqlMapping.gets(toMqSqls, updateGoodsSkuNftObjs));
redisDataSourceUtil.getRedisQueueUtil().getStringRedisTemplate().opsForStream().add(StreamRecords.mapBacked(sqlUpdateMap).withStreamKey(MQConst.GoblinQueue.SQL_GOODS.getKey()));
} catch (Exception e) {
log.error("Ex.NFT声明查询:处理异常[skuId={}]", skuId, e);
log.error("Ex.藏品声明查询:处理异常[skuId={}]", skuId, e);
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_CLQ.getKey(), skuId);
return ResponseDto.failure(String.format("藏品声明查询异常[skuId:%s]", skuId));// 声明查询失败,重新入队处理
}
......@@ -114,12 +114,12 @@ public class GoblinQueBizArtworkClqService {
requestDto.setRouterType(routerType);
responseDto = galaxyArtworkService.seriesClaimResultQuery(requestDto);
if (!responseDto.isSuccess()) {
log.warn("#NFT声明查询:处理失败[paramsStr={},postRespStr={}]", JsonUtils.toJson(requestDto), JsonUtils.toJson(responseDto));
log.warn("#藏品声明查询:处理失败[paramsStr={},postRespStr={}]", JsonUtils.toJson(requestDto), JsonUtils.toJson(responseDto));
return null;
}
return responseDto.getData();
} catch (Exception e) {
log.error("Ex.NFT声明查询:处理异常[paramsStr={},postRespStr={}],ex:{}", JsonUtils.toJson(requestDto), JsonUtils.toJson(responseDto), e.getMessage());
log.error("Ex.藏品声明查询:处理异常[paramsStr={},postRespStr={}],ex:{}", JsonUtils.toJson(requestDto), JsonUtils.toJson(responseDto), e.getMessage());
return null;
}
}
......
package com.liquidnet.service.goblin.service.impl.inner;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.galaxy.dto.param.GalaxyNftTransferQueryReqDto;
import com.liquidnet.service.galaxy.dto.param.GalaxyNftTransferQueryRespDto;
import com.liquidnet.service.galaxy.service.IGalaxyTradeService;
import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinUserDigitalArtworkVo;
import com.liquidnet.service.goblin.util.GoblinMongoUtils;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.QueueUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.LinkedList;
@Slf4j
@Service
public class GoblinQueBizArtworkTransQueryService {
@Autowired
QueueUtils queueUtils;
@Autowired
GoblinRedisUtils goblinRedisUtils;
@Autowired
GoblinMongoUtils goblinMongoUtils;
@Resource(name = "galaxyTradeServiceImpl")
private IGalaxyTradeService galaxyTradeService;
public ResponseDto<String> bizArtworkTransQueryProcessing(String artworkId) {
try {
GoblinUserDigitalArtworkVo userDigitalArtworkVo = goblinRedisUtils.getUserDigitalArtworkVo(artworkId);
if (null == userDigitalArtworkVo) {
log.warn("#藏品转赠结果查询:藏品不存在[artworkId={}]", artworkId);
return ResponseDto.success(String.format("藏品不存在[artworkId:%s]", artworkId));
}
if (!GoblinStatusConst.TransferState.PENDING.name().equals(userDigitalArtworkVo.getTransferState())) {
log.warn("#藏品转赠结果查询:藏品非转赠中不处理[artworkId={},transferState={},transferOrderId={}]", artworkId, userDigitalArtworkVo.getTransferState(), userDigitalArtworkVo.getTransferOrderId());
return ResponseDto.success(String.format("藏品非转赠中不处理[artworkId:%s]", artworkId));
}
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId());
GalaxyNftTransferQueryRespDto queryRespDto = this.queryNftTransferQueryRespDto(userDigitalArtworkVo.getTransferOrderId(), goodsSkuInfoVo.getRouteType());
if (null == queryRespDto || !"1".equals(queryRespDto.getTransferStatus())) {// 查询失败,重新入队处理
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_TRANS_QUERY.getKey(), userDigitalArtworkVo.getArtworkId());
return ResponseDto.failure(String.format("藏品转赠结果查询失败[artworkId:%s]", artworkId));
}
if (!userDigitalArtworkVo.getReceiverUid().equals(queryRespDto.getOwnerUserId())) {// 拥有者与受赠人不一致(特殊情况,重新入队处理)
log.warn("#藏品转赠结果查询:拥有者与受赠人不一致[artworkId={},receiverUid={},ownerUserId={}]", userDigitalArtworkVo.getArtworkId(), userDigitalArtworkVo.getReceiverUid(), queryRespDto.getOwnerUserId());
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_TRANS_QUERY.getKey(), artworkId);
return ResponseDto.failure(String.format("藏品转赠结果查询数据不一致[artworkId:%s]", artworkId));
}
LocalDateTime nowDateTime = LocalDateTime.now();
{// 转赠人藏品处理
userDigitalArtworkVo.setTransferState(GoblinStatusConst.TransferState.SUCCESS.name());
userDigitalArtworkVo.setDelFlg("1");
userDigitalArtworkVo.setDeletedAt(nowDateTime);
if (goblinMongoUtils.updateUserDigitalArtworkVoByTransQuery(userDigitalArtworkVo)) {// 转赠人藏品状态更新Mongo
if (6 == userDigitalArtworkVo.getSource()) {// 来源为转赠的藏品,设置过期时间到期删除
goblinRedisUtils.setexUserDigitalArtworkVo(userDigitalArtworkVo, 30 * 60);
}
goblinRedisUtils.setUserDigitalArtworkVo(userDigitalArtworkVo);// 转赠人藏品状态更新Redis
goblinRedisUtils.addSubUserDigitalArtworkCount(userDigitalArtworkVo.getUid(), -1);// 转赠人藏品数量处理Redis
goblinRedisUtils.resetUserDigitalArtworkIdsByMongo(userDigitalArtworkVo.getUid());// 转赠人藏品ID集合缓存重置Redis
} else {
log.warn("#藏品转赠结果查询:更新转赠人藏品Mongo数据失败[artworkId={}]", userDigitalArtworkVo.getArtworkId());
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_TRANS_QUERY.getKey(), artworkId);
return ResponseDto.failure(String.format("藏品转赠结果查询数据不一致[artworkId:%s]", artworkId));
}
}
GoblinUserDigitalArtworkVo receiverDigitalArtworkVo = GoblinUserDigitalArtworkVo.getNew();
{// 受赠人藏品处理
String transferTime = queryRespDto.getTransferTime(), transferHash = queryRespDto.getTransferHash();
receiverDigitalArtworkVo.setArtworkId(IDGenerator.nextSnowId());
receiverDigitalArtworkVo.setUid(userDigitalArtworkVo.getReceiverUid());
receiverDigitalArtworkVo.setSkuId(userDigitalArtworkVo.getSkuId());
receiverDigitalArtworkVo.setOrderId(userDigitalArtworkVo.getTransferOrderId());
receiverDigitalArtworkVo.setEditionSn(userDigitalArtworkVo.getEditionSn());
receiverDigitalArtworkVo.setNftId(userDigitalArtworkVo.getNftId());
//receiverDigitalArtworkVo.setReleaseTxhash();
//receiverDigitalArtworkVo.setReleaseAt();
receiverDigitalArtworkVo.setTradingTxhash(transferHash);
receiverDigitalArtworkVo.setTradingAt(transferTime);
//receiverDigitalArtworkVo.setReceiverUid();
//receiverDigitalArtworkVo.setTransferOrderId();
//receiverDigitalArtworkVo.setTransferState();
receiverDigitalArtworkVo.setSource(6);
receiverDigitalArtworkVo.setState(1);
receiverDigitalArtworkVo.setDelFlg("0");
//receiverDigitalArtworkVo.setOpeningAt();
receiverDigitalArtworkVo.setCreatedAt(nowDateTime);
//receiverDigitalArtworkVo.setUpdatedAt();
receiverDigitalArtworkVo.setAuthor(userDigitalArtworkVo.getAuthor());
receiverDigitalArtworkVo.setPublisher(userDigitalArtworkVo.getPublisher());
goblinMongoUtils.insertUserDigitalArtworkVo(receiverDigitalArtworkVo);// 受赠人藏品记录Mongo
goblinRedisUtils.setUserDigitalArtworkVo(receiverDigitalArtworkVo);// 受赠人藏品记录Redis
goblinRedisUtils.addUserDigitalArtworkIds(receiverDigitalArtworkVo.getUid(), receiverDigitalArtworkVo.getArtworkId());// 受赠人藏品ID列表记录Redis
goblinRedisUtils.addSubUserDigitalArtworkCount(receiverDigitalArtworkVo.getUid(), 1);// 受赠人藏品数量记录Redis
}
{// Mysql持久化
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
toMqSqls.add(SqlMapping.get("goblin_user_digital_artwork.update_for_trans_query"));
LinkedList<Object[]> updateUserDigitalArtworkObjs = CollectionUtil.linkedListObjectArr();
updateUserDigitalArtworkObjs.add(new Object[]{userDigitalArtworkVo.getTransferState(), userDigitalArtworkVo.getDeletedAt(), userDigitalArtworkVo.getArtworkId()});
toMqSqls.add(SqlMapping.get("goblin_user_digital_artwork.insert_for_transfer"));
LinkedList<Object[]> initUserDigitalArtworkObjs = CollectionUtil.linkedListObjectArr();
initUserDigitalArtworkObjs.add(new Object[]{receiverDigitalArtworkVo.getArtworkId(),
receiverDigitalArtworkVo.getUid(), receiverDigitalArtworkVo.getSkuId(), receiverDigitalArtworkVo.getOrderId(),
receiverDigitalArtworkVo.getEditionSn(), receiverDigitalArtworkVo.getNftId(), receiverDigitalArtworkVo.getTradingTxhash(),
receiverDigitalArtworkVo.getTradingAt(), receiverDigitalArtworkVo.getSource(), receiverDigitalArtworkVo.getState(),
receiverDigitalArtworkVo.getCreatedAt()});
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(), SqlMapping.gets(toMqSqls, updateUserDigitalArtworkObjs, initUserDigitalArtworkObjs));
}
} catch (Exception e) {
log.error("Ex.藏品转赠结果查询:处理异常[artworkId={}]", artworkId, e);
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_UPL.getKey(), artworkId);
return ResponseDto.failure(String.format("藏品转赠结果查询异常[artworkId:%s]", artworkId));
}
return ResponseDto.success();
}
/* ------------------------------------------------------------------------------------ */
/* ------------------------------------------------------------------------------------ */
/* ------------------------------------------------------------------------------------ */
/* ------------------------------------------------------------------------------------ */
/* ------------------------------------------------------------------------------------ */
private GalaxyNftTransferQueryRespDto queryNftTransferQueryRespDto(String transferOrderId, String routerType) {
GalaxyNftTransferQueryReqDto requestDto = GalaxyNftTransferQueryReqDto.getNew();
ResponseDto<GalaxyNftTransferQueryRespDto> responseDto = null;
try {
requestDto.setTransOrderId(transferOrderId);
requestDto.setRouterType(routerType);
responseDto = galaxyTradeService.nftTransferQuery(requestDto);
if (!responseDto.isSuccess()) {
log.warn("#藏品转赠结果查询:处理失败[paramsStr={},postRespStr={}]", JsonUtils.toJson(requestDto), JsonUtils.toJson(responseDto));
return null;
}
return responseDto.getData();
} catch (Exception e) {
log.error("Ex.藏品转赠结果查询:处理异常[paramsStr={},postRespStr={}],ex:{}", JsonUtils.toJson(requestDto), JsonUtils.toJson(responseDto), e.getMessage());
return null;
}
}
/* ------------------------------------------------------------------------------------ */
/* ------------------------------------------------------------------------------------ */
/* ------------------------------------------------------------------------------------ */
}
\ No newline at end of file
......@@ -57,14 +57,14 @@ public class GoblinQueBizArtworkUplService {
try {
GoblinGoodsSkuInfoVo mgtGoodsSkuInfoVo = goblinMongoUtils.getGoodsSkuInfoVo(skuId);
if (null == mgtGoodsSkuInfoVo) {
log.warn("#NFT素材上传:藏品SKU不存在[skuId={}]", skuId);
log.warn("#藏品素材上传:藏品SKU不存在[skuId={}]", skuId);
return ResponseDto.success(String.format("藏品SKU不存在[skuId:%s]", skuId));
}
int skuType = mgtGoodsSkuInfoVo.getSkuType(), upchain = mgtGoodsSkuInfoVo.getUpchain();
String unbox = mgtGoodsSkuInfoVo.getUnbox();
// 非数字藏品 || 盲盒 || 非声明中 || 已有声明系列ID
if (1 != skuType || !"0".equals(unbox) || 0 != upchain || StringUtils.isNotEmpty(mgtGoodsSkuInfoVo.getSeriesId())) {
log.warn("#NFT素材上传:藏品SKU无效或已声明[skuId={},skuType={},unbox={},upchain={},seriesId={}]",
log.warn("#藏品素材上传:藏品SKU无效或已声明[skuId={},skuType={},unbox={},upchain={},seriesId={}]",
skuId, skuType, unbox, upchain, mgtGoodsSkuInfoVo.getSeriesId());
return ResponseDto.success(String.format("藏品SKU无效或已声明[skuId:%s]", skuId));
}
......@@ -126,7 +126,7 @@ public class GoblinQueBizArtworkUplService {
toQueueBeClaimQueryMsg.put(MQConst.QUEUE_MESSAGE_KEY, skuId.concat(",").concat(String.valueOf(LocalDateTime.now())));
streamOperations.add(StreamRecords.mapBacked(toQueueBeClaimQueryMsg).withStreamKey(MQConst.GoblinQueue.BIZ_ARTWORK_CLQ.getKey()));
} catch (Exception e) {
log.error("Ex.NFT素材上传:处理异常[skuId={}]", skuId, e);
log.error("Ex.藏品素材上传:处理异常[skuId={}]", skuId, e);
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_UPL.getKey(), skuId);
return ResponseDto.failure(String.format("藏品上传异常[skuId:%s]", skuId));
}
......@@ -140,7 +140,7 @@ public class GoblinQueBizArtworkUplService {
/* ------------------------------------------------------------------------------------ */
/**
* NFT素材上传
* 藏品素材上传
*
* @param nftUploadReqDto GalaxyNftUploadReqDto
* @return GalaxyNftUploadRespDto
......@@ -150,12 +150,12 @@ public class GoblinQueBizArtworkUplService {
try {
responseDto = galaxyArtworkService.nftUpload(nftUploadReqDto);
if (!responseDto.isSuccess()) {
log.warn("#NFT素材上传:处理失败[paramsStr={},postRespStr={}]", JsonUtils.toJson(nftUploadReqDto), JsonUtils.toJson(responseDto));
log.warn("#藏品素材上传:处理失败[paramsStr={},postRespStr={}]", JsonUtils.toJson(nftUploadReqDto), JsonUtils.toJson(responseDto));
return null;
}
return responseDto.getData();
} catch (Exception e) {
log.error("Ex.NFT素材上传:处理异常[paramsStr={},postRespStr={}],ex:{}", JsonUtils.toJson(nftUploadReqDto), JsonUtils.toJson(responseDto), e.getMessage());
log.error("Ex.藏品素材上传:处理异常[paramsStr={},postRespStr={}],ex:{}", JsonUtils.toJson(nftUploadReqDto), JsonUtils.toJson(responseDto), e.getMessage());
return null;
}
}
......@@ -171,12 +171,12 @@ public class GoblinQueBizArtworkUplService {
try {
responseDto = galaxyArtworkService.seriesClaim(requestDto);
if (!responseDto.isSuccess()) {
log.warn("#NFT系列声明:处理失败[paramsStr={},postRespStr={}]", JsonUtils.toJson(requestDto), JsonUtils.toJson(responseDto));
log.warn("#藏品系列声明:处理失败[paramsStr={},postRespStr={}]", JsonUtils.toJson(requestDto), JsonUtils.toJson(responseDto));
return null;
}
return responseDto.getData();
} catch (Exception e) {
log.error("Ex.NFT系列声明:处理异常[paramsStr={},postRespStr={}],ex:{}", JsonUtils.toJson(requestDto), JsonUtils.toJson(responseDto), e.getMessage());
log.error("Ex.藏品系列声明:处理异常[paramsStr={},postRespStr={}],ex:{}", JsonUtils.toJson(requestDto), JsonUtils.toJson(responseDto), e.getMessage());
return null;
}
}
......
......@@ -1625,6 +1625,20 @@ public class GoblinMongoUtils {
return updateResult.getModifiedCount() > 0;
}
/**
* 转赠成功后,更新藏品信息
*/
public boolean updateUserDigitalArtworkVoByTransQuery(GoblinUserDigitalArtworkVo vo) {
UpdateResult updateResult = mongoTemplate.getCollection(GoblinUserDigitalArtworkVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("artworkId").is(vo.getArtworkId())).getQueryObject(),
Update.update("transferState", vo.getTransferState())
.set("delFlg", vo.getDelFlg())
.set("deletedAt", mongoConverter.convertToMongoType(vo.getDeletedAt()))
.getUpdateObject()
);
return updateResult.getModifiedCount() > 0;
}
public List<String> getPageUserDigitalArtworkIds(String uid, Integer pageNum, Integer pageSize) {
Criteria criteria = Criteria.where("uid").is(uid).and("delFlg").is("0");
Query query = Query.query(criteria);
......
......@@ -6,10 +6,12 @@ import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.RandomUtil;
import com.liquidnet.service.galaxy.constant.GalaxyEnum;
import com.liquidnet.service.goblin.constant.GoblinRedisConst;
import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.GoblinStoreMarketDto;
import com.liquidnet.service.goblin.dto.GoblinUserNftAccInfoVo;
import com.liquidnet.service.goblin.dto.GoblinUserSafeConfigDto;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinGoodsAnticipateValueVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinMgtCategorySpecVo;
import com.liquidnet.service.goblin.dto.vo.*;
......@@ -51,6 +53,28 @@ public class GoblinRedisUtils {
return redisUtil.get(key);
}
public boolean expire(String key, long seconds) {
return redisUtil.expireSet(key, seconds);
}
public long incr(String key, long delta) {
return redisUtil.incr(key, delta);
}
/* ---------------------------------------- 短信相关 ---------------------------------------- */
public boolean setSmsCodeByMobile(String mobile, String smsCode) {
return redisUtil.set(GoblinRedisConst.VALID_SMS_CODE_MOBILE + mobile, smsCode, 600);
}
public Long ttlSmsCodeByMobile(String mobile) {
return redisUtil.getExpire(GoblinRedisConst.VALID_SMS_CODE_MOBILE + mobile);
}
public String getSmsCodeByMobile(String mobile) {
return (String) redisUtil.get(GoblinRedisConst.VALID_SMS_CODE_MOBILE + mobile);
}
/* ---------------------------------------- 预约相关 ---------------------------------------- */
/**
......@@ -816,6 +840,7 @@ public class GoblinRedisUtils {
if (null == vo) {
return null;
}
GoblinListCollectVo firstCollectVo = getCollectByFirst(skuId);
HashMap<String, Object> map = CollectionUtil.mapStringObject();
LocalDateTime nextSaleStartTime = null;
if (null == vo.getSaleStartTime() || now.isAfter(vo.getSaleStartTime())) {//普通商品已开售
......@@ -860,6 +885,13 @@ public class GoblinRedisUtils {
map.put("baseSaleStartTime", baseSaleStartTime);
map.put("nextSaleStartTime", nextSaleStartTime);
}
if (firstCollectVo != null) {
map.put("firstSaleStartTime", firstCollectVo.getTimeStart());
map.put("firstSaleEndTime", firstCollectVo.getTimeEnd());
} else {
map.put("firstSaleStartTime", null);
map.put("firstSaleEndTime", null);
}
return map;
}
......@@ -975,6 +1007,22 @@ public class GoblinRedisUtils {
return collectNext;
}
public GoblinListCollectVo getCollectByFirst(String skuId) {
GoblinListCollectVo vo = null;
List<GoblinListCollectVo> collectVos = getGoblinListCollect(skuId);
for (int i = 0; i < collectVos.size(); i++) {
GoblinListCollectVo collectVoItem = collectVos.get(i);
if (vo == null) {
vo = collectVoItem;
}
if (collectVoItem.getTimeStart().isBefore(vo.getTimeStart())) {
vo = collectVoItem;
}
}
return vo;
}
/**
* 处理上个时间段的库存
*
......@@ -1482,6 +1530,11 @@ public class GoblinRedisUtils {
}
}
// 缓存 nft订单相关vo
public boolean setGoblinNftOrder(GoblinNftOrderVo vo) {
return redisUtil.set(GoblinRedisConst.REDIS_GOBLIN_NFT_ORDER_INFO.concat(vo.getOrderId()), vo);
}
// 获取 订单相关Skuvo
public GoblinOrderSkuVo getGoblinOrderSkuVo(String orderSkuId) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_ORDER_SKU.concat(orderSkuId);
......@@ -1961,9 +2014,24 @@ public class GoblinRedisUtils {
return redisUtil.incr(GoblinRedisConst.USER_DIGITAL_ARTWORK_UNBOX.concat(artworkId), 1);
}
/**
* 缓存用户累计藏品数
*
* @param uid 藏品拥有者
* @param num 增减藏品数量
* @return 用户剩余藏品数
*/
public long addSubUserDigitalArtworkCount(String uid, long num) {
if (num > 0) {
return redisUtil.incr(GoblinRedisConst.USER_DIGITAL_ARTWORK_CT.concat(uid), num);
} else {
return redisUtil.decr(GoblinRedisConst.USER_DIGITAL_ARTWORK_CT.concat(uid), Math.abs(num));
}
}
public long countUserDigitalArtwork(String uid) {
Object o = redisUtil.get(GoblinRedisConst.USER_DIGITAL_ARTWORK_CT.concat(uid));
return Objects.isNull(o) ? 0 : (int) o;
return Objects.isNull(o) ? 0 : Math.max(((int) o), 0);
}
public GoblinUserDigitalArtworkVo getUserDigitalArtworkVo(String artworkId) {
......@@ -1978,14 +2046,14 @@ public class GoblinRedisUtils {
}
/**
* 盲盒开启后,直接从`我的藏品列表`中移除
* 盲盒开启后/来源为转赠的藏品转赠成功后,直接从`我的藏品列表`中移除
* 此处通过Redis过期删除
*/
public boolean setexUserDigitalArtworkVo(GoblinUserDigitalArtworkVo vo) {
return redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(vo.getArtworkId()), vo, 259200);
public boolean setexUserDigitalArtworkVo(GoblinUserDigitalArtworkVo vo, long expireSeconds) {
return redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(vo.getArtworkId()), vo, expireSeconds);
}
/* ----------------------------------- 我的藏品生成 ----------------------------------- */
/* ----------------------------------- 我的藏品管理 ----------------------------------- */
/**
* 标记订单藏品生成
......@@ -2001,21 +2069,33 @@ public class GoblinRedisUtils {
return redisUtil.hasKey(GoblinRedisConst.USER_DIGITAL_ARTWORK_GENMARK.concat(uid).concat(skuId).concat(orderId));
}
// /**
// * 缓存并更新用户藏品ID集合
// */
// public boolean addUserDigitalArtworkIds(String uid, String artworkId) {
// List<String> ids = this.getUserDigitalArtworkIds(uid);
// if (CollectionUtils.isEmpty(ids)) {
// ids = CollectionUtil.arrayListString();
// ids.add(artworkId);
// } else {
// ids.add(0, artworkId);
// int size = ids.size();
// if (size > 30) ids.remove(size - 1);
// }
// return redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK_IDS.concat(uid), ids);
// }
/**
* 重置Redis中用户藏品ID集合的缓存(降级Mongo查取藏品ID集合)
*/
public void resetUserDigitalArtworkIdsByMongo(String uid) {
List<String> ids = goblinMongoUtils.getPageUserDigitalArtworkIds(uid, 1, 30);
if (CollectionUtils.isEmpty(ids)) {
redisUtil.del(GoblinRedisConst.USER_DIGITAL_ARTWORK_IDS.concat(uid));
} else {
redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK_IDS.concat(uid), ids);
}
}
/**
* 缓存并更新用户藏品ID集合
*/
public boolean addUserDigitalArtworkIds(String uid, String artworkId) {
List<String> ids = this.getUserDigitalArtworkIds(uid);
if (CollectionUtils.isEmpty(ids)) {
ids = CollectionUtil.arrayListString();
ids.add(artworkId);
} else {
ids.add(0, artworkId);
int size = ids.size();
if (size > 30) ids.remove(size - 1);
}
return redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK_IDS.concat(uid), ids);
}
/**
* 开启盲盒:缓存并更新用户藏品ID集合
......@@ -2601,7 +2681,7 @@ public class GoblinRedisUtils {
//保存用户预约
public void setReserveMixByUid(GoblinMixReserveVo goblinMixReserveVo) {
String rdk = GoblinRedisConst.GOBLIN_MIX_RESERVE_UID.concat(goblinMixReserveVo.getMixId()).concat(":").concat(goblinMixReserveVo.getUid());
redisUtil.set(rdk,goblinMixReserveVo);
redisUtil.set(rdk, goblinMixReserveVo);
}
//根据用户uid和混合mixId查询用户预约
......@@ -2614,7 +2694,42 @@ public class GoblinRedisUtils {
}
}
/* ---------------------------------------- NFT用户安全配置 ---------------------------------------- */
public boolean setUserSafeConfigDto(String uid, GoblinUserSafeConfigDto dto) {
return redisUtil.set(GoblinRedisConst.USER_SAFE_CONFIG.concat(uid), dto);
}
public GoblinUserSafeConfigDto getUserSafeConfigDto(String uid) {
return (GoblinUserSafeConfigDto) redisUtil.get(GoblinRedisConst.USER_SAFE_CONFIG.concat(uid));
}
/* ---------------------------------------- ---------------------------------------- */
/**
* NFT转赠约束配置
* redis未配置默认返回180天对应15552000秒
*
* @return Map<String, Long>
*/
public Map<String, Long> getUserDigitalArtworkTransferConfMap() {
String val = (String) redisUtil.get(GoblinRedisConst.NFT_TRANSFER_CONF);
Map<String, Long> map;
if (StringUtils.isEmpty(val)) {
map = CollectionUtil.mapStringLong();
for (GalaxyEnum.RouterTypeEnum routerTypeEnum : GalaxyEnum.RouterTypeEnum.values()) {
map.put(routerTypeEnum.getCode(), 15552000L);
}
redisUtil.set(GoblinRedisConst.NFT_TRANSFER_CONF, JsonUtils.toJson(map));
} else {
map = JsonUtils.fromJson(val, new TypeReference<Map<String, Long>>() {
});
}
return map;
}
/* ---------------------------------------- ---------------------------------------- */
/* ---------------------------------------- ---------------------------------------- */
/* ---------------------------------------- ---------------------------------------- */
/* ---------------------------------------- ---------------------------------------- */
}
......@@ -4,8 +4,11 @@
# ------------------------ 4\u5F00\u5934\u9519\u8BEF\u7801\u4F5C\u7CFB\u7EDF\u4FDD\u7559
140000=\u64CD\u4F5C\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5
140001=
140002=
140001=\u975E\u6CD5\u8BF7\u6C42
140002=\u64CD\u4F5C\u5931\u8D25
......@@ -17,6 +20,12 @@
140014=\u8EAB\u4EFD\u8BC1\u53F7\u7801\u4E0D\u5408\u89C4
140015=\u8D26\u53F7\u5F00\u901A\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u5BA2\u670D
140016=\u8BC1\u4EF6\u4FE1\u606F\u6216\u624B\u673A\u53F7\u4E0D\u4E00\u81F4
140017=\u9A8C\u8BC1\u7801\u53D1\u9001\u5931\u8D25
140018=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548
140019=\u9A8C\u8BC1\u7801\u4E0D\u6B63\u786E
140020=\u60A8\u5DF2\u8BBE\u7F6E\u8FC7\u5B89\u5168\u5BC6\u7801
140021=\u8BF7\u5148\u8BBE\u7F6E\u5B89\u5168\u5BC6\u7801
140022=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u5B89\u5168\u5BC6\u7801
......@@ -39,7 +48,13 @@
140101=\u8BF7\u6838\u5B9E\u76F2\u76D2\u5F00\u542F\u65F6\u95F4
140102=\u5F00\u542F\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5
140105=\u85CF\u54C1\u4E0D\u5B58\u5728
140106=\u6536\u53D6\u5931\u8D25
140106=\u76F2\u76D2\u4E0D\u652F\u6301\u8F6C\u8D60
140107=\u85CF\u54C1\u672A\u4E0A\u94FE
140108=\u53D7\u8D60\u4EBA\u4FE1\u606F\u6709\u8BEF
140109=\u8F6C\u8D60\u4EBA\u4E0E\u53D7\u8D60\u4EBA\u4E0D\u53EF\u672A\u540C\u4E00\u4EBA
140110=\u53D7\u8D60\u4EBA\u672A\u5F00\u901A\u6570\u5B57\u8D26\u53F7
140111=\u8BE5\u85CF\u54C1\u6240\u5C5E\u6570\u636E\u94FE\u6682\u672A\u5F00\u653E\u8F6C\u8D60
140112=\u8BE5\u85CF\u54C1\u4E0D\u6EE1\u8DB3\u8F6C\u8D60\u6761\u4EF6
......
......@@ -127,10 +127,13 @@ goblin_store_coupon_rule.update_del=UPDATE goblin_store_coupon_rule SET del_flg=
goblin_user_coupon.insert=INSERT INTO goblin_user_coupon (ucoupon_id, store_coupon_id, uid, state, bind_at, dued_at, operator, created_at)VALUES(?,?,?,?,?,?,?,?)
goblin_user_coupon.updateState=UPDATE goblin_user_coupon SET state = ? , used_for = ? ,updated_at = ? where ucoupon_id = ?
#---- \u6211\u7684\u85CF\u54C1
goblin_user_digital_artwork.insert=INSERT INTO goblin_user_digital_artwork (artwork_id, sku_id, uid, order_id, source, state, created_at)VALUES(?,?,?,?,?,?,?)
goblin_user_digital_artwork.insert=INSERT INTO goblin_user_digital_artwork (artwork_id,sku_id,uid,order_id,source,state,created_at)VALUES(?,?,?,?,?,?,?)
goblin_user_digital_artwork.insert_for_transfer=INSERT INTO goblin_user_digital_artwork (artwork_id,uid,sku_id,order_id,edition_sn,nft_id,trading_txhash,trading_at,`source`,state,created_at)VALUES(?,?,?,?,?,?,?,?,?,?,?)
goblin_user_digital_artwork.update_for_chain=UPDATE goblin_user_digital_artwork SET edition_sn=?,nft_id=?,release_txhash=?,release_at=?,trading_txhash=?,trading_at=?,state=?,updated_at=? WHERE artwork_id=? AND state<>1
goblin_user_digital_artwork.update_for_unboxing=UPDATE goblin_user_digital_artwork SET state=1,del_flg='1',opening_at=?,updated_at=?,deleted_at=? WHERE artwork_id=? AND state<>1
goblin_user_digital_artwork.update_for_accept=UPDATE goblin_user_digital_artwork SET state=0,opening_at=?,updated_at=? WHERE artwork_id=? AND state=5
goblin_user_digital_artwork.update_for_transfer=UPDATE goblin_user_digital_artwork SET receiver_uid=?,transfer_order_id=?,transfer_state=?,updated_at=? WHERE artwork_id=?
goblin_user_digital_artwork.update_for_trans_query=UPDATE goblin_user_digital_artwork SET transfer_state=?,del_flg='1',deleted_at=? WHERE artwork_id=?
#----
#---- \u9884\u7EA6
goblin_goods_anticipate=INSERT INTO goblin_goods_anticipate(ant_id,people,`type`,`rule`,created_date,del_tag) VALUES(?,?,?,?,?,?)
......@@ -144,7 +147,7 @@ goblin_goods_anticipate_user_update=UPDATE goblin_goods_anticipate_user SET stat
goblin_goods_anticipate_user_update_sku=UPDATE goblin_goods_anticipate_user SET state = 1 WHERE sku_id = ?
goblin_goods_anticipate_mix=INSERT INTO goblin_goods_anticipate_mix ( mid, uid, phone, mix_id, state, created_date ) VALUES(?,?,?,?,0,NOW())
#---- \u4E1A\u52A1\u8D26\u53F7\u8BB0\u5F55
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 (?,?,?,?,?,?,?)
#---- \u9ED1\u767D\u540D\u5355 ----
goblin_list_insert=INSERT INTO goblin_list (`list_id`,`uid`,`name`,`white_type`,`white_url`,`time_start`,`time_end`,`tag_type`,`black_url`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?,?)
goblin_list_detail_insert=INSERT INTO goblin_list_details (`list_id`,`spu_id`,`sku_id`,`created_at`,`sku_stock`,`price_v`,`product_id`,`price`) VALUES (?,?,?,?,?,?,?,?)
......@@ -155,3 +158,11 @@ goblin_mix_insert=INSERT INTO goblin_mix (`mix_id`,`uid`,`name`,`time_start`,`ti
goblin_mix_details_insert=INSERT INTO goblin_mix_details (`mix_id`,`position`,`spu_id`,`sku_id`,`price`,`price_v`,`product_id`,`count`,`created_at`) VALUES (?,?,?,?,?,?,?,?,?)
goblin_mix_status_update=UPDATE goblin_mix SET status = ? , updated_at = ? WHERE mix_id = ?
goblin_mix_update=UPDATE goblin_mix SET show_position = ? , `limit`=?,white_type=?,white_url=? , updated_at = ?,shelves_time = ?,reserve = ? WHERE mix_id = ?
#---- \u7528\u6237\u5B89\u5168\u8BBE\u7F6E
goblin_user_safe_config.set_passwd=INSERT INTO goblin_user_safe_config (uid,passwd,created_at,updated_at)VALUES(?,?,?,?) ON DUPLICATE KEY UPDATE uid=?,passwd=?,updated_at=?
#---- \u85CF\u54C1\u8BA2\u5355\u5173\u8054\u85CF\u54C1ID
goblin_nft_order.update_artwork=UPDATE goblin_nft_order SET artwork_id=? WHERE order_id=?
#----
#----
#----
#----
\ No newline at end of file
......@@ -2,6 +2,8 @@ package com.liquidnet.service.goblin.test;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.galaxy.dto.bo.GalaxySeriesNftInfoBo;
import com.liquidnet.service.galaxy.utils.GalaxyDataUtils;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
......@@ -9,6 +11,8 @@ import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.time.LocalDateTime;
......@@ -23,6 +27,9 @@ public class TestGoblinMongo {
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private GalaxyDataUtils galaxyDataUtils;
@SneakyThrows
@Test
public void testMongoUpdateLocalDateTime() {
......@@ -50,16 +57,16 @@ public class TestGoblinMongo {
@Test
public void testUpdate(){
// String skuId = "1234567890-sku-0225";
// Query query = Query.query(Criteria.where("skuId").is(skuId));
// GalaxySeriesNftInfoBo seriesNftInfoBo = dataUtils.getSeriesNftInfoBo2("zxinchain",skuId);
// log.info(seriesNftInfoBo.toString());
String skuId = "1234567890-sku-0225";
Query query = Query.query(Criteria.where("skuId").is(skuId));
GalaxySeriesNftInfoBo seriesNftInfoBo = galaxyDataUtils.getSeriesNftInfoBo("zxinchain",skuId);
log.info(seriesNftInfoBo.toString());
//1、插入时间正确 为UTC时间
// seriesNftInfoBo.setSkuId("1234567890-sku-0226");
// seriesNftInfoBo.setCreatedAt(LocalDateTime.now());
// seriesNftInfoBo.setUpdatedAt(LocalDateTime.now());
// Document document = (Document)mongoConverter.convertToMongoType(seriesNftInfoBo);
seriesNftInfoBo.setSkuId("1234567890-sku-0226");
seriesNftInfoBo.setCreatedAt(LocalDateTime.now());
seriesNftInfoBo.setUpdatedAt(LocalDateTime.now());
// Document document = (Document)mongoTemplate.convertToMongoType(seriesNftInfoBo);
// mongoTemplate.getCollection(GalaxySeriesNftInfoVo2.class.getSimpleName()).insertOne(document);
//2、插入时间正确
......
package com.liquidnet.service.goblin.test.xuper;
package com.liquidnet.common.third.xuper;
import com.baidu.xuper.crypto.Hash;
import com.liquidnet.common.third.xuper.config.XuperConfig;
......@@ -7,9 +7,7 @@ import com.liquidnet.common.third.xuper.dto.*;
import com.liquidnet.common.third.xuper.exception.XupterException;
import com.liquidnet.common.third.xuper.util.XuperSdkUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.galaxy.biz.GalaxyCommonBiz;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
......@@ -19,7 +17,6 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Date;
......@@ -42,12 +39,34 @@ public class TestXuperSdkUtil {
@Autowired
private XuperSdkUtil xuperSdkUtil;
@Autowired
private GalaxyCommonBiz galaxyCommonBiz;
private static String creatorMnemonic = "person lucky trophy wall kangaroo body bounce coach unable sister second goat guitar virus tree security acoustic ankle kiss deputy sunny message weapon believe";
private static String customerMnemonic = "person lucky trophy wall kangaroo body bounce coach unable sister second goat guitar virus tree security acoustic ankle kiss deputy sunny message weapon believe";
private static String customerMnemonic2 = "person lucky trophy wall kangaroo body bounce coach unable sister second goat guitar virus tree security acoustic ankle kiss deputy sunny message weapon believe";
private static String customerMnemonic = "resemble dust palm discover lab improve fix decide blossom economy gadget fit behave win pulp mass chunk rude estate street hurdle chat labor brown";
//安家宾
private static String customerMnemonic2 = "soup picture whisper true follow same merit antenna glimpse animal sand kind poverty supreme cost skirt various table tunnel casual kidney rebel unable account";
//测试 王斐
private static String customerMnemonic_wangfei = "echo walk term near win claim kangaroo series ecology economy cook loop million grid raise shadow yellow library pact filter rally voice begin ability";
private static String creatorAddress = "YqsYxgBSP74piDhNQHTjWMH9wXnXxZbt8";
private static String customerAddress1 = "YGvfJh2PjgYZz3hXu7FFH9VYNfgJQ2TQv";
private static String customerAddress2 = "TAthqnEuqPS8ijrFG3yYxTXH4EgZQxyYF";
private static String customerAddress_wangfei = "TRLTrmFX91eNZvhL3QDqHot35iKKPZHz7";
long assetId = 918386921886035729l;
@Test
public void getAccount(){
//要拉取的区块链账户地址
String addr = xuperSdkUtil.getAccount(creatorMnemonic).getAddress();
System.out.println("addr===="+addr);
String addr1 = xuperSdkUtil.getAccount(customerMnemonic).getAddress();
System.out.println("addr1===="+addr1);
String addr2 = xuperSdkUtil.getAccount(customerMnemonic2).getAddress();
System.out.println("addr2===="+addr2);
String addr_wangfei = xuperSdkUtil.getAccount(customerMnemonic_wangfei).getAddress();
System.out.println("addr_wangfei===="+addr_wangfei);
}
@Test
public void test(){
// byte[] byteArrays = Hash.doubleSha256("百".getBytes());
......@@ -70,60 +89,6 @@ public class TestXuperSdkUtil {
int width = bufferedImage.getWidth();
System.out.println("width=="+width + " height=="+height);
}
@Test
public void testXuperUploadFile(){
XuperUploadFileReqDto reqDto = XuperUploadFileReqDto.getNew();
// 创建区块链账户
XuperUploadFileRespDto respDto = null;
try {
// String originalUrl = "/Users/anjiabin/Downloads/zxl_image_test_002.jpeg";
// String originalUrl = "/Users/anjiabin/Downloads/zxl_image_series_test_001.jpeg";
String originalUrl = "/Users/anjiabin/Downloads/zxl_image_test_001.jpg";
// String originalUrl = "https://img.zhengzai.tv/other/2022/03/09/1f88d2bc6fea40e19430227326410cb3.jpg";
// String originalUrl = "/Users/anjiabin/Downloads/春季花卉TEST001.mp4";
String imageType = null;
if(originalUrl.lastIndexOf("?")!=-1){
String tempUrl = originalUrl.substring(0,originalUrl.lastIndexOf("?"));
imageType = tempUrl.substring(tempUrl.lastIndexOf("."),tempUrl.length());
}else{
imageType = originalUrl.substring(originalUrl.lastIndexOf("."),originalUrl.length());
}
// String fileName = DateUtil.getNowTime(DateUtil.DATE_SMALL_STR)+"/"+ IDGenerator.getZxlNftImageCosCode() + imageType;
String fileName = IDGenerator.getZxlNftImageCosCode() + imageType;
//通过图片url地址上传
// File cosFile = galaxyCommonBiz.inputStreamToFile(originalUrl,fileName);
// String filePath = cosFile.getAbsolutePath();
// log.info("cosFile.getPath() :{}",cosFile.getPath());
// log.info("cosFile.getAbsoluteFile() :{}",cosFile.getAbsoluteFile());
String filePath = originalUrl;
reqDto.setMnemonic(creatorMnemonic);
reqDto.setFileName(fileName);
reqDto.setFilePath(filePath);
byte[] fileByte = new byte[0];
try {
fileByte = galaxyCommonBiz.toByteArray(new File(filePath));
} catch (IOException e) {
e.printStackTrace();
}
reqDto.setDataByte(fileByte);
reqDto.setProperty("");
XuperResponseDto<XuperUploadFileRespDto> uploadFileResp = xuperSdkUtil.xuperUploadFile(reqDto);
if(uploadFileResp.isSuccess()){
respDto = uploadFileResp.getParseData(XuperUploadFileRespDto.class);
}
}catch (XupterException e) {
log.error("biz error msg "+e.getMessage(),e);
}catch (Exception e) {
log.error("sys error msg "+e.getMessage(),e);
}
log.info("testXuperUploadFile resp : "+ JsonUtils.toJson(respDto));
}
@Test
public void testXuperConfig(){
......@@ -192,7 +157,7 @@ public class TestXuperSdkUtil {
Xuper002CreateAssetReqDto reqDto = Xuper002CreateAssetReqDto.getNew();
// 创建区块链账户
Xuper002CreateAssetRespDto respDto = null;
String nftUrl = "bos_v1://xasset-offline/110381/ZXLNFTIMAGE202206231042217867523750.jpg/";
String nftUrl = "bos_v1://xasset-offline/110353/ZXLNFTIMAGE202207131638139778801280.jpg/";
try {
reqDto.setMnemonic(creatorMnemonic);
//资产碎片数量,小于1和大于200000代表不做库存限制
......@@ -202,7 +167,7 @@ public class TestXuperSdkUtil {
//资产分类。1:艺术品 2:收藏品 3:门票 4:酒店
reqDto.setAssetCate(Integer.valueOf(XuperEnum.assetTypeEnum.COLLECTION.getCode()));
//资产名称,小于30个字节
reqDto.setTitle("百度超级链-数字藏品-测试20220622-001");
reqDto.setTitle("百度超级链-数字藏品-测试20220713-001");
//资产缩略图。bos上传的图片,格式支持:”jpg”, “jpeg”, “png”, “bmp”, “webp”, “heic”。参数格式bos_v1://{bucket}/{object}/{width}_{height}
reqDto.setThumb(nftUrl.concat("1000_500"));
//短文字描述,小于300个字节
......@@ -293,7 +258,8 @@ public class TestXuperSdkUtil {
// 定义返回结果对象
Xuper004PublishAssetRespDto respDto = null;
// long assetId = 171095615845019437l;
long assetId = 1532351545249738541l;
// long assetId = 1532351545249738541l;
long assetId = 1997357095448588049l;
try {
reqDto.setMnemonic(creatorMnemonic);
reqDto.setAssetId(assetId);
......@@ -317,7 +283,13 @@ public class TestXuperSdkUtil {
Xuper005QueryAssetReqDto reqDto = Xuper005QueryAssetReqDto.getNew();
// 定义返回结果对象
Xuper005QueryAssetRespDto respDto = null;
long assetId = 166759372822785837l; //第1个
long assetId = 2206771595529269009l; //第1个
assetId = 15486733533687569l; //第2个
assetId = 2137832444854906641l; //第3个
// long assetId = 1681769488660410129l; //生产 第1个
assetId = 918386921886035729l; //测试 第1个
try {
reqDto.setAssetId(assetId);
XuperResponseDto<Xuper005QueryAssetRespDto> xuperResponseDto = xuperSdkUtil.xuper005QueryAsset(reqDto);
......@@ -374,13 +346,12 @@ public class TestXuperSdkUtil {
Xuper007GrantShardReqDto reqDto = Xuper007GrantShardReqDto.getNew();
// 定义返回结果对象
Xuper007GrantShardRespDto respDto = null;
long assetId = 171095615845019437l;
// long assetId = 1532351545249738541l;
long assetId = 2137832444854906641l;
try {
reqDto.setMnemonic(creatorMnemonic);
reqDto.setAssetId(assetId);
reqDto.setShardId(1l);
reqDto.setShardId(2l);
reqDto.setToAddr(xuperSdkUtil.getAccount(customerMnemonic).getAddress());
reqDto.setToUserId(100000l);
reqDto.setPrice(1234l);
......@@ -401,15 +372,34 @@ public class TestXuperSdkUtil {
Xuper008TransferShardReqDto reqDto = Xuper008TransferShardReqDto.getNew();
// 定义返回结果对象
Xuper008TransferShardRespDto respDto = null;
long assetId = 171095615845019437l;
// long assetId = 1532351545249738541l;
// long assetId = 2137832444854906641l;
// assetId = 2137832444854906641l;
long shardId = 1l;
try {
reqDto.setMnemonic(customerMnemonic);
// reqDto.setMnemonic(customerMnemonic_wangfei);
// reqDto.setAssetId(assetId);
// reqDto.setShardId(shardId);
// reqDto.setToAddr(xuperSdkUtil.getAccount(customerMnemonic).getAddress());
// reqDto.setToUserId(100000l);
// reqDto.setPrice(1234l);
// reqDto.setMnemonic(customerMnemonic);
// reqDto.setAssetId(assetId);
// reqDto.setShardId(shardId);
// reqDto.setToAddr(xuperSdkUtil.getAccount(customerMnemonic2).getAddress());
// reqDto.setToUserId(100000l);
// reqDto.setPrice(1234l);
reqDto.setMnemonic(customerMnemonic_wangfei);
reqDto.setAssetId(assetId);
reqDto.setShardId(1l);
reqDto.setShardId(4l);
reqDto.setToAddr(xuperSdkUtil.getAccount(customerMnemonic2).getAddress());
reqDto.setToUserId(100000l);
reqDto.setPrice(1234l);
XuperResponseDto<Xuper008TransferShardRespDto> xuperResponseDto = xuperSdkUtil.xuper008TransferShard(reqDto);
if(xuperResponseDto.isSuccess()){
respDto = xuperResponseDto.getParseData(Xuper008TransferShardRespDto.class);
......@@ -449,16 +439,17 @@ public class TestXuperSdkUtil {
Xuper010QuerySdsReqDto reqDto = Xuper010QuerySdsReqDto.getNew();
// 定义返回结果对象
Xuper010QuerySdsRespDto respDto = null;
long assetId = 171095615845019437l;
// assetId = 477060752401870637l;
assetId = 2203931451566698285l;
long shardId = 1l;
// long assetId = 171095615845019437l;
// assetId = 918386921886035729l;
long shardId = 4l;
try {
reqDto.setAssetId(assetId);
reqDto.setShardId(shardId);
XuperResponseDto<Xuper010QuerySdsRespDto> xuperResponseDto = xuperSdkUtil.xuper010QuerySds(reqDto);
if(xuperResponseDto.isSuccess()){
respDto = xuperResponseDto.getParseData(Xuper010QuerySdsRespDto.class);
}else{
log.info("testXuper010QuerySds resp error: "+ JsonUtils.toJson(xuperResponseDto));
}
}catch (XupterException e) {
log.error("biz error msg "+e.getMessage(),e);
......@@ -468,12 +459,17 @@ public class TestXuperSdkUtil {
log.info("testXuper010QuerySds resp : "+ JsonUtils.toJson(respDto));
}
/**
* 该接口只能查询购买人的地址 创建人不支持
*/
@Test
public void testXuper011ListSdsByAddr(){
//要查询的区块链账户地址
String addr = xuperConfig.getNftPlatformAddress();
//xuper-userid-002
addr = "acsuf4Mrz9r38KERQGabsoDsa4MPEcF85";
addr = creatorAddress;
addr = customerAddress1;
addr = customerAddress2;
// addr = "TRLTrmFX91eNZvhL3QDqHot35iKKPZHz7";
Xuper011ListSdsByAddrReqDto reqDto = Xuper011ListSdsByAddrReqDto.getNew();
// 定义返回结果对象
Xuper011ListSdsByAddrRespDto respDto = null;
......@@ -481,6 +477,8 @@ public class TestXuperSdkUtil {
reqDto.setAddr(addr);
reqDto.setPage(1);
reqDto.setLimit(50);
reqDto.setAssetId(assetId);
XuperResponseDto<Xuper011ListSdsByAddrRespDto> xuperResponseDto = xuperSdkUtil.xuper011ListSdsByAddr(reqDto);
if(xuperResponseDto.isSuccess()){
respDto = xuperResponseDto.getParseData(Xuper011ListSdsByAddrRespDto.class);
......@@ -499,11 +497,8 @@ public class TestXuperSdkUtil {
// 定义返回结果对象
Xuper012ListSdsByAstRespDto respDto = null;
//xuper-skuid-003
long assetId = 477060752401870637l;
//xuper-skuid-004
assetId = 2203931451566698285l;
//xuper-skuid-008
assetId = 139521326019882797l;
// long assetId = 477060752401870637l;
// assetId = 918386921886035729l; //测试1
try {
reqDto.setAssetId(assetId);
reqDto.setCursor("");
......@@ -525,15 +520,12 @@ public class TestXuperSdkUtil {
Xuper013HistoryReqDto reqDto = Xuper013HistoryReqDto.getNew();
// 定义返回结果对象
Xuper013HistoryRespDto respDto = null;
//xuper-skuid-003
long assetId = 477060752401870637l;
//xuper-skuid-004
assetId = 2203931451566698285l;
//xuper-skuid-008
assetId = 139521326019882797l;
// long assetId = 477060752401870637l;
// assetId = 918386921886035729l; //测试1
long shardId = 4l;
try {
reqDto.setAssetId(assetId);
reqDto.setShardId(shardId);
reqDto.setPage(1);
reqDto.setLimit(20);
XuperResponseDto<Xuper013HistoryRespDto> xuperResponseDto = xuperSdkUtil.xuper013History(reqDto);
......
......@@ -792,7 +792,8 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
// artworkGenDto.setSkuId(orderVo.getSkuId());
// artworkGenDto.setSource(1);
// queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_GEN.getKey(), artworkGenDto.toJson());
this.generateUserArtwork(orderVo, 1);
/*this.generateUserArtwork(orderVo, 1);*/
nftOrderUtils.generateUserArtwork(orderVo, 1);
// 增加销量
goblinRedisUtils.incrSkuSaleCount(orderVo.getSpuId(), orderVo.getSkuId(), orderVo.getNum());
// TODO: jxl 2022/4/24 判断技术部NFT记录Redis setBuyNftTec
......@@ -976,9 +977,11 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
goblinOrderUtils.integral(uid, orderVo.getPriceActual(), "购买数字藏品", 1);
// 生产藏品列表
if (code.equals(orderVo.getSkuId())) {
this.generateUserArtwork(orderVo, 5);
/*this.generateUserArtwork(orderVo, 5);*/
nftOrderUtils.generateUserArtwork(orderVo, 5);
} else {
this.generateUserArtwork(orderVo, orderType == 4 ? 31 : 2);
/*this.generateUserArtwork(orderVo, orderType == 4 ? 31 : 2);*/
nftOrderUtils.generateUserArtwork(orderVo, orderType == 4 ? 31 : 2);
}
// 增加销量
goblinRedisUtils.incrSkuSaleCount(orderVo.getSpuId(), orderVo.getSkuId(), orderVo.getNum());
......@@ -1004,7 +1007,7 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
*
* @param orderVo
*/
private void generateUserArtwork(GoblinNftOrderVo orderVo, Integer source) {
/*private 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);
......@@ -1060,6 +1063,6 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
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));
}
}*/
}
......@@ -42,6 +42,8 @@ public class GoblinNftOrderUtils {
@Autowired
private GoblinRedisUtils goblinRedisUtils;
@Autowired
private GoblinNftOrderUtils goblinNftOrderUtils;
@Autowired
private RedisUtil redisUtil;
@Autowired
private GoblinMongoUtils goblinMongoUtils;
......@@ -617,7 +619,12 @@ public class GoblinNftOrderUtils {
digitalArtworkVo.setUid(uid);
digitalArtworkVo.setOrderId(orderId);
digitalArtworkVo.setSource(source);
/*digitalArtworkVo.setState(source == 31 ? 5 : 0);*/
if (source == 5) {
digitalArtworkVo.setState(0);
} else {
digitalArtworkVo.setState(source == 31 ? 5 : 0);
}
digitalArtworkVo.setDelFlg("0");
digitalArtworkVo.setCreatedAt(now);
digitalArtworkVo.setAuthor(goodsInfoVo.getAuthor());
......@@ -631,6 +638,13 @@ public class GoblinNftOrderUtils {
goblinRedisUtils.incrGoblinUserDigitalArtworks(uid);
// Redis生成标记(缓存三天),用于上面的生成检查
goblinRedisUtils.markGenUserDigitalArtwork(uid, skuId, orderId);
{// Redis更新藏品订单关联artworkId
orderVo.setArtworkId(artworkId);
goblinNftOrderUtils.setNftOrder(orderVo);
// Mongo同步更新藏品订单
goblinOrderUtils.setMongoList(GoblinNftOrderVo.class.getSimpleName(), "orderId", orderVo.getOrderId(), GoblinRedisConst.REDIS_GOBLIN_NFT_ORDER_INFO, 2);
}
// Mongo记录VO
goblinOrderUtils.setMongoList(GoblinUserDigitalArtworkVo.class.getSimpleName(), "artworkId", digitalArtworkVo.getArtworkId(), GoblinRedisConst.USER_DIGITAL_ARTWORK, 1);
// goblinMongoUtils.insertGoblinUserDigitalArtworkVo(digitalArtworkVo);
......@@ -640,15 +654,21 @@ public class GoblinNftOrderUtils {
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());*/
if (source != 5) {
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));
toMqSqls.add(SqlMapping.get("goblin_nft_order.update_artwork"));
LinkedList<Object[]> updateNftOrderObjs = CollectionUtil.linkedListObjectArr();
updateNftOrderObjs.add(new Object[]{artworkId, orderId});
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(), SqlMapping.gets(toMqSqls, initUserDigitalArtworkObjs, updateNftOrderObjs));
}
}
......@@ -56,13 +56,13 @@ goblin_user_digital_artwork.insert=INSERT INTO goblin_user_digital_artwork (artw
goblin_nft_ex_code.update=UPDATE goblin_nft_ex_code SET state = ?, redeem_uid = ?, redeem_at = ?, updated_at = ? WHERE code_id = ?
#----dragon ------
# ------------------------创建退款订单----------------------------
# ------------------------\u00E5\u0088\u009B\u00E5\u00BB\u00BA\u00E9\u0080\u0080\u00E6\u00AC\u00BE\u00E8\u00AE\u00A2\u00E5\u008D\u0095----------------------------
dragon_order_refund.insert=INSERT INTO `dragon_order_refunds`(`order_refund_id`,`code` ,`order_refund_code` ,`price` ,`reason` ,`notify_url` ,`refund_type`,`created_at`,`updated_at`)VALUES(?,?,?,?,?,?,?,?,?);
# ------------------------修改退款订单----------------------------
# ------------------------\u00E4\u00BF\u00AE\u00E6\u0094\u00B9\u00E9\u0080\u0080\u00E6\u00AC\u00BE\u00E8\u00AE\u00A2\u00E5\u008D\u0095----------------------------
dragon_order_refund_error.update=UPDATE `dragon_order_refunds` SET updated_at = ? , refund_error=? , status=? WHERE order_refund_code = ?
dragon_order_refund_success.update=UPDATE `dragon_order_refunds` SET updated_at = ? , refund_at=? , status=? WHERE order_refund_code = ?
dragon_order_refund_call_back.update=UPDATE `dragon_order_refunds` SET updated_at = ? , finished_at=? , status=? WHERE order_refund_code = ?
# ------------------------创建退款订单日志----------------------------
# ------------------------\u00E5\u0088\u009B\u00E5\u00BB\u00BA\u00E9\u0080\u0080\u00E6\u00AC\u00BE\u00E8\u00AE\u00A2\u00E5\u008D\u0095\u00E6\u0097\u00A5\u00E5\u00BF\u0097----------------------------
dragon_order_refund_log.insert=INSERT INTO `dragon_order_refund_logs`(`order_refund_id` ,`refund_type` ,`content`,`created_at`,`updated_at`)VALUES(?,?,?,?,?);
dragon_orders.insert=insert into dragon_orders(order_id, status, code, type, price, name, detail, order_code, order_code_id, client_ip, notify_url,notify_status, payment_type, payment_id, payment_at, finished_at, created_at, updated_at, deleted_at,receipt_data) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
......@@ -72,4 +72,6 @@ dragon_pay_notify_fail.insert=insert into dragon_pay_notify_fail (code, order_co
dragon_orders.updateOrderStatus=update dragon_orders t set t.status = ? ,t.payment_id = ?,t.finished_at = ?,t.updated_at =? where t.code = ?
dragon_orders.updateNotifyStatus=update dragon_orders t set t.notify_status = ? ,t.updated_at =? where t.code = ?
#---- \u85CF\u54C1\u8BA2\u5355\u5173\u8054\u85CF\u54C1ID
goblin_nft_order.update_artwork=UPDATE goblin_nft_order SET artwork_id=? WHERE order_id=?
#----
......@@ -34,7 +34,10 @@ public class CodecTest {
// UserLoginReq userLoginReq = new UserLoginReq("admin", "admin");
// String data = JSON.toJSONString(userLoginReq);
// String data = "{\"number\":1,\"ticketId\":\"2811887059054592999181\",\"isElectronic\":1,\"isExpress\":0,\"deviceFrom\":\"wap\",\"actual\":0.01,\"performanceId\":\"2811713813327872196937\",\"timeId\":\"2811766812553216086853\",\"returnUrl\":\"http://testm.zhengzai.tv/#/order/status?order_type=ticket&order_id=\",\"showUrl\":\"http://testm.zhengzai.tv/#/order/status?order_type=ticket&order_id=\",\"expressType\":2,\"agentId\":0,\"payType\":\"alipay\"}";
String data = "{\"number\":1,\"ticketId\":\"11316\",\"isElectronic\":1,\"isExpress\":0,\"deviceFrom\":\"wap\",\"actual\":220,\"performanceId\":\"5936371\",\"timeId\":\"126207700372889606864872\",\"returnUrl\":\"http://172.16.2.120:8080/#/pay/status?order_type=ticket&order_id=\",\"showUrl\":\"http://172.16.2.120:8080/#/pay/status?order_type=ticket&order_id=\",\"expressType\":1,\"agentId\":0,\"payType\":\"wepay\"}";
// String data = "{\"number\":1,\"ticketId\":\"11316\",\"isElectronic\":1,\"isExpress\":0,\"deviceFrom\":\"wap\",\"actual\":220,\"performanceId\":\"5936371\",\"timeId\":\"126207700372889606864872\",\"returnUrl\":\"http://172.16.2.120:8080/#/pay/status?order_type=ticket&order_id=\",\"showUrl\":\"http://172.16.2.120:8080/#/pay/status?order_type=ticket&order_id=\",\"expressType\":1,\"agentId\":0,\"payType\":\"wepay\"}";
// String data = "{\"number\":1,\"ticketId\":\"1498910999375790087307200\",\"isElectronic\":1,\"isExpress\":0,\"deviceFrom\":\"js\",\"actual\":0.01,\"performanceId\":\"1498910169868288009662918\",\"timeId\":\"1498910393928007683813946\",\"returnUrl\":\"https://testm.zhengzai.tv/pay/status?order_type=ticket&order_id=\",\"showUrl\":\"https://testm.zhengzai.tv/pay/status?order_type=ticket&order_id=\",\"expressType\":0,\"agentId\":0,\"payType\":\"wepay\",\"openId\":\"o1TAR5WpsCZ0CM6niTkwwm-CO9GM\"}";
// String data = "{\"number\":1,\"ticketId\":\"1498910999375790087307200\",\"isElectronic\":1,\"isExpress\":0,\"deviceFrom\":\"applet\",\"actual\":0.01,\"performanceId\":\"1498910169868288009662918\",\"timeId\":\"1498910393928007683813946\",\"returnUrl\":\"https://testm.zhengzai.tv/pay/status?order_type=ticket&order_id=\",\"showUrl\":\"https://testm.zhengzai.tv/pay/status?order_type=ticket&order_id=\",\"expressType\":0,\"agentId\":0,\"payType\":\"wepay\",\"openId\":\"o1TAR5WpsCZ0CM6niTkwwm-CO9GM\"}";
String data = "{\"number\":1,\"ticketId\":\"1498910999375790087307200\",\"isElectronic\":1,\"isExpress\":0,\"deviceFrom\":\"applet\",\"actual\":0.01,\"performanceId\":\"1498910169868288009662918\",\"timeId\":\"1498910393928007683813946\",\"returnUrl\":\"https://testm.zhengzai.tv/pay/status?order_type=ticket&order_id=\",\"showUrl\":\"https://testm.zhengzai.tv/pay/status?order_type=ticket&order_id=\",\"expressType\":0,\"agentId\":0,\"payType\":\"wepay\"}";
System.out.println("加密前的数据:" + data);
String encryptedData = CodecUtil.aesEncrypt(data);
System.out.println("加密后的数据:" + encryptedData);
......@@ -44,6 +47,7 @@ public class CodecTest {
encryptedReq.setEncryptedData(encryptedData);
encryptedReq.setTimestamp(timestamp);
encryptedReq.setSign(sign);
// encryptedReq.setData(JsonUtils.fromJson(data,PayOrderParam.class));
System.out.println("加密后的请求:" + JSON.toJSONString(encryptedReq));
}
}
......
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