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

Commit 19aa6c66 authored by jiangxiulong's avatar jiangxiulong

nft商品列表完善

parent 3432c487
......@@ -122,7 +122,7 @@ public class GoblinRedisConst {
public static final String REDIS_GOBLIN_NFT_ORDER_INFO = PREFIX.concat("nftOrder:");// nft订单详情
public static final String REDIS_GOBLIN_NFT_ORDER_USER_ID_LIST = PREFIX.concat("nftOrder:idList:user:");// nft用户订单id列表
public static final String REDIS_GOBLIN_NFT_ORDER_REFUND_INFO = PREFIX.concat("nftOrder:refund:");// nft退款订单详情
public static final String REDIS_GOBLIN_GOODS_LIST = PREFIX.concat("nftGoodsList");// nft商品列表
public static final String REDIS_GOBLIN_NFT_GOODS_LIST = PREFIX.concat("nftGoodsList");// nft商品列表
/* ----------------------------------------------------------------- */
......
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.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@ApiModel(value = "GoblinNftGoodsInfoListVo", description = "NFT商品SPU详情[不包含具体SKU,SKU详情参见'GoblinNftGoodsSkuInfoVo']")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class GoblinNftGoodsInfoListVo implements Serializable, Cloneable {
private static final long serialVersionUID = -3869909399504844722L;
@ApiModelProperty(position = 10, value = "店铺ID")
private String storeId;
@ApiModelProperty(position = 11, value = "商品ID[64]")
private String spuId;
@ApiModelProperty(position = 12, value = "商品编码[默认为系统编码,也可手动输入商家自己的编码]")
private String spuNo;
@ApiModelProperty(position = 13, value = "商品名称[100]")
private String name;
@ApiModelProperty(position = 14, value = "商品副标题[128]")
private String subtitle;
@ApiModelProperty(position = 20, value = "封面图片地址[256]")
private String coverPic;
@ApiModelProperty(position = 21, value = "商品视频地址")
private String video;
@ApiModelProperty(position = 15, value = "销售价-原价[20,2]")
private BigDecimal sellPrice;
@ApiModelProperty(position = 16, value = "价格区间MIN[20,2]")
private BigDecimal priceGe;
@ApiModelProperty(position = 17, value = "价格区间MAX[20,2]")
private BigDecimal priceLe;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
@ApiModelProperty(position = 31, value = "开售时间")
private LocalDateTime saleStartTime;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
@ApiModelProperty(position = 31, value = "停售时间")
private LocalDateTime saleStopTime;
@ApiModelProperty(position = 32, value = "商品有效期[YYYY-MM-DD]")
private String spuValidity;
@ApiModelProperty(position = 34, value = "审核状态[0-编辑中|1-审核中|2-审核不通过|3-审核通过]")
private String status;
@ApiModelProperty(position = 36, value = "商品上架状态[0-待上架|1-下架|2-违规|3-上架]")
private String shelvesStatus;
@ApiModelProperty(position = 37, value = "自定义展示[0-默认展示|1-隐藏不可购买]")
private String spuAppear;
@ApiModelProperty(position = 37, value = "创作者")
private String author;
@ApiModelProperty(position = 37, value = "发行方")
private String publisher;
@ApiModelProperty(position = 39, value = "上架时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime shelvesAt;
@ApiModelProperty(position = 40, value = "商品图片列表")
private List<String> imageList;
@ApiModelProperty(position = 52, value = "商品标签列表")
private List<GoblinGoodsTagVo> tagVoList;
@ApiModelProperty(position = 54, value = "音乐人、艺术家、IP列表")
private List<GoblinGoodsExtagVo> extagVoList;
@ApiModelProperty(position = 55, value = "AR标签")
private List<GoblinGoodsExtagVo> artagVoList;
@ApiModelProperty(position = 56, value = "SPU包含的SKU_ID列表")
private List<String> skuIdList;
@ApiModelProperty(position = 61, value = "销量")
private Integer count;
@ApiModelProperty(position = 62, value = "商铺名称")
private String storeName;
@ApiModelProperty(position = 63, value = "skuList")
private List<GoblinNftGoodsSkuInfoVo> nftGoodsSkuInfoVoList;
private static final GoblinNftGoodsInfoListVo obj = new GoblinNftGoodsInfoListVo();
public static GoblinNftGoodsInfoListVo getNew() {
try {
return (GoblinNftGoodsInfoListVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinNftGoodsInfoListVo();
}
}
}
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 com.liquidnet.service.goblin.dto.GoblinGoodsSpecDto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@ApiModel(value = "GoblinNftGoodsSkuInfoVo", description = "NFT商品SKU信息")
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class GoblinNftGoodsSkuInfoVo implements Serializable, Cloneable {
private static final long serialVersionUID = -519573757075729441L;
@ApiModelProperty(position = 10, value = "商品单品ID")
private String skuId;
@ApiModelProperty(position = 11, value = "商品ID[64]")
private String spuId;
@ApiModelProperty(position = 12, value = "单品的编号[45]")
private String skuNo;
@ApiModelProperty(position = 12, value = "商品类型[0-常规|1-数字藏品]")
private int skuType;
@ApiModelProperty(position = 13, value = "单品的名称[100]")
private String name;
@ApiModelProperty(position = 14, value = "单品的副标题[128]")
private String subtitle;
@ApiModelProperty(position = 15, value = "单品默认图片的URL[256]")
private String skuPic;
@ApiModelProperty(position = 15, value = "单品详情展示文件URL[256]")
private String skuWatch;
@ApiModelProperty(position = 15, value = "展示文件类型[1-图片|2-视频|3-模型]")
private String watchType;
@ApiModelProperty(position = 15, value = "素材原始文件类型[1-图片|2-视频|3-模型]")
private String materialType;
@ApiModelProperty(position = 15, value = "素材原始文件URL")
private String materialUrl;
@ApiModelProperty(position = 16, value = "ISBN,针对CD/图书等[50]")
private String skuIsbn;
@ApiModelProperty(position = 17, value = "总库存")
private Integer stock;
@ApiModelProperty(position = 18, value = "单品库存")
private Integer skuStock;
@ApiModelProperty(position = 18, value = "兑换库存")
private Integer giftStock;
@ApiModelProperty(position = 18, value = "盲盒命中率[0.01~100%]")
private BigDecimal hitRatio;
@ApiModelProperty(position = 19, value = "预警库存")
private Integer warningStock;
@ApiModelProperty(position = 20, value = "单品销售价-原价[20,2]")
private BigDecimal sellPrice;
@ApiModelProperty(position = 21, value = "单品现价[20,2]")
private BigDecimal price;
@ApiModelProperty(position = 22, value = "单品会员价格[20,2]")
private BigDecimal priceMember;
@ApiModelProperty(position = 23, value = "单品的重量[20,2]")
private BigDecimal weight;
@ApiModelProperty(position = 23, value = "单品简介[256]", example = "单品简介...")
private String intro;
@ApiModelProperty(position = 23, value = "单品详情", example = "单品详情...")
private String details;
@ApiModelProperty(position = 24, value = "购买限制[0-全部用户|1-仅会员|2-指定用户]")
private String buyFactor;
@ApiModelProperty(position = 25, value = "购买限制人员名单[购买限制为2-指定用户时必填]")
private String buyRoster;
@ApiModelProperty(position = 26, value = "限量[0-无限制|X:限购数量]")
private Integer buyLimit;
@ApiModelProperty(position = 27, value = "商品的店铺ID,如果是平台的则为0")
private String storeId;
@ApiModelProperty(position = 27, value = "上架处理方式[1-等待手动上架|2-直接上架售卖|3-预约定时上架]")
private String shelvesHandle;
@ApiModelProperty(position = 27, value = "预约上架时间[上架处理方式为3-预约定时上架时需要指定]")
private String shelvesTime;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
@ApiModelProperty(position = 27, value = "开售时间")
private LocalDateTime saleStartTime;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
@ApiModelProperty(position = 27, value = "停售时间")
private LocalDateTime saleStopTime;
@ApiModelProperty(position = 28, value = "单品有效期")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime skuValidity;
@ApiModelProperty(position = 29, value = "是否是虚拟商品[0-否|1-是]")
private String virtualFlg;
@ApiModelProperty(position = 30, value = "审核状态[0-初始编辑|1-审核中|2-审核不通过|3-审核通过]")
private String status;
@ApiModelProperty(position = 31, value = "审核拒绝原因[256]")
private String reason;
@ApiModelProperty(position = 32, value = "单品上架状态[0-待上架|1-下架|2-违规|3-上架]")
private String shelvesStatus;
@ApiModelProperty(position = 33, value = "自定义展示[0-默认展示|1-隐藏不可购买]")
private String skuAppear;
@ApiModelProperty(position = 33, value = "是否盲盒[0-否|1-是]")
private String unbox;
@ApiModelProperty(position = 33, value = "盲盒开启时间")
private LocalDateTime openingTime;
@ApiModelProperty(position = 33, value = "盲盒开启时限[单位秒]")
private Integer openingLimit;
@ApiModelProperty(position = 33, value = "NFT路由")
private String routeType;
@ApiModelProperty(position = 33, value = "NFT上传声明状态[0-待上传|1-已上传|2-上传失败|9-上传中]")
private Integer upchain;
@ApiModelProperty(position = 33, value = "NFT预览图访问URL")
private String displayUrl;
@ApiModelProperty(position = 33, value = "NFT素材访问URL")
private String nftUrl;
@ApiModelProperty(position = 33, value = "NFT系列ID")
private String seriesId;
@ApiModelProperty(position = 33, value = "NFT系列HASH")
private String seriesHash;
@ApiModelProperty(position = 33, value = "NFT藏品HASH")
private String nftHash;
@ApiModelProperty(position = 33, value = "NFT系列声明时间")
private String declareAt;
@ApiModelProperty(position = 34, value = "删除标记[0-未删除|1-删除]")
private String delFlg;
@ApiModelProperty(position = 35, value = "上架时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime shelvesAt;
@ApiModelProperty(position = 36, value = "活动Id")
private String marketId;
@ApiModelProperty(position = 37, value = "物流模版ID")
private String logisticsTemplate;
private String createdBy;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime createdAt;
private String updatedBy;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime updatedAt;
private String deletedBy;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
private LocalDateTime deletedAt;
@ApiModelProperty(position = 40, value = "单品规格信息")
private List<GoblinGoodsSpecDto> skuSpecList;
@ApiModelProperty(position = 54, value = "单品音乐人标签[藏品类型时使用]")
private List<GoblinGoodsExtagVo> extagVoList;
private static final GoblinNftGoodsSkuInfoVo obj = new GoblinNftGoodsSkuInfoVo();
public static GoblinNftGoodsSkuInfoVo getNew() {
try {
return (GoblinNftGoodsSkuInfoVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinNftGoodsSkuInfoVo();
}
}
}
......@@ -2,13 +2,13 @@ package com.liquidnet.service.goblin.service;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.*;
import com.liquidnet.service.goblin.dto.vo.GoblinNftGoodsInfoListVo;
public interface IGoblinNftGoodsAppService {
ResponseDto<PageInfo<GoblinGoodsInfoVo>> goodsList(int pag);
ResponseDto<PageInfo<GoblinNftGoodsInfoListVo>> goodsList(int pag);
GoblinGoodsInfoVo goodsDetail(String spuId, String skuId);
GoblinNftGoodsInfoListVo goodsDetail(String spuId, String skuId);
Boolean exchange(String code);
}
......@@ -2,7 +2,7 @@ package com.liquidnet.service.goblin.controller;
import com.github.pagehelper.PageInfo;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinNftGoodsInfoListVo;
import com.liquidnet.service.goblin.service.IGoblinNftGoodsAppService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
......@@ -26,7 +26,7 @@ public class GoblinNftGoodsAppController {
@ApiImplicitParams({
@ApiImplicitParam(type = "query", dataType = "String", name = "page", value = "页码", example = "1"),
})
public ResponseDto<PageInfo<GoblinGoodsInfoVo>> getGoodsList(
public ResponseDto<PageInfo<GoblinNftGoodsInfoListVo>> getGoodsList(
@RequestParam(name = "page", defaultValue = "1") Integer page
) {
return goblinNftGoodsAppService.goodsList(page);
......@@ -38,11 +38,11 @@ public class GoblinNftGoodsAppController {
@ApiImplicitParam(type = "query", required = true, dataType = "String", name = "spuId", value = "spuId", example = "1"),
@ApiImplicitParam(type = "query", required = true, dataType = "String", name = "skuId", value = "skuId", example = "1"),
})
public ResponseDto<GoblinGoodsInfoVo> getGoodsDetail(
public ResponseDto<GoblinNftGoodsInfoListVo> getGoodsDetail(
@RequestParam("spuId") String spuId,
@RequestParam("skuId") String skuId
) {
GoblinGoodsInfoVo vo = goblinNftGoodsAppService.goodsDetail(spuId, skuId);
GoblinNftGoodsInfoListVo vo = goblinNftGoodsAppService.goodsDetail(spuId, skuId);
if (vo == null) {
return ResponseDto.failure("商品不存在");
}
......
......@@ -5,6 +5,8 @@ import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo;
import com.liquidnet.service.goblin.dto.vo.GoblinNftGoodsInfoListVo;
import com.liquidnet.service.goblin.dto.vo.GoblinNftGoodsSkuInfoVo;
import com.liquidnet.service.goblin.service.GoblinCouponService;
import com.liquidnet.service.goblin.service.IGoblinNftGoodsAppService;
import com.liquidnet.service.goblin.util.GoblinMongoUtils;
......@@ -12,6 +14,7 @@ import com.liquidnet.service.goblin.util.GoblinRedisUtils;
import com.liquidnet.service.goblin.util.QueueUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
......@@ -40,39 +43,47 @@ public class GoblinNftGoodsAppServiceImpl implements IGoblinNftGoodsAppService {
GoblinCouponService goblinCouponService;
@Override
public ResponseDto<PageInfo<GoblinGoodsInfoVo>> goodsList(int page) {
public ResponseDto<PageInfo<GoblinNftGoodsInfoListVo>> goodsList(int page) {
int size = 20;
//条件
Query query = Query.query(
Criteria.where("spuType").is(1)
Criteria.where("spuType").is(1).and("delFlg").is(0).and("status").is(3).and("shelvesStatus").is(3).and("")
);
long count = mongoTemplate.count(query, GoblinGoodsInfoVo.class, GoblinGoodsInfoVo.class.getSimpleName());
List<GoblinGoodsInfoVo> spuList = goblinRedisUtils.getGoblinGoodsInfoVoList();
List<GoblinNftGoodsInfoListVo> spuList = goblinRedisUtils.getGoblinNftGoodsInfoListVo();
if (null == spuList || page > 1) {
spuList = new ArrayList<>();
// 排序 分页
Pageable pageable = PageRequest.of(page - 1, size, Sort.by(Sort.Direction.DESC, "createdAt"));
query.with(pageable);
spuList = mongoTemplate.find(query, GoblinGoodsInfoVo.class, GoblinGoodsInfoVo.class.getSimpleName());
for (GoblinGoodsInfoVo info : spuList) {
List <GoblinGoodsInfoVo> goodsInfoVoList = mongoTemplate.find(query, GoblinGoodsInfoVo.class, GoblinGoodsInfoVo.class.getSimpleName());
for (GoblinGoodsInfoVo info : goodsInfoVoList) {
List<String> skuIdList = info.getSkuIdList();
List<GoblinGoodsSkuInfoVo> spuSkuVoList = new ArrayList<>();
List<GoblinNftGoodsSkuInfoVo> spuSkuVoList = new ArrayList<>();
for (String skuId : skuIdList) {
GoblinGoodsSkuInfoVo skuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(skuId);
spuSkuVoList.add(skuInfoVo);
GoblinNftGoodsSkuInfoVo nftGoodsSkuInfoVo = GoblinNftGoodsSkuInfoVo.getNew();
BeanUtils.copyProperties(skuInfoVo, nftGoodsSkuInfoVo);
spuSkuVoList.add(nftGoodsSkuInfoVo);
}
info.setGoblinOrderSkuVos(spuSkuVoList);
GoblinNftGoodsInfoListVo nftGoodsInfoListVo = GoblinNftGoodsInfoListVo.getNew();
BeanUtils.copyProperties(info, nftGoodsInfoListVo);
nftGoodsInfoListVo.setNftGoodsSkuInfoVoList(spuSkuVoList);
spuList.add(nftGoodsInfoListVo);
}
if (page <= 1) {
goblinRedisUtils.setGoblinGoodsInfoVoList(spuList);
goblinRedisUtils.setGoblinNftGoodsInfoListVo(spuList);
}
}
PageInfo<GoblinGoodsInfoVo> pageInfo = new PageInfo(spuList);
PageInfo<GoblinNftGoodsInfoListVo> pageInfo = new PageInfo(spuList);
pageInfo.setTotal(count);
return ResponseDto.success(pageInfo);
}
@Override
public GoblinGoodsInfoVo goodsDetail(String spuId, String skuId) {
public GoblinNftGoodsInfoListVo goodsDetail(String spuId, String skuId) {
GoblinGoodsInfoVo goodsInfoVo = goblinRedisUtils.getGoodsInfoVo(spuId);
if (null != goodsInfoVo) {
Integer buyCount = 0;
......@@ -107,7 +118,8 @@ public class GoblinNftGoodsAppServiceImpl implements IGoblinNftGoodsAppService {
return null;
}
return goodsInfoVo;
// return goodsInfoVo;
return GoblinNftGoodsInfoListVo.getNew();
}
@Override
......
......@@ -1350,17 +1350,17 @@ public class GoblinRedisUtils {
}
}
public List<GoblinGoodsInfoVo> getGoblinGoodsInfoVoList() {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_GOODS_LIST;
public List<GoblinNftGoodsInfoListVo> getGoblinNftGoodsInfoListVo() {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_NFT_GOODS_LIST;
Object obj = redisUtil.get(redisKey);
if (obj == null) {
return null;
} else {
return (List<GoblinGoodsInfoVo>) obj;
return (List<GoblinNftGoodsInfoListVo>) obj;
}
}
public void setGoblinGoodsInfoVoList(List<GoblinGoodsInfoVo> spuList) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_GOODS_LIST;
public void setGoblinNftGoodsInfoListVo(List<GoblinNftGoodsInfoListVo> spuList) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_NFT_GOODS_LIST;
redisUtil.set(redisKey, spuList);
}
......
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