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

Commit e67f1a87 authored by jiangxiulong's avatar jiangxiulong

Merge remote-tracking branch 'origin/jxl_418_exchange' into dev_yy_dh

# Conflicts:
#	liquidnet-bus-api/liquidnet-service-goblin-api/src/main/java/com/liquidnet/service/goblin/constant/GoblinRedisConst.java
parents bc2034a1 43f16567
...@@ -137,6 +137,7 @@ public class GoblinRedisConst { ...@@ -137,6 +137,7 @@ public class GoblinRedisConst {
public static final String REDIS_GOBLIN_NFT_ORDER_USER_ID_LIST = PREFIX.concat("nft:order:idList:");// nft用户订单id列表 userId public static final String REDIS_GOBLIN_NFT_ORDER_USER_ID_LIST = PREFIX.concat("nft:order:idList:");// nft用户订单id列表 userId
public static final String REDIS_GOBLIN_NFT_ORDER_REFUND_INFO = PREFIX.concat("nft:order:refund:");// nft退款订单详情 orderId public static final String REDIS_GOBLIN_NFT_ORDER_REFUND_INFO = PREFIX.concat("nft:order:refund:");// nft退款订单详情 orderId
public static final String REDIS_GOBLIN_NFT_ORDER_BUG_LOCK = PREFIX.concat("nft:order:lock:");// nft购买用户锁 userId public static final String REDIS_GOBLIN_NFT_ORDER_BUG_LOCK = PREFIX.concat("nft:order:lock:");// nft购买用户锁 userId
public static final String REDIS_GOBLIN_NFT_ORDER_EX_LOCK = PREFIX.concat("nft:order:exLock:");// nft兑换码锁 code
public static final String REDIS_GOBLIN_NFT_GOODS_LIST = PREFIX.concat("nft:goodsList");// nft商品列表 public static final String REDIS_GOBLIN_NFT_GOODS_LIST = PREFIX.concat("nft:goodsList");// nft商品列表
public static final String REDIS_GOBLIN_NFT_NUM_ACCOUNT = PREFIX.concat("nft:account:");// nft用户数字账户是否开通 userId public static final String REDIS_GOBLIN_NFT_NUM_ACCOUNT = PREFIX.concat("nft:account:");// nft用户数字账户是否开通 userId
...@@ -242,6 +243,23 @@ public class GoblinRedisConst { ...@@ -242,6 +243,23 @@ public class GoblinRedisConst {
public static final String NFT_PAY_TYPE = PREFIX.concat("nft:payType"); public static final String NFT_PAY_TYPE = PREFIX.concat("nft:payType");
/**
* nft兑换活动配置
*/
public static final String NFT_EX_ACTIVITY = PREFIX.concat("nft:ex:activity:");
/**
* nft兑换活动和sku的关联
*/
public static final String NFT_EX_SKU = PREFIX.concat("nft:ex:sku:");
/**
* 兑换码
*/
public static final String NFT_EX_CODE = PREFIX.concat("nft:ex:code:");
/** /**
* 用户助力 * 用户助力
*/ */
......
...@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty; ...@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@ApiModel(value = "GoblinStoreMgtGoodsSkuListVo", description = "商品管理:商品款式信息") @ApiModel(value = "GoblinStoreMgtGoodsSkuListVo", description = "商品管理:商品款式信息")
...@@ -37,7 +38,16 @@ public class GoblinStoreMgtGoodsSkuListVo implements Serializable, Cloneable { ...@@ -37,7 +38,16 @@ public class GoblinStoreMgtGoodsSkuListVo implements Serializable, Cloneable {
private LocalDateTime saleStopTime; private LocalDateTime saleStopTime;
@ApiModelProperty(position = 33, value = "是否盲盒[0-否|1-是]") @ApiModelProperty(position = 33, value = "是否盲盒[0-否|1-是]")
private String unbox; private String unbox;
@ApiModelProperty(position = 34, value = "是否隐藏[0-默认展示|1-隐藏]")
private String skuAppear;
@ApiModelProperty(position = 35, value = "是否售罄[0-否|1-是]")
private String soldoutStatus;
@ApiModelProperty(position = 36, value = "是否购买[0-否|1-是]")
private String skuCanbuy;
@ApiModelProperty(position = 37, value = "NFT上传声明状态[0-待上传|1-已声明|2-声明失败|9-声明中]")
private Integer upchain;
@ApiModelProperty(position = 38, value = "盲盒命中率")
private BigDecimal hitRatio;
public String getSaleStartTime() { public String getSaleStartTime() {
return DateUtil.Formatter.yyyyMMddHHmmss.format(saleStartTime); return DateUtil.Formatter.yyyyMMddHHmmss.format(saleStartTime);
...@@ -70,6 +80,11 @@ public class GoblinStoreMgtGoodsSkuListVo implements Serializable, Cloneable { ...@@ -70,6 +80,11 @@ public class GoblinStoreMgtGoodsSkuListVo implements Serializable, Cloneable {
this.setSaleStartTime(source.getSaleStartTime()); this.setSaleStartTime(source.getSaleStartTime());
this.setSaleStopTime(source.getSaleStopTime()); this.setSaleStopTime(source.getSaleStopTime());
this.setUnbox(source.getUnbox()); this.setUnbox(source.getUnbox());
this.setUpchain(source.getUpchain());
this.setSkuAppear(source.getSkuAppear());
this.setSkuCanbuy(source.getSkuCanbuy());
this.setSoldoutStatus(source.getSoldoutStatus());
this.setHitRatio(source.getHitRatio());
return this; return this;
} }
} }
package com.liquidnet.service.goblin.dto.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.liquidnet.service.goblin.entity.GoblinNftExActivity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @Author: wll
* @Description: nft 兑换活动表
* @Date:Create:in 2022/4/19 2:14 下午
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class GoblinNftExActivityVo implements Serializable,Cloneable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 活动id
*/
private String activityId;
/**
* 活动标题
*/
private String title;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
/**
* 总数量
*/
private Integer countNumber;
/**
* 使用数量
*/
private Integer useNumber;
/**
* 未使用数量
*/
private Integer unUseNumber;
private final static GoblinNftExActivityVo obj = new GoblinNftExActivityVo();
public static GoblinNftExActivityVo getNew(){
try {
return (GoblinNftExActivityVo) obj.clone();
}catch (CloneNotSupportedException e){
return new GoblinNftExActivityVo();
}
}
public GoblinNftExActivityVo copy(GoblinNftExActivity goblinNftExActivity){
if (null == goblinNftExActivity) return this;
this.setActivityId(goblinNftExActivity.getActivityId());
this.setTitle(goblinNftExActivity.getTitle());
this.setCreatedAt(goblinNftExActivity.getCreatedAt());
this.setUpdatedAt(goblinNftExActivity.getUpdatedAt());
return this;
}
}
package com.liquidnet.service.goblin.dto.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.liquidnet.service.goblin.entity.GoblinNftExCode;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @Author: wll
* @Description: NFT兑换码表
* @Date:Create:in 2022/4/19 1:55 下午
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class GoblinNftExCodeVo implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 兑换码id
*/
private String codeId;
/**
* 活动id
*/
private String activityId;
/**
* 兑换码
*/
private String code;
/**
* 款式id
*/
private String skuId;
/**
* 兑换码状态 1 未兑换 2 已兑换
*/
private Integer state;
/**
* 兑换用户id
*/
private String redeemUid;
/**
* 操作用户id
*/
private String adminUid;
/**
* 兑换时间
*/
private LocalDateTime redeemAt;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
/**
* 类型 默认无参 1:明盒、盲盒 2:空投盲盒/空投明盒
*/
private Integer isDrivi;
private String sktName;
private static final GoblinNftExCodeVo obj = new GoblinNftExCodeVo();
public static GoblinNftExCodeVo getNew() {
try {
return (GoblinNftExCodeVo) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinNftExCodeVo();
}
}
public GoblinNftExCodeVo copy(GoblinNftExCode goblinNftExCode){
if (null == goblinNftExCode)return this;
this.setCodeId(goblinNftExCode.getCodeId());
this.setActivityId(goblinNftExCode.getActivityId());
this.setCode(goblinNftExCode.getCode());
this.setSkuId(goblinNftExCode.getSkuId());
this.setState(goblinNftExCode.getState());
this.setRedeemUid(goblinNftExCode.getRedeemUid());
this.setAdminUid(goblinNftExCode.getAdminUid());
this.setRedeemAt(goblinNftExCode.getRedeemAt());
this.setCreatedAt(goblinNftExCode.getCreatedAt());
this.setUpdatedAt(goblinNftExCode.getUpdatedAt());
return this;
}
}
package com.liquidnet.service.goblin.dto.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.liquidnet.service.goblin.entity.GoblinNftExSku;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* @Author: wll
* @Description:
* @Date:Create:in 2022/4/19 2:23 下午
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class GoblinNftExSkuVo {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 活动id
*/
private String activityId;
/**
* 商品id
*/
private String spuId;
/**
* 款式id
*/
private String skuId;
/**
* 兑换库存
*/
private Integer exStock;
/**
* 兑换限购
*/
private Integer exLimit;
/**
* 兑换生效开始时间
*/
private LocalDateTime exStartTime;
/**
* 兑换生效结束时间
*/
private LocalDateTime exStopTime;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 修改时间
*/
private LocalDateTime updatedAt;
private static final GoblinNftExSkuVo obj = new GoblinNftExSkuVo();
public static GoblinNftExSkuVo getNew(){
try{
return (GoblinNftExSkuVo) obj.clone();
}catch (CloneNotSupportedException e){
return new GoblinNftExSkuVo();
}
}
public GoblinNftExSkuVo copy(GoblinNftExSku goblinNftExSku){
if (null == goblinNftExSku) return this;
this.setActivityId(goblinNftExSku.getActivityId());
this.setSpuId(goblinNftExSku.getSpuId());
this.setSkuId(goblinNftExSku.getSkuId());
this.setExStock(goblinNftExSku.getExStock());
this.setExLimit(goblinNftExSku.getExLimit());
this.setExStartTime(goblinNftExSku.getExStartTime());
this.setExStopTime(goblinNftExSku.getExStopTime());
this.setCreatedAt(goblinNftExSku.getCreatedAt());
this.setUpdatedAt(goblinNftExSku.getUpdatedAt());
return this;
}
}
package com.liquidnet.service.goblin.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.time.LocalDateTime;
@ApiModel(value ="GoblinNftExActivityParam",description = "添加方法入参")
@Data
public class GoblinNftExActivityParam implements Serializable {
@ApiModelProperty(position = 10,required = false,value = "nft活动id")
private String activityId;
@ApiModelProperty(position = 11,required = true,value = "活动标题" ,example = "草莓音乐节")
private String title;
@ApiModelProperty(position = 12,required = false,value = "开始时间")
private LocalDateTime startTime;
@ApiModelProperty(position = 13,required = false,value = "结束时间")
private LocalDateTime endTime;
@ApiModelProperty(position = 14,required = true,value = "当前页(查询时传入)")
private Integer pageNum;
}
package com.liquidnet.service.goblin.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author: wll
* @Description:
* @Date:Create:in 2022/4/20 5:12 下午
*/
@ApiModel(value = "GoblinNftExCodeParam",description = "查询方法入参")
@Data
public class GoblinNftExCodeParam {
@ApiModelProperty(position = 10,required = true,value = "活动id")
private String activityId;
@ApiModelProperty(position = 11,required = true,value = "当前页")
private Integer pageNum;
@ApiModelProperty(position = 12,required = false,value = "兑换码")
private String code;
@ApiModelProperty(position = 13,required = false,value = "兑换码状态 全部非传 1未兑换 2已兑换 3已失效")
private Integer state;
@ApiModelProperty(position = 14,required = false,value = "默认无参 1:明盒、盲盒 2:空投盲盒/空投明盒")
private Integer isDrivi;
@ApiModelProperty(position = 15,required = false,value = "藏品名称")
private String skuName;
@ApiModelProperty(position = 16,required = false,value = "用户id搜索")
private String userId;
}
package com.liquidnet.service.goblin.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
/**
* @Author: wll
* @Date:Create:in 2022/4/19 5:06 下午
*/
@ApiModel(value = "GoblinNftExActivityParam", description = "添加方法入参")
@Data
public class GoblinNftExSkuParam {
@ApiModelProperty(position = 10, required = true, value = "nft兑换活动id")
@NotBlank(message = "nft兑换活动id不可为空")
private String activityId;
@ApiModelProperty(position = 11,required = true,value = "商品id")
@NotBlank(message = "商品id不可为空")
private String spuId;
@ApiModelProperty(position = 12,required = true,value = "款式id")
@NotBlank(message = "款式id不可为空")
private String skuId;
@ApiModelProperty(position = 13,required = true,value = "兑换库存数量")
@NotBlank(message = "兑换库存数量不可为空")
private Integer exStock;
@ApiModelProperty(position = 14,required = true,value = "兑换限购数量")
@NotBlank(message = "兑换限购数量不可为空")
private Integer exLimit;
@ApiModelProperty(position = 15,required = true,value = "兑换生效开始时间")
@NotBlank(message = "兑换生效开始时间不可为空")
private LocalDateTime exStartTime;
@ApiModelProperty(position = 16,required = true,value = "兑换生效结束时间")
@NotBlank(message = "兑换生效结束时间不可为空")
private LocalDateTime exStopTime;
}
package com.liquidnet.service.goblin.service;
import com.liquidnet.service.goblin.param.GoblinNftExActivityParam;
public interface IGoblinNftExActivityService {
/**
* 新增nft活动
* @param goblinNftExActivityParam
* @return
*/
String add(GoblinNftExActivityParam goblinNftExActivityParam);
/**
* 分页查询
* @param goblinNftExActivityParam
* @return
*/
Object pageList(GoblinNftExActivityParam goblinNftExActivityParam);
}
package com.liquidnet.service.goblin.service;
import com.liquidnet.service.goblin.param.GoblinNftExCodeParam;
public interface IGoblinNftExCodeService {
/**
* 获取兑换码
*/
Object selectCodePageList(GoblinNftExCodeParam goblinNftExCodeParam);
}
package com.liquidnet.service.goblin.service;
import com.liquidnet.service.goblin.param.GoblinNftExSkuParam;
import java.util.List;
public interface IGoblinNftExSkuService {
/**
* 新增nft兑换活动和sku的关联
*/
Boolean add(List<GoblinNftExSkuParam> goblinNftExSkuParams);
}
...@@ -11,5 +11,4 @@ public interface IGoblinNftGoodsAppService { ...@@ -11,5 +11,4 @@ public interface IGoblinNftGoodsAppService {
GoblinNftGoodsSkuInfoVo goodsDetail(String skuId); GoblinNftGoodsSkuInfoVo goodsDetail(String skuId);
Boolean exchange(String code);
} }
...@@ -25,4 +25,6 @@ public interface IGoblinNftOrderService { ...@@ -25,4 +25,6 @@ public interface IGoblinNftOrderService {
String syncOrder(GoblinNftOrderPayCallbackParam syncOrderParam); String syncOrder(GoblinNftOrderPayCallbackParam syncOrderParam);
String refundSyncOrder(GoblinNftOrderRefundCallbackParam refundCallbackParam); String refundSyncOrder(GoblinNftOrderRefundCallbackParam refundCallbackParam);
ResponseDto<Boolean> exchange(String code, String uid);
} }
package com.liquidnet.service.goblin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @Author: wll
* @Description: nft 兑换活动表
* @Date:Create:in 2022/4/19 2:14 下午
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class GoblinNftExActivity implements Serializable,Cloneable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 活动id
*/
private String activityId;
/**
* 活动标题
*/
private String title;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
/**
* 总数量
*/
private Integer countNumber;
/**
* 使用数量
*/
private Integer useNumber;
/**
* 未使用数量
*/
private Integer unUseNumber;
private final static GoblinNftExActivity obj = new GoblinNftExActivity();
public static GoblinNftExActivity getNew(){
try {
return (GoblinNftExActivity) obj.clone();
}catch (CloneNotSupportedException e){
return new GoblinNftExActivity();
}
}
}
package com.liquidnet.service.goblin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @Author: wll
* @Description: NFT兑换码表
* @Date:Create:in 2022/4/19 1:55 下午
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class GoblinNftExCode implements Serializable, Cloneable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 兑换码id
*/
private String codeId;
/**
* 活动id
*/
private String activityId;
/**
* 兑换码
*/
private String code;
/**
* 款式id
*/
private String skuId;
/**
* 兑换码状态 1 未兑换 2 已兑换
*/
private Integer state;
/**
* 兑换用户id
*/
private String redeemUid;
/**
* 操作用户id
*/
private String adminUid;
/**
* 兑换时间
*/
private LocalDateTime redeemAt;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
/**
* 类型 默认无参 1:明盒、盲盒 2:空投盲盒/空投明盒
*/
private Integer isDrivi;
private String sktName;
private static final GoblinNftExCode obj = new GoblinNftExCode();
public static GoblinNftExCode getNew() {
try {
return (GoblinNftExCode) obj.clone();
} catch (CloneNotSupportedException e) {
return new GoblinNftExCode();
}
}
}
package com.liquidnet.service.goblin.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.time.LocalDateTime;
/**
* @Author: wll
* @Description:
* @Date:Create:in 2022/4/19 2:23 下午
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class GoblinNftExSku {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 活动id
*/
private String activityId;
/**
* 商品id
*/
private String spuId;
/**
* 款式id
*/
private String skuId;
/**
* 兑换库存
*/
private Integer exStock;
/**
* 兑换限购
*/
private Integer exLimit;
/**
* 兑换生效开始时间
*/
private LocalDateTime exStartTime;
/**
* 兑换生效结束时间
*/
private LocalDateTime exStopTime;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 修改时间
*/
private LocalDateTime updatedAt;
private static final GoblinNftExSku obj = new GoblinNftExSku();
public static GoblinNftExSku getNew(){
try{
return (GoblinNftExSku) obj.clone();
}catch (CloneNotSupportedException e){
return new GoblinNftExSku();
}
}
}
package com.liquidnet.service.goblin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.goblin.entity.GoblinNftExActivity;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
import java.util.List;
/**
* <p>
* NFT兑换活动表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2022-04-19
*/
@Repository
public interface GoblinNftExActivityMapper extends BaseMapper<GoblinNftExActivity> {
/**
* 添加ntf兑换活动数据
* @param goblinNftExActivity
* @return
*/
int addGoblinNftExActivity(GoblinNftExActivity goblinNftExActivity);
/**
* 分页回去nft兑换活动数据
* @param title
* @param startTime
* @param endTime
* @return
*/
List<GoblinNftExActivity> selectPageList(@Param("title") String title, @Param("startTime") LocalDateTime startTime,@Param("endTime") LocalDateTime endTime);
}
package com.liquidnet.service.goblin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.goblin.entity.GoblinNftExCode;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* NFT兑换码表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2022-04-19
*/
@Repository
public interface GoblinNftExCodeMapper extends BaseMapper<GoblinNftExCode> {
/**
* 批量添加兑换码信息
* @param goblinNftExCodes
* @return
*/
int addGoblinNftExCodes(@Param("goblinNftExCodes") List<GoblinNftExCode> goblinNftExCodes);
/**
* 根据活动ids查询
* @param activityIds
* @return
*/
List<GoblinNftExCode> selectByActivityIds(@Param("activityIds") String activityIds);
/**
* 条件查询 兑换码
* @param goblinNftExCode
* @return
*/
List<GoblinNftExCode> selectGoblinNftCode(GoblinNftExCode goblinNftExCode);
}
package com.liquidnet.service.goblin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.liquidnet.service.goblin.entity.GoblinNftExSku;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* NFT兑换活动关联SKU表 Mapper 接口
* </p>
*
* @author jiangxiulong
* @since 2022-04-19
*/
@Repository
public interface GoblinNftExSkuMapper extends BaseMapper<GoblinNftExSku> {
/**
* 批量添加兑换活动和sku的关联
* @param goblinNftExSkus
* @return
*/
int addGoblinNftExSkus(@Param("goblinNftExSkus") List<GoblinNftExSku> goblinNftExSkus);
/**
* 根据活动ids查询兑换和sku关联信息
* @param activityIds
* @return
*/
List<GoblinNftExSku> selectGoblinNftExSkuByActivityIds(@Param("activityIds")String activityIds);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.goblin.mapper.GoblinNftExActivityMapper">
<resultMap id="BaseResult" type="com.liquidnet.service.goblin.dto.vo.GoblinNftExActivityVo">
<result column="activity_id" property="activityId"/>
<result column="title" property="title"/>
<result column="created_at" property="createdAt"/>
<result column="updated_at" property="updatedAt"/>
</resultMap>
<select id="selectPageList" resultMap="BaseResult">
select activity_id,title,created_at from goblin_nft_ex_activity
<where>
<if test="title != null and title != ''">
<bind name="likeTitle" value="'%'+title+'%'"/>
and title like #{likeTitle}
</if>
<if test="startTime != null">
and created_at &gt; #{startTime}
</if>
<if test="endTime != null">
and created_at &lt; #{endTime}
</if>
</where>
</select>
<insert id="addGoblinNftExActivity" parameterType="com.liquidnet.service.goblin.dto.vo.GoblinNftExActivityVo">
insert into goblin_nft_ex_activity
(
<if test="activityId != null and activityId != null">
activity_id,
</if>
<if test="title != null and title != ''">
title,
</if>
<if test="createdAt != null">
created_at,
</if>
<if test="updatedAt != null">
updated_at
</if>
) values(
<if test="activityId != null and activityId != null">
#{activityId},
</if>
<if test="title != null and title != ''">
#{title},
</if>
<if test="createdAt != null">
#{createdAt},
</if>
<if test="updatedAt != null">
#{updatedAt}
</if>)
</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.goblin.mapper.GoblinNftExCodeMapper">
<resultMap id="BeseResult" type="com.liquidnet.service.goblin.dto.vo.GoblinNftExCodeVo">
<result column="code_id" property="codeId"/>
<result column="activity_id" property="activityId"/>
<result column="code" property="code"/>
<result column="sku_id" property="skuId"/>
<result column="state" property="state"/>
<result column="redeem_uid" property="redeemUid"/>
<result column="redeem_at" property="redeemAt"/>
<result column="admin_uid" property="adminUid"/>
<result column="created_at" property="createdAt"/>
<result column="updated_at" property="updatedAt"/>
</resultMap>
<insert id="addGoblinNftExCodes">
insert into goblin_nft_ex_code (code_id,activity_id,code,sku_id,state,created_at)
values
<foreach collection="goblinNftExCodeVos" item="goblinNftExCodeVo" separator=",">
(
#{codeId},
#{activityId},
#{code},
#{skuId},
#{state},
#{createdAt}
)
</foreach>
</insert>
<select id="selectGoblinNftCode" parameterType="com.liquidnet.service.goblin.dto.vo.GoblinNftExCodeVo"
resultMap="BeseResult">
select code_id,code,sku_id from goblin_nft_ex_code
<where>
<if test="code != null and code != ''">
and code = #{code}
</if>
<if test="activityId != null and activityId != null">
and activity_id = #{activityId}
</if>
<if test="state != null">
and state = #{state}
</if>
<if test="redeemUid != null and redeemUid != ''">
and redeem_uid = #{redeemUid}
</if>
<if test="skuId != null and skuId != ''">
and sku_id in
<foreach collection="skuId.split(',')" item="sId" open="(" separator="," close=")">
#{sId}
</foreach>
</if>
<if test="isDrivi != null">
<choose>
<when test="isDrivi == 1">
and admin_uid is null
</when>
<when test="isDrivi == 2">
and admin_uid is not null
</when>
</choose>
</if>
</where>
</select>
<select id="selectByActivityIds" resultMap="BeseResult">
select code_id,activity_id,state from goblin_nft_ex_code where
activity_id in
<foreach collection="activityIds" item="activityId" open="(" close=")" separator=",">
#{activityId}
</foreach>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.goblin.mapper.GoblinNftExSkuMapper">
<resultMap id="BaseResult" type="">
<result column="activity_id" property="activityId"/>
<result column="sku_id" property="skuId"/>
<result column="ex_start_time" property="exStartTime"/>
<result column="ex_stop_time" property="exStopTime"/>
</resultMap>
<select id="">
</select>
</mapper>
use dev_ln_scene;
-- >>------------------------------------------------------------------------------------
DROP TABLE IF EXISTS goblin_nft_ex_code;
CREATE TABLE goblin_nft_ex_code
(
mid BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
code_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '兑换码id',
activity_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '活动id',
sku_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '款式id',
code VARCHAR(64) NOT NULL DEFAULT '' COMMENT '兑换码',
state TINYINT UNSIGNED DEFAULT 1 comment '兑换码状态 1未兑换 2已兑换 3已失效',
redeem_uid VARCHAR(64) NOT NULL DEFAULT '' COMMENT '兑换用户id',
redeem_at DATETIME NULL DEFAULT NULL COMMENT '兑换时间',
admin_uid VARCHAR(64) NOT NULL DEFAULT '' COMMENT '操作用户id',
created_at DATETIME NULL DEFAULT NULL COMMENT '创建时间',
updated_at DATETIME NULL DEFAULT NULL COMMENT '更新时间',
KEY `idx_nft_code_id` (`code_id`),
KEY `idx_nft_activity_id` (`activity_id`),
KEY `idx_nft_sku_id` (`sku_id`),
KEY `idx_nft_code` (`code`),
KEY `idx_nft_redeem_uid` (`redeem_uid`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT 'NFT兑换码表';
-- >>------------------------------------------------------------------------------------
DROP TABLE IF EXISTS goblin_nft_ex_activity;
CREATE TABLE goblin_nft_ex_activity
(
mid BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
activity_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '活动id',
title VARCHAR(64) NOT NULL DEFAULT '' COMMENT '活动标题',
created_at DATETIME NULL DEFAULT NULL COMMENT '创建时间',
updated_at DATETIME NULL DEFAULT NULL COMMENT '更新时间',
KEY `idx_nft_activity_id` (`activity_id`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT 'NFT兑换活动表';
/*DROP TABLE IF EXISTS goblin_nft_ex_spu;
CREATE TABLE goblin_nft_ex_spu
(
mid BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
activity_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '活动id',
spu_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '商品id',
created_at DATETIME NULL DEFAULT NULL COMMENT '创建时间',
updated_at DATETIME NULL DEFAULT NULL COMMENT '更新时间',
KEY `nft_activity_id_index` (`activity_id`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT 'NFT兑换活动关联SPU表';*/
DROP TABLE IF EXISTS goblin_nft_ex_sku;
CREATE TABLE goblin_nft_ex_sku
(
mid BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
activity_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '活动id',
spu_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '商品id',
sku_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '款式id',
unbox CHAR NOT NULL DEFAULT '0' comment '是否盲盒[0-否|1-是]',
ex_stock INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '兑换库存',
ex_limit INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '兑换限购',
ex_start_time DATETIME NULL DEFAULT NULL COMMENT '兑换生效开始时间',
ex_stop_time DATETIME NULL DEFAULT NULL COMMENT '兑换生效结束时间',
created_at DATETIME NULL DEFAULT NULL COMMENT '创建时间',
updated_at DATETIME NULL DEFAULT NULL COMMENT '更新时间',
KEY `idx_nft_ex_activity_id` (`activity_id`),
KEY `idx_nft_ex_spu_id` (`spu_id`),
KEY `idx_nft_ex_sku_id` (`sku_id`)
) ENGINE = InnoDB
DEFAULT CHARSET utf8mb4
COLLATE utf8mb4_unicode_ci
ROW_FORMAT = DYNAMIC COMMENT 'NFT兑换活动关联SKU表';
\ No newline at end of file
...@@ -56,22 +56,6 @@ public class GoblinNftGoodsAppController { ...@@ -56,22 +56,6 @@ public class GoblinNftGoodsAppController {
return ResponseDto.success(vo); return ResponseDto.success(vo);
} }
@PostMapping("exchange")
// @ApiOperation("兑换")
@ApiImplicitParams({
@ApiImplicitParam(type = "from", required = true, dataType = "String", name = "code", value = "兑换码", example = "1"),
})
public ResponseDto exchange(
@RequestParam("code") String code
) {
Boolean res = goblinNftGoodsAppService.exchange(code);
if (res) {
return ResponseDto.success();
} else {
return ResponseDto.failure();
}
}
@PostMapping("payType") @PostMapping("payType")
@ApiOperation("设置payType") @ApiOperation("设置payType")
@ApiImplicitParams({ @ApiImplicitParams({
......
...@@ -134,17 +134,4 @@ public class GoblinNftGoodsAppServiceImpl implements IGoblinNftGoodsAppService { ...@@ -134,17 +134,4 @@ public class GoblinNftGoodsAppServiceImpl implements IGoblinNftGoodsAppService {
} }
} }
@Override
public Boolean exchange(String code) {
try {
// 验证
// 使用
// 下单
return true;
} catch (Exception e) {
log.error("cityVote5Error", e);
return false;
}
}
} }
...@@ -70,4 +70,15 @@ public class GoblinNftOrderController { ...@@ -70,4 +70,15 @@ public class GoblinNftOrderController {
return iGoblinNftOrderService.refundSyncOrder(refundCallbackParam); return iGoblinNftOrderService.refundSyncOrder(refundCallbackParam);
} }
@PostMapping("exchange")
@ApiOperation("兑换")
@ApiImplicitParams({
@ApiImplicitParam(type = "from", required = true, dataType = "String", name = "code", value = "兑换码", example = "1"),
})
public ResponseDto<Boolean> exchange(
@RequestParam("code") @NotBlank(message = "兑换码不能为空") String code
) {
return iGoblinNftOrderService.exchange(code, null);
}
} }
package com.liquidnet.service.order.controller.inner;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.service.IGoblinNftOrderService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
@Api(tags = "NFT-支付相关")
@RestController
@Validated
@RequestMapping("/goblin/nft")
public class GoblinInnerNftController {
@Autowired
IGoblinNftOrderService iGoblinNftOrderService;
@PostMapping("airdrop")
@ApiOperation("空投")
@ApiImplicitParams({
@ApiImplicitParam(type = "from", required = true, dataType = "String", name = "code", value = "兑换码", example = "1"),
@ApiImplicitParam(type = "from", required = true, dataType = "String", name = "userId", value = "用户ID", example = "1"),
})
public ResponseDto<Boolean> exchange(
@RequestParam("code") @NotBlank(message = "兑换码不能为空") String code,
@RequestParam("userId") @NotBlank(message = "用户ID不能为空") String userId
) {
return iGoblinNftOrderService.exchange(code, userId);
}
}
...@@ -747,6 +747,27 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService { ...@@ -747,6 +747,27 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
return "success"; return "success";
} }
@Override
public ResponseDto<Boolean> exchange(String code, String uid) {
// 验证 1code是否存在 2是否在生效日期内 3是否未兑换的状态 4兑换限购
// 使用
// 下单
boolean isLock = nftOrderUtils.setNftOrderExLock(code);
if (!isLock) {
return ResponseDto.failure("处理未完成,请稍等~");
} else {
try {
return ResponseDto.success();
} catch (Exception e) {
log.error("NFT兑换异常 e:{}", e);
return ResponseDto.failure("兑换失败,请稍后重试!");
} finally {
// 执行完毕。释放锁
nftOrderUtils.delNftOrderExLock(uid);
}
}
}
/* --------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------- */
/** /**
...@@ -791,7 +812,7 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService { ...@@ -791,7 +812,7 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(skuId); GoblinGoodsSkuInfoVo goodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(skuId);
if ("0".equals(goodsSkuInfoVo.getUnbox())) {// 非盲盒,NFT发行购买 if ("0".equals(goodsSkuInfoVo.getUnbox())) {// 非盲盒,NFT发行购买
ObjectNode bizNftBuyNode = JsonUtils.OM().createObjectNode().put("nftOrderPayId", orderId).put("routerType", goodsSkuInfoVo.getRouteType()) ObjectNode bizNftBuyNode = JsonUtils.OM().createObjectNode().put("nftOrderPayId", orderId).put("routerType", goodsSkuInfoVo.getRouteType())
.put("skuId", skuId).put("userId", uid).put("buyTimestamp", DateUtil.Formatter.yyyyMMddHHmmss.format(now));; .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()); queueUtils.sendMsgByRedis(MQConst.GalaxyQueue.JSON_NFT_PUBLISH_AND_BUY.getKey(), bizNftBuyNode.toString());
} }
...@@ -802,4 +823,5 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService { ...@@ -802,4 +823,5 @@ public class GoblinNftOrderServiceImpl implements IGoblinNftOrderService {
initUserDigitalArtworkObjs.add(new Object[]{digitalArtworkVo.getArtworkId(), skuId, uid, orderId, source, digitalArtworkVo.getState(), now}); initUserDigitalArtworkObjs.add(new Object[]{digitalArtworkVo.getArtworkId(), skuId, uid, orderId, source, digitalArtworkVo.getState(), now});
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(), SqlMapping.gets(toMqSqls, initUserDigitalArtworkObjs)); queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_ARTWORK_GEN.getKey(), SqlMapping.gets(toMqSqls, initUserDigitalArtworkObjs));
} }
} }
...@@ -133,12 +133,24 @@ public class GoblinNftOrderUtils { ...@@ -133,12 +133,24 @@ public class GoblinNftOrderUtils {
return redisUtil.lock(redisKey, 1, 60); return redisUtil.lock(redisKey, 1, 60);
} }
public boolean setNftOrderExLock(String code) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_NFT_ORDER_EX_LOCK
.concat(code);
return redisUtil.lock(redisKey, 1, 60);
}
public void delNftOrderBuyLock(String userId) { public void delNftOrderBuyLock(String userId) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_NFT_ORDER_BUG_LOCK String redisKey = GoblinRedisConst.REDIS_GOBLIN_NFT_ORDER_BUG_LOCK
.concat(userId); .concat(userId);
redisUtil.uLock(redisKey); redisUtil.uLock(redisKey);
} }
public void delNftOrderExLock(String code) {
String redisKey = GoblinRedisConst.REDIS_GOBLIN_NFT_ORDER_EX_LOCK
.concat(code);
redisUtil.uLock(redisKey);
}
/** /**
* 使用平台优惠券 只支持代金券 * 使用平台优惠券 只支持代金券
* *
......
package com.liquidnet.service.platform.controller.goblin.activity;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.param.GoblinNftExActivityParam;
import com.liquidnet.service.goblin.service.IGoblinNftExActivityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
* @Author: wll
* @Date:Create:in 2022/4/19 2:55 下午
*/
@Api(tags = "nft兑换活动")
@Slf4j
@Validated
@RestController
@RequestMapping("activity")
public class GoblinNftExActivityController {
@Autowired
IGoblinNftExActivityService iGoblinNftExActivityService;
@ApiOperationSupport(order = 1)
@ApiOperation(value = "添加nft兑换活动")
@PostMapping("add")
public ResponseDto<Object> add(@Valid @RequestBody GoblinNftExActivityParam goblinNftExActivityParam){
return ResponseDto.success(iGoblinNftExActivityService.add(goblinNftExActivityParam));
}
@ApiOperationSupport(order = 2)
@ApiOperation(value = "活动列表")
@PostMapping("pageist")
public ResponseDto<Object> pageList(@Valid @RequestBody GoblinNftExActivityParam goblinNftExActivityParam){
return ResponseDto.success(iGoblinNftExActivityService.pageList(goblinNftExActivityParam));
}
}
package com.liquidnet.service.platform.controller.goblin.code;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.param.GoblinNftExCodeParam;
import com.liquidnet.service.goblin.service.IGoblinNftExCodeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: wll
* @Description:
* @Date:Create:in 2022/4/19 2:53 下午
*/
@Api(tags = "兑换码")
@Slf4j
@Validated
@RestController
@RequestMapping("code")
public class GoblinNftExCodeController {
@Autowired
IGoblinNftExCodeService iGoblinNftExCodeService;
@ApiOperationSupport(order = 1)
@ApiOperation(value = "根据nft兑换活动获取兑换码")
@PostMapping("selectCodePageList")
public ResponseDto<Object> selectCodePageList(@RequestBody GoblinNftExCodeParam goblinNftExCodeParam){
return ResponseDto.success(iGoblinNftExCodeService.selectCodePageList(goblinNftExCodeParam));
}
}
package com.liquidnet.service.platform.controller.goblin.sku;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.goblin.param.GoblinNftExSkuParam;
import com.liquidnet.service.goblin.service.IGoblinNftExSkuService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
/**
* @Author: wll
* @Date:Create:in 2022/4/19 2:56 下午
*/
@Api(tags = "nft兑换活动和sku关联")
@Slf4j
@Validated
@RestController
@RequestMapping("sk")
public class GoblinNftExSkuController {
@Autowired
IGoblinNftExSkuService iGoblinNftExSkuService;
@ApiOperationSupport(order = 1)
@ApiOperation(value = "添加nft兑换和sku的关联")
@PostMapping("add")
public ResponseDto<Object> add(@Valid @RequestBody List<GoblinNftExSkuParam> goblinNftExSkuParams){
return ResponseDto.success(iGoblinNftExSkuService.add(goblinNftExSkuParams));
}
}
package com.liquidnet.service.platform.service.impl.goblin;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.goblin.dto.vo.GoblinNftExActivityVo;
import com.liquidnet.service.goblin.entity.GoblinNftExActivity;
import com.liquidnet.service.goblin.entity.GoblinNftExCode;
import com.liquidnet.service.goblin.mapper.GoblinNftExActivityMapper;
import com.liquidnet.service.goblin.mapper.GoblinNftExCodeMapper;
import com.liquidnet.service.goblin.param.GoblinNftExActivityParam;
import com.liquidnet.service.goblin.service.IGoblinNftExActivityService;
import com.liquidnet.service.platform.utils.GoblinRedisUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/**
* @Author: wll
* @Description: nft兑换活动服务实现
* @Date:Create:in 2022/4/19 4:35 下午
*/
@Service
@Slf4j
public class GoblinNftExActivityServiceImpl implements IGoblinNftExActivityService {
@Autowired
private GoblinNftExActivityMapper goblinNftExActivityMapper;
@Autowired
private GoblinNftExCodeMapper goblinNftExCodeMapper;
@Override
public String add(GoblinNftExActivityParam goblinNftExActivityParam) {
LocalDateTime now = LocalDateTime.now();
GoblinNftExActivity goblinNftExActivity = GoblinNftExActivity.getNew();
BeanUtils.copyProperties(goblinNftExActivityParam, goblinNftExActivity);
goblinNftExActivity.setActivityId(IDGenerator.nextSnowId());
goblinNftExActivity.setCreatedAt(now);
// mysql数据
goblinNftExActivityMapper.addGoblinNftExActivity(goblinNftExActivity);
return goblinNftExActivity.getActivityId();
}
@Override
public Object pageList(GoblinNftExActivityParam goblinNftExActivityParam) {
PageHelper.startPage(goblinNftExActivityParam.getPageNum(),20,true);
/*
* 获取分页nft兑换活动数据
*/
List<GoblinNftExActivity> goblinNftExActivities = goblinNftExActivityMapper.selectPageList(goblinNftExActivityParam.getTitle(), goblinNftExActivityParam.getStartTime(),
goblinNftExActivityParam.getEndTime());
StringBuffer activityIds = new StringBuffer();
for (GoblinNftExActivity GoblinNftExActivity : goblinNftExActivities) {
activityIds.append(GoblinNftExActivity.getActivityId()).append(",");
}
if (StringUtil.isNotBlank(activityIds)){
activityIds.deleteCharAt(activityIds.length()-1);
List<GoblinNftExCode> goblinNftExCodes = goblinNftExCodeMapper.selectByActivityIds(activityIds.toString());
for (GoblinNftExActivity goblinNftExActivity :goblinNftExActivities) {
Integer countNumber = 0;
Integer useNumber = 0;
Integer unUseNumber = 0;
for (GoblinNftExCode goblinNftExCode : goblinNftExCodes) {
if (goblinNftExActivity.getActivityId().equals(goblinNftExCode.getActivityId())){
countNumber++;
switch (goblinNftExCode.getState()){
case 1:
useNumber++;
break;
default:
unUseNumber++;
}
}
}
goblinNftExActivity.setCountNumber(countNumber);
goblinNftExActivity.setUseNumber(useNumber);
goblinNftExActivity.setUnUseNumber(unUseNumber);
}
}
PageInfo<GoblinNftExActivity> pageInfo = new PageInfo<GoblinNftExActivity>(goblinNftExActivities);
return pageInfo;
}
}
package com.liquidnet.service.platform.service.impl.goblin;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.goblin.entity.GoblinGoodsSku;
import com.liquidnet.service.goblin.entity.GoblinNftExCode;
import com.liquidnet.service.goblin.mapper.GoblinGoodsSkuMapper;
import com.liquidnet.service.goblin.mapper.GoblinNftExCodeMapper;
import com.liquidnet.service.goblin.mapper.GoblinNftExSkuMapper;
import com.liquidnet.service.goblin.param.GoblinNftExCodeParam;
import com.liquidnet.service.goblin.service.IGoblinNftExCodeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author: wll
* @Description:
* @Date:Create:in 2022/4/20 5:36 下午
*/
@Service
@Slf4j
public class GoblinNftExCodeServiceImpl implements IGoblinNftExCodeService {
@Autowired
private GoblinGoodsSkuMapper goblinGoodsSkuMapper;
@Autowired
private GoblinNftExCodeMapper goblinNftExCodeMapper;
@Autowired
private GoblinNftExSkuMapper goblinNftExSkuMapper;
@Override
public Object selectCodePageList(GoblinNftExCodeParam goblinNftExCodeParam) {
// 入参
GoblinNftExCode goblinNftExCode = GoblinNftExCode.getNew();
goblinNftExCode.setCode(goblinNftExCodeParam.getCode());
goblinNftExCode.setActivityId(goblinNftExCodeParam.getActivityId());
goblinNftExCode.setState(goblinNftExCodeParam.getState());
goblinNftExCode.setRedeemUid(goblinNftExCodeParam.getUserId());
goblinNftExCode.setIsDrivi(goblinNftExCodeParam.getIsDrivi());
if (StringUtil.isNotBlank(goblinNftExCodeParam.getSkuName())){
// 根据藏品名称获取 skuIds
String skuName = goblinNftExCodeParam.getSkuName();
List<GoblinGoodsSku> goblinGoodsSkus = goblinGoodsSkuMapper.selectSkuLikeName(skuName);
if (goblinGoodsSkus.size() <= 0){
return new PageHelper();
}
StringBuffer skuIds = new StringBuffer();
for (GoblinGoodsSku goblinGoodsSku:goblinGoodsSkus) {
skuIds.append(goblinGoodsSku.getSkuId()).append(",");
}
goblinNftExCode.setSkuId(skuIds.deleteCharAt(skuIds.length()-1).toString());
}
PageHelper.startPage(goblinNftExCodeParam.getPageNum(),20,true);
List<GoblinNftExCode> goblinNftExCodes = goblinNftExCodeMapper.selectGoblinNftCode(goblinNftExCode);
StringBuffer skuIds = new StringBuffer();
StringBuffer acticityIds = new StringBuffer();
for (GoblinNftExCode gnc: goblinNftExCodes) {
skuIds.append(gnc.getSkuId()).append(",");
acticityIds.append(gnc.getActivityId()).append(",");
}
// 批量查询
List<GoblinGoodsSku> goblinNftExCodeList = goblinGoodsSkuMapper.selectByIds(skuIds.toString());
for (GoblinNftExCode gnc: goblinNftExCodes) {
for (GoblinGoodsSku goblinGoodsSku: goblinNftExCodeList) {
if (gnc.getSkuId().equals(goblinGoodsSku.getSkuId())){
gnc.setSktName(goblinGoodsSku.getName());
break;
}
}
}
// 根据活动ids 获取兑换活动和sku的关联
PageInfo<GoblinNftExCode> pageInfo = new PageInfo<>(goblinNftExCodes);
return null;
}
}
package com.liquidnet.service.platform.service.impl.goblin;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.StringUtil;
import com.liquidnet.service.goblin.dto.vo.GoblinNftExActivityVo;
import com.liquidnet.service.goblin.dto.vo.GoblinNftExCodeVo;
import com.liquidnet.service.goblin.dto.vo.GoblinNftExSkuVo;
import com.liquidnet.service.goblin.entity.GoblinNftExCode;
import com.liquidnet.service.goblin.entity.GoblinNftExSku;
import com.liquidnet.service.goblin.mapper.GoblinNftExCodeMapper;
import com.liquidnet.service.goblin.mapper.GoblinNftExSkuMapper;
import com.liquidnet.service.goblin.param.GoblinNftExSkuParam;
import com.liquidnet.service.goblin.service.IGoblinNftExSkuService;
import com.liquidnet.service.platform.utils.GoblinRedisUtils;
import com.liquidnet.service.platform.utils.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
* @Author: wll
* @Description: nft兑换活动和和sku的关联
* @Date:Create:in 2022/4/19 5:14 下午
*/
@Service
@Slf4j
public class GoblinNftExSkuServiceImpl implements IGoblinNftExSkuService {
@Autowired
private GoblinNftExCodeMapper goblinNftExCodeMapper;
@Autowired
private GoblinNftExSkuMapper goblinNftExSkuMapper;
@Autowired
private GoblinRedisUtils goblinRedisUtils;
@Transactional
@Override
public Boolean add(List<GoblinNftExSkuParam> goblinNftExSkuParams) {
LocalDateTime now = LocalDateTime.now();
ArrayList<GoblinNftExSkuVo> goblinNftExSkuArrayList = ObjectUtil.getGoblinNftExSkuArrayList();
ArrayList<GoblinNftExCodeVo> goblinNftExCodeArrayList = ObjectUtil.getGoblinNftExCodeArrayList();
String activityId = "";
// 构建对象
for (GoblinNftExSkuParam goblinNftExSkuParam : goblinNftExSkuParams) {
if (StringUtil.isBlank(activityId)) {
activityId = goblinNftExSkuParam.getActivityId();
}
GoblinNftExSku goblinNftExSku = new GoblinNftExSku();
BeanUtils.copyProperties(goblinNftExSkuParam, goblinNftExSku);
goblinNftExSku.setCreatedAt(now);
// 构建兑换码数量
for (int i = 0; i < goblinNftExSkuParam.getExStock(); i++) {
GoblinNftExCode goblinNftExCode = GoblinNftExCode.getNew();
goblinNftExCode.setCodeId(IDGenerator.nextSnowId());
goblinNftExCode.setActivityId(goblinNftExSkuParam.getActivityId());
goblinNftExCode.setCode("");
goblinNftExCode.setSkuId(goblinNftExSkuParam.getSkuId());
goblinNftExCode.setState(1);
goblinNftExCode.setCreatedAt(now);
goblinNftExCodeArrayList.add(GoblinNftExCodeVo.getNew().copy(goblinNftExCode));
}
goblinNftExSkuArrayList.add(GoblinNftExSkuVo.getNew().copy(goblinNftExSku));
}
// redis 数据
// 并联sku信息
/* List<GoblinNftExSku> goblinNftExSkusVos = goblinRedisUtils.getSku(activityId);
goblinRedisUtils.incrSku(activityId, goblinNftExSkusVos, goblinNftExSkuArrayList);
// 兑换码信息
List<GoblinNftExCode> goblinNftExCodes = goblinRedisUtils.getCode(activityId);
goblinRedisUtils.incrCode(activityId, goblinNftExCodes, goblinNftExCodeArrayList);*/
// goblinNftExSkuMapper.addGoblinNftExSkus(goblinNftExSkuArrayList);
// goblinNftExCodeMapper.addGoblinNftExCodes(goblinNftExCodeArrayList);
return null;
}
}
...@@ -6,7 +6,13 @@ import com.liquidnet.service.candy.entity.CandyCommonCoupon; ...@@ -6,7 +6,13 @@ import com.liquidnet.service.candy.entity.CandyCommonCoupon;
import com.liquidnet.service.candy.entity.CandyCouponCode; import com.liquidnet.service.candy.entity.CandyCouponCode;
import com.liquidnet.service.candy.entity.CandyUserCoupon; import com.liquidnet.service.candy.entity.CandyUserCoupon;
import com.liquidnet.service.goblin.dto.GoblinStoreMarketDto; import com.liquidnet.service.goblin.dto.GoblinStoreMarketDto;
import com.liquidnet.service.goblin.dto.vo.GoblinNftExActivityVo;
import com.liquidnet.service.goblin.dto.vo.GoblinNftExCodeVo;
import com.liquidnet.service.goblin.dto.vo.GoblinNftExSkuVo;
import com.liquidnet.service.goblin.dto.vo.SellDataOneVO; import com.liquidnet.service.goblin.dto.vo.SellDataOneVO;
import com.liquidnet.service.goblin.entity.GoblinNftExActivity;
import com.liquidnet.service.goblin.entity.GoblinNftExCode;
import com.liquidnet.service.goblin.entity.GoblinNftExSku;
import com.liquidnet.service.kylin.dto.vo.KylinApiCameraDevicesVo; import com.liquidnet.service.kylin.dto.vo.KylinApiCameraDevicesVo;
import com.liquidnet.service.kylin.entity.KylinOrderCoupons; import com.liquidnet.service.kylin.entity.KylinOrderCoupons;
import com.mongodb.BasicDBObject; import com.mongodb.BasicDBObject;
...@@ -62,6 +68,9 @@ public class ObjectUtil { ...@@ -62,6 +68,9 @@ public class ObjectUtil {
private static final ArrayList<KylinOrderCoupons> kylinOrderCouponsArrayList = new ArrayList<>(); private static final ArrayList<KylinOrderCoupons> kylinOrderCouponsArrayList = new ArrayList<>();
private static final ArrayList<KylinApiCameraDevicesVo> kylinApiCameraDevicesVoArrayList = new ArrayList<>(); private static final ArrayList<KylinApiCameraDevicesVo> kylinApiCameraDevicesVoArrayList = new ArrayList<>();
private static final ArrayList<SellDataOneVO> sellDataOneVOArrayList = new ArrayList<>(); private static final ArrayList<SellDataOneVO> sellDataOneVOArrayList = new ArrayList<>();
private static final ArrayList<GoblinNftExActivityVo> GOBLIN_NFT_EX_ACTIVITY_VO_ARRAY_LIST = new ArrayList<>();
private static final ArrayList<GoblinNftExCodeVo> GOBLIN_NFT_EX_CODE_VO_ARRAY_LIST = new ArrayList<>();
private static final ArrayList<GoblinNftExSkuVo> GOBLIN_NFT_EX_SKU_VO_ARRAY_LIST = new ArrayList<>();
private static final ArrayList<GoblinStoreMarketDto> goblinStoreMarketDtoArrayList = new ArrayList<>(); private static final ArrayList<GoblinStoreMarketDto> goblinStoreMarketDtoArrayList = new ArrayList<>();
...@@ -139,4 +148,19 @@ public class ObjectUtil { ...@@ -139,4 +148,19 @@ public class ObjectUtil {
public static ArrayList<KylinApiCameraDevicesVo> getKylinApiCameraDevicesVoArrayList() { public static ArrayList<KylinApiCameraDevicesVo> getKylinApiCameraDevicesVoArrayList() {
return (ArrayList<KylinApiCameraDevicesVo>) kylinApiCameraDevicesVoArrayList.clone(); return (ArrayList<KylinApiCameraDevicesVo>) kylinApiCameraDevicesVoArrayList.clone();
} }
public static ArrayList<GoblinNftExActivityVo> getGoblinNftExActivityArrayList(){
return (ArrayList<GoblinNftExActivityVo>) GOBLIN_NFT_EX_ACTIVITY_VO_ARRAY_LIST.clone();
}
public static ArrayList<GoblinNftExCodeVo> getGoblinNftExCodeArrayList(){
return (ArrayList<GoblinNftExCodeVo>) GOBLIN_NFT_EX_CODE_VO_ARRAY_LIST.clone();
}
public static ArrayList<GoblinNftExSkuVo> getGoblinNftExSkuArrayList(){
return (ArrayList<GoblinNftExSkuVo>) GOBLIN_NFT_EX_SKU_VO_ARRAY_LIST.clone();
}
} }
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