Helius
2021-06-24 7043628d74a26cc09a3735c251567bf36f6219b6
gc-shop/src/main/java/com/xzx/gc/shop/service/GoodsService.java
@@ -2,32 +2,29 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xzx.gc.common.constant.CommonEnum;
import com.xzx.gc.common.constant.Constants;
import com.xzx.gc.common.dto.log.OperationAppLog;
import com.xzx.gc.common.utils.MqUtil;
import com.xzx.gc.entity.CoreUser;
import com.xzx.gc.entity.ScoreGoodsCategory;
import com.xzx.gc.model.JsonResult;
import com.xzx.gc.entity.*;
import com.xzx.gc.model.admin.GoodsCategoryModel;
import com.xzx.gc.shop.dto.QueryGoodsCategoryListDto;
import com.xzx.gc.shop.mapper.ScoreGoodsCategoryMapper;
import com.xzx.gc.shop.vo.QueryGoodsCategoryListVo;
import com.xzx.gc.shop.vo.ViewGoodsCategoryVo;
import com.xzx.gc.util.SessionUtil;
import com.xzx.gc.model.order.OrderInfoVo;
import com.xzx.gc.shop.dto.*;
import com.xzx.gc.shop.mapper.*;
import com.xzx.gc.shop.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
@Service
@Transactional
@@ -36,6 +33,14 @@
    @Resource
    ScoreGoodsCategoryMapper scoreGoodsCategoryMapper;
    @Resource
    ScoreGoodsMapper scoreGoodsMapper;
    @Resource
    ScoreGoodsSkuMapper scoreGoodsSkuMapper;
    @Resource
    ScoreGoodsImagesMapper scoreGoodsImagesMapper;
    @Resource
    ScoreGoodsStyleMapper scoreGoodsStyleMapper;
    @Autowired
    private MqUtil mqUtil;
