package com.gxwebsoft.shop.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.gxwebsoft.common.core.utils.JSONUtil; import com.gxwebsoft.shop.entity.*; import com.gxwebsoft.shop.mapper.GoodsMapper; import com.gxwebsoft.shop.service.GoodsService; import com.gxwebsoft.shop.param.GoodsParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; import com.gxwebsoft.shop.service.GoodsSkuService; import com.gxwebsoft.shop.service.GoodsSpecService; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * 商品记录表Service实现 * * @author 科技小王子 * @since 2024-07-25 19:22:01 */ @Service public class GoodsServiceImpl extends ServiceImpl implements GoodsService { @Resource private GoodsSpecService goodsSpecService; @Resource private GoodsSkuService goodsSkuService; @Override public PageResult pageRel(GoodsParam param) { PageParam page = new PageParam<>(param); page.setDefaultOrder("sort_number asc, create_time desc"); List list = baseMapper.selectPageRel(page, param); System.out.println("list = " + list); final Set goodsIds = list.stream().map(Goods::getGoodsId).collect(Collectors.toSet()); if (!CollectionUtils.isEmpty(goodsIds)) { final List specs = goodsSpecService.list(new LambdaQueryWrapper().in(GoodsSpec::getGoodsId, goodsIds)); final List skus = goodsSkuService.list(new LambdaQueryWrapper().in(GoodsSku::getGoodsId, goodsIds)); final Map> collectSpecs = specs.stream().collect(Collectors.groupingBy(GoodsSpec::getGoodsId)); final Map> collectSkus = skus.stream().collect(Collectors.groupingBy(GoodsSku::getGoodsId)); list.forEach(d -> { final List goodsSpecs = collectSpecs.get(d.getGoodsId()); if (!CollectionUtils.isEmpty(goodsSpecs)) { final GoodsSpec spec = goodsSpecs.get(0); final String value = spec.getSpecValue(); final Object object = JSONUtil.parseObject(value,Object.class); d.setGoodsSpecValue(object); } // d.setGoodsSkus(collectSkus.get(d.getGoodsId())); }); } return new PageResult<>(list, page.getTotal()); } @Override public List listRel(GoodsParam param) { List list = baseMapper.selectListRel(param); // 排序 PageParam page = new PageParam<>(); page.setDefaultOrder("sort_number asc, create_time desc"); return page.sortRecords(list); } @Override public Goods getByIdRel(Integer goodsId) { GoodsParam param = new GoodsParam(); param.setGoodsId(goodsId); return param.getOne(baseMapper.selectListRel(param)); } @Override public void saveBatchByAsync(Goods goods) { // 保存商品多规格 if (goods.getSpecs().equals(1)) { final GoodsSpec spec = goods.getGoodsSpec(); if (spec != null) { spec.setGoodsId(goods.getGoodsId()); if(spec.getSpecValue() == null){ spec.setSpecValue(JSON.toJSONString(new ArrayList<>())); } goodsSpecService.save(spec); // 保存商品sku表 final List goodsSkus = goods.getGoodsSkus(); if (!CollectionUtils.isEmpty(goodsSkus)) { goodsSkus.forEach(d -> { d.setGoodsId(goods.getGoodsId()); }); goodsSkuService.saveBatch(goodsSkus); } } } } @Override public List getGoodsSpec() { // 多表查询 MPJLambdaWrapper mpjLambdaWrapper = new MPJLambdaWrapper<>(); mpjLambdaWrapper.selectAll(Goods.class) .select(GoodsSpec::getSpecValue) .select(GoodsSpec::getSpecName) .leftJoin(GoodsSpec.class,GoodsSpec::getGoodsId,GoodsSpec::getGoodsId); return baseMapper.selectJoinList(Goods.class, mpjLambdaWrapper); } @Override public List getGoodsSpecType0() { // 多表查询 MPJLambdaWrapper mpjLambdaWrapper = new MPJLambdaWrapper<>(); mpjLambdaWrapper.selectAll(Goods.class) .select(GoodsSpec::getSpecValue) .select(GoodsSpec::getSpecName) .leftJoin(GoodsSpec.class,GoodsSpec::getGoodsId,GoodsSpec::getGoodsId) .gt(Goods::getStock,0) .eq(Goods::getType,0); return baseMapper.selectJoinList(Goods.class, mpjLambdaWrapper); } @Override public List getGoodsSpecType1() { // 多表查询 MPJLambdaWrapper mpjLambdaWrapper = new MPJLambdaWrapper<>(); mpjLambdaWrapper.selectAll(Goods.class) .select(GoodsSpec::getSpecValue) .select(GoodsSpec::getSpecName) .leftJoin(GoodsSpec.class,GoodsSpec::getGoodsId,GoodsSpec::getGoodsId) .gt(Goods::getStock,0) .eq(Goods::getType,1); return baseMapper.selectJoinList(Goods.class, mpjLambdaWrapper); } }