| | |
| | | import com.ruoyi.order.feignClient.RemoteOrderGoodsClient; |
| | | import com.ruoyi.order.vo.Price; |
| | | import com.ruoyi.other.api.domain.*; |
| | | import com.ruoyi.other.dto.AddGoodsDTO; |
| | | import com.ruoyi.other.enums.GoodsStatus; |
| | | import com.ruoyi.other.mapper.GoodsEvaluateMapper; |
| | | import com.ruoyi.other.mapper.GoodsMapper; |
| | | import com.ruoyi.other.mapper.GoodsShopMapper; |
| | | import com.ruoyi.other.mapper.ShopMapper; |
| | | import com.ruoyi.other.service.*; |
| | | import com.ruoyi.other.util.GeodesyUtil; |
| | | import com.ruoyi.other.vo.GoodsEvaluateVO; |
| | | import com.ruoyi.other.vo.GoodsVO; |
| | | import com.ruoyi.other.vo.NearbyShopVO; |
| | | import com.ruoyi.system.api.domain.SysConfig; |
| | | import com.ruoyi.system.api.feignClient.SysConfigClient; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.time.LocalDateTime; |
| | | import java.time.ZoneId; |
| | | import java.util.*; |
| | | import java.util.function.Function; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | @Resource |
| | | private ShopService shopService; |
| | | |
| | | @Resource |
| | | private GoodsEvaluateMapper goodsEvaluateMapper; |
| | | |
| | | /** |
| | | * 热门商品列表 |
| | |
| | | public PageInfo<GoodsVO> goodsList(Goods search) { |
| | | List<Long> shopIds=null; |
| | | if (null!=search.getLongitude()&&null!=search.getLatitude()){ |
| | | |
| | | //获取最近十家店的id |
| | | List<NearbyShopVO> nearbyShopVOS = shopService.nearbyShopList(search.getLongitude(), search.getLatitude(), new Shop()); |
| | | shopIds = nearbyShopVOS.subList(0, 10).stream().map(NearbyShopVO::getId).collect(Collectors.toList()); |
| | | int endIndex = Math.min(10, nearbyShopVOS.size()); |
| | | shopIds = nearbyShopVOS.subList(0, endIndex).stream().map(NearbyShopVO::getId).collect(Collectors.toList()); |
| | | } |
| | | //查找满足条件的商品 分类、名称、附近十家店 |
| | | List<GoodsVO> list = this.baseMapper.goodsList(search.getGoodsCategoryId(), search.getName(),shopIds); |
| | | //去重 |
| | | Map<Integer, GoodsVO> uniqueGoodsMap = new LinkedHashMap<>(); |
| | | for (GoodsVO goods : list) { |
| | | uniqueGoodsMap.putIfAbsent(goods.getGoodsId(), goods); |
| | | } |
| | | list = new ArrayList<>(uniqueGoodsMap.values()); |
| | | for (GoodsVO goods : list) { |
| | | |
| | | //计算所需价格和积分 |
| | | Price price = getPrice( goods.getGoodsId(), 1); |
| | | Price price = getPrice( goods.getGoodsId()); |
| | | if(null != price){ |
| | | //秒杀活动 |
| | | goods.setSellingPrice(price.getCash()); |
| | | goods.setIntegral(price.getPoint()); |
| | | goods.setStartTime(price.getStartTime()); |
| | | goods.setEndTime(price.getEndTime()); |
| | | goods.setPurchaseLimit(price.getPurchaseLimit()); |
| | | } |
| | | //已售数量 |
| | | Integer data = orderClient.getGoodsSaleNum(goods.getGoodsId(), 1).getData(); |
| | | goods.setSaleNum(data); |
| | | } |
| | | //手动排序 |
| | | if(StringUtils.isNotEmpty(search.getOrderByColumn())){ |
| | |
| | | } |
| | | |
| | | Goods goods = this.getById(goodsId); |
| | | |
| | | if(null == goods || goods.getDelFlag() == 1){ |
| | | throw new RuntimeException("商品不存在"); |
| | | } |
| | |
| | | goodsVO.setGoodsName(goods.getName()); |
| | | |
| | | //计算所需价格和积分 |
| | | Price price = getPrice( goods.getId(), 1); |
| | | Price price = getPrice( goods.getId()); |
| | | if(null != price){ |
| | | //秒杀活动 |
| | | goodsVO.setSellingPrice(price.getCash()); |
| | | goodsVO.setIntegral(price.getPoint()); |
| | | goodsVO.setStartTime(price.getStartTime()); |
| | | goodsVO.setEndTime(price.getEndTime()); |
| | | goodsVO.setPurchaseLimit(price.getPurchaseLimit()); |
| | | } |
| | | //已售数量 |
| | | Integer data = orderClient.getGoodsSaleNum(goods.getId(), 1).getData(); |
| | |
| | | GoodsShop goodsShop = goodsShopMapper.selectOne(new LambdaQueryWrapper<GoodsShop>() |
| | | .eq(GoodsShop::getGoodsId, goodsId)); |
| | | Shop shop1 = shopMapper.selectById(goodsShop.getShopId()); |
| | | ArrayList<Shop> shops = new ArrayList<>(); |
| | | shops.add(shop1); |
| | | goodsVO.setShopList(shops); |
| | | |
| | | goodsVO.setShop(shop1); |
| | | //已售数量 |
| | | Integer integer = orderClient.getGoodsSaleNum(goods.getId(), 1).getData(); |
| | | goodsVO.setSaleNum(integer); |
| | | |
| | | //商品评价 |
| | | GoodsEvaluate goodsEvaluate=goodsEvaluateMapper.getGoodsEvaluateOne(goods.getId()); |
| | | if (null != goodsEvaluate){ |
| | | AppUser appUserById = appUserClient.getAppUserById(goodsEvaluate.getAppUserId()); |
| | | goodsEvaluate.setAvatar(appUserById.getAvatar()); |
| | | goodsEvaluate.setUserName(appUserById.getName()); |
| | | goodsVO.setGoodsEvaluate(goodsEvaluate); |
| | | } |
| | | return goodsVO; |
| | | |
| | | } |
| | |
| | | public List<GoodsVO> getGoodsListByShopId(PageInfo<GoodsVO> pageInfo, Integer shopId) { |
| | | //查询该门店商品 |
| | | List<GoodsVO> goods = goodsMapper.selectListByShopId(pageInfo, shopId); |
| | | if (goods == null) { |
| | | return null; |
| | | } |
| | | for (GoodsVO good : goods) { |
| | | //价格 |
| | | Price price = getPrice( good.getGoodsId(), 1); |
| | | Price price = getPrice( good.getGoodsId()); |
| | | if(null != price){ |
| | | //秒杀活动 |
| | | good.setSellingPrice(price.getCash()); |
| | | good.setIntegral(price.getPoint()); |
| | | good.setPurchaseLimit(price.getPurchaseLimit()); |
| | | good.setStartTime(price.getStartTime()); |
| | | good.setEndTime(price.getEndTime()); |
| | | } |
| | |
| | | } |
| | | |
| | | @Override |
| | | public IPage<Goods> getManageGoodsList(Page<Goods> page, Goods goods) { |
| | | IPage<Goods> goodsIPage = goodsMapper.selectManageGoodsList(page, goods); |
| | | goodsIPage.getRecords().forEach(goods1 -> { |
| | | Integer data = orderClient.getGoodsSaleNum(goods1.getId(), 1).getData(); |
| | | goods1.setSaleNum(data); |
| | | }); |
| | | return goodsIPage; |
| | | public R getManageGoodsList(Integer pageNum,Integer pageSize, Goods goods) { |
| | | PageInfo<Goods> pageInfo = new PageInfo<>(pageNum,pageSize); |
| | | List<Goods> list = goodsMapper.selectManageGoodsList(pageInfo, goods); |
| | | pageInfo.setRecords(list); |
| | | return R.ok(pageInfo); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void addGoods(Goods goods) { |
| | | goods.setSaleNum(0); |
| | | goods.setStatus(GoodsStatus.DOWN.getCode()); |
| | | |
| | | goodsMapper.insert(goods); |
| | | |
| | | // 指定门店 |
| | | Integer appointStore = goods.getAppointStore(); |
| | | if (null != appointStore && appointStore == 1){ |
| | | List<GoodsShop> goodsShopList = goods.getGoodsShopList(); |
| | | if (CollectionUtils.isEmpty(goodsShopList)){ |
| | | throw new NullPointerException("请选择指定门店"); |
| | | } |
| | | saveGoodsShopList(goodsShopList, goods.getId()); |
| | | } |
| | | //保存商品门店关系 |
| | | GoodsShop goodsShop = new GoodsShop(); |
| | | goodsShop.setGoodsId(goods.getId()); |
| | | goodsShop.setShopId(goods.getShopId()); |
| | | Shop shop = shopMapper.selectById(goods.getShopId()); |
| | | goodsShop.setShopName(shop.getName()); |
| | | goodsShop.setOwnerName(shop.getShopManager()); |
| | | goodsShop.setPhone(shop.getPhone()); |
| | | goodsShop.setAddress(shop.getAddress()); |
| | | goodsShopService.save(goodsShop); |
| | | |
| | | //判断是否参加秒杀活动 |
| | | |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | //修改个别字段 |
| | | this.update(new LambdaUpdateWrapper<Goods>().eq(Goods::getId, goods.getId()).set(Goods::getSellingPrice, goods.getSellingPrice()) |
| | | .set(Goods::getIntegral, goods.getIntegral())); |
| | | // 指定门店 |
| | | List<GoodsShop> goodsShopList = goods.getGoodsShopList(); |
| | | saveGoodsShopList(goodsShopList, goods.getId()); |
| | | // 保存门店 |
| | | saveGoodsShop(goods.getShopId(),goods.getId()); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | |
| | | |
| | | private void saveGoodsShopList(List<GoodsShop> goodsShopList, Integer goodsId) { |
| | | private void saveGoodsShop(Integer shopId, Integer goodsId) { |
| | | goodsShopService.remove(new LambdaQueryWrapper<GoodsShop>() |
| | | .eq(GoodsShop::getGoodsId, goodsId)); |
| | | if (!CollectionUtils.isEmpty(goodsShopList)){ |
| | | for (GoodsShop goodsShop : goodsShopList) { |
| | | goodsShop.setGoodsId(goodsId); |
| | | goodsShop.setId(null); |
| | | } |
| | | } |
| | | goodsShopService.saveBatch(goodsShopList); |
| | | |
| | | GoodsShop goodsShop = new GoodsShop(); |
| | | goodsShop.setGoodsId(goodsId); |
| | | goodsShop.setShopId(shopId); |
| | | goodsShop.setId(null); |
| | | |
| | | goodsShopService.save(goodsShop); |
| | | } |
| | | |
| | | @Override |
| | |
| | | if (goods == null){ |
| | | return null; |
| | | } |
| | | // 指定门店 |
| | | List<GoodsShop> goodsShops = goodsShopService.list(new LambdaQueryWrapper<GoodsShop>() |
| | | // 获取指定门店 |
| | | GoodsShop goodsShop = goodsShopService.getOne(new LambdaQueryWrapper<GoodsShop>() |
| | | .eq(GoodsShop::getGoodsId, goodsId)); |
| | | |
| | | for (GoodsShop goodsShop : goodsShops) { |
| | | Shop shop = shopMapper.selectById(goodsShop.getShopId()); |
| | | if(null != shop){ |
| | | goodsShop.setShopName(shop.getName()); |
| | | goodsShop.setOwnerName(shop.getShopManager()); |
| | | goodsShop.setPhone(shop.getPhone()); |
| | | goodsShop.setAddress(shop.getAddress()); |
| | | } |
| | | goods.setShopId(goodsShop.getShopId()); |
| | | Shop shop = shopService.getById(goodsShop.getShopId()); |
| | | if(null != shop){ |
| | | goodsShop.setShopName(shop.getName()); |
| | | goodsShop.setPhone(shop.getPhone()); |
| | | goodsShop.setAddress(shop.getAddress()); |
| | | goodsShop.setOwnerName(shop.getShopManager()); |
| | | } |
| | | goods.setGoodsShopList(goodsShops); |
| | | goods.setGoodsShop(goodsShop); |
| | | return goods; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 根据商品的价格配置体系获取商品当前的价格 |
| | | * @param goodsId |
| | | * @param type 1普通商品,2秒杀商品 |
| | | * @return |
| | | * 获取商品当前的价格,就是判断是否在秒杀活动中 |
| | | */ |
| | | public Price getPrice( Integer goodsId, Integer type){ |
| | | public Price getPrice( Integer goodsId ){ |
| | | //判断是否有在秒杀活动时间中 |
| | | Price price = new Price(); |
| | | SeckillActivityInfo one = seckillActivityInfoService.getOne(new LambdaQueryWrapper<SeckillActivityInfo>().eq(SeckillActivityInfo::getGoodId, goodsId) |
| | |
| | | goodsSeckill = goodsSeckillService.getOne(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, one.getId())); |
| | | } |
| | | //没有秒杀活动或者添加的普通商品则使用秒杀活动价格 |
| | | if(null == goodsSeckill || type == 1){ |
| | | if(null == goodsSeckill ){ |
| | | return null; |
| | | } |
| | | //秒杀活动价格 |
| | |
| | | price.setPoint(getPoint(price.getCash())); |
| | | price.setStartTime(one.getStartTime()); |
| | | price.setEndTime(one.getEndTime()); |
| | | price.setPurchaseLimit(one.getMaxNum()); |
| | | return price; |
| | | } |
| | | |
| | |
| | | throw new IllegalArgumentException("金额不能为null或负数"); |
| | | } |
| | | // 获取积分兑换比例配置 |
| | | R<SysConfig> info = sysConfigClient.getInfo("6"); |
| | | R<SysConfig> info = sysConfigClient.getInfo(6L); |
| | | if (info == null || info.getData() == null) { |
| | | throw new RuntimeException("获取积分兑换比例配置失败"); |
| | | } |