@@ -89,4 +94,227 @@
        scoreGoodsCategory.setParentId(model.getParentId());
        scoreGoodsCategoryMapper.updateByPrimaryKey(scoreGoodsCategory);
    }
    public Map<String, Object> queryGoodsList(QueryGoodsListDto model) {
        String name = model.getName() == null ? "":model.getName();
        int delFlag = model.getDelFlag() == null ? 2:model.getDelFlag();
        PageHelper.startPage(model.getPage(), model.getLimit());
        List<QueryGoodsListVo> maps = scoreGoodsMapper.queryGoodsList(name,delFlag);
        PageInfo pageInfo = new PageInfo(maps);
        int count = Convert.toInt(pageInfo.getTotal());
        Map<String, Object> map = new HashMap<>();
        map.put("data", maps);
        map.put("count", count);
        map.put("code", 0);
        return map;
    }
    public Long addGoods(AddGoodsDto model) {
        //新增商品主信息
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        ScoreGoods scoreGoods = objectMapper.convertValue(model, ScoreGoods.class);
        scoreGoods.setDelFlag(Convert.toShort(Constants.DEL_NOT_FLAG));
        scoreGoodsMapper.insert(scoreGoods);
        //样式信息
        List<ScoreGoodsStyleDto> scoreGoodsStyleDtos = model.getScoreGoodsStyleDtos();
        if(CollUtil.isNotEmpty(scoreGoodsStyleDtos)){
            for(ScoreGoodsStyleDto scoreGoodsStyleDto : scoreGoodsStyleDtos){
                ScoreGoodsStyle scoreGoodsStyle = objectMapper.convertValue(scoreGoodsStyleDto, ScoreGoodsStyle.class);
                scoreGoodsStyle.setGoodsId(scoreGoods.getId());
                scoreGoodsStyle.setDelFlag(Convert.toShort(Constants.DEL_NOT_FLAG));
                scoreGoodsStyleMapper.insert(scoreGoodsStyle);
                //规格信息
                List<ScoreGoodsSkuDto> scoreGoodsSkuDtos = scoreGoodsStyleDto.getScoreGoodsSkuDtos();
                if(CollUtil.isNotEmpty(scoreGoodsSkuDtos)){
                    for(ScoreGoodsSkuDto scoreGoodsSkuDto : scoreGoodsSkuDtos){
                        ScoreGoodsSku scoreGoodsSku = objectMapper.convertValue(scoreGoodsSkuDto, ScoreGoodsSku.class);
                        scoreGoodsSku.setGoodsId(scoreGoods.getId());
                        scoreGoodsSku.setStyleId(scoreGoodsStyle.getId());
                        scoreGoodsSku.setDelFlag(Convert.toShort(Constants.DEL_NOT_FLAG));
                        scoreGoodsSkuMapper.insert(scoreGoodsSku);
                    }
                }
            }
        }
        //轮播图信息
        List<String> goodsImages = model.getGoodsImages();
        if(CollUtil.isNotEmpty(goodsImages)){
            for(String goodImage : goodsImages){
                ScoreGoodsImages scoreGoodsImages = new ScoreGoodsImages();
                scoreGoodsImages.setImageUrl(goodImage);
                scoreGoodsImages.setGoodsId(scoreGoods.getId());
                scoreGoodsImages.setDelFlag(Convert.toShort(Constants.DEL_NOT_FLAG));
                scoreGoodsImagesMapper.insert(scoreGoodsImages);
            }
        }
        return scoreGoods.getId();
    }
    public void deleteGoods(long id) {
        scoreGoodsMapper.updateDelFlagById(id,Convert.toShort(Constants.DEL_FLAG));
        Example exampleStyle = new Example(ScoreGoodsStyle.class);
        Example.Criteria criteriaStyle = exampleStyle.createCriteria();
        criteriaStyle.andEqualTo("goodsId",id);
        List<ScoreGoodsStyle> goodsStyles = scoreGoodsStyleMapper.selectByExample(exampleStyle);
        if(CollUtil.isNotEmpty(goodsStyles)){
            for(ScoreGoodsStyle scoreGoodsStyle : goodsStyles){
                scoreGoodsStyleMapper.updateDelFlagById(scoreGoodsStyle.getId(),Convert.toShort(Constants.DEL_FLAG));
            }
        }
        Example exampleSku = new Example(ScoreGoodsStyle.class);
        Example.Criteria criteriaSku = exampleSku.createCriteria();
        criteriaSku.andEqualTo("goodsId",id);
        List<ScoreGoodsSku> goodsSkus = scoreGoodsSkuMapper.selectByExample(exampleSku);
        if(CollUtil.isNotEmpty(goodsSkus)){
            for(ScoreGoodsSku scoreGoodsSku : goodsSkus){
                scoreGoodsSkuMapper.updateDelFlagById(scoreGoodsSku.getId(),Convert.toShort(Constants.DEL_FLAG));
            }
        }
    }
    public ViewGoodsVo viewGoods(long id) {
        ViewGoodsVo viewGoodsVo = new ViewGoodsVo();
        ScoreGoods scoreGoods = scoreGoodsMapper.selectByPrimaryKey(id);
        if(ObjectUtil.isNotEmpty(scoreGoods)){
            ObjectMapper objectMapper = new ObjectMapper();
            objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
            viewGoodsVo = objectMapper.convertValue(scoreGoods, ViewGoodsVo.class);
            //轮播图
            List<String> goodsImages = scoreGoodsImagesMapper.selectScoreGoodsImagesByGoodsId(id);
            viewGoodsVo.setGoodsImages(goodsImages);
            //样式
            List<ScoreGoodsStyleVo> scoreGoodsStyleVos = new ArrayList<>();
            List<ScoreGoodsStyle> goodsStyles = scoreGoodsStyleMapper.selectScoreGoodsStyleByGoodsId(id);
            if(CollUtil.isNotEmpty(goodsStyles)){
                for(ScoreGoodsStyle goodsStyle : goodsStyles){
                    ScoreGoodsStyleVo scoreGoodsStyleVo = objectMapper.convertValue(goodsStyle, ScoreGoodsStyleVo.class);
                    //获取规格
                    Long styleId = goodsStyle.getId();
                    List<ScoreGoodsSkuVo> goodsSkus = scoreGoodsSkuMapper.selectScoreGoodsSkuByGoodsIdAndStyleId(id,styleId);
                    scoreGoodsStyleVo.setScoreGoodsSkuVos(goodsSkus);
                    scoreGoodsStyleVos.add(scoreGoodsStyleVo);
                }
            }
            viewGoodsVo.setScoreGoodsStyleVos(scoreGoodsStyleVos);
        }
        return viewGoodsVo;
    }
    public void updateGoods(UpdateGoodsDto model) {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        ScoreGoods scoreGoods = objectMapper.convertValue(model, ScoreGoods.class);
        scoreGoodsMapper.updateByPrimaryKey(scoreGoods);
        //轮播图
        Example exampleImages = new Example(ScoreGoodsImages.class);
        Example.Criteria criteriaImages = exampleImages.createCriteria();
        criteriaImages.andEqualTo("goodsId",scoreGoods.getId());
        scoreGoodsImagesMapper.deleteByExample(exampleImages);
        List<String> goodsImages = model.getGoodsImages();
        if(CollUtil.isNotEmpty(goodsImages)){
            for(String goodImage : goodsImages){
                ScoreGoodsImages scoreGoodsImages = new ScoreGoodsImages();
                scoreGoodsImages.setImageUrl(goodImage);
                scoreGoodsImages.setGoodsId(scoreGoods.getId());
                scoreGoodsImages.setDelFlag(Convert.toShort(Constants.DEL_NOT_FLAG));
                scoreGoodsImagesMapper.insert(scoreGoodsImages);
            }
        }
        List<ScoreGoodsStyleDto> scoreGoodsStyleDtos = model.getScoreGoodsStyleDtos();
        if(CollUtil.isNotEmpty(scoreGoodsStyleDtos)){
            for(ScoreGoodsStyleDto scoreGoodsStyleDto : scoreGoodsStyleDtos){
                ScoreGoodsStyle scoreGoodsStyle = new ScoreGoodsStyle();
                scoreGoodsStyle.setId(scoreGoodsStyleDto.getId());
                scoreGoodsStyle.setName(scoreGoodsStyleDto.getName());
                scoreGoodsStyle.setGoodsId(scoreGoods.getId());
                scoreGoodsStyleMapper.updateByPrimaryKeySelective(scoreGoodsStyle);
                //规格
                List<ScoreGoodsSkuDto> scoreGoodsSkuDtos = scoreGoodsStyleDto.getScoreGoodsSkuDtos();
                if(CollUtil.isNotEmpty(scoreGoodsSkuDtos)){
                    for(ScoreGoodsSkuDto scoreGoodsSkuDto : scoreGoodsSkuDtos){
                        ScoreGoodsSku scoreGoodsSku = objectMapper.convertValue(scoreGoodsSkuDto, ScoreGoodsSku.class);
                        scoreGoodsSkuMapper.updateByPrimaryKey(scoreGoodsSku);
                    }
                }
            }
        }
    }
    public void saleGoods(long id, Integer issale) {
        ScoreGoods scoreGoods = new ScoreGoods();
        scoreGoods.setIsSale(issale);
        Example exampleGoods = new Example(ScoreGoods.class);
        Example.Criteria criteriaGoods = exampleGoods.createCriteria();
        criteriaGoods.andEqualTo("id",id);
        scoreGoodsMapper.updateByExampleSelective(scoreGoods,exampleGoods);
    }
    public void snapUpGoods(SnapUpGoodsDto model) {
        long id = model.getId();
        Integer isQg = model.getIsQg();
        if(ScoreGoods.ISQG_YES == isQg){
            ScoreGoods scoreGoods = new ScoreGoods();
            scoreGoods.setIsQg(ScoreGoods.ISQG_YES);
            scoreGoods.setQgStartTime(model.getQgStartTime());
            scoreGoods.setQgEndTime(model.getQgEndTime());
            Example exampleGoods = new Example(ScoreGoods.class);
            Example.Criteria criteriaGoods = exampleGoods.createCriteria();
            criteriaGoods.andEqualTo("id",id);
            scoreGoodsMapper.updateByExampleSelective(scoreGoods,exampleGoods);
        }else{
            ScoreGoods scoreGoods = new ScoreGoods();
            scoreGoods.setIsQg(ScoreGoods.ISQG_NO);
            Example exampleGoods = new Example(ScoreGoods.class);
            Example.Criteria criteriaGoods = exampleGoods.createCriteria();
            criteriaGoods.andEqualTo("id",id);
            scoreGoodsMapper.updateByExampleSelective(scoreGoods,exampleGoods);
        }
    }
    public List<ViewGoodsCategoryListVo> viewGoodsCategoryList(ViewGoodsCategoryListDto viewGoodsCategoryListDto) {
        List<ViewGoodsCategoryListVo> maps = new ArrayList<>();
        if(viewGoodsCategoryListDto.getParentId() == 0L){
            maps = scoreGoodsCategoryMapper.viewGoodsCategoryOneList(viewGoodsCategoryListDto.getParentId());
        }else{
            maps = scoreGoodsCategoryMapper.viewGoodsCategoryList();
        }
        return maps;
    }
    public List<GoodsCategoryVo> findCategoryWithChildren() {
        return scoreGoodsCategoryMapper.selectCategoryWithChildren();
    }
    public PageInfo<XcxGoodsListVo> findGoodsListInPage(XcxGoodsListDto xcxGoodsListDto) {
        PageHelper.startPage(xcxGoodsListDto.getPageNo(), xcxGoodsListDto.getPageSize());
        List<XcxGoodsListVo> data = scoreGoodsMapper.selectXcxGoodsList(xcxGoodsListDto);
        return new PageInfo<>(data);
    }
    public XcxGoodsDetailVo findGoodsDetails(Long id) {
        XcxGoodsDetailVo data = scoreGoodsMapper.selectGoodsDetailsById(id);
        XcxGoodsListDto dto = new XcxGoodsListDto();
        dto.setId(id);
        List<XcxGoodsListVo> list = scoreGoodsMapper.selectXcxGoodsList(dto);
        if (CollUtil.isNotEmpty(list)) {
            data.setQuantity(list.get(0).getQuantity());
            data.setStock(list.get(0).getStock());
        }
        if (ScoreGoods.ISQG_YES.equals(data.getIsQg())) {
            Long remain = DateUtil.between(new Date(), data.getQgEndTime(), DateUnit.SECOND, false);
            data.setRemainTime(remain);
        }
        return data;
    }
}