| package com.xzx.gc.shop.service; | 
|   | 
| import cn.hutool.core.collection.CollUtil; | 
| import cn.hutool.core.convert.Convert; | 
| 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.Constants; | 
| import com.xzx.gc.common.utils.MqUtil; | 
| import com.xzx.gc.entity.*; | 
| import com.xzx.gc.model.admin.GoodsCategoryModel; | 
| 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 java.util.*; | 
|   | 
| @Service | 
| @Transactional | 
| @Slf4j | 
| public class GoodsService { | 
|   | 
|     @Resource | 
|     ScoreGoodsCategoryMapper scoreGoodsCategoryMapper; | 
|     @Resource | 
|     ScoreGoodsMapper scoreGoodsMapper; | 
|     @Resource | 
|     ScoreGoodsSkuMapper scoreGoodsSkuMapper; | 
|     @Resource | 
|     ScoreGoodsImagesMapper scoreGoodsImagesMapper; | 
|     @Resource | 
|     ScoreGoodsStyleMapper scoreGoodsStyleMapper; | 
|   | 
|     @Autowired | 
|     private MqUtil mqUtil; | 
|   | 
|     public Map<String, Object> queryGoodsCategoryList(QueryGoodsCategoryListDto model) { | 
|         String name = model.getName(); | 
|         GoodsCategoryModel goodsCategoryModel = new GoodsCategoryModel(); | 
|         goodsCategoryModel.setName(name); | 
|         PageHelper.startPage(model.getPage(), model.getLimit()); | 
|   | 
|         List<QueryGoodsCategoryListVo> maps = scoreGoodsCategoryMapper.queryGoodsCategoryList(goodsCategoryModel); | 
|         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 addGoodsCategory(GoodsCategoryModel model) { | 
|         ScoreGoodsCategory scoreGoodsCategory = new ScoreGoodsCategory(); | 
|         scoreGoodsCategory.setName(model.getName()); | 
|         scoreGoodsCategory.setCategoryIden(model.getCategoryIden()); | 
|         scoreGoodsCategory.setParentId(model.getParentId()); | 
|         scoreGoodsCategory.setCreatedBy(model.getCreatedBy()); | 
|         scoreGoodsCategory.setCreatedTime(model.getCreatedTime()); | 
|         scoreGoodsCategoryMapper.insertSelective(scoreGoodsCategory); | 
|         return scoreGoodsCategory.getId(); | 
|     } | 
|   | 
|     public void deleteGoodsCategory(long id) { | 
|         scoreGoodsCategoryMapper.deleteByPrimaryKey(id); | 
|     } | 
|   | 
|     public ViewGoodsCategoryVo viewGoodsCategoryById(long id) { | 
|         ScoreGoodsCategory scoreGoodsCategory = scoreGoodsCategoryMapper.selectByPrimaryKey(id); | 
|         ViewGoodsCategoryVo viewGoodsCategoryVo = new ViewGoodsCategoryVo(); | 
|         viewGoodsCategoryVo.setId(scoreGoodsCategory.getId()); | 
|         viewGoodsCategoryVo.setName(scoreGoodsCategory.getName()); | 
|         viewGoodsCategoryVo.setCategoryIden(scoreGoodsCategory.getCategoryIden()); | 
|         viewGoodsCategoryVo.setParentId(scoreGoodsCategory.getParentId()); | 
|         return viewGoodsCategoryVo; | 
|     } | 
|   | 
|     public void updateGoodsCategory(GoodsCategoryModel model) { | 
|         long id = model.getId(); | 
|         ScoreGoodsCategory scoreGoodsCategory = scoreGoodsCategoryMapper.selectByPrimaryKey(id); | 
|         scoreGoodsCategory.setName(model.getName()); | 
|         scoreGoodsCategory.setCategoryIden(model.getCategoryIden()); | 
|         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.insertSelective(scoreGoods); | 
|         //样式信息 | 
|         List<ScoreGoodsStyleDto> scoreGoodsStyleDtos = model.getScoreGoodsStyles(); | 
|         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.insertSelective(scoreGoodsStyle); | 
|                 //规格信息 | 
|                 List<ScoreGoodsSkuDto> scoreGoodsSkuDtos = scoreGoodsStyleDto.getScoreGoodsSkus(); | 
|                 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.insertSelective(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); | 
| //            viewGoodsVo.setCreateTime(scoreGoods.getCreatedTime().toString()); | 
|             //轮播图 | 
|             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.setScoreGoodsSkus(goodsSkus); | 
|                     scoreGoodsStyleVos.add(scoreGoodsStyleVo); | 
|                 } | 
|             } | 
|             viewGoodsVo.setScoreGoodsStyles(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.insertSelective(scoreGoodsImages); | 
|             } | 
|         } | 
|   | 
|         List<ScoreGoodsStyleDto> scoreGoodsStyleDtos = model.getScoreGoodsStyles(); | 
|         if(CollUtil.isNotEmpty(scoreGoodsStyleDtos)){ | 
|             Example exampleStyle = new Example(ScoreGoodsStyle.class); | 
|             Example.Criteria criteriaStyle = exampleStyle.createCriteria(); | 
|             criteriaStyle.andEqualTo("goodsId",scoreGoods.getId()); | 
|             scoreGoodsStyleMapper.deleteByExample(exampleImages); | 
|   | 
|             Example exampleSku = new Example(ScoreGoodsSku.class); | 
|             Example.Criteria criteriaSku = exampleSku.createCriteria(); | 
|             criteriaSku.andEqualTo("goodsId",scoreGoods.getId()); | 
|             scoreGoodsSkuMapper.deleteByExample(exampleImages); | 
|   | 
|             for(ScoreGoodsStyleDto scoreGoodsStyleDto : scoreGoodsStyleDtos){ | 
|                 ScoreGoodsStyle scoreGoodsStyle = new ScoreGoodsStyle(); | 
|                 scoreGoodsStyle.setId(scoreGoodsStyleDto.getId()); | 
|                 scoreGoodsStyle.setName(scoreGoodsStyleDto.getName()); | 
|                 scoreGoodsStyle.setGoodsId(scoreGoods.getId()); | 
|                 scoreGoodsStyleMapper.insertSelective(scoreGoodsStyle); | 
|                 //规格 | 
|                 List<ScoreGoodsSkuDto> scoreGoodsSkuDtos = scoreGoodsStyleDto.getScoreGoodsSkus(); | 
|                 if(CollUtil.isNotEmpty(scoreGoodsSkuDtos)){ | 
|                     for(ScoreGoodsSkuDto scoreGoodsSkuDto : scoreGoodsSkuDtos){ | 
|                         ScoreGoodsSku scoreGoodsSku = objectMapper.convertValue(scoreGoodsSkuDto, ScoreGoodsSku.class); | 
|                         scoreGoodsSku.setGoodsId(scoreGoods.getId()); | 
|                         scoreGoodsSku.setStyleId(scoreGoodsStyle.getId()); | 
|                         scoreGoodsSkuMapper.insertSelective(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); | 
|             scoreGoods.setQgEndTime(null); | 
|             scoreGoods.setQgStartTime(null); | 
|             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); | 
|   | 
|         List<String> images = scoreGoodsImagesMapper.selectScoreGoodsImagesByGoodsId(id); | 
|         data.setImages(images); | 
|         if (CollUtil.isNotEmpty(list)) { | 
|             data.setQuantity(list.get(0).getQuantity()); | 
|             data.setStock(list.get(0).getStock()); | 
|         } | 
|   | 
|         if (ScoreGoods.ISQG_YES.equals(data.getIsQg())) { | 
|             if (new Date().before(data.getQgStartTime())) { | 
|                 data.setIsStartQg(2); | 
|             } else { | 
|                 data.setIsStartQg(1); | 
|                 Long remain = DateUtil.between(new Date(), data.getQgEndTime(), DateUnit.SECOND, false); | 
|                 data.setRemainTime(remain); | 
|             } | 
|         } | 
|         return data; | 
|     } | 
| } |