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

Commit 4ebdebcb authored by 张国柄's avatar 张国柄

~api:藏品列表+受赠藏品列表;

~api:藏品详情+转赠转赠过期时间;
+api:藏品转赠领取;
parent 505c1cdb
...@@ -189,10 +189,16 @@ public class GoblinRedisConst { ...@@ -189,10 +189,16 @@ public class GoblinRedisConst {
/** /**
* 我的藏品ID列表(首页) * 我的藏品ID列表(首页)
* {goblin:u_d_art:${uid}, List<String:artwork_id>} * {goblin:u_d_art_ids:${uid}, List<String:artwork_id>}
*/ */
public static final String USER_DIGITAL_ARTWORK_IDS = PREFIX.concat("u_d_art_ids:"); public static final String USER_DIGITAL_ARTWORK_IDS = PREFIX.concat("u_d_art_ids:");
/**
* 我的受赠藏品ID列表
* {goblin:u_d_art_ids_tsf:${uid}, List<String:artwork_id>}
*/
public static final String USER_DIGITAL_ARTWORK_IDS_TRANSFER = PREFIX.concat("u_d_art_ids_tsf:");
/** /**
* 我的藏品信息 * 我的藏品信息
* {goblin:u_d_art:${artwork_id}, com.liquidnet.service.goblin.dto.vo.GoblinUserDigitalArtworkVo} * {goblin:u_d_art:${artwork_id}, com.liquidnet.service.goblin.dto.vo.GoblinUserDigitalArtworkVo}
...@@ -205,12 +211,6 @@ public class GoblinRedisConst { ...@@ -205,12 +211,6 @@ public class GoblinRedisConst {
*/ */
public static final String USER_DIGITAL_ARTWORK_CT = PREFIX.concat("u_d_art_ct:"); public static final String USER_DIGITAL_ARTWORK_CT = PREFIX.concat("u_d_art_ct:");
/**
* 藏品盲盒开启标记
* {goblin:u_d_art_ub:${artworkId}, Number}
*/
public static final String USER_DIGITAL_ARTWORK_UNBOX = PREFIX.concat("u_d_art_ub:");
/** /**
* 我的藏品生成标记(有时效) * 我的藏品生成标记(有时效)
* {goblin:u_d_art:${uid+skuId+orderId},1} * {goblin:u_d_art:${uid+skuId+orderId},1}
...@@ -362,11 +362,35 @@ public class GoblinRedisConst { ...@@ -362,11 +362,35 @@ public class GoblinRedisConst {
public static final String USER_SAFE_CONFIG = PREFIX.concat("u_safe_c:"); public static final String USER_SAFE_CONFIG = PREFIX.concat("u_safe_c:");
/** /**
* NFT转赠约束配置 * NFT用户安全密码临时锁定时间段配置(单位:分钟,默认30分钟)
* {goblin:nft_trans_conf, "${timeLimit},${routeType:1},${routeType:2}..."} * {goblin:u_safe_lk:passwdtl:timelimit, seconds}
*/
public static final String USER_SAFE_LK_PASSWDTL_TIMELIMIT = PREFIX.concat("u_safe_lk:passwdtl:timelimit");
/**
* NFT用户安全密码临时锁定KEY
* {goblin:u_safe_lk:passwdtl:${uid}, number++}
*/
public static final String USER_SAFE_LK_PASSWDTL = PREFIX.concat("u_safe_lk:passwdtl:");
/**
* NFT用户安全密码锁定KEY
* {goblin:u_safe_lk:passwd:${uid}, number++}
*/
public static final String USER_SAFE_LK_PASSWD = PREFIX.concat("u_safe_lk:passwd:");
/**
* NFT转赠约束配置(首次转赠)
* {goblin:nft_trans_conf, "${routeType:timeLimit0},${routeType:timeLimit1},${routeType:timeLimit2}..."}
*/ */
public static final String NFT_TRANSFER_CONF = PREFIX.concat("nft_trans_conf"); public static final String NFT_TRANSFER_CONF = PREFIX.concat("nft_trans_conf");
/**
* NFT转赠约束配置(二次转赠)
* {goblin:nft_trans_conf_again, "${routeType:timeLimit0},${routeType:timeLimit1},${routeType:timeLimit2}..."}
*/
public static final String NFT_TRANSFER_CONF_AGAIN = PREFIX.concat("nft_trans_conf_again");
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
......
...@@ -221,10 +221,20 @@ public class GoblinStatusConst { ...@@ -221,10 +221,20 @@ public class GoblinStatusConst {
} }
/** /**
* 数字藏品:转赠状态[PENDING|SUCCESS] * 数字藏品:转赠状态[WAITING|PENDING|SUCCESS]
*/ */
public enum TransferState { public enum TransferState {
/**
* 等待受赠人接收/拒绝
*/
WAITING,
/**
* 受赠人接收后上链交易中
*/
PENDING, PENDING,
/**
* 受赠人接收且上链交易成功
*/
SUCCESS, SUCCESS,
; ;
} }
......
...@@ -62,17 +62,20 @@ public class GoblinUserDigitalArtworkInfoVo implements Serializable, Cloneable { ...@@ -62,17 +62,20 @@ public class GoblinUserDigitalArtworkInfoVo implements Serializable, Cloneable {
@ApiModelProperty(position = 28, value = "转赠状态[PENDING|SUCCESS]") @ApiModelProperty(position = 28, value = "转赠状态[PENDING|SUCCESS]")
private String transferState; private String transferState;
@ApiModelProperty(position = 25, value = "转赠允许时间") @ApiModelProperty(position = 25, value = "转赠允许时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime transferAllowTime; private LocalDateTime transferAllowTime;
@ApiModelProperty(position = 30, value = "系统当前时间") @ApiModelProperty(position = 30, value = "系统当前时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime systime; private LocalDateTime systime;
@ApiModelProperty(position = 31, value = "受赠人信息") @ApiModelProperty(position = 31, value = "受赠人信息,发生转赠时有效")
private String receiverUser; private String receiverUser;
@ApiModelProperty(position = 32, value = "藏品转赠时间[yyyy-MM-dd HH:mm:ss]") @ApiModelProperty(position = 32, value = "藏品转赠时间[yyyy-MM-dd HH:mm:ss],发生转赠时有效")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime transferTime; private LocalDateTime transferTime;
@ApiModelProperty(position = 33, value = "转赠过期时间[yyyy-MM-dd HH:mm:ss],发生转赠时有效")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime transferExpireTime;
private static final GoblinUserDigitalArtworkInfoVo obj = new GoblinUserDigitalArtworkInfoVo(); private static final GoblinUserDigitalArtworkInfoVo obj = new GoblinUserDigitalArtworkInfoVo();
......
...@@ -47,7 +47,7 @@ public class GoblinUserDigitalArtworkListVo implements Serializable, Cloneable { ...@@ -47,7 +47,7 @@ public class GoblinUserDigitalArtworkListVo implements Serializable, Cloneable {
private String author; private String author;
@ApiModelProperty(position = 23, value = "区块链路由[zxinchain-至信链|xuper-百度超级链]") @ApiModelProperty(position = 23, value = "区块链路由[zxinchain-至信链|xuper-百度超级链]")
private String routeType; private String routeType;
@ApiModelProperty(position = 24, value = "转赠状态[PENDING|SUCCESS]") @ApiModelProperty(position = 24, value = "转赠状态[WAITING|PENDING|SUCCESS]")
private String transferState; private String transferState;
@ApiModelProperty(position = 25, value = "转赠允许时间") @ApiModelProperty(position = 25, value = "转赠允许时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
......
...@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModel; ...@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
@ApiModel(value = "GoblinUserDigitalArtworkPageVo", description = "我的藏品信息") @ApiModel(value = "GoblinUserDigitalArtworkPageVo", description = "我的藏品信息")
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
...@@ -16,6 +17,8 @@ public class GoblinUserDigitalArtworkPageVo implements Cloneable { ...@@ -16,6 +17,8 @@ public class GoblinUserDigitalArtworkPageVo implements Cloneable {
private int artworkNum; private int artworkNum;
@ApiModelProperty(position = 12, value = "藏品列表分页数据") @ApiModelProperty(position = 12, value = "藏品列表分页数据")
private PagedResult<GoblinUserDigitalArtworkListVo> pagedResult; private PagedResult<GoblinUserDigitalArtworkListVo> pagedResult;
@ApiModelProperty(position = 12, value = "受赠藏品列表数据")
private List<GoblinUserDigitalArtworkTransferListVo> receivedList;
@ApiModelProperty(position = 13, value = "系统当前时间") @ApiModelProperty(position = 13, value = "系统当前时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR) @JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
...@@ -29,6 +32,10 @@ public class GoblinUserDigitalArtworkPageVo implements Cloneable { ...@@ -29,6 +32,10 @@ public class GoblinUserDigitalArtworkPageVo implements Cloneable {
return pagedResult; return pagedResult;
} }
public List<GoblinUserDigitalArtworkTransferListVo> getReceivedList() {
return receivedList;
}
public LocalDateTime getSystime() { public LocalDateTime getSystime() {
return systime; return systime;
} }
...@@ -43,6 +50,11 @@ public class GoblinUserDigitalArtworkPageVo implements Cloneable { ...@@ -43,6 +50,11 @@ public class GoblinUserDigitalArtworkPageVo implements Cloneable {
return this; return this;
} }
public GoblinUserDigitalArtworkPageVo setReceivedList(List<GoblinUserDigitalArtworkTransferListVo> receivedList) {
this.receivedList = receivedList;
return this;
}
public GoblinUserDigitalArtworkPageVo setSystime(LocalDateTime systime) { public GoblinUserDigitalArtworkPageVo setSystime(LocalDateTime systime) {
this.systime = systime; this.systime = systime;
return this; return this;
......
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 = "GoblinUserDigitalArtworkTransferListVo", description = "受赠藏品列表信息")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class GoblinUserDigitalArtworkTransferListVo implements Serializable, Cloneable {
private static final long serialVersionUID = 6387597921696370960L;
@ApiModelProperty(position = 11, value = "藏品Id")
private String artworkId;
@ApiModelProperty(position = 12, value = "藏品名称")
private String name;
@ApiModelProperty(position = 13, value = "藏品副名称")
private String subtitle;
@ApiModelProperty(position = 14, value = "藏品封面")
private String coverPic;
@ApiModelProperty(position = 15, value = "序列号")
private Integer editionSn;
@ApiModelProperty(position = 16, value = "藏品发行量")
private Integer edition;
@ApiModelProperty(position = 17, value = "获得方式[1-购买|2-兑换|3-赠送|5-大美|6-转赠|31-空投赠送]")
private Integer source;
@ApiModelProperty(position = 18, value = "藏品状态,根据`unbox`区分盲盒来判断[0-生成中/未开启|1-已生成/已开启|2-生成失败/开启失败|5-待收取]")
private Integer state;
@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;
@ApiModelProperty(position = 22, value = "创作者")
private String author;
@ApiModelProperty(position = 23, value = "区块链路由[zxinchain-至信链|xuper-百度超级链]")
private String routeType;
@ApiModelProperty(position = 24, value = "转赠状态[WAITING|PENDING|SUCCESS]")
private String transferState;
@ApiModelProperty(position = 25, value = "转赠过期时间[yyyy-MM-dd HH:mm:ss],发生转赠时有效")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime transferExpireTime;
private static final GoblinUserDigitalArtworkTransferListVo obj = new GoblinUserDigitalArtworkTransferListVo();
public static GoblinUserDigitalArtworkTransferListVo getNew() {
return obj.clone();
}
@Override
public GoblinUserDigitalArtworkTransferListVo clone() {
try {
return (GoblinUserDigitalArtworkTransferListVo) super.clone();
} catch (CloneNotSupportedException e) {
return new GoblinUserDigitalArtworkTransferListVo();
}
}
public GoblinUserDigitalArtworkTransferListVo copy(GoblinUserDigitalArtworkVo source) {
if (null == source) return this;
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();
this.setAuthor(source.getAuthor());
this.setTransferState(source.getTransferState());
return this;
}
}
...@@ -22,6 +22,7 @@ public class GoblinUserDigitalArtworkVo implements Serializable, Cloneable { ...@@ -22,6 +22,7 @@ public class GoblinUserDigitalArtworkVo implements Serializable, Cloneable {
private String tradingAt; private String tradingAt;
private String receiverUid; private String receiverUid;
private String transferOrderId; private String transferOrderId;
private LocalDateTime transferAt;
private String transferState; private String transferState;
private Integer source; private Integer source;
private Integer state; private Integer state;
......
...@@ -2,10 +2,20 @@ package com.liquidnet.service.goblin.service; ...@@ -2,10 +2,20 @@ package com.liquidnet.service.goblin.service;
import com.liquidnet.service.goblin.dto.vo.*; import com.liquidnet.service.goblin.dto.vo.*;
import java.util.List;
public interface IGoblinUserDigitalArtworkService { public interface IGoblinUserDigitalArtworkService {
GoblinUserDigitalArtworkPageVo page(String uid, Integer pageNum, Integer pageSize); GoblinUserDigitalArtworkPageVo page(String uid, Integer pageNum, Integer pageSize);
/**
* 获取受赠藏品列表
*
* @param uid UID
* @return List<GoblinUserDigitalArtworkTransferListVo>
*/
List<GoblinUserDigitalArtworkTransferListVo> getArtworkListFromTransfer(String uid);
GoblinUserDigitalArtworkInfoVo info(String uid, String artworkId); GoblinUserDigitalArtworkInfoVo info(String uid, String artworkId);
GoblinUserDigitalArtworkListVo unboxingForBuyOrExchange(String uid, GoblinUserDigitalArtworkVo userDigitalArtworkVo); GoblinUserDigitalArtworkListVo unboxingForBuyOrExchange(String uid, GoblinUserDigitalArtworkVo userDigitalArtworkVo);
...@@ -13,4 +23,6 @@ public interface IGoblinUserDigitalArtworkService { ...@@ -13,4 +23,6 @@ public interface IGoblinUserDigitalArtworkService {
boolean accept(String uid, GoblinUserDigitalArtworkVo userDigitalArtworkVo); boolean accept(String uid, GoblinUserDigitalArtworkVo userDigitalArtworkVo);
boolean transfer(GoblinUserDigitalArtworkVo userDigitalArtworkVo, String routerType, String[] receiverArr); boolean transfer(GoblinUserDigitalArtworkVo userDigitalArtworkVo, String routerType, String[] receiverArr);
boolean transferReceive(GoblinUserDigitalArtworkVo userDigitalArtworkVo);
} }
...@@ -1173,6 +1173,21 @@ create table goblin_user_safe_config ...@@ -1173,6 +1173,21 @@ create table goblin_user_safe_config
comment varchar(500) comment varchar(500)
) engine = InnoDB comment '用户安全设置'; ) engine = InnoDB comment '用户安全设置';
create unique index idx_gusc_uid on goblin_user_safe_config (uid); create unique index idx_gusc_uid on goblin_user_safe_config (uid);
# -- >>------------------------------------------------------------------------------------ |20220825数字藏品受赠接收
drop table if exists goblin_nft_transfer_order;
create table goblin_nft_transfer_order
(
mid bigint auto_increment primary key,
order_id varchar(64) not null comment '转赠订单号',
artwork_id varchar(64) not null comment '藏品ID',
owner_uid varchar(64) not null comment '拥有人UID',
receiver_uid varchar(64) not null comment '受赠人UID',
state tinyint default 1 comment '订单状态[0-等待接收,1-确认接收,2-拒绝接收]',
created_at datetime not null,
updated_at datetime null,
comment varchar(500)
) engine = InnoDB comment '藏品转赠订单记录';
create unique index idx_gnto_order_id on goblin_nft_transfer_order (order_id);
# -- >>------------------------------------------------------------------------------------ # -- >>------------------------------------------------------------------------------------
# -- >>------------------------------------------------------------------------------------ # -- >>------------------------------------------------------------------------------------
# -- >>------------------------------------------------------------------------------------ # -- >>------------------------------------------------------------------------------------
......
...@@ -43,19 +43,20 @@ public class GoblinQueBizArtworkTransQueryService { ...@@ -43,19 +43,20 @@ public class GoblinQueBizArtworkTransQueryService {
log.warn("#藏品转赠结果查询:藏品不存在[artworkId={}]", artworkId); log.warn("#藏品转赠结果查询:藏品不存在[artworkId={}]", artworkId);
return ResponseDto.success(String.format("藏品不存在[artworkId:%s]", artworkId)); return ResponseDto.success(String.format("藏品不存在[artworkId:%s]", artworkId));
} }
String transferOrderId = userDigitalArtworkVo.getTransferOrderId(), receiverUid = userDigitalArtworkVo.getReceiverUid();
if (!GoblinStatusConst.TransferState.PENDING.name().equals(userDigitalArtworkVo.getTransferState())) { if (!GoblinStatusConst.TransferState.PENDING.name().equals(userDigitalArtworkVo.getTransferState())) {
log.warn("#藏品转赠结果查询:藏品非转赠中不处理[artworkId={},transferState={},transferOrderId={}]", artworkId, userDigitalArtworkVo.getTransferState(), userDigitalArtworkVo.getTransferOrderId()); log.warn("#藏品转赠结果查询:藏品非转赠中不处理[artworkId={},transferState={},transferOrderId={}]", artworkId, userDigitalArtworkVo.getTransferState(), transferOrderId);
return ResponseDto.success(String.format("藏品非转赠中不处理[artworkId:%s]", artworkId)); return ResponseDto.success(String.format("藏品非转赠中不处理[artworkId:%s]", artworkId));
} }
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId()); GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId());
GalaxyNftTransferQueryRespDto queryRespDto = this.queryNftTransferQueryRespDto(userDigitalArtworkVo.getTransferOrderId(), goodsSkuInfoVo.getRouteType()); GalaxyNftTransferQueryRespDto queryRespDto = this.queryNftTransferQueryRespDto(transferOrderId, goodsSkuInfoVo.getRouteType());
if (null == queryRespDto || !"1".equals(queryRespDto.getTransferStatus())) {// 查询失败,重新入队处理 if (null == queryRespDto || !"1".equals(queryRespDto.getTransferStatus())) {// 查询失败,重新入队处理
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_TRANS_QUERY.getKey(), userDigitalArtworkVo.getArtworkId()); queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_TRANS_QUERY.getKey(), userDigitalArtworkVo.getArtworkId());
return ResponseDto.failure(String.format("藏品转赠结果查询失败[artworkId:%s]", artworkId)); return ResponseDto.failure(String.format("藏品转赠结果查询失败[artworkId:%s]", artworkId));
} }
if (!userDigitalArtworkVo.getReceiverUid().equals(queryRespDto.getOwnerUserId())) {// 拥有者与受赠人不一致(特殊情况,重新入队处理) if (!receiverUid.equals(queryRespDto.getOwnerUserId())) {// 拥有者与受赠人不一致(特殊情况,重新入队处理)
log.warn("#藏品转赠结果查询:拥有者与受赠人不一致[artworkId={},receiverUid={},ownerUserId={}]", userDigitalArtworkVo.getArtworkId(), userDigitalArtworkVo.getReceiverUid(), queryRespDto.getOwnerUserId()); log.warn("#藏品转赠结果查询:拥有者与受赠人不一致[artworkId={},receiverUid={},ownerUserId={}]", userDigitalArtworkVo.getArtworkId(), receiverUid, queryRespDto.getOwnerUserId());
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_TRANS_QUERY.getKey(), artworkId); queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_TRANS_QUERY.getKey(), artworkId);
return ResponseDto.failure(String.format("藏品转赠结果查询数据不一致[artworkId:%s]", artworkId)); return ResponseDto.failure(String.format("藏品转赠结果查询数据不一致[artworkId:%s]", artworkId));
} }
...@@ -69,8 +70,9 @@ public class GoblinQueBizArtworkTransQueryService { ...@@ -69,8 +70,9 @@ public class GoblinQueBizArtworkTransQueryService {
if (goblinMongoUtils.updateUserDigitalArtworkVoByTransQuery(userDigitalArtworkVo)) {// 转赠人藏品状态更新Mongo if (goblinMongoUtils.updateUserDigitalArtworkVoByTransQuery(userDigitalArtworkVo)) {// 转赠人藏品状态更新Mongo
if (6 == userDigitalArtworkVo.getSource()) {// 来源为转赠的藏品,设置过期时间到期删除 if (6 == userDigitalArtworkVo.getSource()) {// 来源为转赠的藏品,设置过期时间到期删除
goblinRedisUtils.setexUserDigitalArtworkVo(userDigitalArtworkVo, 30 * 60); goblinRedisUtils.setexUserDigitalArtworkVo(userDigitalArtworkVo, 30 * 60);
} } else {
goblinRedisUtils.setUserDigitalArtworkVo(userDigitalArtworkVo);// 转赠人藏品状态更新Redis goblinRedisUtils.setUserDigitalArtworkVo(userDigitalArtworkVo);// 转赠人藏品状态更新Redis
}
goblinRedisUtils.addSubUserDigitalArtworkCount(userDigitalArtworkVo.getUid(), -1);// 转赠人藏品数量处理Redis goblinRedisUtils.addSubUserDigitalArtworkCount(userDigitalArtworkVo.getUid(), -1);// 转赠人藏品数量处理Redis
goblinRedisUtils.resetUserDigitalArtworkIdsByMongo(userDigitalArtworkVo.getUid());// 转赠人藏品ID集合缓存重置Redis goblinRedisUtils.resetUserDigitalArtworkIdsByMongo(userDigitalArtworkVo.getUid());// 转赠人藏品ID集合缓存重置Redis
} else { } else {
...@@ -83,9 +85,9 @@ public class GoblinQueBizArtworkTransQueryService { ...@@ -83,9 +85,9 @@ public class GoblinQueBizArtworkTransQueryService {
{// 受赠人藏品处理 {// 受赠人藏品处理
String transferTime = queryRespDto.getTransferTime(), transferHash = queryRespDto.getTransferHash(); String transferTime = queryRespDto.getTransferTime(), transferHash = queryRespDto.getTransferHash();
receiverDigitalArtworkVo.setArtworkId(IDGenerator.nextSnowId()); receiverDigitalArtworkVo.setArtworkId(IDGenerator.nextSnowId());
receiverDigitalArtworkVo.setUid(userDigitalArtworkVo.getReceiverUid()); receiverDigitalArtworkVo.setUid(receiverUid);
receiverDigitalArtworkVo.setSkuId(userDigitalArtworkVo.getSkuId()); receiverDigitalArtworkVo.setSkuId(userDigitalArtworkVo.getSkuId());
receiverDigitalArtworkVo.setOrderId(userDigitalArtworkVo.getTransferOrderId()); receiverDigitalArtworkVo.setOrderId(transferOrderId);
receiverDigitalArtworkVo.setEditionSn(userDigitalArtworkVo.getEditionSn()); receiverDigitalArtworkVo.setEditionSn(userDigitalArtworkVo.getEditionSn());
receiverDigitalArtworkVo.setNftId(userDigitalArtworkVo.getNftId()); receiverDigitalArtworkVo.setNftId(userDigitalArtworkVo.getNftId());
//receiverDigitalArtworkVo.setReleaseTxhash(); //receiverDigitalArtworkVo.setReleaseTxhash();
......
...@@ -6,6 +6,8 @@ import com.liquidnet.common.cache.redis.util.RedisUtil; ...@@ -6,6 +6,8 @@ import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.CollectionUtil; import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.JsonUtils; import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.RandomUtil; import com.liquidnet.commons.lang.util.RandomUtil;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.galaxy.constant.GalaxyEnum; import com.liquidnet.service.galaxy.constant.GalaxyEnum;
import com.liquidnet.service.goblin.constant.GoblinRedisConst; import com.liquidnet.service.goblin.constant.GoblinRedisConst;
import com.liquidnet.service.goblin.constant.GoblinStatusConst; import com.liquidnet.service.goblin.constant.GoblinStatusConst;
...@@ -21,13 +23,17 @@ import com.liquidnet.service.goblin.entity.GoblinFrontNavigation; ...@@ -21,13 +23,17 @@ import com.liquidnet.service.goblin.entity.GoblinFrontNavigation;
import com.liquidnet.service.goblin.service.impl.inner.GoblinNftJobServiceImpl; import com.liquidnet.service.goblin.service.impl.inner.GoblinNftJobServiceImpl;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -43,6 +49,9 @@ public class GoblinRedisUtils { ...@@ -43,6 +49,9 @@ public class GoblinRedisUtils {
@Autowired @Autowired
GoblinNftJobServiceImpl goblinNftJobService; GoblinNftJobServiceImpl goblinNftJobService;
@Value("${liquidnet.secret.passwd-salt}")
private String passwdSalt;
private int randomMax = 10; private int randomMax = 10;
public void del(String... keys) { public void del(String... keys) {
...@@ -2010,10 +2019,6 @@ public class GoblinRedisUtils { ...@@ -2010,10 +2019,6 @@ public class GoblinRedisUtils {
return (List<String>) redisUtil.get(GoblinRedisConst.USER_DIGITAL_ARTWORK_IDS.concat(uid)); return (List<String>) redisUtil.get(GoblinRedisConst.USER_DIGITAL_ARTWORK_IDS.concat(uid));
} }
public long markUnboxUserDigitalArtwork(String artworkId) {
return redisUtil.incr(GoblinRedisConst.USER_DIGITAL_ARTWORK_UNBOX.concat(artworkId), 1);
}
/** /**
* 缓存用户累计藏品数 * 缓存用户累计藏品数
* *
...@@ -2056,17 +2061,22 @@ public class GoblinRedisUtils { ...@@ -2056,17 +2061,22 @@ public class GoblinRedisUtils {
/* ----------------------------------- 我的藏品管理 ----------------------------------- */ /* ----------------------------------- 我的藏品管理 ----------------------------------- */
/** /**
* 标记订单藏品生成 * 锁定藏品操作
*/ */
public boolean markGenUserDigitalArtwork(String uid, String skuId, String orderId) { public boolean lockUserDigitalArtworkVoOperate(String artworkId) {
return redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK_GENMARK.concat(uid).concat(skuId).concat(orderId), 1, 259200); String lk = GoblinRedisConst.USER_DIGITAL_ARTWORK.concat("lk").concat(artworkId);
if (redisUtil.incr(lk, 1) > 1) {
return false;
}
redisUtil.expireSet(lk, 30);
return true;
} }
/** /**
* 判断订单藏品生成 * 解锁藏品操作
*/ */
public boolean hasGenUserDigitalArtwork(String uid, String skuId, String orderId) { public void unlockUserDigitalArtworkVoOperate(String artworkId) {
return redisUtil.hasKey(GoblinRedisConst.USER_DIGITAL_ARTWORK_GENMARK.concat(uid).concat(skuId).concat(orderId)); redisUtil.del(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat("lk").concat(artworkId));
} }
/** /**
...@@ -2114,6 +2124,19 @@ public class GoblinRedisUtils { ...@@ -2114,6 +2124,19 @@ public class GoblinRedisUtils {
return redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK_IDS.concat(uid), ids); return redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK_IDS.concat(uid), ids);
} }
/* ----------------------------------- 受赠藏品管理 ----------------------------------- */
/**
* 获取用户受赠藏品ID集合
*/
public List<String> getUserDigitalArtworkIdsTransfer(String uid) {
return (List<String>) redisUtil.get(GoblinRedisConst.USER_DIGITAL_ARTWORK_IDS_TRANSFER.concat(uid));
}
public boolean setUserDigitalArtworkIdsTransfer(String uid, List<String> artworkIdList) {
return redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK_IDS_TRANSFER, artworkIdList);
}
/* ----------------------------------- ---------- ----------------------------------- */ /* ----------------------------------- ---------- ----------------------------------- */
public List<String> getGoblinNftGoodsInfoListVo(String num) { public List<String> getGoblinNftGoodsInfoListVo(String num) {
...@@ -2704,26 +2727,96 @@ public class GoblinRedisUtils { ...@@ -2704,26 +2727,96 @@ public class GoblinRedisUtils {
return (GoblinUserSafeConfigDto) redisUtil.get(GoblinRedisConst.USER_SAFE_CONFIG.concat(uid)); return (GoblinUserSafeConfigDto) redisUtil.get(GoblinRedisConst.USER_SAFE_CONFIG.concat(uid));
} }
/**
* 校验安全密码
*
* @param inputPasswd 用户输入密码
* @param userSafeConfigDto 用户设置密码
* @return ResponseDto<String>
*/
public ResponseDto<String> validUserSafePasswd(String inputPasswd, GoblinUserSafeConfigDto userSafeConfigDto, String uid) {
if (userSafeConfigDto.getPasswd().equals(DigestUtils.md5DigestAsHex(inputPasswd.concat(passwdSalt).getBytes(StandardCharsets.UTF_8)))) {
return ResponseDto.success();
}
long expire = redisUtil.getExpire(GoblinRedisConst.USER_SAFE_LK_PASSWDTL.concat(uid));
ErrorMapping.ErrorMessage errorMessage;
if (expire > 0) {
errorMessage = ErrorMapping.get("140113");
return ResponseDto.failure(errorMessage.getCode(), String.format(errorMessage.getMessage(), expire / 60 + 1));
}
LocalDateTime currentDateTime, tomorrowStartDateTime;
long validFailedNum = redisUtil.incr(GoblinRedisConst.USER_SAFE_LK_PASSWD.concat(uid), 1);
Integer passwdtlTimelimit;
switch (Math.toIntExact(validFailedNum)) {
case 1:
currentDateTime = LocalDateTime.now();
tomorrowStartDateTime = currentDateTime.plusDays(1).withHour(0).withMinute(0).withSecond(0).withNano(0);
redisUtil.expireSet(GoblinRedisConst.USER_SAFE_LK_PASSWD, ChronoUnit.SECONDS.between(currentDateTime, tomorrowStartDateTime));
case 2:
passwdtlTimelimit = (Integer) redisUtil.get(GoblinRedisConst.USER_SAFE_LK_PASSWDTL_TIMELIMIT);
errorMessage = ErrorMapping.get("140116");
return ResponseDto.failure(errorMessage.getCode(), String.format(errorMessage.getMessage(), 3 - validFailedNum, passwdtlTimelimit));
case 3:
passwdtlTimelimit = (Integer) redisUtil.get(GoblinRedisConst.USER_SAFE_LK_PASSWDTL_TIMELIMIT);
if (null == passwdtlTimelimit) {
redisUtil.set(GoblinRedisConst.USER_SAFE_LK_PASSWDTL_TIMELIMIT, passwdtlTimelimit = 30);
}
redisUtil.set(GoblinRedisConst.USER_SAFE_LK_PASSWDTL.concat(uid), 1, passwdtlTimelimit * 60);
errorMessage = ErrorMapping.get("140113");
return ResponseDto.failure(errorMessage.getCode(), String.format(errorMessage.getMessage(), passwdtlTimelimit));
case 4:
return ResponseDto.failure(ErrorMapping.get("140114"));
default:
redisUtil.set(GoblinRedisConst.USER_SAFE_LK_PASSWD.concat(uid), 5);
return ResponseDto.failure(ErrorMapping.get("140115"));
}
}
/* ---------------------------------------- ---------------------------------------- */ /* ---------------------------------------- ---------------------------------------- */
/** /**
* NFT转赠约束配置 * NFT转赠约束配置(首次转赠)
* redis未配置默认返回180天对应15552000秒 * <p>
* Redis未配置或配置格式有误时,默认返回180天对应15552000秒
* {"xuper":15552000,"zxinchain":15552000}
* </p>
* *
* @return Map<String, Long> * @return Map<String, Long>
*/ */
public Map<String, Long> getUserDigitalArtworkTransferConfMap() { public Map<String, Long> getUserDigitalArtworkTransferConfMap() {
String val = (String) redisUtil.get(GoblinRedisConst.NFT_TRANSFER_CONF); return getUserDigitalArtworkTransferConfMap(null);
}
/**
* NFT转赠约束配置(区分首次转赠、二次转赠)
* <p>
* Redis未配置或配置格式有误时,默认返回180天对应15552000秒
* {"xuper":15552000,"zxinchain":15552000}
* </p>
*
* @param artworkSource 藏品来源,为空或不等于`6`时为首次转赠配置
* @return Map<String, Long>
*/
public Map<String, Long> getUserDigitalArtworkTransferConfMap(Integer artworkSource) {
String key = null != artworkSource && artworkSource == 6 ? GoblinRedisConst.NFT_TRANSFER_CONF_AGAIN : GoblinRedisConst.NFT_TRANSFER_CONF;
String val = (String) redisUtil.get(key);
Map<String, Long> map; Map<String, Long> map;
if (StringUtils.isEmpty(val)) { if (StringUtils.isEmpty(val)) {
map = CollectionUtil.mapStringLong(); map = CollectionUtil.mapStringLong();
for (GalaxyEnum.RouterTypeEnum routerTypeEnum : GalaxyEnum.RouterTypeEnum.values()) { for (GalaxyEnum.RouterTypeEnum routerTypeEnum : GalaxyEnum.RouterTypeEnum.values()) {
map.put(routerTypeEnum.getCode(), 15552000L); map.put(routerTypeEnum.getCode(), 15552000L);
} }
redisUtil.set(GoblinRedisConst.NFT_TRANSFER_CONF, JsonUtils.toJson(map)); redisUtil.set(key, JsonUtils.toJson(map));
} else { } else {
try {
map = JsonUtils.fromJson(val, new TypeReference<Map<String, Long>>() { map = JsonUtils.fromJson(val, new TypeReference<Map<String, Long>>() {
}); });
} catch (Exception ignored) {
map = CollectionUtil.mapStringLong();
for (GalaxyEnum.RouterTypeEnum routerTypeEnum : GalaxyEnum.RouterTypeEnum.values()) {
map.put(routerTypeEnum.getCode(), 15552000L);
}
}
} }
return map; return map;
} }
......
package com.liquidnet.service.goblin.util; package com.liquidnet.service.goblin.util;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.PagedResult; import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.goblin.dto.GoblinGoodsSpecDto; import com.liquidnet.service.goblin.dto.GoblinGoodsSpecDto;
import com.liquidnet.service.goblin.dto.GoblinStoreMarketDto; import com.liquidnet.service.goblin.dto.GoblinStoreMarketDto;
...@@ -13,7 +12,6 @@ import com.liquidnet.service.goblin.entity.GoblinOrderAttr; ...@@ -13,7 +12,6 @@ import com.liquidnet.service.goblin.entity.GoblinOrderAttr;
import com.liquidnet.service.goblin.entity.GoblinOrderSku; import com.liquidnet.service.goblin.entity.GoblinOrderSku;
import com.liquidnet.service.goblin.entity.GoblinStoreOrder; import com.liquidnet.service.goblin.entity.GoblinStoreOrder;
import com.liquidnet.service.goblin.param.BackCouponParam; import com.liquidnet.service.goblin.param.BackCouponParam;
import com.liquidnet.service.goblin.param.GoblinListCreateItemParam;
import com.liquidnet.service.goblin.param.GoblinOrderSqlParam; import com.liquidnet.service.goblin.param.GoblinOrderSqlParam;
import com.mongodb.BasicDBObject; import com.mongodb.BasicDBObject;
import com.mongodb.client.model.WriteModel; import com.mongodb.client.model.WriteModel;
...@@ -21,7 +19,7 @@ import org.bson.Document; ...@@ -21,7 +19,7 @@ import org.bson.Document;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.Map;
public class ObjectUtil { public class ObjectUtil {
private static final PagedResult<GoblinStoreMgtGoodsListVo> goblinStoreMgtGoodsVoPagedResult = new PagedResult<>(); private static final PagedResult<GoblinStoreMgtGoodsListVo> goblinStoreMgtGoodsVoPagedResult = new PagedResult<>();
...@@ -42,6 +40,7 @@ public class ObjectUtil { ...@@ -42,6 +40,7 @@ public class ObjectUtil {
private static final ArrayList<GoblinStoreConfigVo> goblinStoreConfigVoArrayList = new ArrayList<>(); private static final ArrayList<GoblinStoreConfigVo> goblinStoreConfigVoArrayList = new ArrayList<>();
private static final ArrayList<GoblinStoreNoticeVo> goblinStoreNoticeVoArrayList = new ArrayList<>(); private static final ArrayList<GoblinStoreNoticeVo> goblinStoreNoticeVoArrayList = new ArrayList<>();
private static final ArrayList<GoblinGoodsSkuInfoVo> goblinGoodsSkuInfoVoArrayList = new ArrayList<>(); private static final ArrayList<GoblinGoodsSkuInfoVo> goblinGoodsSkuInfoVoArrayList = new ArrayList<>();
private static final HashMap<String, GoblinGoodsSkuInfoVo> goblinGoodsSkuInfoVoHashMap = new HashMap<>();
private static final ArrayList<GoblinGoodsSpecVo> goblinGoodsSpecVoArrayList = new ArrayList<>(); private static final ArrayList<GoblinGoodsSpecVo> goblinGoodsSpecVoArrayList = new ArrayList<>();
private static final ArrayList<GoblinGoodsSpecValueVo> goblinGoodsSpecValueVoArrayList = new ArrayList<>(); private static final ArrayList<GoblinGoodsSpecValueVo> goblinGoodsSpecValueVoArrayList = new ArrayList<>();
private static final ArrayList<GoblinServiceSupportVo> goblinServiceSupportVoArrayList = new ArrayList<>(); private static final ArrayList<GoblinServiceSupportVo> goblinServiceSupportVoArrayList = new ArrayList<>();
...@@ -88,6 +87,7 @@ public class ObjectUtil { ...@@ -88,6 +87,7 @@ public class ObjectUtil {
private static final ArrayList<GoblinNftGoodsSkuListVo> goblinNftGoodsSkuListVoArrayList = new ArrayList<>(); private static final ArrayList<GoblinNftGoodsSkuListVo> goblinNftGoodsSkuListVoArrayList = new ArrayList<>();
private static final ArrayList<TempCouponVo> tempCouponVo = new ArrayList<>(); private static final ArrayList<TempCouponVo> tempCouponVo = new ArrayList<>();
private static final ArrayList<GoblinUserDigitalArtworkListVo> GOBLIN_USER_DIGITAL_ARTWORK_LIST_VO_ARRAY_LIST = new ArrayList<>(); private static final ArrayList<GoblinUserDigitalArtworkListVo> GOBLIN_USER_DIGITAL_ARTWORK_LIST_VO_ARRAY_LIST = new ArrayList<>();
private static final ArrayList<GoblinUserDigitalArtworkTransferListVo> GOBLIN_USER_DIGITAL_ARTWORK_TRANSFER_LIST_VOS = new ArrayList<>();
private static final PagedResult<GoblinStoreMgtGoodsSkuListVo> goblinStoreMgtGoodsSkuListVo = new PagedResult<>(); private static final PagedResult<GoblinStoreMgtGoodsSkuListVo> goblinStoreMgtGoodsSkuListVo = new PagedResult<>();
private static final ArrayList<GoblinListVo> goblinListVo = new ArrayList<>(); private static final ArrayList<GoblinListVo> goblinListVo = new ArrayList<>();
private static final ArrayList<GoblinStoreMgtGoodsSkuListVo> goblinStoreMgtGoodsSkuListVoArrayList = new ArrayList<>(); private static final ArrayList<GoblinStoreMgtGoodsSkuListVo> goblinStoreMgtGoodsSkuListVoArrayList = new ArrayList<>();
...@@ -326,6 +326,10 @@ public class ObjectUtil { ...@@ -326,6 +326,10 @@ public class ObjectUtil {
return (ArrayList<GoblinGoodsSkuInfoVo>) goblinGoodsSkuInfoVoArrayList.clone(); return (ArrayList<GoblinGoodsSkuInfoVo>) goblinGoodsSkuInfoVoArrayList.clone();
} }
public static Map<String, GoblinGoodsSkuInfoVo> getGoblinGoodsSkuInfoVoMap() {
return (HashMap<String, GoblinGoodsSkuInfoVo>) goblinGoodsSkuInfoVoHashMap.clone();
}
public static ArrayList<GoblinGoodsSpecVo> getGoblinGoodsSpecVoArrayList() { public static ArrayList<GoblinGoodsSpecVo> getGoblinGoodsSpecVoArrayList() {
return (ArrayList<GoblinGoodsSpecVo>) goblinGoodsSpecVoArrayList.clone(); return (ArrayList<GoblinGoodsSpecVo>) goblinGoodsSpecVoArrayList.clone();
} }
...@@ -406,6 +410,10 @@ public class ObjectUtil { ...@@ -406,6 +410,10 @@ public class ObjectUtil {
return (ArrayList<GoblinUserDigitalArtworkListVo>) GOBLIN_USER_DIGITAL_ARTWORK_LIST_VO_ARRAY_LIST.clone(); return (ArrayList<GoblinUserDigitalArtworkListVo>) GOBLIN_USER_DIGITAL_ARTWORK_LIST_VO_ARRAY_LIST.clone();
} }
public static ArrayList<GoblinUserDigitalArtworkTransferListVo> getGoblinUserDigitalArtworkTransferListVos() {
return (ArrayList<GoblinUserDigitalArtworkTransferListVo>) GOBLIN_USER_DIGITAL_ARTWORK_TRANSFER_LIST_VOS.clone();
}
public static BasicDBObject cloneBasicDBObject() { public static BasicDBObject cloneBasicDBObject() {
return (BasicDBObject) basicDBObject.clone(); return (BasicDBObject) basicDBObject.clone();
} }
......
...@@ -55,6 +55,11 @@ ...@@ -55,6 +55,11 @@
140110=\u53D7\u8D60\u4EBA\u672A\u5F00\u901A\u6570\u5B57\u8D26\u53F7 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 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 140112=\u8BE5\u85CF\u54C1\u4E0D\u6EE1\u8DB3\u8F6C\u8D60\u6761\u4EF6
140113=\u5BC6\u7801\u9519\u8BEF\uFF0C\u8BF7%d\u5206\u949F\u540E\u518D\u8BD5
140114=\u5BC6\u7801\u9519\u8BEF\uFF0C\u518D\u8F93\u95191\u6B21\u8BF7\u8054\u7CFB\u5BA2\u670D\u627E\u56DE
140115=\u5BC6\u7801\u9519\u8BEF\u5DF2\u8FBE\u4E0A\u9650\uFF0C\u8BF7\u8054\u7CFB\u5BA2\u670D\u91CD\u7F6E\u5BC6\u7801
140116=\u5BC6\u7801\u9519\u8BEF\uFF0C\u518D\u8F93\u9519%d\u6B21\u5C06\u9501\u5B9A%d\u5206\u949F
140117=\u8BE5\u85CF\u54C1\u5DF2\u8FC7\u9886\u53D6\u6709\u6548\u671F
......
...@@ -134,7 +134,8 @@ goblin_user_digital_artwork.update_for_unboxing=UPDATE goblin_user_digital_artwo ...@@ -134,7 +134,8 @@ goblin_user_digital_artwork.update_for_unboxing=UPDATE goblin_user_digital_artwo
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_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_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=? goblin_user_digital_artwork.update_for_trans_query=UPDATE goblin_user_digital_artwork SET transfer_state=?,del_flg='1',deleted_at=? WHERE artwork_id=?
#---- #---- \u85CF\u54C1\u8F6C\u8D60\u8BA2\u5355
goblin_nft_transfer_order.insert=INSERT INTO goblin_nft_transfer_order (order_id,artwork_id,owner_uid,receiver_uid,state,created_at)VALUES(?,?,?,?,0,?)
#---- \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(?,?,?,?,?,?)
goblin_goods_anticipate_value=INSERT INTO goblin_goods_anticipate_value (uid,ant_id,sku_name,sku_id,spu_id,about_people,actual_people,rule,about_start_date,about_end_date,created_date,del_tag) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) goblin_goods_anticipate_value=INSERT INTO goblin_goods_anticipate_value (uid,ant_id,sku_name,sku_id,spu_id,about_people,actual_people,rule,about_start_date,about_end_date,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