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

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

~API:我的藏品列表、详情;

parent 4dd46d13
......@@ -179,6 +179,13 @@ public class GoblinRedisConst {
* {goblin:u_d_art:${artwork_id}, JsonUtils.toJson(com.liquidnet.service.goblin.dto.vo.GoblinDigitalArtworkVo)}
*/
public static final String USER_DIGITAL_ARTWORK = PREFIX.concat("u_d_art:");
/**
* 我的藏品计数
* {goblin:u_d_art_ct:${uid}, count(1)}
*/
public static final String USER_DIGITAL_ARTWORK_CT = PREFIX.concat("u_d_art_ct:");
/**
* 我的藏品生成标记(有时效)
* {goblin:u_d_art:${uid+skuId+orderId},1}
......
......@@ -17,15 +17,15 @@ public class GoblinDigitalArtworkInfoVo implements Serializable, Cloneable {
@ApiModelProperty(position = 12, value = "藏品副名称")
private String subtitle;
@ApiModelProperty(position = 13, value = "藏品素材类型[1-图片|2-视频|3-模型]")
private Integer materialType;
private String materialType;
@ApiModelProperty(position = 14, value = "藏品素材URL")
private String materialUrl;
@ApiModelProperty(position = 15, value = "序列号")
private Integer editionSn;
@ApiModelProperty(position = 16, value = "藏品发行量")
private Integer edition;
@ApiModelProperty(position = 17, value = "NFT藏品HASH")
private String nftHash;
@ApiModelProperty(position = 17, value = "藏品NFT ID")
private String nftId;
// @ApiModelProperty(position = 18, value = "NFT系列声明时间")
// private String declareAt;
......@@ -35,10 +35,10 @@ public class GoblinDigitalArtworkInfoVo implements Serializable, Cloneable {
private Integer state;
@ApiModelProperty(position = 21, value = "创作者")
private String author;
@ApiModelProperty(position = 22, value = "收藏者")
private String collector;
@ApiModelProperty(position = 23, value = "发行方")
@ApiModelProperty(position = 22, value = "发行方")
private String publisher;
@ApiModelProperty(position = 23, value = "藏品详情")
private String details;
private static final GoblinDigitalArtworkInfoVo obj = new GoblinDigitalArtworkInfoVo();
......@@ -49,4 +49,20 @@ public class GoblinDigitalArtworkInfoVo implements Serializable, Cloneable {
return new GoblinDigitalArtworkInfoVo();
}
}
public GoblinDigitalArtworkInfoVo copy(GoblinDigitalArtworkVo source) {
// this.setName();
// this.setSubtitle();
// this.setMaterialType();
// this.setMaterialUrl();
// this.setEdition();
this.setEditionSn(source.getEditionSn());
this.setNftId(source.getNftId());
this.setSource(source.getSource());
this.setState(source.getState());
// this.setAuthor();
// this.setPublisher();
// this.setDetails();
return this;
}
}
......@@ -15,10 +15,8 @@ import java.time.LocalDateTime;
@JsonIgnoreProperties(ignoreUnknown = true)
public class GoblinDigitalArtworkListVo implements Serializable, Cloneable {
private static final long serialVersionUID = -1510553574954846520L;
@ApiModelProperty(position = 10, value = "藏品Id")
@ApiModelProperty(position = 11, value = "藏品Id")
private String artworkId;
@ApiModelProperty(position = 11, value = "是否盲盒[0-否|1-是]")
private Integer unbox;
@ApiModelProperty(position = 12, value = "藏品名称")
private String name;
......@@ -35,7 +33,14 @@ public class GoblinDigitalArtworkListVo implements Serializable, Cloneable {
@ApiModelProperty(position = 18, value = "藏品状态,根据`unbox`区分盲盒来判断[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败]")
private Integer state;
@ApiModelProperty(position = 19, value = "盲盒开启时间")
@ApiModelProperty(position = 19, value = "藏品创建时间")
@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 = "盲盒开启时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime openingTime;
......@@ -49,4 +54,19 @@ public class GoblinDigitalArtworkListVo implements Serializable, Cloneable {
return new GoblinDigitalArtworkListVo();
}
}
public GoblinDigitalArtworkListVo copy(GoblinDigitalArtworkVo source) {
this.setArtworkId(source.getArtworkId());
// this.setName();
// this.setSubtitle();
// this.setCoverPic();
// this.setEdition();
this.setEditionSn(source.getEditionSn());
this.setSource(source.getSource());
this.setState(source.getState());
this.setCreatedAt(source.getCreatedAt());
// this.setUnbox();
// this.setOpeningTime();
return this;
}
}
package com.liquidnet.service.goblin.dto.vo;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.liquidnet.service.base.PagedResult;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ApiModel(value = "GoblinDigitalArtworkPageVo", description = "我的藏品信息")
@JsonIgnoreProperties(ignoreUnknown = true)
public class GoblinDigitalArtworkPageVo implements Cloneable {
private static final long serialVersionUID = -1510553574954846520L;
@ApiModelProperty(position = 11, value = "藏品数量")
private int artworkNum;
@ApiModelProperty(position = 12, value = "藏品列表分页数据")
private PagedResult<GoblinDigitalArtworkListVo> pagedResult;
public int getArtworkNum() {
return artworkNum;
}
public PagedResult<GoblinDigitalArtworkListVo> getPagedResult() {
return pagedResult;
}
public GoblinDigitalArtworkPageVo setArtworkNum(int artworkNum) {
this.artworkNum = artworkNum;
return this;
}
public GoblinDigitalArtworkPageVo setPagedResult(PagedResult<GoblinDigitalArtworkListVo> pagedResult) {
this.pagedResult = pagedResult;
return this;
}
private static final GoblinDigitalArtworkPageVo obj = new GoblinDigitalArtworkPageVo();
public static GoblinDigitalArtworkPageVo getNew() {
try {
return (GoblinDigitalArtworkPageVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinDigitalArtworkPageVo();
}
}
}
package com.liquidnet.service.goblin.service;
import com.liquidnet.service.goblin.dto.vo.GoblinDigitalArtworkInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinDigitalArtworkPageVo;
public interface IGoblinDigitalArtworkService {
GoblinDigitalArtworkPageVo page(String uid, Integer pageNum, Integer pageSize);
GoblinDigitalArtworkInfoVo info(String uid, String artworkId);
}
......@@ -80,14 +80,16 @@ public class TestAdam {
"goblin:bsc:ustore:922833055536291845022973",
"goblin:bsc:store:839fa8dde17b5bf248575370f1249eab",
"goblin:bsc:self_g_c",
"goblin:u_d_art:2290114757532",
"goblin:u_d_art_ids:481073045099397123024514",
"goblin:u_d_art:TEST123228418301277894015TEST1234567890",
"goblin:u_d_art:2290182141046",
"goblin:u_d_art_gm:481073045099397123024514228418301277894015TEST1234567890",
"goblin:u_d_art_ct:481073045099397123024514",
};
for (String key : keys) {
long value = key.hashCode();
int idx = ((int) (value ^ (value >>> 32)) % dbs);
System.out.printf("\n[%s] - idx:%s", key, idx);
System.out.printf("\n%s] - idx:%s", key, idx);
}
}
......
......@@ -107,7 +107,7 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece
// Mongo记录VO
mongoTemplate.insert(digitalArtworkVo, GoblinDigitalArtworkVo.class.getSimpleName());
// Redis记录VO
redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(digitalArtworkVo.getArtworkId()), JsonUtils.toJson(digitalArtworkVo));
redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(digitalArtworkVo.getArtworkId()), digitalArtworkVo);
// Redis更新藏品ID列表
List<String> userDigitalArtworkIds = this.getUserDigitalArtworkIdsFromRdb(uid);
if (CollectionUtils.isEmpty(userDigitalArtworkIds)) {
......@@ -133,6 +133,7 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece
bizNftBuyMap.put("message", QUEUE_MSG_TL.replace("1", orderId).replace("2", skuId).replace("3", uid).replace("4", DateUtil.Formatter.yyyyMMddHHmmss.format(now)));
streamOperations.add(StreamRecords.mapBacked(bizNftBuyMap).withStreamKey(QUEUE_KEY_NFT));// TODO: 2022/3/30 ==zhanggb.anjiabin
redisUtil.incr(GoblinRedisConst.USER_DIGITAL_ARTWORK_CT.concat(uid), 1);
// Redis生成标记(缓存三天),用于上面的生成检查
redisUtil.set(genMarkerKey, 1, 259200);
} else {
......
......@@ -2,16 +2,22 @@ package com.liquidnet.service.goblin.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.service.base.PagedResult;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.goblin.dto.GoblinQueueBizArtworkGenDto;
import com.liquidnet.service.goblin.dto.vo.GoblinDigitalArtworkInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinDigitalArtworkListVo;
import com.liquidnet.service.goblin.dto.vo.GoblinDigitalArtworkPageVo;
import com.liquidnet.service.goblin.service.IGoblinDigitalArtworkService;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.QueueUtils;
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.RandomUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -19,6 +25,8 @@ 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;
@ApiSupport(order = 142000)
@Api(tags = "我的藏品管理")
@Slf4j
......@@ -28,17 +36,32 @@ import org.springframework.web.bind.annotation.RestController;
public class GoblinDigitalArtworkController {
@Autowired
GoblinRedisUtils goblinRedisUtils;
@Autowired
IGoblinDigitalArtworkService goblinDigitalArtworkService;
@Autowired
QueueUtils queueUtils;
@ApiOperationSupport(order = 1)
@ApiOperation(value = "藏品列表")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = false, dataType = "Integer", name = "pageNum", value = "索引页数"),
@ApiImplicitParam(type = "form", required = false, dataType = "Integer", name = "pageSize", value = "显示记录数"),
@ApiImplicitParam(type = "form", required = false, dataType = "Integer", name = "pageSize", value = "显示记录数[默认5,暂定最大也为5]"),
})
@PostMapping("list")
public ResponseDto<PagedResult<GoblinDigitalArtworkListVo>> list(@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
return null;
public ResponseDto<GoblinDigitalArtworkPageVo> list(@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "5") Integer pageSize) {
pageNum = pageNum < 1 ? 1 : pageNum;
pageSize = pageSize < 1 ? 5 : (pageSize > 5 ? 5 : pageSize);
String currentUid = CurrentUtil.getCurrentUid();
GoblinQueueBizArtworkGenDto artworkGenDto = GoblinQueueBizArtworkGenDto.getNew();
artworkGenDto.setOrderId("TESTORDERID" + RandomUtils.nextInt(0, 12));
artworkGenDto.setSkuId("228418301277894015");
artworkGenDto.setSource(1);
artworkGenDto.setUid(currentUid);
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_GEN.getKey(), artworkGenDto.toJson());
return ResponseDto.success(goblinDigitalArtworkService.page(currentUid, pageNum, pageSize));
}
@ApiOperationSupport(order = 2)
......@@ -47,8 +70,8 @@ public class GoblinDigitalArtworkController {
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "artworkId", value = "藏品ID"),
})
@PostMapping("info")
public ResponseDto<GoblinDigitalArtworkInfoVo> info(@RequestParam String artworkId) {
return null;
public ResponseDto<GoblinDigitalArtworkInfoVo> info(@NotBlank(message = "藏品ID不能为空") @RequestParam String artworkId) {
return ResponseDto.success(goblinDigitalArtworkService.info(CurrentUtil.getCurrentUid(), artworkId));
}
@ApiOperationSupport(order = 3)
......
package com.liquidnet.service.goblin.service.impl;
import com.fasterxml.jackson.databind.JsonNode;
import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ErrorMapping;
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.goblin.dto.vo.*;
import com.liquidnet.service.goblin.service.IGoblinDigitalArtworkService;
import com.liquidnet.service.goblin.util.GoblinMongoUtils;
import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.ObjectUtil;
import com.liquidnet.service.goblin.util.QueueUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
@Slf4j
@Service
public class GoblinDigitalArtworkServiceImpl implements IGoblinDigitalArtworkService {
@Autowired
private QueueUtils queueUtils;
@Autowired
private GoblinRedisUtils goblinRedisUtils;
@Autowired
private GoblinMongoUtils goblinMongoUtils;
@Autowired
Environment env;
// @Value("${liquidnet.service.galaxy.url}")// TODO: 2022/3/31 ==zhanggb
// private String sevGalaxyUrl;
@Override
public GoblinDigitalArtworkPageVo page(String uid, Integer pageNum, Integer pageSize) {
GoblinDigitalArtworkPageVo pageVo = GoblinDigitalArtworkPageVo.getNew();
long artworkNum = goblinRedisUtils.countUserDigitalArtwork(uid);
if (artworkNum > 0) {
if (artworkNum > 30 && pageNum * pageSize > 30) {// 查询Mongo
PagedResult<GoblinDigitalArtworkListVo> listVoPagedResult = goblinMongoUtils.getUserDigitalArtworkListVos(uid, pageNum, pageSize);
listVoPagedResult.setTotal(artworkNum, pageSize);
pageVo.setArtworkNum((int) artworkNum).setPagedResult(listVoPagedResult);
} else {
PagedResult<GoblinDigitalArtworkListVo> listVoPagedResult = ObjectUtil.getGoblinDigitalArtworkListVoPagedResult();
List<GoblinDigitalArtworkListVo> list = ObjectUtil.getGoblinDigitalArtworkListVoArrayList();
List<String> userDigitalArtworkIds = goblinRedisUtils.getUserDigitalArtworkIds(uid);
if (!CollectionUtils.isEmpty(userDigitalArtworkIds)) {
int cacheSize = userDigitalArtworkIds.size(), cacheNum = cacheSize / pageSize + 1;// 分几页
int fromIndex = Math.min(Math.min(cacheNum, pageNum - 1) * pageSize, cacheSize - 1);
List<String> subList = userDigitalArtworkIds.subList(fromIndex, Math.min(fromIndex + pageSize, cacheSize));
LocalDateTime now = LocalDateTime.now(), toCheckTime = now.minusSeconds(15);
int subSize = subList.size();
for (int i = 0; i < subSize; i++) {
String artworkId = subList.get(i);
GoblinDigitalArtworkVo userDigitalArtworkVo = goblinRedisUtils.getUserDigitalArtworkVo(artworkId);
if (null != userDigitalArtworkVo) {
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId());
GoblinDigitalArtworkListVo listVo = GoblinDigitalArtworkListVo.getNew().copy(userDigitalArtworkVo);
listVo.setName(goodsSkuInfoVo.getName());
listVo.setSubtitle(goodsSkuInfoVo.getSubtitle());
listVo.setCoverPic(goodsSkuInfoVo.getSkuPic());
listVo.setEdition(goodsSkuInfoVo.getSkuStock());
listVo.setUnbox(goodsSkuInfoVo.getUnbox());
listVo.setOpeningTime(goodsSkuInfoVo.getOpeningTime());
if (listVo.getCreatedAt().isBefore(toCheckTime)) {// 15秒前创建的藏品,去主动核实发行交易状态
List<String> checkRespDataList = this.checkNftTradeFromGalaxy(uid, userDigitalArtworkVo.getOrderId(), goodsSkuInfoVo.getRouteType());
this.updateUserDigitalArtworkByChainTrade(userDigitalArtworkVo, listVo, checkRespDataList, now);
}
list.add(listVo);
}
}
listVoPagedResult.setList(list).setTotal(artworkNum, pageSize);
pageVo.setArtworkNum((int) artworkNum).setPagedResult(listVoPagedResult);
}
}
}
return pageVo;
}
@Override
public GoblinDigitalArtworkInfoVo info(String uid, String artworkId) {
GoblinDigitalArtworkVo userDigitalArtworkVo = goblinRedisUtils.getUserDigitalArtworkVo(artworkId);
if (null != userDigitalArtworkVo && userDigitalArtworkVo.getUid().equals(uid)) {
GoblinDigitalArtworkInfoVo artworkInfoVo = GoblinDigitalArtworkInfoVo.getNew().copy(userDigitalArtworkVo);
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId());
GoblinGoodsInfoVo goodsInfoVo = goblinRedisUtils.getGoodsInfoVo(goodsSkuInfoVo.getSpuId());
artworkInfoVo.setName(goodsSkuInfoVo.getName());
artworkInfoVo.setSubtitle(goodsSkuInfoVo.getSubtitle());
artworkInfoVo.setMaterialType(goodsSkuInfoVo.getMaterialType());
artworkInfoVo.setMaterialUrl(goodsSkuInfoVo.getMaterialUrl());
artworkInfoVo.setEdition(goodsSkuInfoVo.getSkuStock());
artworkInfoVo.setAuthor(goodsInfoVo.getAuthor());
artworkInfoVo.setPublisher(goodsInfoVo.getPublisher());
artworkInfoVo.setDetails(goodsSkuInfoVo.getDetails());
return artworkInfoVo;
}
return null;
}
/* -------------------------------------------------------------------------------------------------------------- */
private void updateUserDigitalArtworkByChainTrade(GoblinDigitalArtworkVo userDigitalArtworkVo, GoblinDigitalArtworkListVo listVo,
List<String> checkRespDataList, LocalDateTime now) {
if (!CollectionUtils.isEmpty(checkRespDataList)) {
String nftId = checkRespDataList.get(0);
String nftPublishChainTimestamp = checkRespDataList.get(1);
String nftPublishTxHash = checkRespDataList.get(2);
String nftBuyChainTimestamp = checkRespDataList.get(3);
String nftBuyTxHash = checkRespDataList.get(4);
listVo.setState(1);
listVo.setEditionSn(Integer.valueOf(nftId.substring(nftId.indexOf("_") + 1)));
userDigitalArtworkVo.setEditionSn(listVo.getEditionSn());
userDigitalArtworkVo.setNftId(nftId);
userDigitalArtworkVo.setReleaseAt(nftPublishChainTimestamp);
userDigitalArtworkVo.setReleaseTxhash(nftPublishTxHash);
userDigitalArtworkVo.setTradingAt(nftBuyChainTimestamp);
userDigitalArtworkVo.setTradingTxhash(nftBuyTxHash);
userDigitalArtworkVo.setState(1);
userDigitalArtworkVo.setUpdatedAt(now);
goblinRedisUtils.setUserDigitalArtworkVo(userDigitalArtworkVo.getArtworkId(), userDigitalArtworkVo);
goblinMongoUtils.updateUserDigitalArtworkVoByChainTrade(userDigitalArtworkVo);
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(),
SqlMapping.get("goblin_user_digital_artwork.update_for_chain",
userDigitalArtworkVo.getEditionSn(), userDigitalArtworkVo.getNftId(), userDigitalArtworkVo.getReleaseTxhash(),
userDigitalArtworkVo.getReleaseAt(), userDigitalArtworkVo.getTradingTxhash(), userDigitalArtworkVo.getTradingAt(),
userDigitalArtworkVo.getState(), userDigitalArtworkVo.getUpdatedAt())
);
}
}
private List<String> checkNftTradeFromGalaxy(String uid, String orderId, String routerType) {
LinkedMultiValueMap<String, String> paramsMap = CollectionUtil.linkedMultiValueMapStringString();
paramsMap.add("userId", uid);
paramsMap.add("nftOrderPayId", orderId);// TODO: 2022/3/31 ==zhanggb
paramsMap.add("routerType", routerType);
// String postUrl = sevGalaxyUrl + "/user/register", blockChainAddress;// TODO: 2022/3/31 ==zhanggb
String postUrl = "https://ENVgalaxy.zhengzai.tv/galaxy/nftTrade/nftPublishAndBuyResultQuery".replace("ENV", env.getProperty(CurrentUtil.CK_ENV_ACTIVE)), blockChainAddress;
try {
LinkedMultiValueMap<String, String> headerMap = CollectionUtil.linkedMultiValueMapStringString();
headerMap.add("Accept", MediaType.APPLICATION_JSON_VALUE);
String postRespStr = HttpUtil.post(postUrl, paramsMap, headerMap);
JsonNode postRespJNode = JsonUtils.fromJson(postRespStr, JsonNode.class);
if (null == postRespJNode || !postRespJNode.get("code").asText().equals("0")) {
log.warn("#NFT发行购买结果查询:查询失败[paramsMap={},postRespStr={}]", paramsMap, postRespStr);
return null;
}
JsonNode postRespDataJNode = postRespJNode.get("data");
List<String> respDataList = CollectionUtil.arrayListString();
respDataList.add(postRespDataJNode.get("nftId").asText());
respDataList.add(postRespDataJNode.get("nftPublishChainTimestamp").asText());
respDataList.add(postRespDataJNode.get("nftPublishTxHash").asText());
respDataList.add(postRespDataJNode.get("nftBuyChainTimestamp").asText());
respDataList.add(postRespDataJNode.get("nftBuyTxHash").asText());
return respDataList;
} catch (Exception e) {
log.error("Ex.NFT发行购买结果查询:请求异常[UID={},url={},paramsMap={}],ex:{}", uid, postUrl, paramsMap, e.getMessage());
return null;
}
}
}
......@@ -1263,6 +1263,35 @@ public class GoblinMongoUtils {
).getModifiedCount() > 0;
}
/* ---------------------------------------- 我的藏品 ---------------------------------------- */
public boolean updateUserDigitalArtworkVoByChainTrade(GoblinDigitalArtworkVo vo) {
UpdateResult updateResult = mongoTemplate.getCollection(GoblinDigitalArtworkVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("artworkId").is(vo.getArtworkId())).getQueryObject(),
Update.update("editionSn", vo.getEditionSn())
.set("nftId", vo.getNftId())
.set("releaseTxhash", vo.getReleaseTxhash())
.set("releaseAt", vo.getReleaseAt())
.set("tradingTxhash", vo.getTradingTxhash())
.set("tradingAt", vo.getTradingAt())
.set("state", vo.getState())
.set("updatedAt", vo.getUpdatedAt())
.getUpdateObject()
);
return updateResult.getModifiedCount() > 0;
}
public PagedResult<GoblinDigitalArtworkListVo> getUserDigitalArtworkListVos(String uid, Integer pageNum, Integer pageSize) {
Criteria criteria = Criteria.where("delFlg").is("0").and("uid").is(uid);
Query query = Query.query(criteria);
PagedResult<GoblinDigitalArtworkListVo> pagedResult = ObjectUtil.getGoblinDigitalArtworkListVoPagedResult();
query.with(PageRequest.of(pageNum - 1, pageSize)).with(Sort.by(Sort.Order.desc("createdAt")));
List<GoblinDigitalArtworkListVo> list = mongoTemplate.find(query, GoblinDigitalArtworkListVo.class, GoblinDigitalArtworkVo.class.getSimpleName());
return pagedResult.setList(list);
}
/* ---------------------------------------- ---------------------------------------- */
/* ---------------------------------------- ---------------------------------------- */
}
......@@ -22,6 +22,7 @@ import org.springframework.util.StringUtils;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import static com.liquidnet.service.goblin.constant.GoblinRedisConst.REDIS_GOBLIN_TEMP_COUPON_MARKET;
......@@ -1364,5 +1365,25 @@ public class GoblinRedisUtils {
redisUtil.set(redisKey, spuList);
}
/* ---------------------------------------- 我的藏品 ---------------------------------------- */
public List<String> getUserDigitalArtworkIds(String uid) {
return (List<String>) redisUtil.get(GoblinRedisConst.USER_DIGITAL_ARTWORK_IDS.concat(uid));
}
public long countUserDigitalArtwork(String uid) {
Object o = redisUtil.get(GoblinRedisConst.USER_DIGITAL_ARTWORK_CT.concat(uid));
return Objects.isNull(o) ? 0 : (int) o;
}
public GoblinDigitalArtworkVo getUserDigitalArtworkVo(String artworkId) {
return (GoblinDigitalArtworkVo) redisUtil.get(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(artworkId));
}
public boolean setUserDigitalArtworkVo(String artworkId, GoblinDigitalArtworkVo vo) {
return redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(artworkId), vo);
}
/* ---------------------------------------- ---------------------------------------- */
/* ---------------------------------------- ---------------------------------------- */
}
......@@ -27,6 +27,7 @@ public class ObjectUtil {
private static final PagedResult<GoblinStoreMgtGoodsListVo> goblinStoreMgtGoodsVoPagedResult = new PagedResult<>();
private static final PagedResult<GoblinStoreNoticeVo> goblinStoreNoticeVoPagedResult = new PagedResult<>();
private static final PagedResult<GoblinStoreMgtCouponListVo> goblinStoreMgtCouponListVoPagedResult = new PagedResult<>();
private static final PagedResult<GoblinDigitalArtworkListVo> goblinDigitalArtworkListVoPagedResult = new PagedResult<>();
private static final ArrayList<GoblinGoodsInfoVo> goblinGoodsInfoVoArrayList = new ArrayList<>();
private static final ArrayList<GoblinFrontBanner> goblinFrontBannerArrayList = new ArrayList<>();
......@@ -80,6 +81,7 @@ public class ObjectUtil {
private static final ArrayList<GoblinMailVo> goblinMailVo = new ArrayList<>();
private static final ArrayList<GoblinPosGoodsVo> goblinPosGoodsVoArrayList = new ArrayList<>();
private static final ArrayList<TempCouponVo> tempCouponVo = new ArrayList<>();
private static final ArrayList<GoblinDigitalArtworkListVo> goblinDigitalArtworkListVoArrayList = new ArrayList<>();
private static final BasicDBObject basicDBObject = new BasicDBObject();
private static final ArrayList<WriteModel<Document>> writeModelDocumentArrayList = new ArrayList<>();
......@@ -96,6 +98,10 @@ public class ObjectUtil {
return goblinStoreMgtCouponListVoPagedResult.clone();
}
public static PagedResult<GoblinDigitalArtworkListVo> getGoblinDigitalArtworkListVoPagedResult() {
return goblinDigitalArtworkListVoPagedResult.clone();
}
public static ArrayList<GoblinMailVo> goblinMailVo() {
return (ArrayList<GoblinMailVo>) goblinMailVo.clone();
}
......@@ -303,6 +309,10 @@ public class ObjectUtil {
return (ArrayList<GoblinPosGoodsVo>) goblinPosGoodsVoArrayList.clone();
}
public static ArrayList<GoblinDigitalArtworkListVo> getGoblinDigitalArtworkListVoArrayList() {
return (ArrayList<GoblinDigitalArtworkListVo>) goblinDigitalArtworkListVoArrayList.clone();
}
public static BasicDBObject cloneBasicDBObject() {
return (BasicDBObject) basicDBObject.clone();
}
......
......@@ -127,4 +127,5 @@ goblin_store_coupon_rule.insert=INSERT INTO goblin_store_coupon_rule (store_coup
goblin_store_coupon_rule.update_del=UPDATE goblin_store_coupon_rule SET del_flg='1',updated_by=?,updated_at=? WHERE store_coupon_id=? AND del_flg='0'
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 = ?
#----
\ No newline at end of file
#---- 我的藏品
goblin_user_digital_artwork.update_for_chain=UPDATE goblin_digital_artwork SET edition_sn=?,nft_id=?,release_txhash=?,release_at=?,trading_txhash=?,trading_at=?,state=?,updated_at=? WHERE artwork_id=? AND state<>1
\ No newline at end of file
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