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

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

+API:商品管理:数字藏品SPU、SKU添加、编辑;

parent 49488a13
...@@ -11,6 +11,7 @@ import javax.validation.constraints.NotBlank; ...@@ -11,6 +11,7 @@ import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
@ApiModel(value = "GoblinStoreMgtDigitalGoodsAddParam", description = "商品管理:商品编辑:数字商品基本信息添加/编辑入参") @ApiModel(value = "GoblinStoreMgtDigitalGoodsAddParam", description = "商品管理:商品编辑:数字商品基本信息添加/编辑入参")
...@@ -77,6 +78,8 @@ public class GoblinStoreMgtDigitalGoodsAddParam implements Serializable { ...@@ -77,6 +78,8 @@ public class GoblinStoreMgtDigitalGoodsAddParam implements Serializable {
vo.setCateFid(this.getCateFid()); vo.setCateFid(this.getCateFid());
vo.setCateSid(this.getCateSid()); vo.setCateSid(this.getCateSid());
vo.setCateTid(this.getCateTid()); vo.setCateTid(this.getCateTid());
vo.setPriceGe(BigDecimal.ZERO);
vo.setPriceLe(BigDecimal.ZERO);
vo.setIntro(this.getIntro()); vo.setIntro(this.getIntro());
vo.setAttention(this.getAttention()); vo.setAttention(this.getAttention());
vo.setAuthor(this.getAuthor()); vo.setAuthor(this.getAuthor());
......
package com.liquidnet.service.goblin.dto.manage; package com.liquidnet.service.goblin.dto.manage;
import com.liquidnet.commons.lang.constant.LnsRegex; import com.liquidnet.commons.lang.constant.LnsRegex;
import com.liquidnet.commons.lang.util.DateUtil;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo; import com.liquidnet.service.goblin.dto.vo.GoblinGoodsSkuInfoVo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import javax.validation.constraints.*; import javax.validation.constraints.*;
import java.io.Serializable; import java.io.Serializable;
...@@ -28,9 +31,8 @@ public class GoblinStoreMgtDigitalGoodsAddSkuParam implements Serializable { ...@@ -28,9 +31,8 @@ public class GoblinStoreMgtDigitalGoodsAddSkuParam implements Serializable {
@NotNull(message = "藏品名称不能为空") @NotNull(message = "藏品名称不能为空")
@Size(max = 36, message = "藏品名称内容过长") @Size(max = 36, message = "藏品名称内容过长")
private String name; private String name;
@ApiModelProperty(position = 14, required = false, value = "藏品副标题[36],`unbox=0`时必传") @ApiModelProperty(position = 14, required = false, value = "款式名称[36],`unbox=0`时必传")
@NotNull(message = "藏品副标题不能为空") @Size(max = 36, message = "款式名称内容过长")
@Size(max = 36, message = "藏品副标题内容过长")
private String subtitle; private String subtitle;
@ApiModelProperty(position = 15, required = true, value = "藏品封面图片URL[256]") @ApiModelProperty(position = 15, required = true, value = "藏品封面图片URL[256]")
@NotNull(message = "藏品封面图片不能为空") @NotNull(message = "藏品封面图片不能为空")
...@@ -45,11 +47,9 @@ public class GoblinStoreMgtDigitalGoodsAddSkuParam implements Serializable { ...@@ -45,11 +47,9 @@ public class GoblinStoreMgtDigitalGoodsAddSkuParam implements Serializable {
@Pattern(regexp = "\\b(1|2|3)\\b", message = "展示文件类型参数无效") @Pattern(regexp = "\\b(1|2|3)\\b", message = "展示文件类型参数无效")
private String watchType; private String watchType;
@ApiModelProperty(position = 18, required = false, value = "我的藏品展示文件类型[1-图片|2-视频|3-模型],`unbox=0`时必传") @ApiModelProperty(position = 18, required = false, value = "我的藏品展示文件类型[1-图片|2-视频|3-模型],`unbox=0`时必传")
@NotNull(message = "我的藏品展示文件类型不能为空")
@Pattern(regexp = "\\b(1|2|3)\\b", message = "我的藏品展示文件类型参数无效") @Pattern(regexp = "\\b(1|2|3)\\b", message = "我的藏品展示文件类型参数无效")
private String materialType; private String materialType;
@ApiModelProperty(position = 19, required = false, value = "我的藏品展示文件URL[256],`unbox=0`时必传") @ApiModelProperty(position = 19, required = false, value = "我的藏品展示文件URL[256],`unbox=0`时必传")
@NotNull(message = "我的藏品展示文件不能为空")
@Size(max = 256, message = "我的藏品展示文件URL过长") @Size(max = 256, message = "我的藏品展示文件URL过长")
private String materialUrl; private String materialUrl;
...@@ -61,29 +61,29 @@ public class GoblinStoreMgtDigitalGoodsAddSkuParam implements Serializable { ...@@ -61,29 +61,29 @@ public class GoblinStoreMgtDigitalGoodsAddSkuParam implements Serializable {
@NotNull(message = "兑换库存不能为空") @NotNull(message = "兑换库存不能为空")
@Min(value = 0, message = "兑换库存必须大于0") @Min(value = 0, message = "兑换库存必须大于0")
private Integer giftStock; private Integer giftStock;
@ApiModelProperty(position = 22, required = true, value = "藏品价格[20,2]") @ApiModelProperty(position = 22, required = false, value = "概率[0.01~100%],`unbox=1`时有效")
@DecimalMin(value = "0.01", message = "概率超出可填范围0.01~100")
private BigDecimal hitRatio;
@ApiModelProperty(position = 23, required = true, value = "藏品价格[20,2]")
@NotNull(message = "藏品价格不能为空") @NotNull(message = "藏品价格不能为空")
@DecimalMin(value = "0.01", message = "藏品价格必须大于0") @DecimalMin(value = "0.01", message = "藏品价格必须大于0")
private BigDecimal price; private BigDecimal price;
@ApiModelProperty(position = 23, required = false, value = "藏品会员价格[20,2]") @ApiModelProperty(position = 24, required = false, value = "藏品会员价格[20,2]")
@DecimalMin(value = "0.01", message = "藏品会员价格必须大于0") @DecimalMin(value = "0.01", message = "藏品会员价格必须大于0")
private BigDecimal priceMember; private BigDecimal priceMember;
@ApiModelProperty(position = 24, required = false, value = "概率[0.01~100%],`unbox=1`时有效")
@DecimalMin(value = "0.01", message = "概率超出可填范围0.01~100")
private BigDecimal hitRatio;
@ApiModelProperty(position = 25, required = true, value = "购买限制[0-全部用户|1-仅会员|2-指定用户]") @ApiModelProperty(position = 25, required = false, value = "限购[0-无限制|X:限购数量],`unbox=0`时必传")
@NotBlank(message = "购买限制不能为空") @Min(value = 1, message = "限购数量必须大于0")
@Pattern(regexp = "\\b(0|1|2)\\b", message = "购买限制参数无效") private Integer buyLimit;
@ApiModelProperty(position = 26, required = false, value = "购买限制[0-全部用户|1-仅会员|2-指定用户],`unbox=0`时必传")
@Pattern(regexp = "\\b(0|1|2)\\b", message = "购买条件参数无效")
private String buyFactor; private String buyFactor;
@ApiModelProperty(position = 26, required = false, value = "购买限制人员名单,购买限制为2-指定用户时必填") @ApiModelProperty(position = 27, required = false, value = "购买限制人员名单URL,购买限制为2-指定用户时必填")
@Size(max = 256, message = "购买限制人员名单URL过长") @Size(max = 256, message = "购买限制人员名单URL过长")
private String buyRoster; private String buyRoster;
@ApiModelProperty(position = 27, required = false, value = "购买限制人员名单操作类型[1-添加|2-删除],购买限制为2-指定用户时有效") @ApiModelProperty(position = 28, required = false, value = "购买限制人员名单操作类型[1-添加|2-删除],购买限制为2-指定用户时有效")
@Pattern(regexp = "\\b(1|2)\\b", message = "购买限制人员名单操作类型参数无效") @Pattern(regexp = "\\b(1|2)\\b", message = "购买限制人员名单操作类型参数无效")
private String buyRosterType; private String buyRosterType;
@ApiModelProperty(position = 28, required = false, value = "限购[0-无限制|X:限购数量]")
private Integer buyLimit;
@ApiModelProperty(position = 29, required = false, value = "简介[256]") @ApiModelProperty(position = 29, required = false, value = "简介[256]")
@Size(max = 256, message = "藏品简介内容过长") @Size(max = 256, message = "藏品简介内容过长")
...@@ -100,6 +100,7 @@ public class GoblinStoreMgtDigitalGoodsAddSkuParam implements Serializable { ...@@ -100,6 +100,7 @@ public class GoblinStoreMgtDigitalGoodsAddSkuParam implements Serializable {
@Pattern(regexp = LnsRegex.Valid.DATETIME_FULL, message = "预约上架时间格式有误") @Pattern(regexp = LnsRegex.Valid.DATETIME_FULL, message = "预约上架时间格式有误")
private String shelvesTime; private String shelvesTime;
@ApiModelProperty(position = 33, required = true, value = "开售时间[yyyy-MM-dd HH:mm:ss]") @ApiModelProperty(position = 33, required = true, value = "开售时间[yyyy-MM-dd HH:mm:ss]")
@NotNull(message = "开售时间不能为空")
@Pattern(regexp = LnsRegex.Valid.DATETIME_FULL, message = "开售时间格式有误") @Pattern(regexp = LnsRegex.Valid.DATETIME_FULL, message = "开售时间格式有误")
private String saleStartTime; private String saleStartTime;
...@@ -121,30 +122,75 @@ public class GoblinStoreMgtDigitalGoodsAddSkuParam implements Serializable { ...@@ -121,30 +122,75 @@ public class GoblinStoreMgtDigitalGoodsAddSkuParam implements Serializable {
private List<String> extagList; private List<String> extagList;
public GoblinGoodsSkuInfoVo initEditGoodsSkuInfoVo(GoblinGoodsSkuInfoVo mgtGoodsSkuInfoVo) { public GoblinGoodsSkuInfoVo initAddGoodsSkuInfoVo(boolean notUnboxFlg) {
GoblinGoodsSkuInfoVo goodsSkuInfoVo = GoblinGoodsSkuInfoVo.getNew(); GoblinGoodsSkuInfoVo initVo = GoblinGoodsSkuInfoVo.getNew();
goodsSkuInfoVo.setSkuId(this.getSkuId()); initVo.setSkuId(this.getSpuId().concat(StringUtils.right(String.valueOf(System.nanoTime()), 5)));
goodsSkuInfoVo.setSkuPic(this.getSkuPic()); initVo.setSpuId(this.getSpuId());
goodsSkuInfoVo.setPrice(this.getPrice()); initVo.setSkuNo(this.getSpuId());
goodsSkuInfoVo.setPriceMember(this.getPriceMember()); initVo.setSkuType(1);
goodsSkuInfoVo.setStock(this.getStock()); initVo.setName(this.getName());
goodsSkuInfoVo.setBuyFactor(this.getBuyFactor()); initVo.setSkuPic(this.getSkuPic());
goodsSkuInfoVo.setBuyRoster(this.getBuyRoster()); initVo.setSkuWatch(this.getSkuWatch());
goodsSkuInfoVo.setBuyLimit(this.getBuyLimit()); initVo.setWatchType(this.getWatchType());
return goodsSkuInfoVo; initVo.setPrice(this.getPrice());
initVo.setPriceMember(this.getPrice());
initVo.setIntro(this.getIntro());
initVo.setDetails(this.getDetails());
initVo.setStoreId(this.getStoreId());
initVo.setShelvesHandle(this.getShelvesHandle());
initVo.setShelvesTime(this.getShelvesTime());
initVo.setSaleStartTime(DateUtil.Formatter.yyyyMMddHHmmss.parse(this.getSaleStartTime()));
initVo.setVirtualFlg("1");
initVo.setStatus("3");
initVo.setShelvesStatus("0");
initVo.setSkuAppear("0");
initVo.setDelFlg("0");
initVo.setUnbox(notUnboxFlg ? "0" : "1");
if (notUnboxFlg) {
initVo.setSubtitle(this.getSubtitle());//0
initVo.setMaterialType(this.getMaterialType());//0
initVo.setMaterialUrl(this.getMaterialUrl());//0
initVo.setStock(this.getStock());//0
initVo.setSkuStock(this.getStock());//0
initVo.setGiftStock(this.getGiftStock());//0
initVo.setHitRatio(this.getHitRatio());//0
initVo.setBuyFactor(this.getBuyFactor());//0
initVo.setBuyRoster(this.getBuyRoster());//0
initVo.setBuyLimit(this.getBuyLimit());//0
} else {
initVo.setOpeningTime(DateUtil.Formatter.yyyyMMddHHmmss.parse(this.getOpeningTime()));//1
}
return initVo;
} }
public GoblinGoodsSkuInfoVo initEditAddGoodsSkuInfoVo() { public GoblinGoodsSkuInfoVo initEditGoodsSkuInfoVo() {
GoblinGoodsSkuInfoVo vo = GoblinGoodsSkuInfoVo.getNew(); GoblinGoodsSkuInfoVo updateVo = GoblinGoodsSkuInfoVo.getNew();
vo.setSkuPic(this.getSkuPic()); updateVo.setSkuId(this.getSpuId().concat(StringUtils.right(String.valueOf(System.nanoTime()), 5)));
vo.setStock(this.getStock());
vo.setSkuStock(vo.getStock()); updateVo.setDetails(this.getDetails());
vo.setPrice(this.getPrice()); updateVo.setShelvesHandle(this.getShelvesHandle());
vo.setPriceMember(this.getPriceMember()); updateVo.setShelvesTime(this.getShelvesTime());
vo.setBuyFactor(this.getBuyFactor()); updateVo.setSaleStartTime(DateUtil.Formatter.yyyyMMddHHmmss.parse(this.getSaleStartTime()));
vo.setBuyRoster(this.getBuyRoster());
vo.setBuyLimit(this.getBuyLimit()); switch (this.getUnbox()) {
vo.setStoreId(this.getStoreId()); case "0":
return vo; updateVo.setHitRatio(this.getHitRatio());//0
updateVo.setBuyLimit(this.getBuyLimit());//0
updateVo.setBuyFactor(this.getBuyFactor());//0
updateVo.setBuyRoster(this.getBuyRoster());//0
break;
case "1":
updateVo.setName(this.getName());//1
updateVo.setSkuPic(this.getSkuPic());//1
updateVo.setSkuWatch(this.getSkuWatch());//1
updateVo.setWatchType(this.getWatchType());//1
updateVo.setPrice(this.getPrice());//1
updateVo.setPriceMember(this.getPrice());//
updateVo.setIntro(this.getIntro());//1
updateVo.setOpeningTime(DateUtil.Formatter.yyyyMMddHHmmss.parse(this.getOpeningTime()));//1
break;
}
return updateVo;
} }
} }
...@@ -110,6 +110,7 @@ public class GoblinStoreMgtGoodsAddParam implements Serializable { ...@@ -110,6 +110,7 @@ public class GoblinStoreMgtGoodsAddParam implements Serializable {
**/ **/
@ApiModelProperty(position = 28, required = true, value = "上架处理方式[1-等待手动上架|2-直接上架售卖|3-预约定时上架]", example = "1") @ApiModelProperty(position = 28, required = true, value = "上架处理方式[1-等待手动上架|2-直接上架售卖|3-预约定时上架]", example = "1")
@NotNull(message = "上架处理方式不能为空")
@Pattern(regexp = "\\b(1|2|3)\\b", message = "规格展现方式参数无效") @Pattern(regexp = "\\b(1|2|3)\\b", message = "规格展现方式参数无效")
private String shelvesHandle; private String shelvesHandle;
@ApiModelProperty(position = 29, required = false, value = "预约上架时间[yyyy-MM-dd HH:mm:ss][上架处理方式为3-预约定时上架时需要指定]") @ApiModelProperty(position = 29, required = false, value = "预约上架时间[yyyy-MM-dd HH:mm:ss][上架处理方式为3-预约定时上架时需要指定]")
......
...@@ -72,10 +72,10 @@ public class GoblinGoodsInfoVo implements Serializable, Cloneable { ...@@ -72,10 +72,10 @@ public class GoblinGoodsInfoVo implements Serializable, Cloneable {
private String shelvesTime; private String shelvesTime;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
@ApiModelProperty(position = 31, value = "开售时间") @ApiModelProperty(position = 31, value = "开售时间")
private LocalDateTime saleStartAt; private LocalDateTime saleStartTime;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
@ApiModelProperty(position = 31, value = "停售时间") @ApiModelProperty(position = 31, value = "停售时间")
private LocalDateTime saleStopAt; private LocalDateTime saleStopTime;
@ApiModelProperty(position = 32, value = "商品有效期[YYYY-MM-DD]") @ApiModelProperty(position = 32, value = "商品有效期[YYYY-MM-DD]")
private String spuValidity; private String spuValidity;
@ApiModelProperty(position = 33, value = "是否虚拟商品[0-否|1-是]") @ApiModelProperty(position = 33, value = "是否虚拟商品[0-否|1-是]")
......
...@@ -37,6 +37,10 @@ public class GoblinGoodsSkuInfoVo implements Serializable, Cloneable { ...@@ -37,6 +37,10 @@ public class GoblinGoodsSkuInfoVo implements Serializable, Cloneable {
private String skuWatch; private String skuWatch;
@ApiModelProperty(position = 15, value = "展示文件类型[1-图片|2-视频|3-模型]") @ApiModelProperty(position = 15, value = "展示文件类型[1-图片|2-视频|3-模型]")
private String watchType; 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]") @ApiModelProperty(position = 16, value = "ISBN,针对CD/图书等[50]")
private String skuIsbn; private String skuIsbn;
@ApiModelProperty(position = 17, value = "总库存") @ApiModelProperty(position = 17, value = "总库存")
...@@ -45,6 +49,8 @@ public class GoblinGoodsSkuInfoVo implements Serializable, Cloneable { ...@@ -45,6 +49,8 @@ public class GoblinGoodsSkuInfoVo implements Serializable, Cloneable {
private Integer skuStock; private Integer skuStock;
@ApiModelProperty(position = 18, value = "兑换库存") @ApiModelProperty(position = 18, value = "兑换库存")
private Integer giftStock; private Integer giftStock;
@ApiModelProperty(position = 18, value = "盲盒命中率[0.01~100%]")
private BigDecimal hitRatio;
@ApiModelProperty(position = 19, value = "预警库存") @ApiModelProperty(position = 19, value = "预警库存")
private Integer warningStock; private Integer warningStock;
@ApiModelProperty(position = 20, value = "单品销售价-原价[20,2]") @ApiModelProperty(position = 20, value = "单品销售价-原价[20,2]")
...@@ -70,7 +76,7 @@ public class GoblinGoodsSkuInfoVo implements Serializable, Cloneable { ...@@ -70,7 +76,7 @@ public class GoblinGoodsSkuInfoVo implements Serializable, Cloneable {
@ApiModelProperty(position = 27, value = "上架处理方式[1-等待手动上架|2-直接上架售卖|3-预约定时上架]") @ApiModelProperty(position = 27, value = "上架处理方式[1-等待手动上架|2-直接上架售卖|3-预约定时上架]")
private String shelvesHandle; private String shelvesHandle;
@ApiModelProperty(position = 27, value = "预约上架时间[上架处理方式为3-预约定时上架时需要指定]") @ApiModelProperty(position = 27, value = "预约上架时间[上架处理方式为3-预约定时上架时需要指定]")
private LocalDateTime shelvesTime; private String shelvesTime;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR) @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DateUtil.DATE_FULL_STR)
@ApiModelProperty(position = 27, value = "开售时间") @ApiModelProperty(position = 27, value = "开售时间")
private LocalDateTime saleStartTime; private LocalDateTime saleStartTime;
...@@ -90,14 +96,8 @@ public class GoblinGoodsSkuInfoVo implements Serializable, Cloneable { ...@@ -90,14 +96,8 @@ public class GoblinGoodsSkuInfoVo implements Serializable, Cloneable {
private String shelvesStatus; private String shelvesStatus;
@ApiModelProperty(position = 33, value = "自定义展示[0-默认展示|1-隐藏不可购买]") @ApiModelProperty(position = 33, value = "自定义展示[0-默认展示|1-隐藏不可购买]")
private String skuAppear; private String skuAppear;
@ApiModelProperty(position = 33, value = "素材原始文件类型[1-图片|2-视频|3-模型]")
private String materialType;
@ApiModelProperty(position = 33, value = "素材原始文件URL")
private String materialUrl;
@ApiModelProperty(position = 33, value = "是否盲盒[0-否|1-是]") @ApiModelProperty(position = 33, value = "是否盲盒[0-否|1-是]")
private String unbox; private String unbox;
@ApiModelProperty(position = 33, value = "盲盒命中率[0.01~100%]")
private BigDecimal hitRatio;
@ApiModelProperty(position = 33, value = "盲盒开启时间") @ApiModelProperty(position = 33, value = "盲盒开启时间")
private LocalDateTime openingTime; private LocalDateTime openingTime;
@ApiModelProperty(position = 33, value = "盲盒开启时限[单位秒]") @ApiModelProperty(position = 33, value = "盲盒开启时限[单位秒]")
......
...@@ -27,6 +27,13 @@ public interface IGoblinstoreMgtGoodsService { ...@@ -27,6 +27,13 @@ public interface IGoblinstoreMgtGoodsService {
*/ */
void goodsAdd(GoblinGoodsInfoVo goodsInfoVo, List<GoblinGoodsSkuInfoVo> goodsSkuInfoVoList); void goodsAdd(GoblinGoodsInfoVo goodsInfoVo, List<GoblinGoodsSkuInfoVo> goodsSkuInfoVoList);
/**
* 商品管理:SPU添加-数字藏品
*
* @param goodsInfoVo GoblinGoodsInfoVo
*/
void digitalGoodsAdd(GoblinGoodsInfoVo goodsInfoVo);
/** /**
* 商品管理:SPU详情 * 商品管理:SPU详情
* *
...@@ -46,6 +53,16 @@ public interface IGoblinstoreMgtGoodsService { ...@@ -46,6 +53,16 @@ public interface IGoblinstoreMgtGoodsService {
*/ */
boolean goodsEditSpu(String uid, GoblinStoreMgtGoodsAddParam mgtGoodsAddParam, GoblinGoodsInfoVo goodsInfoVo); boolean goodsEditSpu(String uid, GoblinStoreMgtGoodsAddParam mgtGoodsAddParam, GoblinGoodsInfoVo goodsInfoVo);
/**
* 商品管理:商品编辑:SPU编辑
*
* @param uid UID
* @param mgtDigitalGoodsAddParam GoblinStoreMgtDigitalGoodsAddParam
* @param goodsInfoVo GoblinGoodsInfoVo
* @return boolean
*/
boolean digitalGoodsEditSpu(String uid, GoblinStoreMgtDigitalGoodsAddParam mgtDigitalGoodsAddParam, GoblinGoodsInfoVo goodsInfoVo);
/** /**
* 商品管理:商品编辑:SKU编辑 * 商品管理:商品编辑:SKU编辑
* *
...@@ -60,6 +77,16 @@ public interface IGoblinstoreMgtGoodsService { ...@@ -60,6 +77,16 @@ public interface IGoblinstoreMgtGoodsService {
boolean goodsEditSku(String uid, GoblinStoreMgtGoodsEditSkuParam mgtGoodsEditSkuParam, GoblinGoodsSkuInfoVo mgtGoodsSkuInfoVo, boolean goodsEditSku(String uid, GoblinStoreMgtGoodsEditSkuParam mgtGoodsEditSkuParam, GoblinGoodsSkuInfoVo mgtGoodsSkuInfoVo,
GoblinGoodsInfoVo goodsInfoVo, Map<String, String> delSpuSpecMap, Map<String, String> addSpuSpecMap); GoblinGoodsInfoVo goodsInfoVo, Map<String, String> delSpuSpecMap, Map<String, String> addSpuSpecMap);
/**
* 商品管理:商品编辑:SKU编辑-数字藏品
*
* @param uid UID
* @param mgtDigitalGoodsAddSkuParam GoblinStoreMgtDigitalGoodsAddSkuParam
* @param mgtGoodsInfoVo GoblinGoodsInfoVo
* @return boolean
*/
boolean digitalGoodsEditSku(String uid, GoblinStoreMgtDigitalGoodsAddSkuParam mgtDigitalGoodsAddSkuParam, GoblinGoodsInfoVo mgtGoodsInfoVo);
/** /**
* 商品管理:商品编辑:SKU添加 * 商品管理:商品编辑:SKU添加
* *
...@@ -69,6 +96,15 @@ public interface IGoblinstoreMgtGoodsService { ...@@ -69,6 +96,15 @@ public interface IGoblinstoreMgtGoodsService {
*/ */
void goodsEditSkuAdd(String uid, GoblinStoreMgtGoodsEditSkuParam mgtGoodsEditSkuParam, GoblinGoodsInfoVo goodsInfoVo); void goodsEditSkuAdd(String uid, GoblinStoreMgtGoodsEditSkuParam mgtGoodsEditSkuParam, GoblinGoodsInfoVo goodsInfoVo);
/**
* 商品管理:商品编辑:SKU添加-数字藏品
*
* @param uid UID
* @param initGoodsSkuInfoVo GoblinGoodsSkuInfoVo
* @param mgtGoodsInfoVo GoblinGoodsInfoVo
*/
void digitalGoodsAddSku(String uid, GoblinGoodsSkuInfoVo initGoodsSkuInfoVo, GoblinGoodsInfoVo mgtGoodsInfoVo);
/** /**
* 商品管理:商品编辑:SKU删除 * 商品管理:商品编辑:SKU删除
* *
......
...@@ -13,6 +13,8 @@ alter table goblin_goods add publisher varchar(100) null comment '发行方' aft ...@@ -13,6 +13,8 @@ alter table goblin_goods add publisher varchar(100) null comment '发行方' aft
alter table goblin_goods_sku add sku_type tinyint default 0 not null comment '商品类型[0-常规|1-数字藏品]' after sku_no; alter table goblin_goods_sku add sku_type tinyint default 0 not null comment '商品类型[0-常规|1-数字藏品]' after sku_no;
alter table goblin_goods_sku add sku_watch varchar(256) null comment '展示文件URL' after sku_pic; alter table goblin_goods_sku add sku_watch varchar(256) null comment '展示文件URL' after sku_pic;
alter table goblin_goods_sku add watch_type char null comment '展示文件类型[1-图片|2-视频|3-模型]' after sku_watch; alter table goblin_goods_sku add watch_type char null comment '展示文件类型[1-图片|2-视频|3-模型]' after sku_watch;
alter table goblin_goods_sku add material_type char null comment '素材原始文件类型[1-图片|2-视频|3-模型]' after watch_type;
alter table goblin_goods_sku add material_url varchar(256) null comment '素材原始文件URL' after material_type;
alter table goblin_goods_sku add intro varchar(256) null comment '简介' after weight; alter table goblin_goods_sku add intro varchar(256) null comment '简介' after weight;
alter table goblin_goods_sku add details text null comment '详情' after intro; alter table goblin_goods_sku add details text null comment '详情' after intro;
...@@ -22,8 +24,6 @@ alter table goblin_goods_sku add shelves_time datetime null comment '预约上 ...@@ -22,8 +24,6 @@ alter table goblin_goods_sku add shelves_time datetime null comment '预约上
alter table goblin_goods_sku add sale_start_time datetime null comment '开售时间' after shelves_time; alter table goblin_goods_sku add sale_start_time datetime null comment '开售时间' after shelves_time;
alter table goblin_goods_sku add sale_stop_time datetime null comment '停售时间' after sale_start_time; alter table goblin_goods_sku add sale_stop_time datetime null comment '停售时间' after sale_start_time;
alter table goblin_goods_sku add material_type char null comment '素材原始文件类型[1-图片|2-视频|3-模型]' after sku_appear;
alter table goblin_goods_sku add material_url varchar(256) null comment '素材原始文件URL' after material_type;
alter table goblin_goods_sku add unbox char default '0' null comment '是否盲盒[0-否|1-是]' after material_url; alter table goblin_goods_sku add unbox char default '0' null comment '是否盲盒[0-否|1-是]' after material_url;
alter table goblin_goods_sku add hit_ratio decimal(3, 2) null comment '盲盒命中率[0.01~100%]' after unbox; alter table goblin_goods_sku add hit_ratio decimal(3, 2) null comment '盲盒命中率[0.01~100%]' after unbox;
alter table goblin_goods_sku add opening_time datetime null comment '盲盒开启时间' after hit_ratio; alter table goblin_goods_sku add opening_time datetime null comment '盲盒开启时间' after hit_ratio;
......
...@@ -327,6 +327,50 @@ public class GoblinStoreMgtGoodsController { ...@@ -327,6 +327,50 @@ public class GoblinStoreMgtGoodsController {
return ResponseDto.success(goodsInfoVo.getSpuId()); return ResponseDto.success(goodsInfoVo.getSpuId());
} }
@ApiOperationSupport(order = 41)
@ApiOperation(value = "SPU添加-数字藏品")
@PostMapping("digital/add")
public ResponseDto<Object> digitalAdd(@Valid @RequestBody GoblinStoreMgtDigitalGoodsAddParam mgtDigitalGoodsAddParam) {
String currentUid = CurrentUtil.getCurrentUid(), storeId = mgtDigitalGoodsAddParam.getStoreId();
if (!goblinRedisUtils.hasStoreId(currentUid, storeId)) return ResponseDto.failure(ErrorMapping.get("149002"));
String cateSid = mgtDigitalGoodsAddParam.getCateSid(), cateTid = mgtDigitalGoodsAddParam.getCateTid();
List<GoblinSelfGoodsCategoryVo> selfGoodsCategoryVos = goblinStoreMgtExtraService.listCategoryVo();
if (selfGoodsCategoryVos.stream().noneMatch(r -> r.getCateId().equals(mgtDigitalGoodsAddParam.getCateFid()) && r.getGrade().equals("1"))) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "商品一级分类无效");
}
if (StringUtils.isNotBlank(cateSid) && selfGoodsCategoryVos.stream().noneMatch(r -> r.getCateId().equals(cateSid) && r.getGrade().equals("2"))) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "商品二级分类无效");
}
if (StringUtils.isNotBlank(cateTid) && selfGoodsCategoryVos.stream().noneMatch(r -> r.getCateId().equals(cateTid) && r.getGrade().equals("3"))) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "商品三级分类无效");
}
if (goblinMongoUtils.countMgtGoodsInfoVo(mgtDigitalGoodsAddParam.getName()) > 0) return ResponseDto.failure(ErrorMapping.get("149007"));
GoblinGoodsInfoVo initGoodsInfoVo = mgtDigitalGoodsAddParam.initGoodsInfoVo();
{// 标签处理
List<String> goodsTagIdList = mgtDigitalGoodsAddParam.getTagList();
if (!CollectionUtils.isEmpty(goodsTagIdList)) {
List<GoblinSelfTagVo> selfGoodsTagVos = goblinRedisUtils.getSelfTagVos();
List<GoblinGoodsTagVo> goodsTagVoList = ObjectUtil.getGoblinGoodsTagVoArrayList();
for (int i = 0; i < goodsTagIdList.size(); i++)
for (GoblinSelfTagVo r : selfGoodsTagVos)
if (r.getTagId().equals(goodsTagIdList.get(i)) && r.getTagBelong().equals("0")) {
goodsTagVoList.add(GoblinGoodsTagVo.getNew().copy(r).setSort(i));
break;
}
initGoodsInfoVo.setTagVoList(goodsTagVoList);
}
}
if (log.isDebugEnabled()) {
log.debug("商品管理:SPU添加:[GoblinStoreMgtGoodsAddParam={}]", JsonUtils.toJson(mgtDigitalGoodsAddParam));
}
initGoodsInfoVo.setCreatedBy(currentUid);
initGoodsInfoVo.setCreatedAt(LocalDateTime.now());
goblinstoreMgtGoodsService.digitalGoodsAdd(initGoodsInfoVo);
return ResponseDto.success(initGoodsInfoVo.getSpuId());
}
@ApiOperationSupport(order = 5) @ApiOperationSupport(order = 5)
@ApiOperation(value = "SPU详情") @ApiOperation(value = "SPU详情")
@ApiImplicitParams({ @ApiImplicitParams({
...@@ -424,6 +468,43 @@ public class GoblinStoreMgtGoodsController { ...@@ -424,6 +468,43 @@ public class GoblinStoreMgtGoodsController {
return resultFlg ? ResponseDto.success() : ResponseDto.failure(); return resultFlg ? ResponseDto.success() : ResponseDto.failure();
} }
@ApiOperationSupport(order = 61)
@ApiOperation(value = "SPU编辑-数字藏品", notes = "只修改商品信息,不包含价格库存相关信息")
@PutMapping("digital/edit_spu")
public ResponseDto<Object> digitalEditSpu(@Valid @RequestBody GoblinStoreMgtDigitalGoodsAddParam mgtDigitalGoodsEditParam) {
String currentUid = CurrentUtil.getCurrentUid(), storeId = mgtDigitalGoodsEditParam.getStoreId();
if (!goblinRedisUtils.hasStoreId(currentUid, storeId)) return ResponseDto.failure(ErrorMapping.get("149002"));
GoblinGoodsInfoVo mgtGoodsInfoVo;
if (StringUtils.isBlank(mgtDigitalGoodsEditParam.getSpuId())
|| null == (mgtGoodsInfoVo = goblinRedisUtils.getGoodsInfoVo(mgtDigitalGoodsEditParam.getSpuId()))
|| !mgtGoodsInfoVo.getStoreId().equals(storeId)
|| !mgtGoodsInfoVo.getDelFlg().equals("0")) {
return ResponseDto.failure(ErrorMapping.get("149010"));
}
if (!mgtGoodsInfoVo.getName().equals(mgtDigitalGoodsEditParam.getName())
&& goblinMongoUtils.countMgtGoodsInfoVo(mgtDigitalGoodsEditParam.getName()) > 0) {
return ResponseDto.failure(ErrorMapping.get("149007"));
}
String cateSid = mgtDigitalGoodsEditParam.getCateSid(), cateTid = mgtDigitalGoodsEditParam.getCateTid();
List<GoblinSelfGoodsCategoryVo> selfGoodsCategoryVos = goblinStoreMgtExtraService.listCategoryVo();
if (selfGoodsCategoryVos.stream().noneMatch(r -> r.getCateId().equals(mgtDigitalGoodsEditParam.getCateFid()) && r.getGrade().equals("1"))) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "商品一级分类无效");
}
if (StringUtils.isNotBlank(cateSid) && selfGoodsCategoryVos.stream().noneMatch(r -> r.getCateId().equals(cateSid) && r.getGrade().equals("2"))) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "商品二级分类无效");
}
if (StringUtils.isNotBlank(cateTid) && selfGoodsCategoryVos.stream().noneMatch(r -> r.getCateId().equals(cateTid) && r.getGrade().equals("3"))) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "商品三级分类无效");
}
if (log.isDebugEnabled()) {
log.debug("商品管理:商品编辑:SPU编辑:[GoblinStoreMgtGoodsAddParam={}]", JsonUtils.toJson(mgtDigitalGoodsEditParam));
}
boolean resultFlg = goblinstoreMgtGoodsService.digitalGoodsEditSpu(currentUid, mgtDigitalGoodsEditParam, mgtGoodsInfoVo);
return resultFlg ? ResponseDto.success() : ResponseDto.failure();
}
@ApiOperationSupport(order = 7) @ApiOperationSupport(order = 7)
@ApiOperation(value = "商品编辑:SKU编辑", notes = "只修改单品信息,不包含商品信息") @ApiOperation(value = "商品编辑:SKU编辑", notes = "只修改单品信息,不包含商品信息")
@PostMapping("edit_sku") @PostMapping("edit_sku")
...@@ -618,6 +699,64 @@ public class GoblinStoreMgtGoodsController { ...@@ -618,6 +699,64 @@ public class GoblinStoreMgtGoodsController {
} }
} }
@ApiOperationSupport(order = 71)
@ApiOperation(value = "商品编辑:SKU编辑-数字藏品", notes = "只修改单品信息,不包含商品信息")
@PutMapping("digital/edit_sku")
public ResponseDto<Object> digitalEditSku(@Valid @RequestBody GoblinStoreMgtDigitalGoodsAddSkuParam mgtDigitalGoodsEditSkuParam) {
String currentUid = CurrentUtil.getCurrentUid(), storeId = mgtDigitalGoodsEditSkuParam.getStoreId();
if (!goblinRedisUtils.hasStoreId(currentUid, storeId)) return ResponseDto.failure(ErrorMapping.get("149002"));
String paramSkuId = mgtDigitalGoodsEditSkuParam.getSkuId();
GoblinGoodsSkuInfoVo mgtGoodsSkuInfoVo;
if (StringUtils.isBlank(paramSkuId) || null == (mgtGoodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(paramSkuId))
|| !mgtGoodsSkuInfoVo.getStoreId().equals(storeId) || !mgtGoodsSkuInfoVo.getDelFlg().equals("0")) {
return ResponseDto.failure(ErrorMapping.get("149011"));
}
GoblinGoodsInfoVo mgtGoodsInfoVo = goblinRedisUtils.getGoodsInfoVo(mgtGoodsSkuInfoVo.getSpuId());
if (null == mgtGoodsInfoVo || !mgtGoodsInfoVo.getDelFlg().equals("0")) {
return ResponseDto.failure(ErrorMapping.get("149010"));
}
if ("3".equals(mgtDigitalGoodsEditSkuParam.getShelvesHandle()) && StringUtils.isEmpty(mgtDigitalGoodsEditSkuParam.getShelvesTime())) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "请指定预约上架时间");
}
mgtDigitalGoodsEditSkuParam.setUnbox(mgtGoodsSkuInfoVo.getUnbox());
switch (mgtGoodsSkuInfoVo.getUnbox()) {
case "0":// 非盲盒
if (null == mgtDigitalGoodsEditSkuParam.getBuyLimit()) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "限购数量不能为空");
}
String buyFactor = mgtDigitalGoodsEditSkuParam.getBuyFactor();
if (StringUtils.isEmpty(buyFactor)) return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "请指定藏品购买条件");
if (buyFactor.equals("2")) {// 购买条件:指定用户时
if (StringUtils.isEmpty(mgtDigitalGoodsEditSkuParam.getBuyRosterType())) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "请指定购买限制人员名单操作类型");
}
String buyRoster = mgtDigitalGoodsEditSkuParam.getBuyRoster();
if (StringUtils.isBlank(buyRoster) || StringUtils.equals(mgtGoodsSkuInfoVo.getBuyRoster(), buyRoster) || !buyRoster.startsWith("http")) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "购买限制人员名单URL无效");
}
} else {
mgtDigitalGoodsEditSkuParam.setBuyRoster(null);
mgtDigitalGoodsEditSkuParam.setBuyRosterType(null);
}
break;
case "1":// 盲盒
if (StringUtils.isEmpty(mgtDigitalGoodsEditSkuParam.getOpeningTime())) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "盲盒开启时间不能为空");
}
break;
}
if (log.isDebugEnabled()) {
log.debug("商品管理:商品编辑:SKU编辑-数字藏品:[GoblinStoreMgtGoodsEditSkuParam={}]", JsonUtils.toJson(mgtDigitalGoodsEditSkuParam));
}
if (goblinstoreMgtGoodsService.digitalGoodsEditSku(currentUid, mgtDigitalGoodsEditSkuParam, mgtGoodsInfoVo)) {
mgtGoodsSkuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(paramSkuId);
mgtGoodsSkuInfoVo.setSurplusStock(goblinRedisUtils.getSkuStock(null, paramSkuId));
return ResponseDto.success(mgtGoodsSkuInfoVo);
}
return ResponseDto.failure(ErrorMapping.get("149013"));
}
@ApiOperationSupport(order = 8) @ApiOperationSupport(order = 8)
@ApiOperation(value = "商品编辑:SKU添加") @ApiOperation(value = "商品编辑:SKU添加")
@PutMapping("edit_sku/add") @PutMapping("edit_sku/add")
...@@ -726,6 +865,71 @@ public class GoblinStoreMgtGoodsController { ...@@ -726,6 +865,71 @@ public class GoblinStoreMgtGoodsController {
return ResponseDto.success(); return ResponseDto.success();
} }
@ApiOperationSupport(order = 81)
@ApiOperation(value = "商品编辑:SKU添加-数字藏品")
@PostMapping("digital/add_sku")
public ResponseDto<Object> digitalSkuAdd(@Valid @RequestBody GoblinStoreMgtDigitalGoodsAddSkuParam mgtDigitalGoodsAddSkuParam) {
String currentUid = CurrentUtil.getCurrentUid(), storeId = mgtDigitalGoodsAddSkuParam.getStoreId();
if (!goblinRedisUtils.hasStoreId(currentUid, storeId)) return ResponseDto.failure(ErrorMapping.get("149002"));
GoblinGoodsInfoVo goodsInfoVo = goblinRedisUtils.getGoodsInfoVo(mgtDigitalGoodsAddSkuParam.getSpuId());
if (null == goodsInfoVo || !goodsInfoVo.getDelFlg().equals("0") || !goodsInfoVo.getStoreId().equals(storeId)) {
return ResponseDto.failure(ErrorMapping.get("149010"));
}
String unbox = mgtDigitalGoodsAddSkuParam.getUnbox();
boolean notUnboxFlg = StringUtils.isEmpty(unbox) || unbox.equals("0");
if (notUnboxFlg) {// 非盲盒校验
if (StringUtils.isBlank(mgtDigitalGoodsAddSkuParam.getSubtitle())) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "款式名称不能为空");
}
if (StringUtils.isEmpty(mgtDigitalGoodsAddSkuParam.getMaterialType()) || StringUtils.isBlank(mgtDigitalGoodsAddSkuParam.getMaterialUrl())) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "我的藏品展示类型或文件不能为空");
}
if (null == mgtDigitalGoodsAddSkuParam.getBuyLimit()) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "限购数量不能为空");
}
String buyFactor = mgtDigitalGoodsAddSkuParam.getBuyFactor();
if (StringUtils.isEmpty(buyFactor)) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "请指定藏品购买条件");
}
if (buyFactor.equals("2")) {// 购买条件:指定用户时
if (StringUtils.isEmpty(mgtDigitalGoodsAddSkuParam.getBuyRosterType())) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "请指定购买限制人员名单操作类型");
}
if (StringUtils.isBlank(mgtDigitalGoodsAddSkuParam.getBuyRoster()) || !mgtDigitalGoodsAddSkuParam.getBuyRoster().startsWith("http")) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "购买限制人员名单URL无效");
}
}
} else {// 盲盒校验
if (StringUtils.isEmpty(mgtDigitalGoodsAddSkuParam.getOpeningTime())) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "盲盒开启时间不能为空");
}
}
if ("3".equals(mgtDigitalGoodsAddSkuParam.getShelvesHandle()) && StringUtils.isEmpty(mgtDigitalGoodsAddSkuParam.getShelvesTime())) {
return ResponseDto.failure(ErrorCode.HTTP_PARAM_ERROR.getCode(), "请指定预约上架时间");
}
if (log.isDebugEnabled()) {
log.debug("商品管理:商品编辑:SKU添加:[GoblinStoreMgtGoodsEditSkuParam={}]", JsonUtils.toJson(mgtDigitalGoodsAddSkuParam));
}
GoblinGoodsSkuInfoVo goodsSkuInfoVo = mgtDigitalGoodsAddSkuParam.initAddGoodsSkuInfoVo(notUnboxFlg);
{// 标签处理
List<String> paramExtagList = mgtDigitalGoodsAddSkuParam.getExtagList();
if (!CollectionUtils.isEmpty(paramExtagList)) {
List<GoblinSelfTagVo> selfExtagVos = goblinRedisUtils.getSelfExtagVos();
List<GoblinGoodsExtagVo> goodsExtagVoList = ObjectUtil.getGoblinGoodsExtagVoArrayList();
for (int i = 0; i < paramExtagList.size(); i++)
for (GoblinSelfTagVo r : selfExtagVos)
if (r.getTagId().equals(paramExtagList.get(i)) && r.getTagBelong().equals("1") && !r.getTagType().equals("5")) {
goodsExtagVoList.add(GoblinGoodsExtagVo.getNew().copy(r).setSort(i));
break;
}
goodsSkuInfoVo.setExtagVoList(goodsExtagVoList);
}
}
goblinstoreMgtGoodsService.digitalGoodsAddSku(currentUid, goodsSkuInfoVo, goodsInfoVo);
return ResponseDto.success();
}
@ApiOperationSupport(order = 9) @ApiOperationSupport(order = 9)
@ApiOperation(value = "商品编辑:SKU删除") @ApiOperation(value = "商品编辑:SKU删除")
@ApiImplicitParams({ @ApiImplicitParams({
...@@ -754,24 +958,4 @@ public class GoblinStoreMgtGoodsController { ...@@ -754,24 +958,4 @@ public class GoblinStoreMgtGoodsController {
boolean delResultFlg = goblinstoreMgtGoodsService.goodsEditSkuDel(currentUid, mgtGoodsSkuInfoVo, mgtGoodsInfoVo); boolean delResultFlg = goblinstoreMgtGoodsService.goodsEditSkuDel(currentUid, mgtGoodsSkuInfoVo, mgtGoodsInfoVo);
return delResultFlg ? ResponseDto.success() : ResponseDto.failure(ErrorMapping.get("149003")); return delResultFlg ? ResponseDto.success() : ResponseDto.failure(ErrorMapping.get("149003"));
} }
// @ApiOperationSupport(order = 10)
// @ApiOperation(value = "商品编辑:SKU批改")
// @ApiImplicitParams({
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "storeId", value = "店铺ID"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "spuId", value = "商品ID"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "batField", value = "批量修改属性"),
// @ApiImplicitParam(type = "form", required = true, dataType = "String", name = "batFieldVal", value = "批量修改属性值"),
// })
// @PostMapping("edit_sku/bat")
// public ResponseDto<Object> editSkuBat(@NotBlank(message = "店铺ID不能为空") String storeId,
// @NotBlank(message = "商品ID不能为空") String spuId,
// @NotBlank(message = "批量修改属性不能为空") String batField,
// @NotBlank(message = "批量修改属性值不能为空") String batFieldVal) {
// if (!goblinRedisUtils.hasStoreId(CurrentUtil.getCurrentUid(), storeId)) {
// return ResponseDto.failure(ErrorMapping.get("149002"));
// }
// goblinstoreMgtGoodsService.goodsEditSkuBat(spuId, batField, batFieldVal)
// return ResponseDto.success();
// }
} }
...@@ -7,10 +7,7 @@ import com.liquidnet.service.base.SqlMapping; ...@@ -7,10 +7,7 @@ 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.constant.GoblinStatusConst; import com.liquidnet.service.goblin.constant.GoblinStatusConst;
import com.liquidnet.service.goblin.dto.GoblinGoodsSpecDto; import com.liquidnet.service.goblin.dto.GoblinGoodsSpecDto;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtGoodsActionParam; import com.liquidnet.service.goblin.dto.manage.*;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtGoodsAddParam;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtGoodsEditSkuParam;
import com.liquidnet.service.goblin.dto.manage.GoblinStoreMgtGoodsFilterParam;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinMgtCategorySpecVo; import com.liquidnet.service.goblin.dto.manage.vo.GoblinMgtCategorySpecVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtGoodsInfoVo; import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtGoodsInfoVo;
import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtGoodsListVo; import com.liquidnet.service.goblin.dto.manage.vo.GoblinStoreMgtGoodsListVo;
...@@ -222,6 +219,29 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi ...@@ -222,6 +219,29 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
); );
} }
@Override
public void digitalGoodsAdd(GoblinGoodsInfoVo goodsInfoVo) {
goblinMongoUtils.setGoodsInfoVo(goodsInfoVo);
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
toMqSqls.add(SqlMapping.get("goblin_goods.insert_for_digital"));
LinkedList<Object[]> initGoodsObjs = CollectionUtil.linkedListObjectArr();
String spuId = goodsInfoVo.getSpuId();
initGoodsObjs.add(new Object[]{
spuId, goodsInfoVo.getSpuNo(), goodsInfoVo.getSpuType(), goodsInfoVo.getName(), goodsInfoVo.getIntro(),
goodsInfoVo.getAttention(), goodsInfoVo.getStoreId(), goodsInfoVo.getCateFid(), goodsInfoVo.getCateSid(), goodsInfoVo.getCateTid(),
goodsInfoVo.getVirtualFlg(), goodsInfoVo.getStatus(), goodsInfoVo.getShelvesStatus(), goodsInfoVo.getSpuAppear(), goodsInfoVo.getCreatedBy(),
goodsInfoVo.getCreatedAt()
});
toMqSqls.add(SqlMapping.get("goblin_goods_tag.insert_byreplace"));
LinkedList<Object[]> initGoodsTagObjs = CollectionUtil.linkedListObjectArr();
if (!CollectionUtils.isEmpty(goodsInfoVo.getTagVoList())) {
goodsInfoVo.getTagVoList().forEach(tagVo -> initGoodsTagObjs.add(new Object[]{spuId, tagVo.getTagId(), tagVo.getSort(), "0"}));
}
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(), SqlMapping.gets(toMqSqls, initGoodsObjs));
}
@Override @Override
public GoblinStoreMgtGoodsInfoVo goodsInfo(String storeId, String spuId) { public GoblinStoreMgtGoodsInfoVo goodsInfo(String storeId, String spuId) {
GoblinStoreMgtGoodsInfoVo vo = GoblinStoreMgtGoodsInfoVo.getNew(); GoblinStoreMgtGoodsInfoVo vo = GoblinStoreMgtGoodsInfoVo.getNew();
...@@ -530,6 +550,79 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi ...@@ -530,6 +550,79 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
return false; return false;
} }
@Override
public boolean digitalGoodsEditSpu(String uid, GoblinStoreMgtDigitalGoodsAddParam mgtDigitalGoodsAddParam, GoblinGoodsInfoVo mgtGoodsInfoVo) {
String spuId = mgtDigitalGoodsAddParam.getSpuId();
GoblinGoodsInfoVo updateSpuInfoVo = mgtDigitalGoodsAddParam.initEditGoodsInfoVo();
List<GoblinGoodsTagVo> befTagVoList = mgtGoodsInfoVo.getTagVoList();
boolean updateTagFlg = false, befTagIsEmptyFlg = CollectionUtils.isEmpty(befTagVoList), paramTagIsEmptyFlg;
{// 标签处理
List<GoblinGoodsTagVo> paramTagVoList = ObjectUtil.getGoblinGoodsTagVoArrayList();
List<String> goodsTagIdList = mgtDigitalGoodsAddParam.getTagList();
if (!CollectionUtils.isEmpty(goodsTagIdList)) {
List<GoblinSelfTagVo> selfGoodsTagVos = goblinRedisUtils.getSelfTagVos();
for (int i = 0; i < goodsTagIdList.size(); i++)
for (GoblinSelfTagVo r : selfGoodsTagVos)
if (r.getTagId().equals(goodsTagIdList.get(i)) && r.getTagBelong().equals("0")) {
paramTagVoList.add(GoblinGoodsTagVo.getNew().copy(r).setSort(i));
break;
}
}
paramTagIsEmptyFlg = CollectionUtils.isEmpty(paramTagVoList);
if (!befTagIsEmptyFlg || !paramTagIsEmptyFlg) {
if (!befTagIsEmptyFlg && !paramTagIsEmptyFlg) {
if (paramTagVoList.size() != befTagVoList.size()) {
updateTagFlg = true;
} else {
List<String> befTagIdList = befTagVoList.stream().map(GoblinGoodsTagVo::getTagId).collect(Collectors.toList());
for (GoblinGoodsTagVo vo : paramTagVoList)
if (!befTagIdList.contains(vo.getTagId())) {
updateTagFlg = true;
break;
}
}
} else {
updateTagFlg = true;
}
}
if (updateTagFlg) {
updateSpuInfoVo.setTagVoList(paramTagIsEmptyFlg ? ObjectUtil.getGoblinGoodsTagVoArrayList() : paramTagVoList);
}
}
updateSpuInfoVo.setUpdatedBy(uid);
updateSpuInfoVo.setUpdatedAt(LocalDateTime.now());
if (goblinMongoUtils.updateGoodsInfoVo(updateSpuInfoVo)) {
log.info("商品管理:SPU编辑-数字藏品[UID={},PARAMS={}]", uid, JsonUtils.toJson(mgtDigitalGoodsAddParam));
goblinRedisUtils.delGoodsInfoVo(spuId);
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
toMqSqls.add(SqlMapping.get("goblin_goods.update_by_edit_for_digital"));
LinkedList<Object[]> updateGoodsInfoObjs = CollectionUtil.linkedListObjectArr();
updateGoodsInfoObjs.add(new Object[]{
updateSpuInfoVo.getName(), updateSpuInfoVo.getIntro(), updateSpuInfoVo.getCateFid(), updateSpuInfoVo.getCateSid(),
updateSpuInfoVo.getCateTid(), updateSpuInfoVo.getUpdatedBy(), updateSpuInfoVo.getUpdatedAt(), updateSpuInfoVo.getSpuId()
});
toMqSqls.add(SqlMapping.get("goblin_goods_tag.delete"));
LinkedList<Object[]> deleteGoodsTagObjs = CollectionUtil.linkedListObjectArr();
toMqSqls.add(SqlMapping.get("goblin_goods_tag.insert_byreplace"));
LinkedList<Object[]> initGoodsTagObjs = CollectionUtil.linkedListObjectArr();
if (updateTagFlg) {
if (!befTagIsEmptyFlg) {
deleteGoodsTagObjs.add(new Object[]{spuId, '0'});
}
if (!paramTagIsEmptyFlg) {
updateSpuInfoVo.getTagVoList().forEach(vo -> initGoodsTagObjs.add(new Object[]{spuId, vo.getTagId(), vo.getSort(), "0"}));
}
}
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(),
SqlMapping.gets(toMqSqls, updateGoodsInfoObjs, deleteGoodsTagObjs, initGoodsTagObjs));
return true;
}
return false;
}
@Override @Override
public boolean goodsEditSku(String uid, GoblinStoreMgtGoodsEditSkuParam mgtGoodsEditSkuParam, GoblinGoodsSkuInfoVo mgtGoodsSkuInfoVo, public boolean goodsEditSku(String uid, GoblinStoreMgtGoodsEditSkuParam mgtGoodsEditSkuParam, GoblinGoodsSkuInfoVo mgtGoodsSkuInfoVo,
GoblinGoodsInfoVo goodsInfoVo, Map<String, String> delSpuSpecMap, Map<String, String> addSpuSpecMap) { GoblinGoodsInfoVo goodsInfoVo, Map<String, String> delSpuSpecMap, Map<String, String> addSpuSpecMap) {
...@@ -653,6 +746,69 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi ...@@ -653,6 +746,69 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
return false; return false;
} }
@Override
public boolean digitalGoodsEditSku(String uid, GoblinStoreMgtDigitalGoodsAddSkuParam mgtDigitalGoodsAddSkuParam, GoblinGoodsInfoVo mgtGoodsInfoVo) {
GoblinGoodsSkuInfoVo updateSkuInfoVo = mgtDigitalGoodsAddSkuParam.initEditGoodsSkuInfoVo();
LocalDateTime now = LocalDateTime.now();
updateSkuInfoVo.setUpdatedBy(uid);
updateSkuInfoVo.setUpdatedAt(now);
if (goblinMongoUtils.updateGoodsSkuInfoVo(updateSkuInfoVo)) {
log.info("商品管理:SKU编辑[UID={},PARAMS={}]", uid, JsonUtils.toJson(mgtDigitalGoodsAddSkuParam));
goblinRedisUtils.delGoodsSkuInfoVo(updateSkuInfoVo.getSkuId());
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
LinkedList<Object[]> updateGoodsObjs = CollectionUtil.linkedListObjectArr();
LinkedList<Object[]> updateGoodsSkuObjs = CollectionUtil.linkedListObjectArr();
if ("1".equals(updateSkuInfoVo.getUnbox())) {
BigDecimal priceGe = BigDecimal.ZERO, priceLe = BigDecimal.ZERO;
for (String skuIdStr : mgtGoodsInfoVo.getSkuIdList()) {
GoblinGoodsSkuInfoVo skuInfoVo = goblinRedisUtils.getGoodsSkuInfoVo(skuIdStr);
if (null != skuInfoVo && skuInfoVo.getDelFlg().equals("0")) {
priceGe = priceGe.compareTo(BigDecimal.ZERO) == 0 ? skuInfoVo.getPrice() : (priceGe.compareTo(skuInfoVo.getPrice()) > 0 ? skuInfoVo.getPrice() : priceGe);
priceLe = priceLe.compareTo(skuInfoVo.getPrice()) < 0 ? skuInfoVo.getPrice() : priceLe;
}
}
if (priceGe.compareTo(mgtGoodsInfoVo.getPriceGe()) != 0 || priceLe.compareTo(mgtGoodsInfoVo.getPriceLe()) != 0) {
mgtGoodsInfoVo.setPriceGe(priceGe);
mgtGoodsInfoVo.setPriceLe(priceLe);
mgtGoodsInfoVo.setUpdatedBy(uid);
mgtGoodsInfoVo.setUpdatedAt(now);
goblinMongoUtils.updateGoodsInfoVo(mgtGoodsInfoVo);
goblinRedisUtils.delGoodsInfoVo(mgtGoodsInfoVo.getSpuId());
updateGoodsObjs.add(new Object[]{priceGe, priceLe, uid, now, mgtGoodsInfoVo.getSpuId()});
}
toMqSqls.add(SqlMapping.get("goblin_goods_sku.update_by_edit_box_digital"));
updateGoodsSkuObjs.add(new Object[]{
updateSkuInfoVo.getName(), updateSkuInfoVo.getSubtitle(), updateSkuInfoVo.getSkuPic(), updateSkuInfoVo.getSkuWatch(), updateSkuInfoVo.getWatchType(),
updateSkuInfoVo.getPrice(), updateSkuInfoVo.getPriceMember(), updateSkuInfoVo.getIntro(), updateSkuInfoVo.getDetails(), updateSkuInfoVo.getShelvesHandle(),
updateSkuInfoVo.getShelvesTime(), updateSkuInfoVo.getSaleStartTime(), updateSkuInfoVo.getOpeningTime(), updateSkuInfoVo.getUpdatedBy(), updateSkuInfoVo.getUpdatedAt(),
updateSkuInfoVo.getSkuId()
});
} else {
String buyRoster = mgtDigitalGoodsAddSkuParam.getBuyRoster();
if (StringUtils.isNotEmpty(buyRoster)) {
queueUtils.sendMsgByRedisXls(buyRoster, mgtDigitalGoodsAddSkuParam.getBuyRosterType(), updateSkuInfoVo.getSkuId());
}
toMqSqls.add(SqlMapping.get("goblin_goods_sku.update_by_edit_for_digital"));
updateGoodsSkuObjs.add(new Object[]{
updateSkuInfoVo.getHitRatio(), updateSkuInfoVo.getBuyFactor(), updateSkuInfoVo.getBuyRoster(), updateSkuInfoVo.getBuyLimit(), updateSkuInfoVo.getShelvesHandle(),
updateSkuInfoVo.getShelvesTime(), updateSkuInfoVo.getSaleStartTime(), updateSkuInfoVo.getUpdatedBy(), updateSkuInfoVo.getUpdatedAt(), updateSkuInfoVo.getSkuId()
});
}
toMqSqls.add(SqlMapping.get("goblin_goods.update_by_edit_sku"));
// LinkedList<Object[]> updateGoodsObjs = CollectionUtil.linkedListObjectArr();
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(), SqlMapping.gets(toMqSqls, updateGoodsSkuObjs, updateGoodsObjs));
return true;
}
return false;
}
@Override @Override
public void goodsEditSkuAdd(String uid, GoblinStoreMgtGoodsEditSkuParam mgtGoodsEditSkuParam, GoblinGoodsInfoVo goodsInfoVo) { public void goodsEditSkuAdd(String uid, GoblinStoreMgtGoodsEditSkuParam mgtGoodsEditSkuParam, GoblinGoodsInfoVo goodsInfoVo) {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
...@@ -697,7 +853,6 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi ...@@ -697,7 +853,6 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
} }
goblinMongoUtils.updateGoodsInfoVo(goodsInfoVo); goblinMongoUtils.updateGoodsInfoVo(goodsInfoVo);
goblinRedisUtils.delGoodsSkuInfoVo(spuId);
goblinRedisUtils.delGoodsInfoVo(spuId); goblinRedisUtils.delGoodsInfoVo(spuId);
goblinRedisUtils.setSkuStock(null, addSkuInfoVo.getSkuId(), addSkuInfoVo.getSkuStock()); goblinRedisUtils.setSkuStock(null, addSkuInfoVo.getSkuId(), addSkuInfoVo.getSkuStock());
...@@ -743,6 +898,59 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi ...@@ -743,6 +898,59 @@ public class GoblinStoreMgtGoodsServiceImpl implements IGoblinstoreMgtGoodsServi
); );
} }
@Override
public void digitalGoodsAddSku(String uid, GoblinGoodsSkuInfoVo initGoodsSkuInfoVo, GoblinGoodsInfoVo mgtGoodsInfoVo) {
LocalDateTime now = LocalDateTime.now();
initGoodsSkuInfoVo.setRouteType("zxinchain");// TODO: 2022/3/25 ==zhanggb
initGoodsSkuInfoVo.setUpchain(0);
initGoodsSkuInfoVo.setCreatedAt(now);
initGoodsSkuInfoVo.setCreatedBy(uid);
goblinMongoUtils.setGoodsSkuInfoVo(initGoodsSkuInfoVo);
log.info("藏品管理:SKU添加[UID={},PARAMS={}]", uid, JsonUtils.toJson(initGoodsSkuInfoVo));
goblinRedisUtils.setSkuStock(null, initGoodsSkuInfoVo.getSkuId(), initGoodsSkuInfoVo.getSkuStock());
String spuId = initGoodsSkuInfoVo.getSpuId(), skuId = initGoodsSkuInfoVo.getSkuId();
List<String> skuIdList = mgtGoodsInfoVo.getSkuIdList();
if (CollectionUtils.isEmpty(skuIdList)) {
skuIdList = CollectionUtil.linkedListString();
}
skuIdList.add(initGoodsSkuInfoVo.getSkuId());
mgtGoodsInfoVo.setSkuIdList(skuIdList);
BigDecimal priceGe = BigDecimal.ZERO, priceLe = BigDecimal.ZERO;
for (String skuIdStr : skuIdList) {
GoblinGoodsSkuInfoVo skuInfoVo = skuIdStr.equals(skuId) ? initGoodsSkuInfoVo : goblinRedisUtils.getGoodsSkuInfoVo(skuIdStr);
if (null != skuInfoVo && skuInfoVo.getDelFlg().equals("0")) {
priceGe = priceGe.compareTo(BigDecimal.ZERO) == 0 ? skuInfoVo.getPrice() : (priceGe.compareTo(skuInfoVo.getPrice()) > 0 ? skuInfoVo.getPrice() : priceGe);
priceLe = priceLe.compareTo(skuInfoVo.getPrice()) < 0 ? skuInfoVo.getPrice() : priceLe;
}
}
LinkedList<String> toMqSqls = CollectionUtil.linkedListString();
toMqSqls.add(SqlMapping.get("goblin_goods_sku.insert_for_digital"));
LinkedList<Object[]> initGoodsSkuObjs = CollectionUtil.linkedListObjectArr();
initGoodsSkuObjs.add(new Object[]{
skuId, spuId, initGoodsSkuInfoVo.getSkuNo(), initGoodsSkuInfoVo.getSkuType(), initGoodsSkuInfoVo.getName(),
initGoodsSkuInfoVo.getSubtitle(), initGoodsSkuInfoVo.getSkuPic(), initGoodsSkuInfoVo.getSkuWatch(), initGoodsSkuInfoVo.getWatchType(), initGoodsSkuInfoVo.getMaterialType(),
initGoodsSkuInfoVo.getMaterialUrl(), initGoodsSkuInfoVo.getStock(), initGoodsSkuInfoVo.getSkuStock(), initGoodsSkuInfoVo.getGiftStock(), initGoodsSkuInfoVo.getHitRatio(),
initGoodsSkuInfoVo.getPrice(), initGoodsSkuInfoVo.getPriceMember(), initGoodsSkuInfoVo.getIntro(), initGoodsSkuInfoVo.getDetails(), initGoodsSkuInfoVo.getBuyFactor(),
initGoodsSkuInfoVo.getBuyRoster(), initGoodsSkuInfoVo.getBuyLimit(), initGoodsSkuInfoVo.getStoreId(), initGoodsSkuInfoVo.getShelvesHandle(), initGoodsSkuInfoVo.getShelvesTime(),
initGoodsSkuInfoVo.getSaleStartTime(), initGoodsSkuInfoVo.getVirtualFlg(), initGoodsSkuInfoVo.getStatus(), initGoodsSkuInfoVo.getShelvesStatus(), initGoodsSkuInfoVo.getSkuAppear(),
initGoodsSkuInfoVo.getUnbox(), initGoodsSkuInfoVo.getOpeningTime(), initGoodsSkuInfoVo.getRouteType(), initGoodsSkuInfoVo.getUpchain(), uid, now
});
toMqSqls.add(SqlMapping.get("goblin_goods.update_by_edit_sku"));// SPU价格区间
LinkedList<Object[]> updateGoodsObjs = CollectionUtil.linkedListObjectArr();
if (priceGe.compareTo(mgtGoodsInfoVo.getPriceGe()) != 0 || priceLe.compareTo(mgtGoodsInfoVo.getPriceLe()) != 0) {
mgtGoodsInfoVo.setPriceGe(priceGe);
mgtGoodsInfoVo.setPriceLe(priceLe);
mgtGoodsInfoVo.setUpdatedBy(uid);
mgtGoodsInfoVo.setUpdatedAt(now);
updateGoodsObjs.add(new Object[]{priceGe, priceLe, uid, now, spuId});
}
queueUtils.sendMsgByRedis(MQConst.GoblinQueue.SQL_GOODS.getKey(), SqlMapping.gets(toMqSqls, initGoodsSkuObjs, updateGoodsObjs));
}
@Override @Override
public boolean goodsEditSkuDel(String uid, GoblinGoodsSkuInfoVo delGoodsSkuInfoVo, GoblinGoodsInfoVo mgtGoodsInfoVo) { public boolean goodsEditSkuDel(String uid, GoblinGoodsSkuInfoVo delGoodsSkuInfoVo, GoblinGoodsInfoVo mgtGoodsInfoVo) {
String spuId = delGoodsSkuInfoVo.getSpuId(); String spuId = delGoodsSkuInfoVo.getSpuId();
......
...@@ -45,8 +45,11 @@ goblin_goods.update_by_del_sku=UPDATE goblin_goods SET price_ge=?,price_le=?,upd ...@@ -45,8 +45,11 @@ goblin_goods.update_by_del_sku=UPDATE goblin_goods SET price_ge=?,price_le=?,upd
goblin_goods.update_by_del_store=UPDATE goblin_goods SET del_flg='1',updated_by=?,updated_at=?,deleted_by=?,deleted_at=? WHERE store_id=? AND del_flg='0' goblin_goods.update_by_del_store=UPDATE goblin_goods SET del_flg='1',updated_by=?,updated_at=?,deleted_by=?,deleted_at=? WHERE store_id=? AND del_flg='0'
goblin_goods.update_by_del=UPDATE goblin_goods SET del_flg='1',updated_by=?,updated_at=?,deleted_by=?,deleted_at=? WHERE spu_id=? AND del_flg='0' goblin_goods.update_by_del=UPDATE goblin_goods SET del_flg='1',updated_by=?,updated_at=?,deleted_by=?,deleted_at=? WHERE spu_id=? AND del_flg='0'
goblin_goods_sku.insert=INSERT INTO goblin_goods_sku (sku_id,spu_id,sku_no,name,subtitle, sell_price,sku_pic,sku_isbn,stock,sku_stock, warning_stock,price,price_member,weight,buy_factor, buy_roster,buy_limit,store_id,sku_validity,virtual_flg, status,shelves_status,sku_appear,shelves_at,created_by, created_at,logistics_template)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) goblin_goods_sku.insert=INSERT INTO goblin_goods_sku (sku_id,spu_id,sku_no,name,subtitle, sell_price,sku_pic,sku_isbn,stock,sku_stock, warning_stock,price,price_member,weight,buy_factor, buy_roster,buy_limit,store_id,sku_validity,virtual_flg, status,shelves_status,sku_appear,shelves_at,created_by, created_at,logistics_template)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_goods_sku.insert_for_digital=INSERT INTO goblin_goods_sku (sku_id,spu_id,sku_no,sku_type,name,subtitle,sku_pic,sku_watch,watch_type,material_type,material_url,stock,sku_stock,gift_stock,hit_ratio,price,price_member,intro,details,buy_factor,buy_roster,buy_limit,store_id,shelves_handle,shelves_time,sale_start_time,virtual_flg,status,shelves_status,sku_appear,unbox,opening_time,route_type,upchain,created_by,created_at)VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_goods_sku.update_by_edit_for_market=UPDATE goblin_goods_sku SET name=?,sku_pic=?,sell_price=?,weight=?,stock=?,warning_stock=?,sku_appear=?,sku_isbn=?,sku_validity=?,updated_by=?,updated_at=? WHERE sku_id=? AND del_flg='0' goblin_goods_sku.update_by_edit_for_market=UPDATE goblin_goods_sku SET name=?,sku_pic=?,sell_price=?,weight=?,stock=?,warning_stock=?,sku_appear=?,sku_isbn=?,sku_validity=?,updated_by=?,updated_at=? WHERE sku_id=? AND del_flg='0'
goblin_goods_sku.update_by_edit=UPDATE goblin_goods_sku SET name=?,sku_pic=?,sell_price=?,price=?,price_member=?,weight=?,stock=?,sku_stock=?,warning_stock=?,sku_appear=?,sku_isbn=?,buy_factor=?,buy_roster=?,buy_limit=?,sku_validity=?,updated_by=?,updated_at=? WHERE sku_id=? AND del_flg='0' goblin_goods_sku.update_by_edit=UPDATE goblin_goods_sku SET name=?,sku_pic=?,sell_price=?,price=?,price_member=?,weight=?,stock=?,sku_stock=?,warning_stock=?,sku_appear=?,sku_isbn=?,buy_factor=?,buy_roster=?,buy_limit=?,sku_validity=?,updated_by=?,updated_at=? WHERE sku_id=? AND del_flg='0'
goblin_goods_sku.update_by_edit_for_digital=UPDATE goblin_goods_sku SET hit_ratio=?,buy_factor=?,buy_roster=?,buy_limit=?,shelves_handle=?,shelves_time=?,sale_start_time=?,updated_by=?,updated_at=? WHERE sku_id=? AND del_flg='0'
goblin_goods_sku.update_by_edit_box_digital=UPDATE goblin_goods_sku SET name=?,subtitle=?,sku_pic=?,sku_watch=?,watch_type=?,price=?,price_member=?,intro=?,details=?,shelves_handle=?,shelves_time=?,sale_start_time=?,opening_time=?,updated_by=?,updated_at=? WHERE sku_id=? AND del_flg='0'
goblin_goods_sku.update_by_edit_spu=UPDATE goblin_goods_sku SET sku_no=?,virtual_flg=?,logistics_template=?,updated_by=?,updated_at=? WHERE spu_id=? AND del_flg='0' goblin_goods_sku.update_by_edit_spu=UPDATE goblin_goods_sku SET sku_no=?,virtual_flg=?,logistics_template=?,updated_by=?,updated_at=? WHERE spu_id=? AND del_flg='0'
goblin_goods_sku.update_by_shelves=UPDATE goblin_goods_sku SET shelves_status=?,shelves_at=?,updated_by=?,updated_at=? WHERE spu_id=? AND store_id=? AND sku_appear='0' goblin_goods_sku.update_by_shelves=UPDATE goblin_goods_sku SET shelves_status=?,shelves_at=?,updated_by=?,updated_at=? WHERE spu_id=? AND store_id=? AND sku_appear='0'
goblin_goods_sku.update_by_del_store=UPDATE goblin_goods_sku SET del_flg='1',updated_by=?,updated_at=?,deleted_by=?,deleted_at=? WHERE store_id=? AND del_flg='0' goblin_goods_sku.update_by_del_store=UPDATE goblin_goods_sku SET del_flg='1',updated_by=?,updated_at=?,deleted_by=?,deleted_at=? WHERE store_id=? AND del_flg='0'
......
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