zxl
5 天以前 1c7c1366a88bcb056a0e0bc5e0e2dfe8470b4be2
framework/src/main/java/cn/lili/modules/goods/serviceimpl/GoodsSkuServiceImpl.java
@@ -37,7 +37,11 @@
import cn.lili.modules.goods.service.WholesaleService;
import cn.lili.modules.goods.sku.GoodsSkuBuilder;
import cn.lili.modules.goods.sku.render.SalesModelRender;
import cn.lili.modules.lmk.domain.entity.PriceChange;
import cn.lili.modules.lmk.enums.general.ChangePriceAudioStatusEnum;
import cn.lili.modules.lmk.enums.general.ChangePriceOperationTypeEnum;
import cn.lili.modules.lmk.enums.general.ViewTypeEnum;
import cn.lili.modules.lmk.service.PriceChangeService;
import cn.lili.modules.member.entity.dos.FootPrint;
import cn.lili.modules.promotion.entity.dos.Coupon;
import cn.lili.modules.promotion.entity.dos.PromotionGoods;
@@ -56,8 +60,10 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList;
@@ -73,8 +79,10 @@
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -84,6 +92,7 @@
 * @since 2020-02-23 15:18:56
 */
@Service
@Slf4j
public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper, GoodsSku> implements GoodsSkuService {
    /**
@@ -137,6 +146,9 @@
    @Autowired
    private List<SalesModelRender> salesModelRenders;
    @Autowired
    private PriceChangeService priceChangeService;
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void add(Goods goods, GoodsOperationDTO goodsOperationDTO) {
@@ -151,12 +163,29 @@
        if (!goodsSkus.isEmpty()) {
            this.saveOrUpdateBatch(goodsSkus);
            this.updateGoodsStock(goodsSkus);
            //记录价格变动
            List<PriceChange> priceChangeList = goodsSkus.stream().map(item -> {
                PriceChange priceChange = new PriceChange();
                priceChange.setCurrentPrice(BigDecimal.valueOf(item.getPrice()));
                priceChange.setSkuId(item.getId());
                priceChange.setGoodsId(item.getGoodsId());
                priceChange.setPreviousPrice(BigDecimal.ZERO);
                priceChange.setPreviousCommission(BigDecimal.ZERO);
                priceChange.setCurrentCommission(goods.getCommission());
                priceChange.setOperatorType(ChangePriceOperationTypeEnum.STORE.name());
                priceChange.setExamineStatus(ChangePriceAudioStatusEnum.APPLY.name());
                priceChange.setOperatorId(UserContext.getCurrentUser().getId());
                priceChange.setOperatorName(UserContext.getCurrentUser().getNickName());
                priceChange.setStoreId(item.getStoreId());
                return priceChange;
            }).collect(Collectors.toList());
            priceChangeService.saveBatch(priceChangeList);
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void update(Goods goods, GoodsOperationDTO goodsOperationDTO) {
    public void update(Goods goods, GoodsOperationDTO goodsOperationDTO,Goods previousGoods) {
        // 是否存在规格
        if (goodsOperationDTO.getSkuList() == null || goodsOperationDTO.getSkuList().isEmpty()) {
            throw new ServiceException(ResultCode.MUST_HAVE_GOODS_SKU);
@@ -199,9 +228,41 @@
            unnecessarySkuIdsQuery.eq(GoodsSku::getGoodsId, goods.getId());
            unnecessarySkuIdsQuery.notIn(GoodsSku::getId,
                    skuList.stream().map(BaseEntity::getId).collect(Collectors.toList()));
            LambdaQueryWrapper<GoodsSku> skuIdsQuery = new LambdaQueryWrapper<>();
            skuIdsQuery.eq(GoodsSku::getGoodsId, goods.getId());
            skuIdsQuery.in(GoodsSku::getId,
                    skuList.stream().map(BaseEntity::getId).collect(Collectors.toList()));
            Map<String, GoodsSku> skuMap = this.list(skuIdsQuery).stream().collect(Collectors.toMap(GoodsSku::getId, Function.identity()));
            this.remove(unnecessarySkuIdsQuery);
            this.saveOrUpdateBatch(skuList);
            this.updateGoodsStock(skuList);
            //记录价格变动
            //删除当前审核状态为申请的改价的商品 店铺id一致商品id一致且为申请状态的移除
            LambdaQueryWrapper<PriceChange> needRemove = Wrappers.<PriceChange>lambdaQuery()
                    .eq(PriceChange::getGoodsId, goods.getId())
                    .eq(PriceChange::getStoreId, goods.getStoreId())
                    .eq(PriceChange::getExamineStatus, ChangePriceAudioStatusEnum.APPLY.name());
            priceChangeService.remove(needRemove);
            //重新添加改价商品
            List<PriceChange> priceChangeList = skuList.stream().map(item -> {
                PriceChange priceChange = new PriceChange();
                priceChange.setCurrentPrice(BigDecimal.valueOf(item.getPrice()));
                GoodsSku goodsSku = skuMap.get(item.getId());
                priceChange.setSkuId(item.getId());
                priceChange.setGoodsId(item.getGoodsId());
                if (Objects.nonNull(goodsSku)) {
                    priceChange.setPreviousPrice(BigDecimal.valueOf(goodsSku.getPrice()));
                }
                priceChange.setPreviousCommission(previousGoods.getCommission());
                priceChange.setCurrentCommission(goods.getCommission());
                priceChange.setOperatorType(ChangePriceOperationTypeEnum.STORE.name());
                priceChange.setExamineStatus(ChangePriceAudioStatusEnum.APPLY.name());
                priceChange.setOperatorId(UserContext.getCurrentUser().getId());
                priceChange.setOperatorName(UserContext.getCurrentUser().getNickName());
                priceChange.setStoreId(item.getStoreId());
                return priceChange;
            }).collect(Collectors.toList());
            priceChangeService.saveBatch(priceChangeList);
        }
    }
@@ -296,11 +357,13 @@
        if (goodsIndex == null) {
            goodsIndex = goodsIndexService.getResetEsGoodsIndex(goodsSku, goodsVO.getGoodsParamsDTOList());
        }
        log.info("获取到商品信息----------------->{}",JSONUtil.toJsonStr(goodsIndex));
        //商品规格
        GoodsSkuVO goodsSkuDetail = this.getGoodsSkuVO(goodsSku);
        Map<String, Object> promotionMap = goodsIndex.getPromotionMap();
        log.info("获取促销活动信息----------------->{}",JSONUtil.toJsonStr(promotionMap));
        AuthUser currentUser = UserContext.getCurrentUser();
        //设置当前商品的促销价格
        if (promotionMap != null && !promotionMap.isEmpty()) {
@@ -389,6 +452,17 @@
        updateWrapper.set(GoodsSku::getDeleteFlag, goods.getDeleteFlag());
        boolean update = this.update(updateWrapper);
        if (Boolean.TRUE.equals(update)) {
            //修改订单改价状态为通过或者失败
            LambdaUpdateWrapper<PriceChange> updatePriceChange = Wrappers.<PriceChange>lambdaUpdate()
                    .eq(PriceChange::getGoodsId, goods.getId())
                    .eq(PriceChange::getStoreId, goods.getStoreId())
                    .eq(PriceChange::getExamineStatus, ChangePriceAudioStatusEnum.APPLY.name());
            if (GoodsAuthEnum.PASS.name().equals(goods.getAuthFlag())) {
                updatePriceChange.set(PriceChange::getExamineStatus, ChangePriceAudioStatusEnum.PASS.name());
            }else {
                updatePriceChange.set(PriceChange::getExamineStatus, ChangePriceAudioStatusEnum.REFUSE.name());
            }
            priceChangeService.update(updatePriceChange);
            List<GoodsSku> goodsSkus = this.getGoodsSkuListByGoodsId(goods.getId());
            for (GoodsSku sku : goodsSkus) {
                cache.remove(GoodsSkuService.getCacheKeys(sku.getId()));