package com.sinata.modular.mall.service.impl;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.baomidou.mybatisplus.mapper.Wrapper;
|
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
|
import com.sinata.common.enums.EnumIsSystemNotice;
|
import com.sinata.core.shiro.ShiroKit;
|
import com.sinata.modular.mall.dao.MallGoodsMapper;
|
import com.sinata.modular.mall.model.MallGoods;
|
import com.sinata.modular.mall.model.MallGoodsDetail;
|
import com.sinata.modular.mall.model.MallGoodsSet;
|
import com.sinata.modular.mall.model.MallGoodsSku;
|
import com.sinata.modular.mall.service.IMallGoodsDetailService;
|
import com.sinata.modular.mall.service.IMallGoodsService;
|
import com.sinata.modular.mall.service.IMallGoodsSetService;
|
import com.sinata.modular.mall.service.IMallGoodsSkuService;
|
import com.sinata.modular.system.model.SystemNotice;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
|
/**
|
* <p>
|
* 商品信息 服务实现类
|
* </p>
|
*
|
* @author goku
|
* @since 2023-03-11
|
*/
|
@Service
|
public class MallGoodsServiceImpl extends ServiceImpl<MallGoodsMapper, MallGoods> implements IMallGoodsService {
|
|
@Resource
|
private IMallGoodsDetailService goodsDetailService;
|
|
@Resource
|
private IMallGoodsSetService goodsSetService;
|
|
@Resource
|
private IMallGoodsSkuService mallGoodsSkuService;
|
|
@Override
|
public void wrapperMapGoods(List<Map<String, Object>> list, String goodsKey) {
|
// 用户ID串
|
Object[] goodsIds = list.stream().map(o -> o.get(goodsKey)).collect(Collectors.toList()).toArray();
|
// 用户列表
|
List<MallGoods> goodsList = baseMapper.selectList(
|
new EntityWrapper<MallGoods>()
|
.setSqlSelect("id,goods_name goodsName")
|
.in("id", goodsIds)
|
);
|
|
// 封装数据
|
for (Map<String, Object> map : list) {
|
for (MallGoods u : goodsList) {
|
if (u.getId().toString().equals(map.get(goodsKey) + "")) {
|
map.put(goodsKey + "_merchantName", u.getGoodsName());
|
}
|
}
|
}
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void saveMallGoods(MallGoods mallGoods) {
|
// 库存求和
|
mallGoods.setStock(mallGoods.getGoodsSkus().stream().mapToInt(MallGoodsSku::getStock).sum());
|
if (StrUtil.isNotBlank(mallGoods.getIntroImage())) {
|
mallGoods.setGoodsImage(mallGoods.getIntroImage().split(",")[0]);
|
}
|
|
// 保存基本信息
|
this.insert(mallGoods);
|
// 保存详情
|
MallGoodsDetail goodsDetail = new MallGoodsDetail()
|
.setId(mallGoods.getId())
|
.setIntroH5(mallGoods.getIntroH5())
|
.setPurchaseH5(mallGoods.getPurchaseH5())
|
.setIntroImage(mallGoods.getIntroImage());
|
this.goodsDetailService.insert(goodsDetail);
|
// 保存商品系数
|
MallGoodsSet goodsSet = mallGoods.getGoodsSet();
|
goodsSet.setId(mallGoods.getId());
|
this.goodsSetService.insert(goodsSet);
|
// 保存规格
|
if (CollUtil.isNotEmpty(mallGoods.getGoodsSkus())) {
|
List<MallGoodsSku> goodsSkus = mallGoods.getGoodsSkus().stream().peek(sku -> {
|
sku.setGoodsId(mallGoods.getId());
|
sku.setPrice(mallGoods.getPrice());
|
}).collect(Collectors.toList());
|
this.mallGoodsSkuService.insertBatch(goodsSkus);
|
}
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void updateMallGoods(MallGoods mallGoods) {
|
if (mallGoods != null && mallGoods.getId() != null) {
|
// 添加后台消息通知
|
addSystemNotice(this.selectById(mallGoods.getId()), mallGoods);
|
}
|
|
// 库存求和
|
mallGoods.setStock(mallGoods.getGoodsSkus().stream().mapToInt(MallGoodsSku::getStock).sum());
|
if (StrUtil.isNotBlank(mallGoods.getIntroImage())) {
|
mallGoods.setGoodsImage(mallGoods.getIntroImage().split(",")[0]);
|
}
|
|
// 修改基本信息
|
this.updateById(mallGoods);
|
// 修改详情信息
|
MallGoodsDetail goodsDetail = new MallGoodsDetail()
|
.setId(mallGoods.getId())
|
.setImgList(mallGoods.getGoodsImage())
|
.setIntroH5(mallGoods.getIntroH5())
|
.setPurchaseH5(mallGoods.getPurchaseH5())
|
.setIntroImage(mallGoods.getIntroImage());
|
this.goodsDetailService.updateById(goodsDetail);
|
// 保存商品系数
|
MallGoodsSet goodsSet = mallGoods.getGoodsSet();
|
goodsSet.setId(mallGoods.getId());
|
this.goodsSetService.updateById(goodsSet);
|
// 重新保存规格
|
List<Integer> exitSkuIds = new ArrayList<>();
|
if (CollUtil.isNotEmpty(mallGoods.getGoodsSkus())) {
|
exitSkuIds = mallGoods.getGoodsSkus().stream()
|
.peek(sku -> {
|
sku.setGoodsId(mallGoods.getId());
|
sku.setPrice(mallGoods.getPrice());
|
sku.setPriceSale(mallGoods.getPriceSale());
|
})
|
.map(MallGoodsSku::getId)
|
.filter(Objects::nonNull)
|
.collect(Collectors.toList());
|
}
|
Wrapper<MallGoodsSku> wrapper = new EntityWrapper<MallGoodsSku>()
|
.eq("goods_id", mallGoods.getId());
|
if (CollUtil.isNotEmpty(exitSkuIds)) {
|
wrapper.notIn("id", exitSkuIds);
|
}
|
this.mallGoodsSkuService.delete(wrapper);
|
if (CollUtil.isNotEmpty(mallGoods.getGoodsSkus())) {
|
this.mallGoodsSkuService.insertOrUpdateBatch(mallGoods.getGoodsSkus());
|
}
|
}
|
|
/**
|
* 添加后台消息通知
|
* @param oldGoods
|
* @param newGoods
|
*/
|
public void addSystemNotice(MallGoods oldGoods, MallGoods newGoods) {
|
try {
|
StringBuffer updateStr = new StringBuffer();
|
if (oldGoods.getPrice() != null && newGoods.getPrice() != null &&
|
oldGoods.getPrice().compareTo(newGoods.getPrice()) != 0) {
|
updateStr.append("将市场价" + oldGoods.getPrice() + "元修改为" + newGoods.getPrice() + "元。");
|
}
|
if (oldGoods.getPriceSale() != null && newGoods.getPriceSale() != null &&
|
oldGoods.getPriceSale().compareTo(newGoods.getPriceSale()) != 0) {
|
updateStr.append("将美天销售价" + oldGoods.getPriceSale() + "元修改为" + newGoods.getPriceSale() + "元。");
|
}
|
if (oldGoods.getPriceMember() != null && newGoods.getPriceMember() != null &&
|
oldGoods.getPriceMember().compareTo(newGoods.getPriceMember()) != 0) {
|
updateStr.append("将会员价" + oldGoods.getPriceMember() + "元修改为" + newGoods.getPriceMember() + "元。");
|
}
|
|
if (updateStr.length() != 0) {
|
// 添加后台通知
|
SystemNotice.builder()
|
.param(oldGoods.getId())
|
.type(EnumIsSystemNotice.TYPE_8.index)
|
.content(ShiroKit.getUser().getName() + " 管理员修改 " + oldGoods.getGoodsName() + " 商品。" + updateStr)
|
.build()
|
.insert();
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
}
|