提交 cd53de73 作者: xiaowang

后台管理商品新增

上级 7c145017
...@@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
@RequestMapping("/brand") @RequestMapping("/brand")
@Api(tags = {"品牌管理-相关接口"}) @Api(tags = {"品牌管理-相关接口"})
public class BrandManageController { public class BackstageBrandManageController {
@Autowired @Autowired
private BrandManageService brandManageService; private BrandManageService brandManageService;
......
...@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -16,7 +16,7 @@ import org.springframework.web.bind.annotation.*;
@Api(tags = {"后台-分类管理-接口"}) @Api(tags = {"后台-分类管理-接口"})
@RestController @RestController
@RequestMapping("/classify") @RequestMapping("/classify")
public class CategoriesController { public class BackstageCategoriesController {
@Autowired @Autowired
private CategoriesService categoriesService; private CategoriesService categoriesService;
......
package com.mmc.pms.controller;
import com.mmc.pms.common.ResultBody;
import com.mmc.pms.model.vo.Create;
import com.mmc.pms.model.vo.GoodsAddVO;
import com.mmc.pms.service.GoodsInfoService;
import io.swagger.annotations.*;
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.annotation.Resource;
/**
* @Author LW
* @date 2023/3/14 13:22
* 概要:
*/
@RestController
@RequestMapping("/goods")
@Api(tags = {"商品管理-相关接口"})
public class BackstageGoodsManageController {
@Resource
private GoodsInfoService goodsInfoService;
@ApiOperation(value = "新增(租赁/销售)商品")
@PostMapping("addGoodsInfo")
@ApiResponses({@ApiResponse(code = 200, message = "OK", response = ResultBody.class)})
public ResultBody addGoods(@ApiParam("商品信息VO") @Validated(Create.class) @RequestBody GoodsAddVO goodsAddVO) {
return goodsInfoService.addGoods(goodsAddVO);
}
}
...@@ -20,7 +20,7 @@ import org.springframework.web.bind.annotation.*; ...@@ -20,7 +20,7 @@ import org.springframework.web.bind.annotation.*;
@RestController @RestController
@RequestMapping("/product/spec/") @RequestMapping("/product/spec/")
@Api(tags = {"产品管理模块-相关接口"}) @Api(tags = {"产品管理模块-相关接口"})
public class ProductSpecController { public class BackstageProductSpecController {
@Autowired @Autowired
private ProductSkuService productSkuService; private ProductSkuService productSkuService;
......
package com.mmc.pms.dao;
import com.mmc.pms.entity.*;
import com.mmc.pms.model.vo.GoodsAddVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @author 23214
* @description 针对表【goods_info(商品基本信息)】的数据库操作Mapper
* @createDate 2023-05-27 14:08:45
* @Entity com.mmc.pms.entity.GoodsInfo
*/
@Mapper
public interface GoodsInfoDao {
int countGoodsInfoByName(GoodsAddVO goodsAddVO);
void insertGoodsInfo(GoodsInfo goodsInfo);
int countGoodsInfo();
void insertGoodsImgInfo(List<GoodsImgDO> list);
void insertVideoInfo(GoodsVideoDO goodsVideoDO);
void insertGoodsDetail(GoodsDetailDO goodsDetailDO);
void insertGoodsService(List<GoodsServiceDO> otherList);
}
package com.mmc.pms.dao; package com.mmc.pms.dao;
import com.mmc.pms.entity.MallProdSkuInfoDO;
import com.mmc.pms.entity.ProductSkuDO; import com.mmc.pms.entity.ProductSkuDO;
import com.mmc.pms.entity.ProductSpecDO; import com.mmc.pms.entity.ProductSpecDO;
import com.mmc.pms.entity.ProductSpecPriceDO; import com.mmc.pms.entity.ProductSpecPriceDO;
...@@ -56,6 +57,8 @@ public interface ProductSkuDao { ...@@ -56,6 +57,8 @@ public interface ProductSkuDao {
void removeProductSpecCPQ(ProductSpecCPQVO productSpecCPQVO); void removeProductSpecCPQ(ProductSpecCPQVO productSpecCPQVO);
List<ProductSpecPriceDO> getProductSpecPrice(ProductSpecCPQVO productSpecCPQVO); List<ProductSpecPriceDO> getProductSpecPrice(ProductSpecCPQVO productSpecCPQVO);
void insertMallProdSkuInfo(MallProdSkuInfoDO mallProdSkuInfoDO);
} }
......
package com.mmc.pms.entity;
import com.mmc.pms.model.vo.GoodsAddVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author 23214
* @TableName goods_info
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class GoodsInfo implements Serializable {
private Integer id;
private Integer pid;
private String goodsNo;
private String goodsName;
private Integer directoryId;
private Integer addGoodsUserId;
private Integer categoryByOne;
private Integer categoryByTwo;
private String ecoLabel;
private Integer shelfStatus;
private Integer showCode;
private Integer sort;
private Date createTime;
private Integer goodsType;
private Date updateTime;
private Integer deleted;
private static final long serialVersionUID = 1L;
public GoodsInfo(GoodsAddVO goodsAddVO) {
this.id = goodsAddVO.getId();
this.goodsName = goodsAddVO.getGoodsName();
this.shelfStatus = goodsAddVO.getShelfStatus();
this.categoryByOne = goodsAddVO.getCategoryByOne();
this.categoryByTwo = goodsAddVO.getCategoryByTwo();
this.directoryId = goodsAddVO.getDirectoryId();
this.ecoLabel = goodsAddVO.getTag();
this.goodsType = goodsAddVO.getGoodsType();
}
}
\ No newline at end of file
...@@ -18,51 +18,56 @@ import java.util.Date; ...@@ -18,51 +18,56 @@ import java.util.Date;
@AllArgsConstructor @AllArgsConstructor
@Accessors(chain = true) @Accessors(chain = true)
public class MallProdSkuInfoDO implements Serializable { public class MallProdSkuInfoDO implements Serializable {
private static final long serialVersionUID = 3667714765929443857L; private static final long serialVersionUID = 3667714765929443857L;
private Integer id; private Integer id;
private Integer goodsInfoId; private Integer goodsInfoId;
private Integer prodSkuId; private Integer prodSkuId;
private String prodSkuSpecName; private String prodSkuSpecName;
private Integer goodsTypeId; private Integer categoryId;
private Integer chooseType; private Integer chooseType;
private Integer must; private Integer must;
private Integer skuUnitId; private Integer skuUnitId;
private Integer deleted; private Integer deleted;
private Date createTime; private Date createTime;
private Date updateTime; private Date updateTime;
private Integer flag; private Integer flag;
private String productSpecIdList;
private String beforeUpdateSpec;
/**
* 辅助字段 start
*/
private String typeName;
/** 辅助字段 start */ private String unitName;
private String typeName; private String productSkuName;
private Integer brandInfoId;
private String unitName; /**
private String productSkuName; * 辅助字段 end
private Integer brandInfoId; */
public MallProdSkuInfoDO(GoodsSpecVO goodsSpecVO) {
this.categoryId = goodsSpecVO.getGoodsTypeId();
this.prodSkuSpecName = goodsSpecVO.getGoodsSpecName();
this.chooseType = goodsSpecVO.getChooseType();
this.skuUnitId = goodsSpecVO.getSkuUnitId();
this.must = goodsSpecVO.getMust();
this.flag = goodsSpecVO.getFlag();
}
/** 辅助字段 end */ public GoodsSpecDTO buildGoodsSpecDTO() {
public MallProdSkuInfoDO(GoodsSpecVO goodsSpecVO) { return GoodsSpecDTO.builder()
this.goodsTypeId = goodsSpecVO.getGoodsTypeId(); .id(this.id)
this.prodSkuSpecName = goodsSpecVO.getGoodsSpecName(); .goodsSpecName(this.prodSkuSpecName)
this.chooseType = goodsSpecVO.getChooseType(); .goodsTypeId(this.categoryId)
this.skuUnitId = goodsSpecVO.getSkuUnitId(); .chooseType(this.chooseType)
this.must = goodsSpecVO.getMust(); .skuUnitId(skuUnitId)
this.flag = goodsSpecVO.getFlag(); .unitName(this.unitName)
} .skuId(this.prodSkuId)
.typeName(this.typeName)
public GoodsSpecDTO buildGoodsSpecDTO() { .must(must)
return GoodsSpecDTO.builder() .skuName(this.productSkuName)
.id(this.id) .brandInfoId(brandInfoId)
.goodsSpecName(this.prodSkuSpecName) .flag(flag)
.goodsTypeId(this.goodsTypeId) .build();
.chooseType(this.chooseType) }
.skuUnitId(skuUnitId)
.unitName(this.unitName)
.skuId(this.prodSkuId)
.typeName(this.typeName)
.must(must)
.skuName(this.productSkuName)
.brandInfoId(brandInfoId)
.flag(flag)
.build();
}
} }
...@@ -19,46 +19,46 @@ import java.util.Date; ...@@ -19,46 +19,46 @@ import java.util.Date;
@AllArgsConstructor @AllArgsConstructor
@Accessors(chain = true) @Accessors(chain = true)
public class ProductSpecDO implements Serializable { public class ProductSpecDO implements Serializable {
private static final long serialVersionUID = -5476701567447257133L; private static final long serialVersionUID = -5476701567447257133L;
private Integer id; private Integer id;
private Integer productSkuId; private Integer productSkuId;
private String specName; private String specName;
private String specImage; private String specImage;
private String partNo; private String partNo;
private String versionDesc; private String versionDesc;
private Date createTime; private Date createTime;
private Date updateTime; private Date updateTime;
private Integer deleted; private Integer deleted;
public ProductSpecDO(ProductSpecVO param) { public ProductSpecDO(ProductSpecVO param) {
this.id = param.getId(); this.id = param.getId();
this.productSkuId = param.getProductSkuId(); this.productSkuId = param.getProductSkuId();
this.specName = param.getSpecName(); this.specName = param.getSpecName();
this.specImage = param.getSpecImage(); this.specImage = param.getSpecImage();
this.partNo = param.getPartNo(); this.partNo = param.getPartNo();
this.versionDesc = param.getVersionDesc(); this.versionDesc = param.getVersionDesc();
} }
public ProductSpecDTO buildProductSpecDTO() { public ProductSpecDTO buildProductSpecDTO() {
return ProductSpecDTO.builder() return ProductSpecDTO.builder()
.id(this.id) .id(this.id)
.productSkuId(this.productSkuId) .productSkuId(this.productSkuId)
.specName(this.specName) .specName(this.specName)
.specImage(this.specImage) .specImage(this.specImage)
.partNo(this.partNo) .partNo(this.partNo)
.versionDesc(this.versionDesc) .versionDesc(this.versionDesc)
.createTime(this.createTime) .createTime(this.createTime)
.build(); .build();
} }
public MallProductSpecDTO buildMallProductSpecDTO() { public MallProductSpecDTO buildMallProductSpecDTO() {
return MallProductSpecDTO.builder() return MallProductSpecDTO.builder()
.productSpec(this.id) .productSpec(this.id)
.productSkuId(this.productSkuId) .productSkuId(this.productSkuId)
.specName(this.specName) .specName(this.specName)
.specImage(this.specImage) .specImage(this.specImage)
.partNo(this.partNo) .partNo(this.partNo)
.versionDesc(this.versionDesc) .versionDesc(this.versionDesc)
.build(); .build();
} }
} }
package com.mmc.pms.model.dto; package com.mmc.pms.model.dto;
import com.mmc.pms.model.vo.Create; import com.mmc.pms.model.vo.Create;
import com.mmc.pms.model.vo.ProductSpecCPQVO;
import com.mmc.pms.model.vo.Update; import com.mmc.pms.model.vo.Update;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -42,4 +43,6 @@ public class ProductSpecVO implements Serializable { ...@@ -42,4 +43,6 @@ public class ProductSpecVO implements Serializable {
@ApiModelProperty(value = "版本描述") @ApiModelProperty(value = "版本描述")
private String versionDesc; private String versionDesc;
@ApiModelProperty(value = "价格配置信息")
private ProductSpecCPQVO productSpecCPQVO;
} }
package com.mmc.pms.model.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* @Author LW
* @date 2022/10/14 11:30
* 概要:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class GoodsAddVO implements Serializable {
private static final long serialVersionUID = 7041502536618388167L;
@ApiModelProperty(value = "id")
@NotNull(message = "新增时传商品类型:0:销售商品 1:租赁商品", groups = {Create.class})
private Integer goodsType;
@ApiModelProperty(value = "id")
@NotNull(message = "修改时id不能为空", groups = {Update.class})
private Integer id;
@ApiModelProperty(value = "商品图片")
@NotEmpty(message = "主图不能为空", groups = {Update.class, Create.class})
private List<GoodsImgVO> images;
@ApiModelProperty(value = "商品视频")
private String goodsVideo;
@ApiModelProperty(value = "商品名称")
@NotNull(message = "商品名称不能为空", groups = {Update.class, Create.class})
private String goodsName;
@ApiModelProperty(value = "商品详情")
private GoodsDetailVO goodsDetailVO;
@ApiModelProperty(value = "所属目录")
@NotNull(message = "所属目录不能为空", groups = {Update.class, Create.class})
private Integer directoryId;
@ApiModelProperty(value = "一级分类id")
@NotNull(message = "分类不能为空", groups = {Update.class, Create.class})
private Integer categoryByOne;
@ApiModelProperty(value = "二级分类id")
private Integer categoryByTwo;
@ApiModelProperty(value = "商品标签")
private String tag;
@ApiModelProperty(value = "商品状态 0:下架 1:上架")
private Integer shelfStatus;
@ApiModelProperty(value = "规格信息")
private List<GoodsProdSpecVO> productSpec;
@ApiModelProperty(value = "其他服务: 1:免费配送,2:专业飞手培训2日, 3:半年保修, 4:一年保修 ")
private List<Integer> otherService;
}
...@@ -14,24 +14,17 @@ import java.io.Serializable; ...@@ -14,24 +14,17 @@ import java.io.Serializable;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
// @ApiModel(value = "com.mmc.csf.model.vo.GoodsDetailVO", description = "商品详情")
public class GoodsDetailVO implements Serializable { public class GoodsDetailVO implements Serializable {
private static final long serialVersionUID = -3842207843504795301L; private static final long serialVersionUID = -3842207843504795301L;
@ApiModelProperty(value = "商品描述 :70字内") @ApiModelProperty(value = "商品描述 :70字内")
@Size( @Size(max = 250, message = "商品描述不能超过250个字符", groups = {Create.class, Update.class})
max = 250, private String goodsDesc;
message = "商品描述不能超过250个字符",
groups = {Create.class, Update.class})
private String goodsDesc;
@ApiModelProperty(value = "产品介绍") @ApiModelProperty(value = "产品介绍")
private String productDesc; private String productDesc;
@ApiModelProperty(value = "商品备注:100字以内") @ApiModelProperty(value = "商品备注:100字以内")
@Size( @Size(max = 100, message = "商品备注不能超过100个字符", groups = {Create.class, Update.class})
max = 100, private String remark;
message = "商品备注不能超过100个字符",
groups = {Create.class, Update.class})
private String remark;
} }
package com.mmc.pms.model.vo;
import com.mmc.pms.model.dto.ProductSpecVO;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* @Author LW
* @date 2023/5/29 9:58
* 概要:
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GoodsProdSpecVO implements Serializable {
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "规格名称")
private String goodsSpecName;
@ApiModelProperty(value = "产品类型id")
private Integer categoryId;
@ApiModelProperty(value = "产品:自定义时此字段可不用填写")
private Integer skuId;
@ApiModelProperty(value = "规格来源 0:获取 1:自定义")
private Integer flag;
@ApiModelProperty(value = "产品名称(自定义的时候才需要传值)")
private String productName;
@ApiModelProperty(value = "选项来源")
private List<Integer> specIds;
@ApiModelProperty(value = "选择方式")
private Integer chooseType;
@ApiModelProperty(value = "规格单位")
private Integer skuUnitId;
@ApiModelProperty(value = "是否必选")
private Integer must;
@ApiModelProperty(value = "自定义规格的信息填充")
private List<ProductSpecVO> customizeInfo;
@ApiModelProperty(value = "删除的自定义规格id")
private List<Integer> delProductSpecId;
}
...@@ -16,41 +16,41 @@ import java.util.List; ...@@ -16,41 +16,41 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class GoodsSpecVO implements Serializable { public class GoodsSpecVO implements Serializable {
private static final long serialVersionUID = -8681372139970849591L; private static final long serialVersionUID = -8681372139970849591L;
@ApiModelProperty(value = "id") @ApiModelProperty(value = "id")
private Integer id; private Integer id;
@ApiModelProperty(value = "规格名称") @ApiModelProperty(value = "规格名称")
private String goodsSpecName; private String goodsSpecName;
@ApiModelProperty(value = "产品类型") @ApiModelProperty(value = "产品类型")
private Integer goodsTypeId; private Integer goodsTypeId;
@ApiModelProperty(value = "产品:自定义时此字段可不用填写") @ApiModelProperty(value = "产品:自定义时此字段可不用填写")
private Integer skuId; private Integer skuId;
@ApiModelProperty(value = "规格来源 0:获取 1:自定义") @ApiModelProperty(value = "规格来源 0:获取 1:自定义")
private Integer flag; private Integer flag;
@ApiModelProperty(value = "产品名称(自定义的时候才需要传值)") @ApiModelProperty(value = "产品名称(自定义的时候才需要传值)")
private String productName; private String productName;
@ApiModelProperty(value = "选项来源") @ApiModelProperty(value = "选项来源")
private List<MallProductSpecVO> specIds; private List<MallProductSpecVO> specIds;
@ApiModelProperty(value = "选择方式") @ApiModelProperty(value = "选择方式")
private Integer chooseType; private Integer chooseType;
@ApiModelProperty(value = "规格单位") @ApiModelProperty(value = "规格单位")
private Integer skuUnitId; private Integer skuUnitId;
@ApiModelProperty(value = "是否必选") @ApiModelProperty(value = "是否必选")
private Integer must; private Integer must;
@ApiModelProperty(value = "自定义的信息填充") @ApiModelProperty(value = "自定义的信息填充")
private List<ProductSpecVO> customizeInfo; private List<ProductSpecVO> customizeInfo;
@ApiModelProperty(value = "删除的自定义规格id") @ApiModelProperty(value = "删除的自定义规格id")
private List<Integer> delProductSpecId; private List<Integer> delProductSpecId;
} }
package com.mmc.pms.service;
import com.mmc.pms.common.ResultBody;
import com.mmc.pms.model.vo.GoodsAddVO;
/**
* @author 23214
* @description 针对表【goods_info(商品基本信息)】的数据库操作Service
* @createDate 2023-05-27 14:08:45
*/
public interface GoodsInfoService {
ResultBody addGoods(GoodsAddVO goodsAddVO);
}
package com.mmc.pms.service.Impl;
import com.mmc.pms.common.ResultBody;
import com.mmc.pms.common.ResultEnum;
import com.mmc.pms.dao.GoodsInfoDao;
import com.mmc.pms.dao.ProductSkuDao;
import com.mmc.pms.entity.*;
import com.mmc.pms.model.vo.GoodsAddVO;
import com.mmc.pms.model.vo.GoodsDetailVO;
import com.mmc.pms.model.vo.GoodsProdSpecVO;
import com.mmc.pms.model.vo.ProductSpecCPQVO;
import com.mmc.pms.service.GoodsInfoService;
import com.mmc.pms.util.CodeUtil;
import com.mmc.pms.util.TDateUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author 23214
* @description 针对表【goods_info(商品基本信息)】的数据库操作Service实现
* @createDate 2023-05-27 14:08:45
*/
@Service
public class GoodsInfoServiceImpl implements GoodsInfoService {
@Resource
private GoodsInfoDao goodsInfoDao;
@Resource
private ProductSkuDao productSkuDao;
@Resource
private ProductSkuServiceImpl productSkuService;
@Override
@Transactional(rollbackFor = Exception.class)
public ResultBody addGoods(GoodsAddVO goodsAddVO) {
// 判断商品名称是否存在
if (goodsInfoDao.countGoodsInfoByName(goodsAddVO) > 0) {
return ResultBody.error(ResultEnum.GOODS_CATEGORY_NAME_EXIST_ERROR);
}
// 判断商品详情中描述是否为空
if (goodsAddVO.getGoodsDetailVO().getGoodsDesc() == null) {
return ResultBody.error(ResultEnum.GOODS_DESC_IS_NOT_NULL);
}
String YYYY_MM_DD_HH_MM_SS = "yyyyMMddHHmmss";
// 初始化商品对象,并构建对象
GoodsInfo goodsInfo = new GoodsInfo(goodsAddVO);
goodsInfo.setGoodsNo("IUAV" + TDateUtil.getDateStr(new Date(), YYYY_MM_DD_HH_MM_SS) + CodeUtil.getRandomNum(4));
// 暂未接入用户默认传1
goodsInfo.setAddGoodsUserId(1);
goodsInfo.setSort(goodsInfoDao.countGoodsInfo() + 1);
// 插入商品基本信息
goodsInfoDao.insertGoodsInfo(goodsInfo);
// 调用图片视频插入信息方法
addGoodsImageInfo(goodsInfo.getId(), goodsAddVO);
// 调用商品详情信息方法
addGoodsDetail(goodsInfo.getId(), goodsAddVO.getGoodsDetailVO());
// 判断其他服务是否为空,不为空则插入
if (!CollectionUtils.isEmpty(goodsAddVO.getOtherService())) {
addOtherService(goodsAddVO.getOtherService(), goodsInfo.getId());
}
// 调用产品规格的新增方法
if (!goodsAddVO.getDirectoryId().equals(2)) {
// 添加产品规格信息
productSkuSpecOperation(goodsInfo, goodsAddVO.getProductSpec());
}
return ResultBody.success();
}
@Transactional(rollbackFor = Exception.class)
public void productSkuSpecOperation(GoodsInfo goodsInfo, List<GoodsProdSpecVO> productSpec) {
// 遍历规格信息,获取其中非自定义的规格信息
List<GoodsProdSpecVO> customGoodsSpecList = productSpec.stream().filter(spec -> spec.getFlag().equals(1)).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(customGoodsSpecList)) {
addCustomization(goodsInfo, customGoodsSpecList);
}
// 遍历规格信息,获取其中非自定义的规格信息
List<GoodsProdSpecVO> goodsSpecList = productSpec.stream().filter(spec -> spec.getFlag().equals(0)).collect(Collectors.toList());
for (GoodsProdSpecVO goodsSpec : goodsSpecList) {
MallProdSkuInfoDO mallProdSkuInfoDO = buildMallProdSkuInfo(goodsInfo, goodsSpec, goodsSpec.getSkuId());
mallProdSkuInfoDO.setProductSpecIdList(goodsSpec.getSpecIds().stream().map(String::valueOf).collect(Collectors.joining(",")));
// 插入数据库商品对应的sku信息
productSkuDao.insertMallProdSkuInfo(mallProdSkuInfoDO);
}
}
@Transactional(rollbackFor = Exception.class)
public MallProdSkuInfoDO buildMallProdSkuInfo(GoodsInfo goodsInfo, GoodsProdSpecVO goodsSpec, Integer id) {
MallProdSkuInfoDO mallProdSkuInfoDO = new MallProdSkuInfoDO();
mallProdSkuInfoDO.setGoodsInfoId(goodsInfo.getId());
mallProdSkuInfoDO.setProdSkuId(id);
mallProdSkuInfoDO.setProdSkuSpecName(goodsSpec.getGoodsSpecName());
mallProdSkuInfoDO.setCategoryId(goodsSpec.getCategoryId());
mallProdSkuInfoDO.setChooseType(goodsSpec.getChooseType());
mallProdSkuInfoDO.setMust(goodsSpec.getMust());
mallProdSkuInfoDO.setFlag(goodsSpec.getFlag());
mallProdSkuInfoDO.setSkuUnitId(goodsSpec.getSkuUnitId());
return mallProdSkuInfoDO;
}
@Transactional(rollbackFor = Exception.class)
public void addCustomization(GoodsInfo goodsInfo, List<GoodsProdSpecVO> customGoodsSpecList) {
// 遍历自定义规格信息
for (GoodsProdSpecVO productSpec : customGoodsSpecList) {
// 构建商品对应的sku信息
ProductSkuDO productSkuDO = new ProductSkuDO().setCategoriesId(productSpec.getCategoryId())
.setProductName(productSpec.getProductName()).setCustomize(1)
.setDirectoryId(goodsInfo.getDirectoryId());
// 插入产品sku信息
productSkuDao.insertProductSku(productSkuDO);
// 先将自定的信息存储到数据库中
List<ProductSpecDO> customizeSpec = productSpec.getCustomizeInfo().stream().map(param -> {
ProductSpecDO productSpecDO = new ProductSpecDO().setProductSkuId(productSkuDO.getId())
.setVersionDesc("自定义").setSpecImage(param.getSpecImage())
.setSpecName(param.getSpecName()).setPartNo(param.getPartNo());
// 新增产品sku
productSkuDao.insertProductSpec(productSpecDO);
// 批量配置价格信息
ProductSpecCPQVO productSpecCPQVO = param.getProductSpecCPQVO();
if (productSpecCPQVO != null) {
productSpecCPQVO.setProductSpecId(productSpecDO.getId());
productSkuService.insertSpecPrice(productSpecCPQVO);
}
return productSpecDO;
}).collect(Collectors.toList());
List<Integer> ids = customizeSpec.stream().map(ProductSpecDO::getId).collect(Collectors.toList());
MallProdSkuInfoDO mallProdSkuInfoDO = buildMallProdSkuInfo(goodsInfo, productSpec, productSkuDO.getId());
mallProdSkuInfoDO.setProductSpecIdList(ids.stream().map(String::valueOf).collect(Collectors.joining(",")));
// 插入数据库商品对应的sku信息
productSkuDao.insertMallProdSkuInfo(mallProdSkuInfoDO);
}
}
@Transactional(rollbackFor = Exception.class)
public void addOtherService(List<Integer> otherService, Integer goodsId) {
// 插入其他服务
List<GoodsServiceDO> otherList = otherService.stream().map(d -> {
GoodsServiceDO goodsServiceDO = new GoodsServiceDO();
goodsServiceDO.setGoodsInfoId(goodsId);
goodsServiceDO.setSaleServiceId(d);
return goodsServiceDO;
}).collect(Collectors.toList());
goodsInfoDao.insertGoodsService(otherList);
}
@Transactional(rollbackFor = Exception.class)
public void addGoodsDetail(Integer goodsId, GoodsDetailVO goodsDetailVO) {
GoodsDetailDO goodsDetailDO = new GoodsDetailDO(goodsDetailVO);
goodsDetailDO.setGoodsInfoId(goodsId);
goodsInfoDao.insertGoodsDetail(goodsDetailDO);
}
@Transactional(rollbackFor = Exception.class)
public void addGoodsImageInfo(Integer goodsId, GoodsAddVO goodsAddVO) {
List<GoodsImgDO> list = goodsAddVO.getImages().stream().map(d -> {
GoodsImgDO goodsImgDO = new GoodsImgDO(d);
goodsImgDO.setGoodsInfoId(goodsId);
return goodsImgDO;
}).collect(Collectors.toList());
// 插入图片信息
goodsInfoDao.insertGoodsImgInfo(list);
// 插入商品视频信息
if (goodsAddVO.getGoodsVideo() != null) {
GoodsVideoDO goodsVideoDO = new GoodsVideoDO().setGoodsInfoId(goodsId).setVideoUrl(goodsAddVO.getGoodsVideo());
goodsInfoDao.insertVideoInfo(goodsVideoDO);
}
}
}
...@@ -4,7 +4,6 @@ import com.mmc.pms.common.ResultBody; ...@@ -4,7 +4,6 @@ import com.mmc.pms.common.ResultBody;
import com.mmc.pms.common.ResultEnum; import com.mmc.pms.common.ResultEnum;
import com.mmc.pms.dao.MiniProgramProductMallDao; import com.mmc.pms.dao.MiniProgramProductMallDao;
import com.mmc.pms.dao.WebDeviceDao; import com.mmc.pms.dao.WebDeviceDao;
import com.mmc.pms.entity.GoodsInfoDO;
import com.mmc.pms.entity.*; import com.mmc.pms.entity.*;
import com.mmc.pms.model.dto.*; import com.mmc.pms.model.dto.*;
import com.mmc.pms.model.qo.GoodsInfoQO; import com.mmc.pms.model.qo.GoodsInfoQO;
...@@ -115,7 +114,7 @@ public class MiniProgramProductMallServiceImpl implements MiniProgramProductMall ...@@ -115,7 +114,7 @@ public class MiniProgramProductMallServiceImpl implements MiniProgramProductMall
.setGoodsSpecName(d.getProdSkuSpecName()) .setGoodsSpecName(d.getProdSkuSpecName())
.setSkuName(d.getProductSkuName()) .setSkuName(d.getProductSkuName())
.setBrandInfoId(d.getBrandInfoId()) .setBrandInfoId(d.getBrandInfoId())
.setGoodsTypeId(d.getGoodsTypeId()) .setGoodsTypeId(d.getCategoryId())
.setTypeName(d.getTypeName()) .setTypeName(d.getTypeName())
.setChooseType(d.getChooseType()) .setChooseType(d.getChooseType())
.setSkuUnitId(d.getSkuUnitId()) .setSkuUnitId(d.getSkuUnitId())
......
...@@ -165,7 +165,7 @@ public class ProductSkuServiceImpl implements ProductSkuService { ...@@ -165,7 +165,7 @@ public class ProductSkuServiceImpl implements ProductSkuService {
} }
@NotNull @NotNull
private ResultBody insertSpecPrice(ProductSpecCPQVO productSpecCPQVO) { public ResultBody insertSpecPrice(ProductSpecCPQVO productSpecCPQVO) {
List<ProductSpecPriceDO> list = getProductSpecPriceDOS(productSpecCPQVO); List<ProductSpecPriceDO> list = getProductSpecPriceDOS(productSpecCPQVO);
// 批量插入规格销售价格 // 批量插入规格销售价格
if (productSpecCPQVO.getType().equals(0)) { if (productSpecCPQVO.getType().equals(0)) {
......
package com.mmc.pms.util;
import java.util.Random;
/**
* @author 作者 geDuo
* @version 创建时间:2021年8月28日 下午3:17:24
* @explain 编号操作类
*/
public class CodeUtil {
private static Random random = new Random();
// 数据生成有位数字或字母的随机数
public static String randomCode(int num) {
// 0-61 9 9+26=35 35+26 =61 65-90 97-122
StringBuffer sb = new StringBuffer();
for (int i = 0; i < num; i++) {
int y = random.nextInt(62);
if (y <= 9) {
// 数值
sb.append(y);
} else {
if (y <= 35) {
// 大写字母
y += 55;
} else {
// 小写字母
y += 61;
}
sb.append((char) y);
}
}
return sb.toString();
}
/**
* 生成随机数字
*
* @param length[生成随机数的长度]
* @return
*/
public static String getRandomNum(int length) {
StringBuffer sb = new StringBuffer();
Random random = new Random();
for (int i = 0; i < length; i++) {
sb.append(String.valueOf(random.nextInt(10)));
}
return sb.toString();
}
/**
* 生成用户uid
*
* @return
*/
public static String createUserUID() {
return "UID" + CodeUtil.getRandomNum(7);
}
/**
* 生成-现金流水账目no
*/
public static String createPayCashNO() {
StringBuffer sb = new StringBuffer();
sb.append("T");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成-信用流水账目no
*/
public static String createPayCreditNo() {
StringBuffer sb = new StringBuffer();
sb.append("T");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成-飞手工资流水账目no
*/
public static String createPayWagNo() {
StringBuffer sb = new StringBuffer();
sb.append("T");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成订单no
*/
public static String createOrderTaskNO() {
StringBuffer sb = new StringBuffer();
sb.append("D");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成-信用返利账目no
*/
public static String createPayRebateNo() {
StringBuffer sb = new StringBuffer();
sb.append("T");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成行业no
*/
public static String createIndustryNO() {
StringBuffer sb = new StringBuffer();
sb.append("HY");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成服务no
*/
public static String createInspectionNO() {
StringBuffer sb = new StringBuffer();
sb.append("FW");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成服务no
*/
public static String createRoleNo() {
StringBuffer sb = new StringBuffer();
sb.append("JS");
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成商品编号
*
* @return
*/
public static String createWareID() {
return "ID" + CodeUtil.getRandomNum(10);
}
/**
* 生成云仓订单编号
*/
public static String createRepoOrderNo() {
StringBuffer sb = new StringBuffer();
sb.append("R");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 云仓现金流水
*/
public static String createRepoCashNo() {
StringBuffer sb = new StringBuffer();
sb.append("J");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 生成商品编号
*
* @return
*/
public static String createDeviceCode() {
return "DC" + CodeUtil.getRandomNum(6);
}
/**
* 云仓现金流水
*/
public static String createOrderRefund() {
StringBuffer sb = new StringBuffer();
sb.append("RD");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 返祖订单号
*/
public static String createShareOrderNo() {
StringBuffer sb = new StringBuffer();
sb.append("GX");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmm"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 型号编号
*/
public static String createDeviceModelNo() {
return "DM" + CodeUtil.getRandomNum(8);
}
/**
* 仓库编号
*/
public static String createRepoNo() {
return "RN" + CodeUtil.getRandomNum(8);
}
public static String uavOrderCode(Long id) {
StringBuffer sb = new StringBuffer();
sb.append("UD");
sb.append(TDateUtil.getCurrentDateByType("yyyyMMddHHmmss"));
sb.append(CodeUtil.getRandomNum(4));
return sb.toString();
}
/**
* 活动编号
*/
public static String generateActivityNo() {
return "AC" + CodeUtil.getRandomNum(5);
}
}
<?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.mmc.pms.dao.GoodsInfoDao">
<insert id="insertGoodsInfo" parameterType="com.mmc.pms.entity.GoodsInfo"
useGeneratedKeys="true" keyProperty="id">
insert into goods_info(goods_no,
goods_name,
directory_id,
category_by_one,
category_by_two,
eco_label,
shelf_status,
sort,
goods_type,
add_goods_user_id)
values (#{goodsNo}, #{goodsName}, #{directoryId}, #{categoryByOne}, #{categoryByTwo}, #{ecoLabel},
#{shelfStatus}, #{sort}, #{goodsType}, #{addGoodsUserId})
</insert>
<insert id="insertGoodsImgInfo">
insert into
goods_img
(goods_info_id,img_url,img_type)
values
<foreach item="item" index="index" collection="list" separator=",">
(
#{item.goodsInfoId},
#{item.imgUrl},
#{item.imgType}
)
</foreach>
</insert>
<insert id="insertVideoInfo">
insert into goods_video
(goods_info_id, video_url)
values (#{goodsInfoId}, #{videoUrl})
</insert>
<insert id="insertGoodsDetail">
insert into goods_detail (goods_info_id, goods_desc, content, remark)
values (#{goodsInfoId}, #{goodsDesc}, #{content}, #{remark})
</insert>
<insert id="insertGoodsService">
insert into
goods_service
(goods_info_id,sale_service_id)
values
<foreach item="item" index="index" collection="list" separator=",">
(
#{item.goodsInfoId},
#{item.saleServiceId}
)
</foreach>
</insert>
<select id="countGoodsInfoByName" resultType="java.lang.Integer">
select count(*)
from goods_info
where is_deleted = 0
and goods_name = #{goodsName}
<if test="id!=null and id!=''">
and id <![CDATA[<>]]> #{id}
</if>
</select>
<select id="countGoodsInfo" resultType="java.lang.Integer">
select count(*)
from goods_info
</select>
</mapper>
...@@ -3,11 +3,13 @@ ...@@ -3,11 +3,13 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mmc.pms.dao.ProductSkuDao"> <mapper namespace="com.mmc.pms.dao.ProductSkuDao">
<insert id="insertProductSku"> <insert id="insertProductSku" parameterType="com.mmc.pms.entity.ProductSkuDO"
useGeneratedKeys="true" keyProperty="id">
insert into product_sku (product_name, categories_id, model, brand_info_id, directory_id) insert into product_sku (product_name, categories_id, model, brand_info_id, directory_id)
values (#{productName}, #{categoriesId}, #{model}, #{brandInfoId}, #{directoryId}) values (#{productName}, #{categoriesId}, #{model}, #{brandInfoId}, #{directoryId})
</insert> </insert>
<insert id="insertProductSpec"> <insert id="insertProductSpec" keyProperty="id" useGeneratedKeys="true"
parameterType="com.mmc.pms.entity.ProductSpecDO">
insert into product_spec (product_sku_id, spec_name, spec_image, part_no, version_desc) insert into product_spec (product_sku_id, spec_name, spec_image, part_no, version_desc)
values (#{productSkuId}, #{specName}, #{specImage}, #{partNo}, #{versionDesc}) values (#{productSkuId}, #{specName}, #{specImage}, #{partNo}, #{versionDesc})
</insert> </insert>
...@@ -26,6 +28,12 @@ ...@@ -26,6 +28,12 @@
(#{item.productSpecId},#{item.cooperationTag},#{item.price},#{item.type},#{item.leaseTerm}) (#{item.productSpecId},#{item.cooperationTag},#{item.price},#{item.type},#{item.leaseTerm})
</foreach> </foreach>
</insert> </insert>
<insert id="insertMallProdSkuInfo">
insert into mall_prod_sku_info (goods_info_id, prod_sku_id, prod_sku_spec_name, category_id, choose_type,
sku_unit_id, is_must, product_spec_id_list, flag)
values (#{goodsInfoId}, #{prodSkuId}, #{prodSkuSpecName}, #{categoryId}, #{chooseType}, #{skuUnitId}, #{must},
#{productSpecIdList}, #{flag})
</insert>
<update id="updateProductSku"> <update id="updateProductSku">
update product_sku update product_sku
set product_name = #{productName}, set product_name = #{productName},
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论