From 5a7486e9893a706ed464e3197c9711286b077896 Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期四, 26 六月 2025 11:12:28 +0800
Subject: [PATCH] 文件导入

---
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java |  141 ++++++++++++++++++++++++++++-------------------
 1 files changed, 84 insertions(+), 57 deletions(-)

diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
index d84a0f6..d8b5290 100644
--- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
+++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java
@@ -18,23 +18,30 @@
 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;
 
 /**
@@ -72,6 +79,8 @@
     @Resource
     private ShopService shopService;
 
+    @Resource
+    private GoodsEvaluateMapper goodsEvaluateMapper;
 
     /**
      * 热门商品列表
@@ -83,26 +92,32 @@
     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())){
@@ -185,6 +200,7 @@
         }
 
         Goods goods = this.getById(goodsId);
+
         if(null == goods || goods.getDelFlag() == 1){
             throw new RuntimeException("商品不存在");
         }
@@ -198,13 +214,14 @@
         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();
@@ -214,12 +231,20 @@
         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;
 
     }
@@ -229,13 +254,17 @@
     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());
             }
@@ -246,31 +275,33 @@
     }
 
     @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
@@ -279,9 +310,8 @@
         //修改个别字段
         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());
     }
 
 
@@ -291,16 +321,16 @@
 
 
 
-    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
@@ -309,32 +339,28 @@
         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)
@@ -346,7 +372,7 @@
             goodsSeckill = goodsSeckillService.getOne(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, one.getId()));
         }
         //没有秒杀活动或者添加的普通商品则使用秒杀活动价格
-        if(null == goodsSeckill || type == 1){
+        if(null == goodsSeckill ){
            return null;
         }
         //秒杀活动价格
@@ -355,6 +381,7 @@
         price.setPoint(getPoint(price.getCash()));
         price.setStartTime(one.getStartTime());
         price.setEndTime(one.getEndTime());
+        price.setPurchaseLimit(one.getMaxNum());
         return price;
     }
 

--
Gitblit v1.7.1