|
@@ -2,23 +2,29 @@ package com.ym.mec.biz.service.impl;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.ym.mec.biz.dal.dao.*;
|
|
|
import com.ym.mec.biz.dal.dto.BasicUserDto;
|
|
|
import com.ym.mec.biz.dal.dto.ComplementGoodsDto;
|
|
|
import com.ym.mec.biz.dal.dto.GoodsSellDto;
|
|
|
import com.ym.mec.biz.dal.entity.Goods;
|
|
|
import com.ym.mec.biz.dal.entity.GoodsProcurement;
|
|
|
+import com.ym.mec.biz.dal.entity.GoodsSub;
|
|
|
import com.ym.mec.biz.dal.entity.Organization;
|
|
|
import com.ym.mec.biz.dal.entity.SellOrder;
|
|
|
import com.ym.mec.biz.dal.enums.*;
|
|
|
+import com.ym.mec.biz.dal.mapper.GoodsSubMapper;
|
|
|
import com.ym.mec.biz.dal.page.GoodsQuery;
|
|
|
import com.ym.mec.biz.dal.page.GoodsQueryInfo;
|
|
|
+import com.ym.mec.biz.dal.wrapper.GoodsWrapper;
|
|
|
import com.ym.mec.biz.service.*;
|
|
|
import com.ym.mec.common.dal.BaseDAO;
|
|
|
import com.ym.mec.common.dto.PmsProductDto;
|
|
|
import com.ym.mec.common.dto.PmsProductQueryParamDto;
|
|
|
import com.ym.mec.common.entity.UploadReturnBean;
|
|
|
import com.ym.mec.common.exception.BizException;
|
|
|
+import com.ym.mec.common.page.PageInfo;
|
|
|
import com.ym.mec.common.service.IdGeneratorService;
|
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
|
import com.ym.mec.common.tenant.TenantContextHolder;
|
|
@@ -32,6 +38,7 @@ import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.poi.ss.usermodel.PictureData;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.core.io.ClassPathResource;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -73,6 +80,8 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
@Resource
|
|
|
private MallFeignService mallFeignService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private GoodsSubMapper goodsSubMapper;
|
|
|
@Override
|
|
|
public BaseDAO<Integer, Goods> getDAO() {
|
|
|
return goodsDao;
|
|
@@ -162,20 +171,17 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
- public void addGoods(Goods goods, Integer operatorId) {
|
|
|
+ public void addGoods(GoodsWrapper.Goods goods, Integer operatorId) {
|
|
|
if(StringUtils.isBlank(goods.getSn())){
|
|
|
throw new BizException("请指定商品货号");
|
|
|
}
|
|
|
- if(StringUtils.isEmpty(goods.getComplementGoodsJson())){
|
|
|
- throw new BizException("请指定子商品");
|
|
|
- }
|
|
|
Goods existsGood = goodsDao.lockBySn(goods.getSn());
|
|
|
if(Objects.nonNull(existsGood)){
|
|
|
throw new BizException("商品货号重复");
|
|
|
}
|
|
|
- List<ComplementGoodsDto> complementGoods = JSON.parseArray(goods.getComplementGoodsJson(), ComplementGoodsDto.class);
|
|
|
+ List<GoodsWrapper.GoodsSub> goodsSubList = goods.getGoodsSubList();
|
|
|
//获取最小的库存数
|
|
|
- String skuIds = complementGoods.stream().map(e -> e.getSkuStockId().toString()).collect(Collectors.joining(","));
|
|
|
+ String skuIds = goodsSubList.stream().map(e -> e.getSku().toString()).collect(Collectors.joining(","));
|
|
|
PmsProductQueryParamDto paramDto = new PmsProductQueryParamDto();
|
|
|
paramDto.setSkuStockIds(skuIds);
|
|
|
paramDto.setPublishStatus(1);
|
|
@@ -189,7 +195,14 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
Integer stock = productList.stream().map(PmsProductDto::getStock).min(Integer::compareTo).get();
|
|
|
goods.setStockCount(stock);
|
|
|
goods.setSellCount(0);
|
|
|
- goodsDao.insert(goods);
|
|
|
+ Goods goodsRecord = new Goods();
|
|
|
+ BeanUtils.copyProperties(goods,goodsRecord);
|
|
|
+ BigDecimal organCostPrice = goodsSubList.stream().map(GoodsWrapper.GoodsSub::getGoodsPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ goodsRecord.setOrganCostPrice(organCostPrice);
|
|
|
+ goodsDao.insert(goodsRecord);
|
|
|
+ List<GoodsSub> goodsSubs = JSON.parseArray(JSON.toJSONString(goodsSubList), GoodsSub.class);
|
|
|
+ goodsSubs.forEach(next -> next.setGoodsId(goodsRecord.getId()));
|
|
|
+ goodsSubMapper.saveBatch(goodsSubs);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -245,6 +258,13 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
throw new BizException("{}等商品还在销售中", goodsNames);
|
|
|
}
|
|
|
}
|
|
|
+ List<GoodsSub> goodsSubs = queryGoodsSub(goodsId);
|
|
|
+ if (!CollectionUtils.isEmpty(goodsSubs) && status == 1) {
|
|
|
+ long falseSize = goodsSubs.stream().map(GoodsSub::getGoodsStatus).filter(Boolean.FALSE::equals).count();
|
|
|
+ if (falseSize > 0) {
|
|
|
+ throw new BizException("存在已下架的子商品");
|
|
|
+ }
|
|
|
+ }
|
|
|
}else{
|
|
|
if(status==1){
|
|
|
List<Integer> goodsIds = Arrays.stream(goods.getComplementGoodsIdList().split(",")).map(s -> Integer.valueOf(s)).collect(Collectors.toList());
|
|
@@ -259,6 +279,14 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
goodsDao.update(goods);
|
|
|
}
|
|
|
|
|
|
+ private List<GoodsSub> queryGoodsSub(Integer goodsId) {
|
|
|
+ // 从管乐迷商城组合的商品
|
|
|
+ QueryWrapper<GoodsSub> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("goods_id_", goodsId);
|
|
|
+ List<GoodsSub> goodsSubs = goodsSubMapper.selectList(queryWrapper);
|
|
|
+ return goodsSubs;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public List<Goods> findGoodsBySubId(GoodsQuery goodsQuery) {
|
|
|
return goodsDao.findGoodsBySubId(goodsQuery);
|
|
@@ -729,7 +757,7 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Goods getDetail(Integer goodsId) {
|
|
|
+ public GoodsWrapper.Goods getDetail(Integer goodsId) {
|
|
|
Goods goods = goodsDao.get(goodsId);
|
|
|
if(StringUtils.isNotEmpty(goods.getStudentShowOrganId())){
|
|
|
goods.setStudentShowOrganName(StringUtils.join(organizationDao.findByOrganIds(goods.getStudentShowOrganId()),","));
|
|
@@ -749,7 +777,11 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
if(StringUtils.isNotEmpty(goods.getFreeFeeShowOrganId())){
|
|
|
goods.setFreeFeeShowOrganName(StringUtils.join(organizationDao.findByOrganIds(goods.getFreeFeeShowOrganId()),","));
|
|
|
}
|
|
|
- return goods;
|
|
|
+ List<GoodsSub> goodsSubs = queryGoodsSub(goodsId);
|
|
|
+ GoodsWrapper.Goods detail = new GoodsWrapper.Goods();
|
|
|
+ BeanUtils.copyProperties(goods, detail);
|
|
|
+ detail.setGoodsSubList(JSON.parseArray(JSON.toJSONString(goodsSubs), GoodsWrapper.GoodsSub.class));
|
|
|
+ return detail;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -762,4 +794,48 @@ public class GoodsServiceImpl extends BaseServiceImpl<Integer, Goods> implement
|
|
|
public int batchUpdate(List<Goods> goodsList) {
|
|
|
return goodsDao.batchUpdate(goodsList);
|
|
|
}
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ @Override
|
|
|
+ public void updateGoods(GoodsWrapper.Goods goods) {
|
|
|
+ Goods goodsInfo = goodsDao.getGoodsInfo(goods.getId());
|
|
|
+ if (goodsInfo == null) {
|
|
|
+ throw new BizException("参数错误");
|
|
|
+ }
|
|
|
+ List<GoodsWrapper.GoodsSub> goodsSubList = goods.getGoodsSubList();
|
|
|
+ if (StringUtils.isEmpty(goodsInfo.getComplementGoodsIdList()) && goodsSubList.isEmpty()) {
|
|
|
+ throw new BizException("子商品信息不能为空");
|
|
|
+ }
|
|
|
+ goodsInfo.setStatus(null);
|
|
|
+ BeanUtils.copyProperties(goods, goodsInfo);
|
|
|
+ if (!goodsSubList.isEmpty()) {
|
|
|
+ goodsInfo.setComplementGoodsIdList(null);
|
|
|
+ UpdateWrapper<GoodsSub> delWrapper = new UpdateWrapper<>();
|
|
|
+ delWrapper.eq("goods_id_", goods.getId());
|
|
|
+ goodsSubMapper.delete(delWrapper);
|
|
|
+
|
|
|
+ List<GoodsSub> goodsSubs = JSON.parseArray(JSON.toJSONString(goodsSubList), GoodsSub.class);
|
|
|
+ goodsSubs.forEach(next -> next.setGoodsId(goods.getId()));
|
|
|
+ goodsSubMapper.saveBatch(goodsSubs);
|
|
|
+
|
|
|
+ BigDecimal organCostPrice = goodsSubList.stream().map(GoodsWrapper.GoodsSub::getGoodsPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ goodsInfo.setOrganCostPrice(organCostPrice);
|
|
|
+ }
|
|
|
+ update(goodsInfo);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public PageInfo<PmsProductDto> queryGoodsSubByPage(GoodsWrapper.GoodsSubQuery query) {
|
|
|
+ PmsProductQueryParamDto dto = PmsProductQueryParamDto.builder()
|
|
|
+ .publishStatus(query.getPublishStatus())
|
|
|
+ .keyword(query.getKeyword())
|
|
|
+ .productSn(query.getProductSn())
|
|
|
+ .productIds(query.getProductIds())
|
|
|
+ .productCategoryId(query.getProductCategoryId())
|
|
|
+ .brandId(query.getBrandId())
|
|
|
+ .pageNum(query.getPage())
|
|
|
+ .pageSize(query.getRows())
|
|
|
+ .build();
|
|
|
+ return mallFeignService.getProductList(dto);
|
|
|
+ }
|
|
|
}
|