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

Commit 9fb61de5 authored by anjiabin's avatar anjiabin

实现zxtnft购买功能

parent ad72f5f3
...@@ -10,7 +10,7 @@ package com.liquidnet.service.galaxy.constant; ...@@ -10,7 +10,7 @@ package com.liquidnet.service.galaxy.constant;
* @date 2022/3/8 11:25 * @date 2022/3/8 11:25
*/ */
public class GalaxyConstant { public class GalaxyConstant {
public static final String REDIS_KET_PAY_CODE="dragon:pay:code:";// 支付流水号 public static final String SERIES_STORE_NAME="NOW_ZXL_NFT_PIC";// 系列存储目录名称
public enum RouterEnum{ public enum RouterEnum{
ZXINCHAIN("zxinchain","至信链"), ZXINCHAIN("zxinchain","至信链"),
......
package com.liquidnet.service.galaxy.dto;
import com.liquidnet.commons.lang.util.JsonUtils;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import java.io.Serializable;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: GalaxyArtSeriesClaimReqDto
* @Package com.liquidnet.service.galaxy.dto
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2022/3/14 11:10
*/
@ApiModel(value = "GalaxyArtSeriesClaimReqDto", description = "NFT系列声明")
@Data
public class GalaxyArtSeriesClaimReqDto implements Serializable,Cloneable {
/**
* skuId
*/
private String skuId;
/**
* 系列一共有多少个,0表示没有限制
*/
private Long totalCount;
/**
* 系列封面url,不超过1024个字符
*/
private String coverUrl;
/**
* 系列描述信息,不超过500个字符
*/
private String desc;
@Override
public String toString(){
return JsonUtils.toJson(this);
}
private static final GalaxyArtSeriesClaimReqDto obj = new GalaxyArtSeriesClaimReqDto();
public static GalaxyArtSeriesClaimReqDto getNew() {
try {
return (GalaxyArtSeriesClaimReqDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new GalaxyArtSeriesClaimReqDto();
}
}
}
package com.liquidnet.service.galaxy.dto;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: GalaxyArtSeriesClaimRespDto
* @Package com.liquidnet.service.galaxy.dto
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2022/3/14 11:21
*/
public class GalaxyArtSeriesClaimRespDto {
}
//package com.liquidnet.service.galaxy.dto;
//
//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购买(涉及NFT发行、NFT购买)
// * @class: GalaxyNftBuyReqDto
// * @Package com.liquidnet.service.galaxy.dto
// * @Copyright: LightNet @ Copyright (c) 2021
// * @date 2022/3/14 18:13
// */
//@ApiModel(value = "GalaxyNftBuyReqDto", description = "NFT购买")
//@Data
//public class GalaxyNftBuyReqDto implements Serializable,Cloneable {
// @ApiModelProperty(position = 1, required = true, value = "用户ID[30]")
// @NotBlank(message = "用户ID不能为空!")
// @Size(min = 1, max = 30, message = "用户ID限制2-30位且不能包含特殊字符")
// private String userId;
// /**
// * skuId
// */
// private String skuId;
// /**
// * nft名字(sku名称),中英文数字均可,不超过256个字符
// */
// private String name;
// /**
// * nftUrl,不超过1024个字符
// */
// private String url;
// /**
// * 预览图url,不超过1024个字符。(至信链浏览器展示预览图尺寸为290*290,请上传比例为1:1的图片)
// */
// private String displayUrl;
// /**
// * nft简介,500个字符以内
// */
// private String desc;
// /**
// * 系列一共有多少个,0表示没有限制
// */
// private Long totalCount;
// /**
// * 系列封面url,不超过1024个字符
// */
// private String coverUrl;
// /**
// * 系列描述信息,不超过500个字符
// */
// private String desc;
// /**
// * 标签,【文创】,游戏,动漫,30个字符以内
// * 非必填
// */
// private String flag;
//
// @Override
// public String toString(){
// return JsonUtils.toJson(this);
// }
//
// private static final GalaxyNftBuyReqDto obj = new GalaxyNftBuyReqDto();
//
// public static GalaxyNftBuyReqDto getNew() {
// try {
// return (GalaxyNftBuyReqDto) obj.clone();
// } catch (CloneNotSupportedException e) {
// return new GalaxyNftBuyReqDto();
// }
// }
//}
package com.liquidnet.service.galaxy.dto;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: GalaxyNftBuyRespDto
* @Package com.liquidnet.service.galaxy.dto
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2022/3/14 18:13
*/
public class GalaxyNftBuyRespDto {
}
package com.liquidnet.service.galaxy.dto;
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: TODO
* @class: GalaxyNtfUploadReqDto
* @Package com.liquidnet.service.galaxy.dto
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2022/3/12 00:09
*/
@ApiModel(value = "GalaxyNftUploadReqDto", description = "NFT素材上传")
@Data
public class GalaxyNftUploadReqDto implements Serializable,Cloneable {
@ApiModelProperty(position = 1, required = true, value = "上传原始图片url")
private String imageUrl;
@ApiModelProperty(position = 2, required = true, value = "商品唯一规格ID")
private String skuID;
@Override
public String toString(){
return JsonUtils.toJson(this);
}
private static final GalaxyNftUploadReqDto obj = new GalaxyNftUploadReqDto();
public static GalaxyNftUploadReqDto getNew() {
try {
return (GalaxyNftUploadReqDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new GalaxyNftUploadReqDto();
}
}
}
\ No newline at end of file
package com.liquidnet.service.galaxy.dto;
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: TODO
* @class: GalaxyUserRegisterRespDto
* @Package com.liquidnet.service.galaxy.dto
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2022/3/10 20:46
*/
@ApiModel(value = "GalaxyUserRegisterRespDto", description = "素材上传")
@Data
public class GalaxyNftUploadRespDto implements Serializable,Cloneable {
@ApiModelProperty(position = 1, required = true, value = "用户区块链类型")
private String blockChainType;
@ApiModelProperty(position = 1, required = true, value = "素材访问地址")
private String materialAccessUrl;
@Override
public String toString(){
return JsonUtils.toJson(this);
}
private static final GalaxyNftUploadRespDto obj = new GalaxyNftUploadRespDto();
public static GalaxyNftUploadRespDto getNew() {
try {
return (GalaxyNftUploadRespDto) obj.clone();
} catch (CloneNotSupportedException e) {
return new GalaxyNftUploadRespDto();
}
}
}
package com.liquidnet.service.galaxy.service; package com.liquidnet.service.galaxy.service;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.galaxy.dto.GalaxyArtSeriesClaimReqDto;
import com.liquidnet.service.galaxy.dto.GalaxyArtSeriesClaimRespDto;
import com.liquidnet.service.galaxy.dto.GalaxyNftUploadReqDto;
import com.liquidnet.service.galaxy.dto.GalaxyNftUploadRespDto;
/** /**
* @author AnJiabin <anjiabin@zhengzai.tv> * @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0 * @version V1.0
...@@ -10,4 +16,7 @@ package com.liquidnet.service.galaxy.service; ...@@ -10,4 +16,7 @@ package com.liquidnet.service.galaxy.service;
* @date 2022/3/8 11:45 * @date 2022/3/8 11:45
*/ */
public interface IGalaxyArtworkService { public interface IGalaxyArtworkService {
ResponseDto<GalaxyNftUploadRespDto> nftUpload(GalaxyNftUploadReqDto reqDto);
ResponseDto<GalaxyArtSeriesClaimRespDto> seriesClaim(GalaxyArtSeriesClaimReqDto reqDto);
} }
package com.liquidnet.service.galaxy.aop; //package com.liquidnet.service.galaxy.aop;
//
import com.alibaba.fastjson.JSON; //import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature; //import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.databind.ObjectMapper; //import com.fasterxml.jackson.databind.ObjectMapper;
import com.liquidnet.commons.lang.util.CurrentUtil; //import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.StringUtil; //import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.galaxy.aop.annotation.ControllerLog; //import com.liquidnet.service.galaxy.aop.annotation.ControllerLog;
import lombok.extern.slf4j.Slf4j; //import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint; //import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint; //import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*; //import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature; //import org.aspectj.lang.reflect.MethodSignature;
import org.bouncycastle.asn1.ocsp.ResponseData; //import org.bouncycastle.asn1.ocsp.ResponseData;
import org.springframework.core.LocalVariableTableParameterNameDiscoverer; //import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
import org.springframework.stereotype.Component; //import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes; //import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder; //import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes; //import org.springframework.web.context.request.ServletRequestAttributes;
//
import javax.servlet.http.HttpServletRequest; //import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; //import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method; //import java.lang.reflect.Method;
import java.util.Arrays; //import java.util.Arrays;
import java.util.HashMap; //import java.util.HashMap;
import java.util.Map; //import java.util.Map;
//
/** ///**
* @author AnJiabin <anjiabin@zhengzai.tv> // * @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0 // * @version V1.0
* @Description: TODO // * @Description: TODO
* @class: GalaxyRequestLogAspect // * @class: GalaxyRequestLogAspect
* @Package com.liquidnet.service.galaxy.aop // * @Package com.liquidnet.service.galaxy.aop
* @Copyright: LightNet @ Copyright (c) 2021 // * @Copyright: LightNet @ Copyright (c) 2021
* @date 2022/3/11 12:46 // * @date 2022/3/11 12:46
*/ // */
@Component //@Component
@Aspect //@Aspect
@Slf4j //@Slf4j
public class GalaxyRequestLogAspect { //public class GalaxyRequestLogAspect {
//
// 定义切点Pointcut // // 定义切点Pointcut
// @Pointcut("@annotation(com.xxxx.aop.ICache)") //// @Pointcut("@annotation(com.xxxx.aop.ICache)")
//// public void requestServer() {
//// }
//
// /**
// * 定义切点
// */
// @Pointcut("execution(* com.liquidnet.service.galaxy.controller..*(..))")
// public void requestServer() { // public void requestServer() {
// } // }
//
/** // @Around("requestServer()")
* 定义切点 // public Object doAround(ProceedingJoinPoint pjp) {
*/ // //记录请求开始执行时间:
@Pointcut("execution(* com.liquidnet.service.galaxy.controller..*(..))") // long beginTime = System.currentTimeMillis();
public void requestServer() { // //获取请求信息
} // ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
// HttpServletRequest request = sra.getRequest();
@Around("requestServer()") //
public Object doAround(ProceedingJoinPoint pjp) { // //获取代理地址、请求地址、请求类名、方法名
//记录请求开始执行时间: // String remoteAddress = CurrentUtil.getCliIpAddr();
long beginTime = System.currentTimeMillis(); // String requestURI = request.getRequestURI();
//获取请求信息 // String methodName = pjp.getSignature().getName();
ServletRequestAttributes sra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); // String clazzName = pjp.getTarget().getClass().getSimpleName();
HttpServletRequest request = sra.getRequest(); //
// //获取请求参数:
//获取代理地址、请求地址、请求类名、方法名 // MethodSignature ms = (MethodSignature) pjp.getSignature();
String remoteAddress = CurrentUtil.getCliIpAddr(); // //获取请求参数类型
String requestURI = request.getRequestURI(); // String[] parameterNames = ms.getParameterNames();
String methodName = pjp.getSignature().getName(); // //获取请求参数值
String clazzName = pjp.getTarget().getClass().getSimpleName(); // Object[] parameterValues = pjp.getArgs();
// StringBuilder sb = new StringBuilder();
//获取请求参数: // //组合请求参数,进行日志打印
MethodSignature ms = (MethodSignature) pjp.getSignature(); // if (parameterNames != null && parameterNames.length > 0) {
//获取请求参数类型 // for (int i = 0; i < parameterNames.length; i++) {
String[] parameterNames = ms.getParameterNames(); // if (parameterNames[i].equals("bindingResult")) {
//获取请求参数值 // break;
Object[] parameterValues = pjp.getArgs(); // }
StringBuilder sb = new StringBuilder(); // if ((parameterValues[i] instanceof HttpServletRequest) || (parameterValues[i] instanceof HttpServletResponse)) {
//组合请求参数,进行日志打印 // sb.
if (parameterNames != null && parameterNames.length > 0) { // append("[").
for (int i = 0; i < parameterNames.length; i++) { // append(parameterNames[i]).append("=").append(parameterValues[i])
if (parameterNames[i].equals("bindingResult")) { // .append("]");
break; // } else {
} // sb.
if ((parameterValues[i] instanceof HttpServletRequest) || (parameterValues[i] instanceof HttpServletResponse)) { // append("[").
sb. // append(parameterNames[i]).append("=")
append("["). // .append(JSON.toJSONString(parameterValues[i], SerializerFeature.WriteDateUseDateFormat))
append(parameterNames[i]).append("=").append(parameterValues[i]) // .append("]");
.append("]"); // }
} else { // }
sb. // }
append("["). // Object result = null;
append(parameterNames[i]).append("=") // try {
.append(JSON.toJSONString(parameterValues[i], SerializerFeature.WriteDateUseDateFormat)) // result = pjp.proceed();
.append("]"); // } catch (Throwable throwable) {
} // //请求操纵失败
} // //记录错误日志
} // log.error("切面处理请求错误! IP信息:【{}】 " +
Object result = null; // "URI信息:【{}】 请求映射控制类:【{}】 " +
try { // "请求方法:【{}】 请求参数列表:【{}】", remoteAddress, requestURI, clazzName, methodName,
result = pjp.proceed();
} catch (Throwable throwable) {
//请求操纵失败
//记录错误日志
log.error("切面处理请求错误! IP信息:【{}】 " +
"URI信息:【{}】 请求映射控制类:【{}】 " +
"请求方法:【{}】 请求参数列表:【{}】", remoteAddress, requestURI, clazzName, methodName,
sb.toString());
// log.error("(ง•̀_•́)ง (っ•̀ω•́)っ 切面处理请求错误! IP信息(ง•̀_•́)ง->: 【{}}】 " +
// "URI信息(ง•̀_•́)ง->:【{}】 请求映射控制类(ง•̀_•́)ง->:【{}】 " +
// "请求方法(ง•̀_•́)ง->:【{}】 请求参数列表(ง•̀_•́)ง->:【{}】", remoteAddress, requestURI, clazzName, methodName,
// sb.toString()); // sb.toString());
} //// log.error("(ง•̀_•́)ง (っ•̀ω•́)っ 切面处理请求错误! IP信息(ง•̀_•́)ง->: 【{}}】 " +
//请求操作成功 //// "URI信息(ง•̀_•́)ง->:【{}】 请求映射控制类(ง•̀_•́)ง->:【{}】 " +
String resultJosnString = ""; //// "请求方法(ง•̀_•́)ง->:【{}】 请求参数列表(ง•̀_•́)ง->:【{}】", remoteAddress, requestURI, clazzName, methodName,
if (result != null) { //// sb.toString());
if (result instanceof ResponseData) { // }
resultJosnString = JSON.toJSONString(result, SerializerFeature.WriteDateUseDateFormat); // //请求操作成功
} else { // String resultJosnString = "";
resultJosnString = String.valueOf(result); // if (result != null) {
} // if (result instanceof ResponseData) {
} // resultJosnString = JSON.toJSONString(result, SerializerFeature.WriteDateUseDateFormat);
//记录请求完成执行时间: // } else {
long endTime = System.currentTimeMillis(); // resultJosnString = String.valueOf(result);
long usedTime = endTime - beginTime; // }
//记录日志 // }
log.info("请求操作成功! 请求耗时:【{}ms】 ", usedTime); // //记录请求完成执行时间:
// log.info("请求操作成功! 请求耗时:【{}】 " + // long endTime = System.currentTimeMillis();
// "IP信息(◍'౪`◍)ノ゙->: 【{}}】 URI信息(◍'౪`◍)ノ゙->:【{}】 " + // long usedTime = endTime - beginTime;
// "请求映射控制类(◍'౪`◍)ノ゙->:【{}】 请求方法(◍'౪`◍)ノ゙->:【{}】 " + // //记录日志
// "请求参数列表(◍'౪`◍)ノ゙->:【{}】 返回值(◍'౪`◍)ノ゙->:【{}】", usedTime, remoteAddress, requestURI, clazzName, // log.info("请求操作成功! 请求耗时:【{}ms】 ", usedTime);
// methodName, sb.toString(), resultJosnString); //// log.info("请求操作成功! 请求耗时:【{}】 " +
//// "IP信息(◍'౪`◍)ノ゙->: 【{}}】 URI信息(◍'౪`◍)ノ゙->:【{}】 " +
return result; //// "请求映射控制类(◍'౪`◍)ノ゙->:【{}】 请求方法(◍'౪`◍)ノ゙->:【{}】 " +
} //// "请求参数列表(◍'౪`◍)ノ゙->:【{}】 返回值(◍'౪`◍)ノ゙->:【{}】", usedTime, remoteAddress, requestURI, clazzName,
//// methodName, sb.toString(), resultJosnString);
@Before("requestServer()") //
public void before(JoinPoint joinPoint){ // return result;
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); // }
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
HttpServletRequest request = servletRequestAttributes.getRequest();
//这一步获取到的方法有可能是代理方法也有可能是真实方法
Method m = ((MethodSignature) joinPoint.getSignature()).getMethod();
//判断代理对象本身是否是连接点所在的目标对象,不是的话就要通过反射重新获取真实方法
if (joinPoint.getThis().getClass() != joinPoint.getTarget().getClass()) {
m = this.getMethod(joinPoint.getTarget().getClass(), m.getName(), m.getParameterTypes());
}
//通过真实方法获取该方法的参数名称
LocalVariableTableParameterNameDiscoverer paramNames = new LocalVariableTableParameterNameDiscoverer();
String[] parameterNames = paramNames.getParameterNames(m);
//获取连接点方法运行时的入参列表
Object[] args = joinPoint.getArgs();
//将参数名称与入参值一一对应起来
Map<String, Object> params = new HashMap<>();
//自己写的一个判空类方法
if (!StringUtil.isEmpty(parameterNames)){
for (int i = 0; i < parameterNames.length; i++) {
//这里加一个判断,如果使用requestParam接受参数,加了require=false,这里会存现不存在的现象
if (StringUtil.isEmpty(args[i])){
continue;
}
//通过所在类转换,获取值,包含各种封装类都可以
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.convertValue(args[i],args[i].getClass());
params.put(parameterNames[i],JSON.toJSON(objectMapper.convertValue(args[i],args[i].getClass())));
}
}
log.info("----------【{}】before start:---------------------",getMethodDesc(m));
log.info("URL : " + request.getRequestURL().toString());
log.info("HTTP_METHOD : " + request.getMethod());
log.info("IP : " + request.getRemoteAddr());
log.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName()+ "." + joinPoint.getSignature().getName());
//这里经过处理,就可以获得参数名字与值一一对应
log.info("ARGS-JSON : " + params);
//这个就是纯粹拿到参数,值需要自己匹配
log.info("ARGS : "+ Arrays.toString(joinPoint.getArgs()));
log.info("----------【{}】before end:---------------------",getMethodDesc(m));
}
@AfterThrowing("requestServer()")
public void AfterThrowing(){
System.out.println("异常通知....");
}
// @After("requestServer()")
// public void after(JoinPoint point){
// System.out.println("@After:模拟释放资源...");
// //
// @Before("requestServer()")
// public void before(JoinPoint joinPoint){
// RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
// ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
// HttpServletRequest request = servletRequestAttributes.getRequest();
// //这一步获取到的方法有可能是代理方法也有可能是真实方法
// Method m = ((MethodSignature) joinPoint.getSignature()).getMethod();
// //判断代理对象本身是否是连接点所在的目标对象,不是的话就要通过反射重新获取真实方法
// if (joinPoint.getThis().getClass() != joinPoint.getTarget().getClass()) {
// m = this.getMethod(joinPoint.getTarget().getClass(), m.getName(), m.getParameterTypes());
// }
// //通过真实方法获取该方法的参数名称
// LocalVariableTableParameterNameDiscoverer paramNames = new LocalVariableTableParameterNameDiscoverer();
// String[] parameterNames = paramNames.getParameterNames(m);
// //获取连接点方法运行时的入参列表
// Object[] args = joinPoint.getArgs();
// //将参数名称与入参值一一对应起来
// Map<String, Object> params = new HashMap<>();
// //自己写的一个判空类方法
// if (!StringUtil.isEmpty(parameterNames)){
// for (int i = 0; i < parameterNames.length; i++) {
// //这里加一个判断,如果使用requestParam接受参数,加了require=false,这里会存现不存在的现象
// if (StringUtil.isEmpty(args[i])){
// continue;
// }
// //通过所在类转换,获取值,包含各种封装类都可以
// ObjectMapper objectMapper = new ObjectMapper();
// objectMapper.convertValue(args[i],args[i].getClass());
// params.put(parameterNames[i],JSON.toJSON(objectMapper.convertValue(args[i],args[i].getClass())));
// }
// }
// log.info("----------【{}】before start:---------------------",getMethodDesc(m));
// log.info("URL : " + request.getRequestURL().toString());
// log.info("HTTP_METHOD : " + request.getMethod());
// log.info("IP : " + request.getRemoteAddr());
// log.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName()+ "." + joinPoint.getSignature().getName());
// //这里经过处理,就可以获得参数名字与值一一对应
// log.info("ARGS-JSON : " + params);
// //这个就是纯粹拿到参数,值需要自己匹配
// log.info("ARGS : "+ Arrays.toString(joinPoint.getArgs()));
// log.info("----------【{}】before end:---------------------",getMethodDesc(m));
//
// }
//
// @AfterThrowing("requestServer()")
// public void AfterThrowing(){
// System.out.println("异常通知....");
// }
//
//// @After("requestServer()")
//// public void after(JoinPoint point){
//// System.out.println("@After:模拟释放资源...");
////
//// log.info("before return+++++++++++++++++++++++++++");
//// log.info("@After:目标方法为:" +
//// point.getSignature().getDeclaringTypeName() +
//// "." + point.getSignature().getName());
//// log.info("@After:参数为:" + Arrays.toString(point.getArgs()));
//// System.out.println("@After:被织入的目标对象为:" + point.getTarget());
//// log.info("end return++++++++++++++++++++++++++++++++");
//// }
//
// @AfterReturning(value = "requestServer()",returning = "rtv")
// public void AfterReturning(JoinPoint joinPoint, Object rtv){
// log.info("before return+++++++++++++++++++++++++++"); // log.info("before return+++++++++++++++++++++++++++");
// log.info("@After:目标方法为:" + // log.info("responseBody:"+ JSON.toJSONString(rtv, SerializerFeature.WriteMapNullValue));
// point.getSignature().getDeclaringTypeName() +
// "." + point.getSignature().getName());
// log.info("@After:参数为:" + Arrays.toString(point.getArgs()));
// System.out.println("@After:被织入的目标对象为:" + point.getTarget());
// log.info("end return++++++++++++++++++++++++++++++++"); // log.info("end return++++++++++++++++++++++++++++++++");
// } // }
//
@AfterReturning(value = "requestServer()",returning = "rtv") // private Method getMethod(Class<?> classt,String methodName,Class<?>[] parameterTypes){
public void AfterReturning(JoinPoint joinPoint, Object rtv){ // Method rsMethod = null;
log.info("before return+++++++++++++++++++++++++++"); // Method[] methods = classt.getMethods();
log.info("responseBody:"+ JSON.toJSONString(rtv, SerializerFeature.WriteMapNullValue)); // String description = "";
log.info("end return++++++++++++++++++++++++++++++++"); // for (Method method : methods) {
} // if (method.getName().equals(methodName)) {
// rsMethod = method;
private Method getMethod(Class<?> classt,String methodName,Class<?>[] parameterTypes){ //// Class[] clazzs = method.getParameterTypes();
Method rsMethod = null; //// if (clazzs.length == parameterTypes.length) {
Method[] methods = classt.getMethods(); //// description = method.getAnnotation(ControllerLog.class).description();
String description = ""; //// break;
for (Method method : methods) { //// }
if (method.getName().equals(methodName)) { // }
rsMethod = method; // }
// Class[] clazzs = method.getParameterTypes(); // return rsMethod;
// if (clazzs.length == parameterTypes.length) {
// description = method.getAnnotation(ControllerLog.class).description();
// break;
// } // }
} //
} // private String getMethodDesc(Method method){
return rsMethod; // String rsMethodDesc = "未知方法";
} // if(!StringUtil.isNull(method)){
// rsMethodDesc = method.getAnnotation(ControllerLog.class).description();
private String getMethodDesc(Method method){ // }
String rsMethodDesc = "未知方法"; // return rsMethodDesc;
if(!StringUtil.isNull(method)){ // }
rsMethodDesc = method.getAnnotation(ControllerLog.class).description(); //
} //}
return rsMethodDesc; \ No newline at end of file
}
}
\ No newline at end of file
package com.liquidnet.service.galaxy.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.galaxy.aop.annotation.ControllerLog;
import com.liquidnet.service.galaxy.dto.GalaxyArtSeriesClaimReqDto;
import com.liquidnet.service.galaxy.dto.GalaxyArtSeriesClaimRespDto;
import com.liquidnet.service.galaxy.dto.GalaxyNftUploadReqDto;
import com.liquidnet.service.galaxy.dto.GalaxyNftUploadRespDto;
import com.liquidnet.service.galaxy.service.IGalaxyArtworkService;
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;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: NFT上传,系列声明
* @class: GalaxyArtworkController
* @Package com.liquidnet.service.galaxy.controller
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2022/3/14 13:59
*/
@Api(tags = "NFT艺术品相关")
@RestController
@RequestMapping("artwork")
@Validated
@Slf4j
public class GalaxyArtworkController {
@Autowired
private IGalaxyArtworkService galaxyArtworkService;
@ControllerLog(description = "NFT素材上传")
@ApiOperationSupport(order = 1)
@ApiOperation(value = "NFT素材上传")
@PostMapping(value = {"nftUpload"})
public ResponseDto<GalaxyNftUploadRespDto> nftUpload(@Valid @RequestBody GalaxyNftUploadReqDto reqDto) {
return galaxyArtworkService.nftUpload(reqDto);
}
@ControllerLog(description = "NFT系列声明")
@ApiOperationSupport(order = 2)
@ApiOperation(value = "NFT系列声明")
@PostMapping(value = {"seriesClaim"})
public ResponseDto<GalaxyArtSeriesClaimRespDto> seriesClaim(@Valid @RequestBody GalaxyArtSeriesClaimReqDto reqDto) {
return galaxyArtworkService.seriesClaim(reqDto);
}
// @ControllerLog(description = "NFT素材上传(form-data文件提交)")
// @ApiOperationSupport(order = 1)
// @ApiOperation(value = "NFT素材上传")
// @PostMapping(value = {"nftFileUpload"})
// public ResponseDto<GalaxyNftUploadRespDto> nftFileUpload(@RequestParam("file") MultipartFile file) {
// if (file.isEmpty()) {
// return ResponseDto.failure("上传失败,请选择文件");
// }
// GalaxyNftUploadReqDto reqDto = GalaxyNftUploadReqDto.getNew();
// reqDto.setImageUrl("");
// try {
// File upFile = file.getResource().getFile();
// reqDto.setFile(upFile);
// } catch (IOException e) {
// e.printStackTrace();
// }
// reqDto.setSeriesName("");
// return galaxyArtworkService.nftUpload(reqDto);
// }
}
package com.liquidnet.service.galaxy.controller;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: NFT购买
* @class: GalaxyNftTradeController
* @Package com.liquidnet.service.galaxy.controller
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2022/3/14 18:08
*/
@Api(tags = "NFT艺术品相关")
@RestController
@RequestMapping("nftTrade")
@Validated
@Slf4j
public class GalaxyNftTradeController {
}
package com.liquidnet.service.galaxy.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.ZxlnftEnum;
import com.liquidnet.common.third.zxlnft.dto.*;
import com.liquidnet.common.third.zxlnft.dto.wallet.UploadToCosReq;
import com.liquidnet.common.third.zxlnft.dto.wallet.UploadToCosResp;
import com.liquidnet.common.third.zxlnft.exception.ZxlNftException;
import com.liquidnet.common.third.zxlnft.util.ZxlWalletSdkUtil;
import com.liquidnet.common.third.zxlnft.util.ZxlnftSdkUtil;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.galaxy.dto.GalaxyArtSeriesClaimReqDto;
import com.liquidnet.service.galaxy.dto.GalaxyArtSeriesClaimRespDto;
import com.liquidnet.service.galaxy.dto.GalaxyNftUploadReqDto;
import com.liquidnet.service.galaxy.dto.GalaxyNftUploadRespDto;
import com.liquidnet.service.galaxy.service.IGalaxyArtworkService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
* @version V1.0
* @Description: TODO
* @class: GalaxyArtworkServiceImpl
* @Package com.liquidnet.service.galaxy.service.impl
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2022/3/12 00:14
*/
@Slf4j
@Service
public class GalaxyArtworkServiceImpl implements IGalaxyArtworkService {
@Autowired
private ZxlnftSdkUtil zxlnftSdkUtil;
@Autowired
private ZxlWalletSdkUtil zxlWalletSdkUtil;
@Autowired
private ZxlnftBiz zxlnftBiz;
@Autowired
private ZxlnftConfig zxlnftConfig;
@Value("${liquidnet.galaxy.temp-file-path:/Users/anjiabin/mdsky_gitlab/galaxy/tempFilePath}")
private String tempFilePath;
@Override
public ResponseDto<GalaxyNftUploadRespDto> nftUpload(GalaxyNftUploadReqDto reqDto) {
String imageUrl = reqDto.getImageUrl();
String seriesName = "NOW_ZXL_NFT_PIC_skuId002"; //系列名字 skuId
String filePath = "/Users/anjiabin/Downloads/myFileTemp/zxl_image_test_001.jpg";
String fileName = IDGenerator.getZxlNftImageCosCode() +".jpg";
//通过图片url地址上传
File cosFile = this.inputStreamToFile(reqDto.getImageUrl(),fileName);
filePath = cosFile.getAbsolutePath();
log.info("cosFile.getPath() :{}",cosFile.getPath());
log.info("cosFile.getAbsoluteFile() :{}",cosFile.getAbsoluteFile());
//完整全路径 https://zhixinliantest-1302317679.cos.ap-guangzhou.myqcloud.com/nft/4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef/NOW_ZXL_NFT_PIC001_test_skuId001/2022-03-04/ZXLNFTIMAGE202203041707466694345291.jpg
String fullFilePath = null; //需要保存,返回给调用者
String seriesId = null;
// 1.4.1调用图片内容检测接口
Nft008QueryImageModerationReqDto nft008ReqDto = Nft008QueryImageModerationReqDto.getNew();
nft008ReqDto.setImageUrl(imageUrl);
ZxlnftResponseDto<Nft008QueryImageModerationRespDto> nft008RespDto = zxlnftSdkUtil.nft008QueryImageModeration(nft008ReqDto);
if(!nft008RespDto.getData().getSuggestion().equals(ZxlnftEnum.SuggestionEnum.PASS.getCode())){
throw new ZxlNftException(ZxlErrorEnum.IMAGE_CHECK_ERROR.getCode(),ZxlErrorEnum.IMAGE_CHECK_ERROR.getMsg());
}
// 1.4.2调用生成素材上传临时密钥接口
Nft022UploadSecretReqDto nft022ReqDto = Nft022UploadSecretReqDto.getNew();
nft022ReqDto.setSeriesName(seriesName);
nft022ReqDto.setTimestamp(DateUtil.getNowSeconds().toString());
nft022ReqDto.setUserPubKey(zxlnftConfig.getNftPlatformPubKey());
//系列为空
String userData = nft022ReqDto.getTimestamp();
//系列不为空
if(StringUtil.isNotEmpty(nft022ReqDto.getSeriesName())){
userData = nft022ReqDto.getTimestamp() + "_" + nft022ReqDto.getSeriesName();
}
nft022ReqDto.setUserSignedData(zxlnftBiz.createSign(zxlnftConfig.getNftPlatformPriKey(),userData));
ZxlnftResponseDto<Nft022UploadSecretRespDto> nft022RespDto = zxlnftSdkUtil.nft022UploadSecret(nft022ReqDto);
if(!nft022RespDto.isSuccess()){
throw new ZxlNftException(ZxlErrorEnum.UPLOAD_TEMP_SECRET.getCode(),ZxlErrorEnum.UPLOAD_TEMP_SECRET.getMsg());
}
// 1.4.3调用sdk接口-上传cos接口
if(nft022RespDto.isSuccess()){
fullFilePath = nft022RespDto.getData().getUploadAddress().concat(fileName);
UploadToCosReq req = UploadToCosReq.getNew();
req.setCosPath(fullFilePath);
req.setTempSecretId(nft022RespDto.getData().getTempSecretId());
req.setTempSecretKey(nft022RespDto.getData().getTempSecretKey());
req.setSessionToken(nft022RespDto.getData().getSessionToken());
req.setFilePath(filePath);
UploadToCosResp uploadToCosResp = zxlWalletSdkUtil.uploadToCos(req);
}
log.info("完整的素材访问fullFilePath url:{}",fullFilePath);
GalaxyNftUploadRespDto galaxyNftUploadRespDto = GalaxyNftUploadRespDto.getNew();
galaxyNftUploadRespDto.setMaterialAccessUrl(fullFilePath);
return ResponseDto.success(galaxyNftUploadRespDto);
// 1.4.4调用查询素材地址接口 -- 非必需
// Nft021UploadUrlReqDto nft021ReqDto = Nft021UploadUrlReqDto.getNew();
// nft021ReqDto.setSeriesName(seriesName);
// nft021ReqDto.setPlatformIdentification(zxlnftConfig.getPlatformIdentification());
// //如果上传人就是平台管理员,以下需要注释掉,因为会导致返回的地址多了一级目录
//// nft021ReqDto.setUserIdentification(zxlnftConfig.getPlatformIdentification());
// ZxlnftResponseDto<Nft021UploadUrlRespDto> resp = zxlnftSdkUtil.nft021UploadUrl(nft021ReqDto);
}
@Override
public ResponseDto<GalaxyArtSeriesClaimRespDto> seriesClaim(GalaxyArtSeriesClaimReqDto reqDto) {
/**
* 进行系列声明
*/
// Nft030SeriesClaimReqDto nft030ReqDto = Nft030SeriesClaimReqDto.getNew();
// nft030ReqDto.setPubKey(zxlnftConfig.getNftPlatformPubKey());
// nft030ReqDto.setSeriesName(seriesName);
// //无限制系列 设置为0
// nft030ReqDto.setTotalCount(0l);
// nft030ReqDto.setOperateId(IDGenerator.get32UUID());
// //系列封面
// nft030ReqDto.setCoverUrl("https://zhixinliantest-1302317679.cos.ap-guangzhou.myqcloud.com/nft/4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef/ZXLNFTIMAGE202202241512003609141721.jpg");
// nft030ReqDto.setDesc("系列描述信息不超过500字符");
// nft030ReqDto.setMaxPublishCount(0);
// nft030ReqDto.setSeriesBeginFromZero(false);
// ZxlnftResponseDto<Nft030SeriesClaimRespDto> nft30RespDto = zxlnftSdkUtil.nft030SeriesClaim(reqDto);
//
// //{"taskId":"49d1cccc-e62c-40bc-923c-bfac31325351_nft-series-claim_1"}
// if(nft30RespDto.isSuccess()){
// //系列声明结果查询
// Nft031SeriesClaimResultReqDto nft031ReqDto = Nft031SeriesClaimResultReqDto.getNew();
// //第零个系列 无限制系列
// nft031ReqDto.setTaskId(nft30RespDto.getData().getTaskId());
//
// int count = 0;
// while(StringUtil.isEmpty(seriesId)){
// //休眠1秒钟,等待执行结果
// try {
// Thread.sleep(1000l);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
//
// count++;
// log.info("=======执行第{}次查询,taskId:{}",count,nft031ReqDto.getTaskId());
// ZxlnftResponseDto<Nft031SeriesClaimResultRespDto> nft031RespDtoTemp = zxlnftSdkUtil.nft031SeriesClaimResult(nft031ReqDto);
// if(nft031RespDtoTemp.getData().getTaskStatus().toString().equals(ZxlnftEnum.TaskStatusEnum.TASK_SUCCESS.getCode())){
// seriesId = nft031RespDtoTemp.getData().getSeriesId();
// break;
// }else if(nft031RespDtoTemp.getData().getTaskStatus().toString().equals(ZxlnftEnum.TaskStatusEnum.TASK_FAIL.getCode())){
// log.info("任务执行失败!taskId:{}",nft031ReqDto.getTaskId());
// break;
// }
//
// if(count==6){
// log.info("=======查询共6次,跳出循环!taskId:{}",nft031ReqDto.getTaskId());
// break;
// }
// }
//
// log.info("系列声明结果查询 seriesId :{}",seriesId);
// }
return null;
}
/**
* 大美 通过URL上传
*
* @param url
* @param name
* @return
*/
public File inputStreamToFile(String url, String name) {
try {
HttpURLConnection httpUrl = (HttpURLConnection) new URL(url).openConnection();
httpUrl.connect();
InputStream ins = httpUrl.getInputStream();
// File file = new File(System.getProperty("java.io.tmpdir") + File.separator + name);
File file = new File(tempFilePath + File.separator + name);
if (file.exists()) {
return file;
}
OutputStream os = new FileOutputStream(file);
int bytesRead;
int len = 8192;
byte[] buffer = new byte[len];
while ((bytesRead = ins.read(buffer, 0, len)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
return file;
} catch (Exception e) {
log.error("inputStreamToFileUrlError", e);
return null;
}
}
}
...@@ -81,10 +81,11 @@ public class TestZxlWalletSdkUtil { ...@@ -81,10 +81,11 @@ public class TestZxlWalletSdkUtil {
public void uploadToCos(){ public void uploadToCos(){
// String filePath = "/Users/anjiabin/Downloads/zxl_image_test_002.jpeg"; // String filePath = "/Users/anjiabin/Downloads/zxl_image_test_002.jpeg";
// String filePath = "/Users/anjiabin/Downloads/zxl_image_series_test_001.jpeg"; // String filePath = "/Users/anjiabin/Downloads/zxl_image_series_test_001.jpeg";
String filePath = "/Users/anjiabin/Downloads/zxl_image_test_001.jpg"; // String filePath = "/Users/anjiabin/Downloads/zxl_image_test_001.jpg";
String filePath = "https://img.zhengzai.tv/other/2022/03/09/1f88d2bc6fea40e19430227326410cb3.jpg";
String seriesName = "NOW_ZXL_NFT_PIC001_skuId001_test"; String seriesName = "NOW_ZXL_NFT_PIC001_skuId001_test";
// String fileName = "/"+ seriesName + "/" + DateUtil.getNowTime()+"/"+ IDGenerator.getZxlNftImageCosCode() +".jpg"; // String fileName = "/"+ seriesName + "/" + DateUtil.getNowTime()+"/"+ IDGenerator.getZxlNftImageCosCode() +".jpg";
String fileName = "/" + DateUtil.getNowTime()+"/"+ IDGenerator.getZxlNftImageCosCode() +".jpg"; String fileName = DateUtil.getNowTime(DateUtil.DATE_SMALL_STR)+"/"+ IDGenerator.getZxlNftImageCosCode() +".jpg";
//调用生成素材上传临时密钥接口 //调用生成素材上传临时密钥接口
Nft022UploadSecretReqDto nft022ReqDto = Nft022UploadSecretReqDto.getNew(); Nft022UploadSecretReqDto nft022ReqDto = Nft022UploadSecretReqDto.getNew();
......
...@@ -287,9 +287,10 @@ public class TestZxlnftSdkUtil { ...@@ -287,9 +287,10 @@ public class TestZxlnftSdkUtil {
@Test @Test
public void nft021UploadUrl(){ public void nft021UploadUrl(){
Nft021UploadUrlReqDto reqDto = Nft021UploadUrlReqDto.getNew(); Nft021UploadUrlReqDto reqDto = Nft021UploadUrlReqDto.getNew();
reqDto.setSeriesName("NOW_ZXL_NFT_PIC001_test_skuId001"); // reqDto.setSeriesName("NOW_ZXL_NFT_PIC001_test_skuId001");
reqDto.setSeriesName("SERIES_STORE_NAME");
reqDto.setPlatformIdentification(zxlnftConfig.getPlatformIdentification()); reqDto.setPlatformIdentification(zxlnftConfig.getPlatformIdentification());
reqDto.setUserIdentification(zxlnftConfig.getPlatformIdentification()); //暂时素材上传人和平台管理员是同一个人 // reqDto.setUserIdentification(zxlnftConfig.getPlatformIdentification()); //暂时素材上传人和平台管理员是同一个人
ZxlnftResponseDto<Nft021UploadUrlRespDto> resp = zxlnftSdkUtil.nft021UploadUrl(reqDto); ZxlnftResponseDto<Nft021UploadUrlRespDto> resp = zxlnftSdkUtil.nft021UploadUrl(reqDto);
System.out.println(resp.toJson()); System.out.println(resp.toJson());
...@@ -438,9 +439,9 @@ public class TestZxlnftSdkUtil { ...@@ -438,9 +439,9 @@ public class TestZxlnftSdkUtil {
//无限制系列 NOW_ZXL_NFT_PIC_skuId001 //无限制系列 NOW_ZXL_NFT_PIC_skuId001
// reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_8a827e181b695fb8d9b081d3855d2895ced1d003ee186622a005cec37ea77e59"); // reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_8a827e181b695fb8d9b081d3855d2895ced1d003ee186622a005cec37ea77e59");
//无限制系列 NOW_ZXL_NFT_PIC_skuId002 //无限制系列 NOW_ZXL_NFT_PIC_skuId002
reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_b9b105d186742e44691c540bbacddd1c3a883a49d899b81c5b1a5cf10b4ad4e6"); // reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_b9b105d186742e44691c540bbacddd1c3a883a49d899b81c5b1a5cf10b4ad4e6");
//第一个系列 //第一个系列
// reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_ca49b5ebadd5f73ab057fe869bf897cbcc0f31e0b89db71cc3ec78bca2d16ed6"); reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_ca49b5ebadd5f73ab057fe869bf897cbcc0f31e0b89db71cc3ec78bca2d16ed6");
//第二个系列 //第二个系列
// reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_31ff9f7d4c33c98518e095fec6cecdab8d337751602cf6e651eb7d131cff5b61"); // reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_31ff9f7d4c33c98518e095fec6cecdab8d337751602cf6e651eb7d131cff5b61");
ZxlnftResponseDto<Nft032SeriesRespDto> resp = zxlnftSdkUtil.nft032Series(reqDto); ZxlnftResponseDto<Nft032SeriesRespDto> resp = zxlnftSdkUtil.nft032Series(reqDto);
...@@ -508,7 +509,7 @@ public class TestZxlnftSdkUtil { ...@@ -508,7 +509,7 @@ public class TestZxlnftSdkUtil {
//无限制零系列 //无限制零系列
// reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_8a827e181b695fb8d9b081d3855d2895ced1d003ee186622a005cec37ea77e59"); // reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_8a827e181b695fb8d9b081d3855d2895ced1d003ee186622a005cec37ea77e59");
// //系列001 // //系列001
reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_ca49b5ebadd5f73ab057fe869bf897cbcc0f31e0b89db71cc3ec78bca2d16ed6"); // reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_ca49b5ebadd5f73ab057fe869bf897cbcc0f31e0b89db71cc3ec78bca2d16ed6");
// //系列002 // //系列002
// reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_31ff9f7d4c33c98518e095fec6cecdab8d337751602cf6e651eb7d131cff5b61"); // reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_31ff9f7d4c33c98518e095fec6cecdab8d337751602cf6e651eb7d131cff5b61");
reqDto.setSeriesBeginIndex(6); reqDto.setSeriesBeginIndex(6);
...@@ -549,6 +550,7 @@ public class TestZxlnftSdkUtil { ...@@ -549,6 +550,7 @@ public class TestZxlnftSdkUtil {
//系列001 发行ID6 共6个 //系列001 发行ID6 共6个
reqDto.setTaskId("2f1eae08-6b52-42ff-ac69-78cca7bf6913_nft-publish_3"); reqDto.setTaskId("2f1eae08-6b52-42ff-ac69-78cca7bf6913_nft-publish_3");
reqDto.setTaskId("4efaab86-deb3-436f-9aca-de59033ec79c_nft-publish_3"); reqDto.setTaskId("4efaab86-deb3-436f-9aca-de59033ec79c_nft-publish_3");
reqDto.setTaskId("878dddd8-0e10-4e0b-99d0-0f2221ea3a48_nft-publish_3");
ZxlnftResponseDto<Nft035PublishResultRespDto> resp = zxlnftSdkUtil.nft035PublishResult(reqDto); ZxlnftResponseDto<Nft035PublishResultRespDto> resp = zxlnftSdkUtil.nft035PublishResult(reqDto);
System.out.println(resp.toJson()); System.out.println(resp.toJson());
} }
......
...@@ -301,34 +301,41 @@ public class TestZxlnftService { ...@@ -301,34 +301,41 @@ public class TestZxlnftService {
String name = "上海草莓音乐节2022"; String name = "上海草莓音乐节2022";
String url = "https://zhixinliantest-1302317679.cos.ap-guangzhou.myqcloud.com/nft/4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef/ZXLNFTIMAGE202202241512003609141721.jpg"; String url = "https://zhixinliantest-1302317679.cos.ap-guangzhou.myqcloud.com/nft/4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef/ZXLNFTIMAGE202202241512003609141721.jpg";
String displayUrl = "https://zhixinliantest-1302317679.cos.ap-guangzhou.myqcloud.com/nft/4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef/ZXLNFTIMAGE202202241512003609141721.jpg"; String displayUrl = "https://zhixinliantest-1302317679.cos.ap-guangzhou.myqcloud.com/nft/4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef/ZXLNFTIMAGE202202241512003609141721.jpg";
//第二中图片
url = "https://zhixinliantest-1302317679.cos.ap-guangzhou.myqcloud.com/nft/4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef/NOW_ZXL_NFT_PIC_skuId002/ZXLNFTIMAGE202203141616443229613632.jpg";
displayUrl = "https://zhixinliantest-1302317679.cos.ap-guangzhou.myqcloud.com/nft/4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef/ZXLNFTIMAGE202202241512003609141721.jpg";
String desc = "NFT描述信息"; String desc = "NFT描述信息";
String flag = "文创"; String flag = "文创";
//发行个数 //发行个数
Long publishCount = 1L; Long publishCount = 1L;
//开始索引 //开始索引
Integer seriesBeginIndex = 3; Integer seriesBeginIndex = 8;
Long sellCount = 1000L; //积分 Long sellCount = 1000L; //积分
//无限制系列 //无限制系列
String seriesId = "4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_8a827e181b695fb8d9b081d3855d2895ced1d003ee186622a005cec37ea77e59"; // String seriesId = "4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_8a827e181b695fb8d9b081d3855d2895ced1d003ee186622a005cec37ea77e59";
//系列001 //系列001
//String seriesId = "4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_ca49b5ebadd5f73ab057fe869bf897cbcc0f31e0b89db71cc3ec78bca2d16ed6"; String seriesId = "4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_ca49b5ebadd5f73ab057fe869bf897cbcc0f31e0b89db71cc3ec78bca2d16ed6";
//系列002 //系列002
//String seriesId = "4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_31ff9f7d4c33c98518e095fec6cecdab8d337751602cf6e651eb7d131cff5b61"; //String seriesId = "4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_31ff9f7d4c33c98518e095fec6cecdab8d337751602cf6e651eb7d131cff5b61";
// //
Nft032SeriesReqDto nft02ReqDto = Nft032SeriesReqDto.getNew(); Nft032SeriesReqDto nft032ReqDto = Nft032SeriesReqDto.getNew();
nft032ReqDto.setSeriesId(seriesId);
//第零个系列 无限制系列查询 //第零个系列 无限制系列查询
nft02ReqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_8a827e181b695fb8d9b081d3855d2895ced1d003ee186622a005cec37ea77e59"); // nft032ReqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_8a827e181b695fb8d9b081d3855d2895ced1d003ee186622a005cec37ea77e59");
//第一个系列 //第一个系列
// reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_ca49b5ebadd5f73ab057fe869bf897cbcc0f31e0b89db71cc3ec78bca2d16ed6"); // nft032ReqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_ca49b5ebadd5f73ab057fe869bf897cbcc0f31e0b89db71cc3ec78bca2d16ed6");
//第二个系列 //第二个系列
// reqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_31ff9f7d4c33c98518e095fec6cecdab8d337751602cf6e651eb7d131cff5b61"); // nft032ReqDto.setSeriesId("4e40d5f6f65aa8ec9bc33ab424e0167e68783bbe95d4d265086314d749808eef_31ff9f7d4c33c98518e095fec6cecdab8d337751602cf6e651eb7d131cff5b61");
ZxlnftResponseDto<Nft032SeriesRespDto> resp = zxlnftSdkUtil.nft032Series(nft02ReqDto); ZxlnftResponseDto<Nft032SeriesRespDto> resp = zxlnftSdkUtil.nft032Series(nft032ReqDto);
//该系列已经发行多少个nft //该系列已经发行多少个nft
Long crtCount = resp.getData().getSeriesInfo().getCrtCount(); Long crtCount = resp.getData().getSeriesInfo().getCrtCount();
log.info("系列:{} 已发行 :{}",seriesId,crtCount);
//3.1.2调用NFT发行接口 //3.1.2调用NFT发行接口
/** /**
......
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