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

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

+api:我的藏品+藏品收取;

parent 7ab1b8e9
...@@ -31,9 +31,9 @@ public class GoblinUserDigitalArtworkInfoVo implements Serializable, Cloneable { ...@@ -31,9 +31,9 @@ public class GoblinUserDigitalArtworkInfoVo implements Serializable, Cloneable {
@ApiModelProperty(position = 18, value = "藏品生成时间[yyyy-MM-dd HH:mm:ss]") @ApiModelProperty(position = 18, value = "藏品生成时间[yyyy-MM-dd HH:mm:ss]")
private String generateTime; private String generateTime;
@ApiModelProperty(position = 19, value = "获得方式[1-购买|2-兑换|3-赠送|5-受赠]") @ApiModelProperty(position = 19, value = "获得方式[1-购买|2-兑换|3-赠送|5-受赠|31-空投赠送]")
private Integer source; private Integer source;
@ApiModelProperty(position = 20, value = "藏品状态,根据`unbox`区分盲盒来判断[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败]") @ApiModelProperty(position = 20, value = "藏品状态,根据`unbox`区分盲盒来判断[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败|5-待收取]")
private Integer state; private Integer state;
@ApiModelProperty(position = 21, value = "创作者") @ApiModelProperty(position = 21, value = "创作者")
private String author; private String author;
......
...@@ -28,10 +28,10 @@ public class GoblinUserDigitalArtworkListVo implements Serializable, Cloneable { ...@@ -28,10 +28,10 @@ public class GoblinUserDigitalArtworkListVo implements Serializable, Cloneable {
private Integer editionSn; private Integer editionSn;
@ApiModelProperty(position = 16, value = "藏品发行量") @ApiModelProperty(position = 16, value = "藏品发行量")
private Integer edition; private Integer edition;
@ApiModelProperty(position = 17, value = "获得方式[1-购买|2-兑换|3-赠送|5-受赠]") @ApiModelProperty(position = 17, value = "获得方式[1-购买|2-兑换|3-赠送|5-受赠|31-空投赠送]")
private Integer source; private Integer source;
@ApiModelProperty(position = 18, value = "藏品状态,根据`unbox`区分盲盒来判断[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败]") @ApiModelProperty(position = 18, value = "藏品状态,根据`unbox`区分盲盒来判断[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败|5-待收取]")
private Integer state; private Integer state;
@ApiModelProperty(position = 19, value = "藏品创建时间") @ApiModelProperty(position = 19, value = "藏品创建时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
......
...@@ -12,4 +12,6 @@ public interface IGoblinUserDigitalArtworkService { ...@@ -12,4 +12,6 @@ public interface IGoblinUserDigitalArtworkService {
GoblinUserDigitalArtworkInfoVo info(String uid, String artworkId); GoblinUserDigitalArtworkInfoVo info(String uid, String artworkId);
GoblinUserDigitalArtworkListVo unboxingForBuyOrExchange(String uid, GoblinUserDigitalArtworkVo userDigitalArtworkVo); GoblinUserDigitalArtworkListVo unboxingForBuyOrExchange(String uid, GoblinUserDigitalArtworkVo userDigitalArtworkVo);
boolean accept(String uid, GoblinUserDigitalArtworkVo userDigitalArtworkVo);
} }
...@@ -80,12 +80,12 @@ public class GoblinUserDigitalArtwork implements Serializable { ...@@ -80,12 +80,12 @@ public class GoblinUserDigitalArtwork implements Serializable {
private String tradingAt; private String tradingAt;
/** /**
* 获得方式[1-购买|2-兑换|3-赠送|5-受赠] * 获得方式[1-购买|2-兑换|3-赠送|5-受赠|31-空投赠送]
*/ */
private Integer source; private Integer source;
/** /**
* 藏品状态[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败] * 藏品状态[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败|5-待收取]
*/ */
private Integer state; private Integer state;
......
...@@ -96,8 +96,8 @@ create table goblin_user_digital_artwork ...@@ -96,8 +96,8 @@ create table goblin_user_digital_artwork
trading_txhash varchar(256) null comment '发放HASH', trading_txhash varchar(256) null comment '发放HASH',
trading_at varchar(25) null comment '交易时间', trading_at varchar(25) null comment '交易时间',
source tinyint null comment '获得方式[1-购买|2-兑换|3-赠送|5-受赠]', source tinyint null comment '获得方式[1-购买|2-兑换|3-赠送|5-受赠|31-空投赠送]',
state tinyint default 0 comment '藏品状态[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败]', state tinyint default 0 comment '藏品状态[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败|5-待收取]',
del_flg char default '0' comment '删除标记[0-未删除|1-删除]', del_flg char default '0' comment '删除标记[0-未删除|1-删除]',
opening_at datetime null comment '盲盒开启时间', opening_at datetime null comment '盲盒开启时间',
......
...@@ -71,7 +71,7 @@ public class GoblinUserDigitalArtworkController { ...@@ -71,7 +71,7 @@ public class GoblinUserDigitalArtworkController {
@RequestParam String artworkId) { @RequestParam String artworkId) {
String currentUid = CurrentUtil.getCurrentUid(); String currentUid = CurrentUtil.getCurrentUid();
GoblinUserDigitalArtworkVo userDigitalArtworkVo = goblinRedisUtils.getUserDigitalArtworkVo(artworkId); GoblinUserDigitalArtworkVo userDigitalArtworkVo = goblinRedisUtils.getUserDigitalArtworkVo(artworkId);
if (null == userDigitalArtworkVo || !currentUid.equals(userDigitalArtworkVo.getUid())) { if (null == userDigitalArtworkVo || !currentUid.equals(userDigitalArtworkVo.getUid()) || userDigitalArtworkVo.getDelFlg().equals("1")) {
return ResponseDto.failure(ErrorMapping.get("140100")); return ResponseDto.failure(ErrorMapping.get("140100"));
} }
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId()); GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId());
...@@ -110,4 +110,29 @@ public class GoblinUserDigitalArtworkController { ...@@ -110,4 +110,29 @@ public class GoblinUserDigitalArtworkController {
goblinRedisUtils.del(GoblinRedisConst.USER_DIGITAL_ARTWORK_UNBOX.concat(artworkId)); goblinRedisUtils.del(GoblinRedisConst.USER_DIGITAL_ARTWORK_UNBOX.concat(artworkId));
return null == unboxingRstVo ? ResponseDto.failure(ErrorMapping.get("140102")) : ResponseDto.success(unboxingRstVo); return null == unboxingRstVo ? ResponseDto.failure(ErrorMapping.get("140102")) : ResponseDto.success(unboxingRstVo);
} }
@ApiOperationSupport(order = 4)
@ApiOperation(value = "收取藏品", notes = "空投藏品,收下后执行上链操作。<br />响应【data】值描述:藏品状态 0-生成中|1-已生成|2-生成失败")
@ApiImplicitParams({
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "artworkId", value = "藏品ID"),
})
@PostMapping("accept")
public ResponseDto<Integer> accept(@NotBlank(message = "藏品ID不能为空")
@RequestParam String artworkId) {
String currentUid = CurrentUtil.getCurrentUid();
GoblinUserDigitalArtworkVo userDigitalArtworkVo = goblinRedisUtils.getUserDigitalArtworkVo(artworkId);
if (null == userDigitalArtworkVo || !currentUid.equals(userDigitalArtworkVo.getUid())
|| userDigitalArtworkVo.getDelFlg().equals("1") || userDigitalArtworkVo.getSource() != 31) {
return ResponseDto.failure(ErrorMapping.get("140105"));
}
Integer acceptState = userDigitalArtworkVo.getState();
if (5 != acceptState) {// 非待收取状态,直接返回藏品状态
return ResponseDto.success(acceptState);
} else if (goblinRedisUtils.markUnboxUserDigitalArtwork(artworkId) > 1) {
return ResponseDto.failure(ErrorMapping.get("140000"));
}
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"));
}
} }
...@@ -84,9 +84,8 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr ...@@ -84,9 +84,8 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr
listVo.setUnbox(goodsSkuInfoVo.getUnbox()); listVo.setUnbox(goodsSkuInfoVo.getUnbox());
listVo.setOpeningTime(goodsSkuInfoVo.getOpeningTime()); listVo.setOpeningTime(goodsSkuInfoVo.getOpeningTime());
if ("0".equals(listVo.getUnbox()) && 1 != listVo.getState() && listVo.getCreatedAt().isBefore(toCheckTime)) {// 15秒前创建的藏品,去主动核实发行交易状态 // 非盲盒 && 生成中 && 创建时间判断
// List<String> checkRespDataList = goblinGalaxyService.checkNftTradeResult(uid, userDigitalArtworkVo.getOrderId(), goodsSkuInfoVo.getRouteType()); if ("0".equals(listVo.getUnbox()) && 0 == listVo.getState() && listVo.getCreatedAt().isBefore(toCheckTime)) {// 15秒前创建的藏品,去主动核实发行交易状态
// this.updateUserDigitalArtworkByChainTrade(userDigitalArtworkVo, listVo, checkRespDataList, now);
this.updateUserDigitalArtworkByChainTrade(userDigitalArtworkVo, listVo, goodsSkuInfoVo.getRouteType(), now); this.updateUserDigitalArtworkByChainTrade(userDigitalArtworkVo, listVo, goodsSkuInfoVo.getRouteType(), now);
} }
// else if (1 == listVo.getState() && "1".equals(listVo.getUnbox())) {// 盲盒已开启的,直接展示开出的藏品封面 // else if (1 == listVo.getState() && "1".equals(listVo.getUnbox())) {// 盲盒已开启的,直接展示开出的藏品封面
...@@ -227,8 +226,6 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr ...@@ -227,8 +226,6 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr
goblinRedisUtils.setUserDigitalArtworkVo(initUserDigitalArtworkVo); goblinRedisUtils.setUserDigitalArtworkVo(initUserDigitalArtworkVo);
// Redis更新藏品ID列表 // Redis更新藏品ID列表
goblinRedisUtils.addUserDigitalArtworkIdsForUnbox(uid, artworkId, userDigitalArtworkBoxVo.getArtworkId()); goblinRedisUtils.addUserDigitalArtworkIdsForUnbox(uid, artworkId, userDigitalArtworkBoxVo.getArtworkId());
// // Redis生成标记(缓存三天),用于上面的生成检查
// goblinRedisUtils.markGenUserDigitalArtwork(uid, skuId, orderId);
if ("0".equals(unboxSkuInfoVo.getUnbox())) {// 非盲盒,NFT发行购买 if ("0".equals(unboxSkuInfoVo.getUnbox())) {// 非盲盒,NFT发行购买
ObjectNode bizNftBuyNode = JsonUtils.OM().createObjectNode().put("nftOrderPayId", orderId).put("routerType", unboxSkuInfoVo.getRouteType()) ObjectNode bizNftBuyNode = JsonUtils.OM().createObjectNode().put("nftOrderPayId", orderId).put("routerType", unboxSkuInfoVo.getRouteType())
...@@ -251,6 +248,37 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr ...@@ -251,6 +248,37 @@ public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalAr
return null; return null;
} }
@Override
public boolean accept(String uid, GoblinUserDigitalArtworkVo userDigitalArtworkVo) {
LocalDateTime now = LocalDateTime.now();
userDigitalArtworkVo.setState(0);
userDigitalArtworkVo.setOpeningAt(now);
userDigitalArtworkVo.setUpdatedAt(now);
if (goblinMongoUtils.updateUserDigitalArtworkVoByAccept(userDigitalArtworkVo)) {
// Redis更新VO
goblinRedisUtils.setUserDigitalArtworkVo(userDigitalArtworkVo);
String skuId = userDigitalArtworkVo.getSkuId();
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(skuId);
// NFT发行购买
ObjectNode bizNftBuyNode = JsonUtils.OM().createObjectNode().put("nftOrderPayId", userDigitalArtworkVo.getOrderId()).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());
// Mysql持久化
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
toMqSqls.add(SqlMapping.get("goblin_user_digital_artwork.update_for_accept"));
LinkedList<Object[]> updateUserArtworkObjs = CollectionUtil.linkedListObjectArr();
updateUserArtworkObjs.add(new Object[]{now, now, userDigitalArtworkVo.getArtworkId()});
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(), SqlMapping.gets(toMqSqls, updateUserArtworkObjs));
return true;
}
return false;
}
/* -------------------------------------------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------------------------------------------- */
......
...@@ -1493,6 +1493,21 @@ public class GoblinMongoUtils { ...@@ -1493,6 +1493,21 @@ public class GoblinMongoUtils {
return updateResult.getModifiedCount() > 0; return updateResult.getModifiedCount() > 0;
} }
/**
* 藏品收取后,更改藏品状态信息
*/
public boolean updateUserDigitalArtworkVoByAccept(GoblinUserDigitalArtworkVo vo) {
UpdateResult updateResult = mongoTemplate.getCollection(GoblinUserDigitalArtworkVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("artworkId").is(vo.getArtworkId())
.and("delFlg").is("0").and("source").is(31).and("state").is(5)).getQueryObject(),
Update.update("state", vo.getState())
.set("openingAt", mongoConverter.convertToMongoType(vo.getOpeningAt()))
.set("updatedAt", mongoConverter.convertToMongoType(vo.getUpdatedAt()))
.getUpdateObject()
);
return updateResult.getModifiedCount() > 0;
}
public boolean updateUserDigitalArtworkVoByChainTrade(GoblinUserDigitalArtworkVo vo) { public boolean updateUserDigitalArtworkVoByChainTrade(GoblinUserDigitalArtworkVo vo) {
UpdateResult updateResult = mongoTemplate.getCollection(GoblinUserDigitalArtworkVo.class.getSimpleName()).updateOne( UpdateResult updateResult = mongoTemplate.getCollection(GoblinUserDigitalArtworkVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("artworkId").is(vo.getArtworkId())).getQueryObject(), Query.query(Criteria.where("artworkId").is(vo.getArtworkId())).getQueryObject(),
......
...@@ -37,6 +37,8 @@ ...@@ -37,6 +37,8 @@
140100=\u76F2\u76D2\u4E0D\u5B58\u5728 140100=\u76F2\u76D2\u4E0D\u5B58\u5728
140101=\u8BF7\u6838\u5B9E\u76F2\u76D2\u5F00\u542F\u65F6\u95F4 140101=\u8BF7\u6838\u5B9E\u76F2\u76D2\u5F00\u542F\u65F6\u95F4
140102=\u5F00\u542F\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5 140102=\u5F00\u542F\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5
140105=\u85CF\u54C1\u4E0D\u5B58\u5728
140106=\u6536\u53D6\u5931\u8D25
......
...@@ -133,6 +133,7 @@ goblin_user_coupon.updateState=UPDATE goblin_user_coupon SET state = ? , used_fo ...@@ -133,6 +133,7 @@ goblin_user_coupon.updateState=UPDATE goblin_user_coupon SET state = ? , used_fo
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.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_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_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
#---- #----
#---- \u9884\u7EA6 #---- \u9884\u7EA6
goblin_goods_anticipate=INSERT INTO goblin_goods_anticipate(ant_id,people,`type`,`rule`,created_date,del_tag) VALUES(?,?,?,?,?,?) goblin_goods_anticipate=INSERT INTO goblin_goods_anticipate(ant_id,people,`type`,`rule`,created_date,del_tag) VALUES(?,?,?,?,?,?)
......
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