package cn.lili.modules.goods.serviceimpl; import cn.hutool.core.convert.Convert; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.lili.common.enums.ResultCode; import cn.lili.common.exception.ServiceException; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.enums.UserEnums; import cn.lili.common.vo.PageVO; import cn.lili.modules.goods.entity.dos.Commodity; import cn.lili.modules.goods.entity.dos.GoodsSku; import cn.lili.modules.goods.entity.dto.CommodityDTO; import cn.lili.modules.goods.entity.enums.GoodsAuthEnum; import cn.lili.modules.goods.entity.vos.CommodityVO; import cn.lili.modules.goods.mapper.CommodityMapper; import cn.lili.modules.goods.service.CommodityService; import cn.lili.modules.goods.service.GoodsSkuService; import cn.lili.modules.goods.util.WechatLivePlayerUtil; import cn.lili.mybatis.util.PageUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Objects; /** * 直播商品业务层实现 * * @author Bulbasaur * @since 2021/5/17 11:16 上午 */ @Service public class CommodityServiceImpl extends ServiceImpl implements CommodityService { @Autowired private WechatLivePlayerUtil wechatLivePlayerUtil; @Autowired private GoodsSkuService goodsSkuService; @Override @Transactional(rollbackFor = Exception.class) public boolean addCommodity(List commodityList) { String storeId = Objects.requireNonNull(UserContext.getCurrentUser()).getStoreId(); for (Commodity commodity : commodityList) { //检测直播商品 checkCommodity(commodity); commodity.setStoreId(storeId); //添加直播商品 JSONObject json = wechatLivePlayerUtil.addGoods(commodity); if (!"0".equals(json.getStr("errcode"))) { log.error(json.getStr("errmsg")); throw new ServiceException(ResultCode.COMMODITY_ERROR); } commodity.setLiveGoodsId(Convert.toInt(json.getStr("goodsId"))); commodity.setAuditId(json.getStr("auditId")); //默认为待审核状态 commodity.setAuditStatus("0"); this.save(commodity); } return true; } private void checkCommodity(Commodity commodity) { //商品是否审核通过 GoodsSku goodsSku = goodsSkuService.getById(commodity.getSkuId()); if (!goodsSku.getAuthFlag().equals(GoodsAuthEnum.PASS.name())) { throw new ServiceException(goodsSku.getGoodsName() + " 未审核通过,不能添加直播商品"); } //是否已添加规格商品 if (this.count(new LambdaQueryWrapper().eq(Commodity::getSkuId, commodity.getSkuId())) > 0) { throw new ServiceException(goodsSku.getGoodsName() + " 已添加规格商品,无法重复增加"); } } @Override public boolean deleteCommodity(String goodsId) { AuthUser currentUser = UserContext.getCurrentUser(); if (currentUser == null || (currentUser.getRole().equals(UserEnums.STORE) && currentUser.getStoreId() == null)) { throw new ServiceException(ResultCode.USER_AUTHORITY_ERROR); } JSONObject json = wechatLivePlayerUtil.deleteGoods(goodsId); if ("0".equals(json.getStr("errcode"))) { return this.remove(new LambdaQueryWrapper().eq(Commodity::getLiveGoodsId, goodsId).eq(Commodity::getStoreId, currentUser.getStoreId())); } return false; } @Override @Transactional(rollbackFor = Exception.class) public void getGoodsWareHouse() { //查询审核中的商品 List goodsIdList = this.baseMapper.getAuditCommodity(); if (!goodsIdList.isEmpty()) { //同步状态 JSONObject json = wechatLivePlayerUtil.getGoodsWareHouse(goodsIdList); //修改状态 List commodityDTOList = JSONUtil.toList((JSONArray) json.get("goods"), CommodityDTO.class); for (CommodityDTO commodityDTO : commodityDTOList) { //修改审核状态 this.update(new LambdaUpdateWrapper() .eq(Commodity::getLiveGoodsId, commodityDTO.getGoods_id()) .set(Commodity::getAuditStatus, commodityDTO.getAudit_status())); } } } @Override public IPage commodityList(PageVO pageVO, String name, String auditStatus) { return this.baseMapper.commodityVOList(PageUtil.initPage(pageVO), new QueryWrapper().like(name != null, "c.name", name) .eq(auditStatus != null, "c.audit_status", auditStatus) .eq(Objects.requireNonNull(UserContext.getCurrentUser()).getRole().equals(UserEnums.STORE), "c.store_id", UserContext.getCurrentUser().getStoreId()) .orderByDesc("create_time")); } @Override public List getCommodityByRoomId(Integer roomId) { return this.baseMapper.getCommodityByRoomId(roomId); } @Override public List getSimpleCommodityByRoomId(Integer roomId) { return this.baseMapper.getSimpleCommodityByRoomId(roomId); } }