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

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

~api:开盲盒逻辑实现;

parent fe639c48
...@@ -18,6 +18,7 @@ public class GoblinQueueBizArtworkGenDto implements Serializable, Cloneable { ...@@ -18,6 +18,7 @@ public class GoblinQueueBizArtworkGenDto implements Serializable, Cloneable {
private String skuId; private String skuId;
private String orderId; private String orderId;
private Integer source; private Integer source;
private String fromArtId;
private static final GoblinQueueBizArtworkGenDto obj = new GoblinQueueBizArtworkGenDto(); private static final GoblinQueueBizArtworkGenDto obj = new GoblinQueueBizArtworkGenDto();
......
...@@ -172,6 +172,10 @@ public class GoblinStoreMgtDigitalGoodsAddSkuParam implements Serializable { ...@@ -172,6 +172,10 @@ public class GoblinStoreMgtDigitalGoodsAddSkuParam implements Serializable {
initVo.setSkuAppear(this.getSkuAppear());//0 initVo.setSkuAppear(this.getSkuAppear());//0
initVo.setSkuCanbuy(this.getSkuCanbuy());//0 initVo.setSkuCanbuy(this.getSkuCanbuy());//0
} else { } else {
initVo.setStock(0);
initVo.setSkuStock(0);
initVo.setSkuAppear("0");
initVo.setSkuCanbuy("1");
initVo.setOpeningTime(DateUtil.Formatter.yyyyMMddHHmmss.parse(this.getOpeningTime()));//1 initVo.setOpeningTime(DateUtil.Formatter.yyyyMMddHHmmss.parse(this.getOpeningTime()));//1
} }
return initVo; return initVo;
......
...@@ -103,6 +103,7 @@ public class GoblinGoodsSkuInfoVo implements Serializable, Cloneable { ...@@ -103,6 +103,7 @@ public class GoblinGoodsSkuInfoVo implements Serializable, Cloneable {
@ApiModelProperty(position = 33, value = "是否盲盒[0-否|1-是]") @ApiModelProperty(position = 33, value = "是否盲盒[0-否|1-是]")
private String unbox; private String unbox;
@ApiModelProperty(position = 33, value = "盲盒开启时间") @ApiModelProperty(position = 33, value = "盲盒开启时间")
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern= DateUtil.DATE_FULL_STR)
private LocalDateTime openingTime; private LocalDateTime openingTime;
@ApiModelProperty(position = 33, value = "盲盒开启时限[单位秒]") @ApiModelProperty(position = 33, value = "盲盒开启时限[单位秒]")
private Integer openingLimit; private Integer openingLimit;
......
package com.liquidnet.service.goblin.service; package com.liquidnet.service.goblin.service;
import com.liquidnet.service.goblin.dto.vo.GoblinDigitalArtworkInfoVo; 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.dto.vo.GoblinDigitalArtworkPageVo;
import com.liquidnet.service.goblin.dto.vo.GoblinDigitalArtworkVo;
public interface IGoblinDigitalArtworkService { public interface IGoblinUserDigitalArtworkService {
GoblinDigitalArtworkPageVo page(String uid, Integer pageNum, Integer pageSize); GoblinDigitalArtworkPageVo page(String uid, Integer pageNum, Integer pageSize);
GoblinDigitalArtworkInfoVo info(String uid, String artworkId); GoblinDigitalArtworkInfoVo info(String uid, String artworkId);
GoblinDigitalArtworkListVo unboxingForBuyOrExchange(String uid, GoblinDigitalArtworkVo userDigitalArtworkVo);
} }
...@@ -12,10 +12,12 @@ import com.liquidnet.service.goblin.dto.GoblinQueueBizArtworkGenDto; ...@@ -12,10 +12,12 @@ import com.liquidnet.service.goblin.dto.GoblinQueueBizArtworkGenDto;
import com.liquidnet.service.goblin.dto.vo.GoblinDigitalArtworkVo; import com.liquidnet.service.goblin.dto.vo.GoblinDigitalArtworkVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo; import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.redis.connection.stream.StreamRecords; import org.springframework.data.redis.connection.stream.StreamRecords;
import org.springframework.data.redis.core.StreamOperations; import org.springframework.data.redis.core.StreamOperations;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -72,7 +74,7 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece ...@@ -72,7 +74,7 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece
} }
private boolean bizArtworkGenProcessing(GoblinQueueBizArtworkGenDto dto) { private boolean bizArtworkGenProcessing(GoblinQueueBizArtworkGenDto dto) {
String uid = dto.getUid(), skuId = dto.getSkuId(), orderId = dto.getOrderId(); String uid = dto.getUid(), skuId = dto.getSkuId(), orderId = dto.getOrderId(), fromArtworkId = dto.getFromArtId();
Integer source = dto.getSource(); Integer source = dto.getSource();
GoblinGoodsSkuInfoVo goodsSkuInfoVo = this.getGoodsSkuInfoVoFromRdb(skuId); GoblinGoodsSkuInfoVo goodsSkuInfoVo = this.getGoodsSkuInfoVoFromRdb(skuId);
...@@ -80,8 +82,8 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece ...@@ -80,8 +82,8 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece
// 判断是否已生成 // 判断是否已生成
String genMarkerKey = GoblinRedisConst.USER_DIGITAL_ARTWORK_GENMARK.concat(uid).concat(skuId).concat(orderId); String genMarkerKey = GoblinRedisConst.USER_DIGITAL_ARTWORK_GENMARK.concat(uid).concat(skuId).concat(orderId);
if (this.hasUserDigitalArtworkVoFromRdb(genMarkerKey)) {// 已生成 if (this.hasUserDigitalArtworkVoFromRdb(genMarkerKey)) {// 已生成
log.warn("#CONSUMER MSG EXIST_ART[{}]:[uid={},skuId={},orderId={},source={}]", this.getRedisStreamKey(), log.warn("#CONSUMER MSG EXIST_ART[{}]:[uid={},skuId={},orderId={},source={},fromArtworkId={}]", this.getRedisStreamKey(),
uid, skuId, orderId, source); uid, skuId, orderId, source, fromArtworkId);
return true; return true;
} }
// GoblinDigitalArtworkVo existDigitalArtworkVo = this.getDigitalArtworkVoFromMdb(uid, skuId, orderId); // GoblinDigitalArtworkVo existDigitalArtworkVo = this.getDigitalArtworkVoFromMdb(uid, skuId, orderId);
...@@ -106,6 +108,21 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece ...@@ -106,6 +108,21 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece
// Mongo记录VO // Mongo记录VO
mongoTemplate.insert(digitalArtworkVo, GoblinDigitalArtworkVo.class.getSimpleName()); mongoTemplate.insert(digitalArtworkVo, GoblinDigitalArtworkVo.class.getSimpleName());
boolean fromBoxArtworkFlg = StringUtils.isNotEmpty(fromArtworkId);
if (fromBoxArtworkFlg) {// 更新盲盒藏品数据
GoblinDigitalArtworkVo userDigitalArtworkVo = this.getUserDigitalArtworkVoFromRdb(fromArtworkId);
if (null != userDigitalArtworkVo) {
mongoTemplate.getCollection(GoblinDigitalArtworkVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("artworkId").is(fromArtworkId).and("state").ne(1)).getQueryObject(),
Update.update("state", userDigitalArtworkVo.getState())
.set("delFlg", userDigitalArtworkVo.getDelFlg())
.set("openingAt", userDigitalArtworkVo.getOpeningAt())
.set("updatedAt", userDigitalArtworkVo.getUpdatedAt())
.set("deletedAt", userDigitalArtworkVo.getDeletedAt())
.getUpdateObject()
);
}
}
// Redis记录VO // Redis记录VO
redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(digitalArtworkVo.getArtworkId()), digitalArtworkVo); redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(digitalArtworkVo.getArtworkId()), digitalArtworkVo);
// Redis更新藏品ID列表 // Redis更新藏品ID列表
...@@ -115,6 +132,9 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece ...@@ -115,6 +132,9 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece
userDigitalArtworkIds.add(artworkId); userDigitalArtworkIds.add(artworkId);
} else { } else {
userDigitalArtworkIds.add(0, artworkId); userDigitalArtworkIds.add(0, artworkId);
if (fromBoxArtworkFlg) {
userDigitalArtworkIds.remove(fromArtworkId);
}
int size = userDigitalArtworkIds.size(); int size = userDigitalArtworkIds.size();
if (size > 30) userDigitalArtworkIds.remove(size - 1); if (size > 30) userDigitalArtworkIds.remove(size - 1);
} }
...@@ -137,9 +157,9 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece ...@@ -137,9 +157,9 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece
// Redis生成标记(缓存三天),用于上面的生成检查 // Redis生成标记(缓存三天),用于上面的生成检查
redisUtil.set(genMarkerKey, 1, 259200); redisUtil.set(genMarkerKey, 1, 259200);
} else { } else {
log.warn("#CONSUMER MSG NULL_SKU[{}]:[uid={},skuId={},orderId={},source={}]", this.getRedisStreamKey(), uid, skuId, orderId, source); log.warn("#CONSUMER MSG NULL_SKU[{}]:[uid={},skuId={},orderId={},source={},fromArtworkId={}]", this.getRedisStreamKey(), uid, skuId, orderId, source, fromArtworkId);
log.warn("#CONSUMER MSG NULL_SKU[{}]:[uid={},skuId={},orderId={},source={}]", this.getRedisStreamKey(), uid, skuId, orderId, source); log.warn("#CONSUMER MSG NULL_SKU[{}]:[uid={},skuId={},orderId={},source={},fromArtworkId={}]", this.getRedisStreamKey(), uid, skuId, orderId, source, fromArtworkId);
log.warn("#CONSUMER MSG NULL_SKU[{}]:[uid={},skuId={},orderId={},source={}]", this.getRedisStreamKey(), uid, skuId, orderId, source); log.warn("#CONSUMER MSG NULL_SKU[{}]:[uid={},skuId={},orderId={},source={},fromArtworkId={}]", this.getRedisStreamKey(), uid, skuId, orderId, source, fromArtworkId);
} }
return true; return true;
} }
...@@ -179,6 +199,10 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece ...@@ -179,6 +199,10 @@ public class ConsumerGoblinBizArtworkGenRdsReceiver extends AbstractBizRedisRece
return vo; return vo;
} }
public GoblinDigitalArtworkVo getUserDigitalArtworkVoFromRdb(String artworkId) {
return (GoblinDigitalArtworkVo) redisUtil.get(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(artworkId));
}
public boolean hasUserDigitalArtworkVoFromRdb(String genMarkerKey) { public boolean hasUserDigitalArtworkVoFromRdb(String genMarkerKey) {
return redisUtil.hasKey(genMarkerKey); return redisUtil.hasKey(genMarkerKey);
} }
......
...@@ -3,11 +3,10 @@ package com.liquidnet.service.goblin.controller; ...@@ -3,11 +3,10 @@ package com.liquidnet.service.goblin.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSupport; import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.liquidnet.commons.lang.util.CurrentUtil; import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinDigitalArtworkInfoVo; import com.liquidnet.service.goblin.dto.vo.*;
import com.liquidnet.service.goblin.dto.vo.GoblinDigitalArtworkListVo; import com.liquidnet.service.goblin.service.IGoblinUserDigitalArtworkService;
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.GoblinRedisUtils;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
...@@ -22,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestParam; ...@@ -22,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
@ApiSupport(order = 142000) @ApiSupport(order = 142000)
@Api(tags = "我的藏品管理") @Api(tags = "我的藏品管理")
...@@ -29,11 +29,11 @@ import javax.validation.constraints.NotBlank; ...@@ -29,11 +29,11 @@ import javax.validation.constraints.NotBlank;
@Validated @Validated
@RestController @RestController
@RequestMapping("artwork") @RequestMapping("artwork")
public class GoblinDigitalArtworkController { public class GoblinUserDigitalArtworkController {
@Autowired @Autowired
GoblinRedisUtils goblinRedisUtils; GoblinRedisUtils goblinRedisUtils;
@Autowired @Autowired
IGoblinDigitalArtworkService goblinDigitalArtworkService; IGoblinUserDigitalArtworkService goblinDigitalArtworkService;
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
@ApiOperation(value = "藏品列表") @ApiOperation(value = "藏品列表")
...@@ -66,7 +66,39 @@ public class GoblinDigitalArtworkController { ...@@ -66,7 +66,39 @@ public class GoblinDigitalArtworkController {
@ApiImplicitParam(type = "form", required = true, dataType = "String", name = "artworkId", value = "藏品ID"), @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "artworkId", value = "藏品ID"),
}) })
@PostMapping("unboxing") @PostMapping("unboxing")
public ResponseDto<GoblinDigitalArtworkListVo> unboxing(@RequestParam String artworkId) { public ResponseDto<GoblinDigitalArtworkListVo> unboxing(@NotBlank(message = "藏品ID不能为空")
return null; @RequestParam String artworkId) {
String currentUid = CurrentUtil.getCurrentUid();
GoblinDigitalArtworkVo userDigitalArtworkVo = goblinRedisUtils.getUserDigitalArtworkVo(artworkId);
if (null == userDigitalArtworkVo || !currentUid.equals(userDigitalArtworkVo.getUid())) {
return ResponseDto.failure(ErrorMapping.get("140100"));
}
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId());
if (null == goodsSkuInfoVo || !"1".equals(goodsSkuInfoVo.getUnbox())) {
return ResponseDto.failure(ErrorMapping.get("140100"));
}
if (LocalDateTime.now().isBefore(goodsSkuInfoVo.getOpeningTime())) {
return ResponseDto.failure(ErrorMapping.get("140101"));
}
if (1 == userDigitalArtworkVo.getState()) {// 盲盒已开启
GoblinNftOrderVo goblinNftOrder = goblinRedisUtils.getGoblinNftOrder(userDigitalArtworkVo.getOrderId());
GoblinGoodsSkuInfoVo unboxSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(goblinNftOrder.getBoxSkuId());
GoblinDigitalArtworkListVo unboxDigitalArtworkListVo = GoblinDigitalArtworkListVo.getNew();
unboxDigitalArtworkListVo.setName(unboxSkuInfoVo.getName());
unboxDigitalArtworkListVo.setSubtitle(unboxSkuInfoVo.getSubtitle());
unboxDigitalArtworkListVo.setCoverPic(unboxSkuInfoVo.getSkuPic());
return ResponseDto.success(unboxDigitalArtworkListVo);
}
GoblinDigitalArtworkListVo unboxingRstVo = null;
switch (userDigitalArtworkVo.getSource()) {
case 1:
case 2:
unboxingRstVo = goblinDigitalArtworkService.unboxingForBuyOrExchange(currentUid, userDigitalArtworkVo);
break;
case 3:
default:
log.warn("Invalid operation[UID={},artworkId={}]", currentUid, artworkId);
}
return null == unboxingRstVo ? ResponseDto.failure(ErrorMapping.get("140102")) : ResponseDto.success(unboxingRstVo);
} }
} }
...@@ -5,13 +5,12 @@ import com.liquidnet.commons.lang.util.CollectionUtil; ...@@ -5,13 +5,12 @@ import com.liquidnet.commons.lang.util.CollectionUtil;
import com.liquidnet.commons.lang.util.CurrentUtil; import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.commons.lang.util.HttpUtil; import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.JsonUtils; import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.PagedResult; import com.liquidnet.service.base.PagedResult;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.SqlMapping; import com.liquidnet.service.base.SqlMapping;
import com.liquidnet.service.base.constant.MQConst; import com.liquidnet.service.base.constant.MQConst;
import com.liquidnet.service.goblin.dto.GoblinQueueBizArtworkGenDto;
import com.liquidnet.service.goblin.dto.vo.*; import com.liquidnet.service.goblin.dto.vo.*;
import com.liquidnet.service.goblin.service.IGoblinDigitalArtworkService; import com.liquidnet.service.goblin.service.IGoblinUserDigitalArtworkService;
import com.liquidnet.service.goblin.util.GoblinMongoUtils; import com.liquidnet.service.goblin.util.GoblinMongoUtils;
import com.liquidnet.service.goblin.util.GoblinRedisUtils; import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.ObjectUtil; import com.liquidnet.service.goblin.util.ObjectUtil;
...@@ -25,13 +24,11 @@ import org.springframework.util.CollectionUtils; ...@@ -25,13 +24,11 @@ import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.LinkedMultiValueMap;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Service @Service
public class GoblinDigitalArtworkServiceImpl implements IGoblinDigitalArtworkService { public class GoblinUserDigitalArtworkServiceImpl implements IGoblinUserDigitalArtworkService {
@Autowired @Autowired
private QueueUtils queueUtils; private QueueUtils queueUtils;
@Autowired @Autowired
...@@ -57,6 +54,7 @@ public class GoblinDigitalArtworkServiceImpl implements IGoblinDigitalArtworkSer ...@@ -57,6 +54,7 @@ public class GoblinDigitalArtworkServiceImpl implements IGoblinDigitalArtworkSer
} else { } else {
PagedResult<GoblinDigitalArtworkListVo> listVoPagedResult = ObjectUtil.getGoblinDigitalArtworkListVoPagedResult(); PagedResult<GoblinDigitalArtworkListVo> listVoPagedResult = ObjectUtil.getGoblinDigitalArtworkListVoPagedResult();
List<GoblinDigitalArtworkListVo> list = ObjectUtil.getGoblinDigitalArtworkListVoArrayList(); List<GoblinDigitalArtworkListVo> list = ObjectUtil.getGoblinDigitalArtworkListVoArrayList();
List<String> userDigitalArtworkIds = goblinRedisUtils.getUserDigitalArtworkIds(uid); List<String> userDigitalArtworkIds = goblinRedisUtils.getUserDigitalArtworkIds(uid);
if (!CollectionUtils.isEmpty(userDigitalArtworkIds)) { if (!CollectionUtils.isEmpty(userDigitalArtworkIds)) {
int cacheSize = userDigitalArtworkIds.size(), cacheNum = cacheSize / pageSize + 1;// 分几页 int cacheSize = userDigitalArtworkIds.size(), cacheNum = cacheSize / pageSize + 1;// 分几页
...@@ -66,8 +64,7 @@ public class GoblinDigitalArtworkServiceImpl implements IGoblinDigitalArtworkSer ...@@ -66,8 +64,7 @@ public class GoblinDigitalArtworkServiceImpl implements IGoblinDigitalArtworkSer
LocalDateTime now = LocalDateTime.now(), toCheckTime = now.minusSeconds(15); LocalDateTime now = LocalDateTime.now(), toCheckTime = now.minusSeconds(15);
int subSize = subList.size(); int subSize = subList.size();
for (int i = 0; i < subSize; i++) { for (int i = 0; i < subSize; i++) {
String artworkId = subList.get(i); GoblinDigitalArtworkVo userDigitalArtworkVo = goblinRedisUtils.getUserDigitalArtworkVo(subList.get(i));
GoblinDigitalArtworkVo userDigitalArtworkVo = goblinRedisUtils.getUserDigitalArtworkVo(artworkId);
if (null != userDigitalArtworkVo) { if (null != userDigitalArtworkVo) {
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId()); GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(userDigitalArtworkVo.getSkuId());
...@@ -84,6 +81,12 @@ public class GoblinDigitalArtworkServiceImpl implements IGoblinDigitalArtworkSer ...@@ -84,6 +81,12 @@ public class GoblinDigitalArtworkServiceImpl implements IGoblinDigitalArtworkSer
this.updateUserDigitalArtworkByChainTrade(userDigitalArtworkVo, listVo, checkRespDataList, now); this.updateUserDigitalArtworkByChainTrade(userDigitalArtworkVo, listVo, checkRespDataList, now);
} }
if (1 == userDigitalArtworkVo.getState() && "1".equals(goodsSkuInfoVo.getUnbox())) {// 盲盒已开启的,直接展示开出的藏品封面
GoblinNftOrderVo goblinNftOrder = goblinRedisUtils.getGoblinNftOrder(userDigitalArtworkVo.getOrderId());
goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(goblinNftOrder.getBoxSkuId());
listVo.setCoverPic(goodsSkuInfoVo.getSkuPic());
}
list.add(listVo); list.add(listVo);
} }
} }
...@@ -119,6 +122,49 @@ public class GoblinDigitalArtworkServiceImpl implements IGoblinDigitalArtworkSer ...@@ -119,6 +122,49 @@ public class GoblinDigitalArtworkServiceImpl implements IGoblinDigitalArtworkSer
return null; return null;
} }
@Override
public GoblinDigitalArtworkListVo unboxingForBuyOrExchange(String uid, GoblinDigitalArtworkVo userDigitalArtworkVo) {
String orderId = userDigitalArtworkVo.getOrderId();
GoblinNftOrderVo goblinNftOrder = goblinRedisUtils.getGoblinNftOrder(orderId);
GoblinGoodsSkuInfoVo unboxSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(goblinNftOrder.getBoxSkuId());
GoblinDigitalArtworkListVo unboxDigitalArtworkListVo = GoblinDigitalArtworkListVo.getNew();
// unboxDigitalArtworkListVo.setArtworkId();
unboxDigitalArtworkListVo.setName(unboxSkuInfoVo.getName());
unboxDigitalArtworkListVo.setSubtitle(unboxSkuInfoVo.getSubtitle());
unboxDigitalArtworkListVo.setCoverPic(unboxSkuInfoVo.getSkuPic());
// unboxDigitalArtworkListVo.setSource(userDigitalArtworkVo.getSource());
// unboxDigitalArtworkListVo.setState(0);
// unboxDigitalArtworkListVo.setCreatedAt();
// unboxDigitalArtworkListVo.setUnbox("0");
// unboxDigitalArtworkListVo.setOpeningTime(now);
LocalDateTime now = LocalDateTime.now();
userDigitalArtworkVo.setState(1);
userDigitalArtworkVo.setDelFlg("1");// 盲盒开启后直接删除
userDigitalArtworkVo.setOpeningAt(now);
userDigitalArtworkVo.setUpdatedAt(now);
userDigitalArtworkVo.setDeletedAt(now);
// if (goblinMongoUtils.updateUserDigitalArtworkVoByUnboxing(userDigitalArtworkVo)) {
goblinRedisUtils.setexUserDigitalArtworkVo(userDigitalArtworkVo);
String artworkId = userDigitalArtworkVo.getArtworkId();
GoblinQueueBizArtworkGenDto queueBizArtworkGenDto = GoblinQueueBizArtworkGenDto.getNew();
queueBizArtworkGenDto.setUid(uid);
queueBizArtworkGenDto.setSkuId(unboxSkuInfoVo.getSkuId());
queueBizArtworkGenDto.setOrderId(orderId);
queueBizArtworkGenDto.setSource(userDigitalArtworkVo.getSource());
queueBizArtworkGenDto.setFromArtId(artworkId);
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.BIZ_ARTWORK_GEN.getKey(), queueBizArtworkGenDto.toJson());
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(),
SqlMapping.get("goblin_user_digital_artwork.update_for_unboxing", now, now, now, artworkId));
// }
return unboxDigitalArtworkListVo;
}
/* -------------------------------------------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------------------------------------------- */
private void updateUserDigitalArtworkByChainTrade(GoblinDigitalArtworkVo userDigitalArtworkVo, GoblinDigitalArtworkListVo listVo, private void updateUserDigitalArtworkByChainTrade(GoblinDigitalArtworkVo userDigitalArtworkVo, GoblinDigitalArtworkListVo listVo,
...@@ -142,7 +188,7 @@ public class GoblinDigitalArtworkServiceImpl implements IGoblinDigitalArtworkSer ...@@ -142,7 +188,7 @@ public class GoblinDigitalArtworkServiceImpl implements IGoblinDigitalArtworkSer
userDigitalArtworkVo.setState(1); userDigitalArtworkVo.setState(1);
userDigitalArtworkVo.setUpdatedAt(now); userDigitalArtworkVo.setUpdatedAt(now);
goblinRedisUtils.setUserDigitalArtworkVo(userDigitalArtworkVo.getArtworkId(), userDigitalArtworkVo); goblinRedisUtils.setUserDigitalArtworkVo(userDigitalArtworkVo);
goblinMongoUtils.updateUserDigitalArtworkVoByChainTrade(userDigitalArtworkVo); goblinMongoUtils.updateUserDigitalArtworkVoByChainTrade(userDigitalArtworkVo);
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(), queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(),
......
...@@ -1265,6 +1265,22 @@ public class GoblinMongoUtils { ...@@ -1265,6 +1265,22 @@ public class GoblinMongoUtils {
/* ---------------------------------------- 我的藏品 ---------------------------------------- */ /* ---------------------------------------- 我的藏品 ---------------------------------------- */
/**
* 盲盒开启后,直接从`我的藏品列表`中移除
*/
public boolean updateUserDigitalArtworkVoByUnboxing(GoblinDigitalArtworkVo vo) {
UpdateResult updateResult = mongoTemplate.getCollection(GoblinDigitalArtworkVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("artworkId").is(vo.getArtworkId()).and("state").ne(1)).getQueryObject(),
Update.update("state", vo.getState())
.set("delFlg", vo.getDelFlg())
.set("openingAt", vo.getOpeningAt())
.set("updatedAt", vo.getUpdatedAt())
.set("deletedAt", vo.getDeletedAt())
.getUpdateObject()
);
return updateResult.getModifiedCount() > 0;
}
public boolean updateUserDigitalArtworkVoByChainTrade(GoblinDigitalArtworkVo vo) { public boolean updateUserDigitalArtworkVoByChainTrade(GoblinDigitalArtworkVo vo) {
UpdateResult updateResult = mongoTemplate.getCollection(GoblinDigitalArtworkVo.class.getSimpleName()).updateOne( UpdateResult updateResult = mongoTemplate.getCollection(GoblinDigitalArtworkVo.class.getSimpleName()).updateOne(
Query.query(Criteria.where("artworkId").is(vo.getArtworkId())).getQueryObject(), Query.query(Criteria.where("artworkId").is(vo.getArtworkId())).getQueryObject(),
......
...@@ -1380,8 +1380,16 @@ public class GoblinRedisUtils { ...@@ -1380,8 +1380,16 @@ public class GoblinRedisUtils {
return (GoblinDigitalArtworkVo) redisUtil.get(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(artworkId)); return (GoblinDigitalArtworkVo) redisUtil.get(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(artworkId));
} }
public boolean setUserDigitalArtworkVo(String artworkId, GoblinDigitalArtworkVo vo) { public boolean setUserDigitalArtworkVo(GoblinDigitalArtworkVo vo) {
return redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(artworkId), vo); return redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(vo.getArtworkId()), vo);
}
/**
* 盲盒开启后,直接从`我的藏品列表`中移除
* 此处通过Redis过期删除
*/
public boolean setexUserDigitalArtworkVo(GoblinDigitalArtworkVo vo) {
return redisUtil.set(GoblinRedisConst.USER_DIGITAL_ARTWORK.concat(vo.getArtworkId()), vo, 259200);
} }
/* ---------------------------------------- ---------------------------------------- */ /* ---------------------------------------- ---------------------------------------- */
......
...@@ -16,6 +16,10 @@ ...@@ -16,6 +16,10 @@
140053=该活动优惠券被抢光了 140053=该活动优惠券被抢光了
140054=该活动优惠券已被使用 140054=该活动优惠券已被使用
140100=盲盒不存在
140101=请核实盲盒开启时间
140102=开启失败,请稍后重试
......
...@@ -128,4 +128,6 @@ goblin_store_coupon_rule.update_del=UPDATE goblin_store_coupon_rule SET del_flg= ...@@ -128,4 +128,6 @@ goblin_store_coupon_rule.update_del=UPDATE goblin_store_coupon_rule SET del_flg=
goblin_user_coupon.insert=INSERT INTO goblin_user_coupon (ucoupon_id, store_coupon_id, uid, state, bind_at, dued_at, operator, created_at)VALUES(?,?,?,?,?,?,?,?) goblin_user_coupon.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 = ? goblin_user_coupon.updateState=UPDATE goblin_user_coupon SET state = ? , used_for = ? ,updated_at = ? where ucoupon_id = ?
#---- 我的藏品 #---- 我的藏品
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 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 goblin_user_digital_artwork.update_for_unboxing=UPDATE goblin_digital_artwork SET state=1,del_flg='1',opening_at=?,updated_at=?,deleted_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