From f103ac7bc4f2fbb20a0f2dd3ed97b0ac7fc5f46d Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期五, 11 四月 2025 17:40:24 +0800
Subject: [PATCH] 商家端

---
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java |  140 +++++++++++++++++++---------------------------
 1 files changed, 58 insertions(+), 82 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 6ecba98..2e21724 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,6 +18,7 @@
 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.GoodsMapper;
 import com.ruoyi.other.mapper.GoodsShopMapper;
@@ -28,12 +29,15 @@
 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.stream.Collectors;
 
@@ -87,26 +91,33 @@
             List<NearbyShopVO> nearbyShopVOS = shopService.nearbyShopList(search.getLongitude(), search.getLatitude(), new Shop());
             shopIds = nearbyShopVOS.subList(0, 10).stream().map(NearbyShopVO::getId).collect(Collectors.toList());
         }
-
-        List<GoodsVO> list = this.baseMapper.goodsList(search.getGoodsCategoryId(), search.getName(),shopIds);//查找所有商品
+        //查找满足条件的商品  分类、名称、附近十家店
+        List<GoodsVO> list = this.baseMapper.goodsList(search.getGoodsCategoryId(), search.getName(),shopIds);
+        //去重
+        Map<Integer, GoodsVO> uniqueGoodsMap = new LinkedHashMap<>();
         for (GoodsVO goods : list) {
-            System.out.println(goods.getSellingPrice());
+            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())){
-            if("tgs.selling_price".equals(search.getOrderByColumn())){
+            if("tgs.selling_price".equals(search.getOrderByColumn())){//价格排序
                 list.sort(new Comparator<GoodsVO>() {
                     @Override
                     public int compare(GoodsVO o1, GoodsVO o2) {
@@ -123,7 +134,7 @@
                     }
                 });
             }
-            /*if("integral".equals(search.getOrderByColumn())){
+            if("integral".equals(search.getOrderByColumn())){//积分排序
                 list.sort(new Comparator<GoodsVO>() {
                     @Override
                     public int compare(GoodsVO o1, GoodsVO o2) {
@@ -139,8 +150,8 @@
                         return 0;
                     }
                 });
-            }*/
-            if("sale_num".equals(search.getOrderByColumn())){
+            }
+            if("sale_num".equals(search.getOrderByColumn())){//销量
                 list.sort(new Comparator<GoodsVO>() {
                     @Override
                     public int compare(GoodsVO o1, GoodsVO o2) {
@@ -179,23 +190,9 @@
     }
 
     @Override
-    public GoodsVO goodsDetail(Long goodsId, Integer shopId, String longitude, String latitude) {
-        /*if (goodsId == null || goodsId <= 0) {
+    public GoodsVO goodsDetail(Long goodsId) {
+        if (goodsId == null || goodsId <= 0) {
             throw new NullPointerException("商品ID不能为空");
-        }
-
-        Integer vipId = 0;
-        String provinceCode = null;
-        String cityCode = null;
-        String districtCode = null;
-        String token = SecurityUtils.getToken(ServletUtils.getRequest());
-        if(StringUtils.isNotEmpty(token)){
-            Long userid = tokenService.getLoginUserApplet().getUserid();
-            AppUser appUser = appUserClient.getAppUserById(userid);
-            vipId = appUser.getVipId();
-            provinceCode = appUser.getProvinceCode();
-            cityCode = appUser.getCityCode();
-            districtCode = appUser.getDistrictCode();
         }
 
         Goods goods = this.getById(goodsId);
@@ -205,59 +202,38 @@
         if(goods.getStatus() == 1){
             throw new RuntimeException("商品已被下架");
         }
-        if(!goods.getCommodityAuthority().contains("-1") && !goods.getCommodityAuthority().contains(vipId.toString())){
-            throw new RuntimeException("权限不足");
-        }
+
         GoodsVO goodsVO = new GoodsVO();
         BeanUtils.copyBeanProp(goodsVO, goods);
         goodsVO.setGoodsId(goods.getId());
         goodsVO.setGoodsName(goods.getName());
-        Price price = getPrice(vipId, goods.getId(), shopId, 1, provinceCode, cityCode, districtCode);
+
+        //计算所需价格和积分
+        Price price = getPrice( goods.getId());
         if(null != price){
-            goodsVO.setPointPayment(price.getPointPayment() ? 1 : 0);
-            goodsVO.setCashPayment(price.getCashPayment() ? 1 : 0);
+            //秒杀活动
             goodsVO.setSellingPrice(price.getCash());
             goodsVO.setIntegral(price.getPoint());
+            goodsVO.setStartTime(price.getStartTime());
+            goodsVO.setEndTime(price.getEndTime());
+            goodsVO.setPurchaseLimit(price.getPurchaseLimit());
         }
-
-        if(goods.getType() == 1){
-            if(goods.getAppointStore() == 2){
-                List<Shop> shopList = shopMapper.selectList(new LambdaQueryWrapper<Shop>()
-                        .in(Shop::getDelFlag, 0));
-                goodsVO.setShopList(shopList);
-            }else{
-                List<GoodsShop> goodsShopList = goodsShopMapper.selectList(new LambdaQueryWrapper<GoodsShop>()
-                        .eq(GoodsShop::getGoodsId, goodsId));
-                if (!CollectionUtils.isEmpty(goodsShopList)){
-                    List<Integer> shopIds = goodsShopList.stream().map(GoodsShop::getShopId).collect(Collectors.toList());
-                    List<Shop> shopList = shopMapper.selectList(new LambdaQueryWrapper<Shop>()
-                            .in(Shop::getId, shopIds));
-                    goodsVO.setShopList(shopList);
-                }
-            }
-        }else{
-            List<Shop> shopList = shopMapper.selectList(new LambdaQueryWrapper<Shop>()
-                    .in(Shop::getDelFlag, 0));
-            goodsVO.setShopList(shopList);
-        }
-        if(StringUtils.isNotEmpty(longitude) && StringUtils.isNotEmpty(latitude)){
-            List<Shop> shopList = goodsVO.getShopList();
-            for (Shop shop : shopList) {
-                Double wgs84 = GeodesyUtil.getDistance(longitude + "," + latitude, shop.getLongitude() + "," + shop.getLatitude()).get("WGS84");
-                shop.setDistance(wgs84);
-            }
-            shopList.sort(new Comparator<Shop>() {
-                @Override
-                public int compare(Shop o1, Shop o2) {
-                    return o1.getDistance().compareTo(o2.getDistance());
-                }
-            });
-            goodsVO.setShopList(shopList);
-        }
+        //已售数量
+        Integer data = orderClient.getGoodsSaleNum(goods.getId(), 1).getData();
+        goodsVO.setSaleNum(data);
+        //一个商品对应一个门店
+        //查找门店
+        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);
+        //已售数量
         Integer integer = orderClient.getGoodsSaleNum(goods.getId(), 1).getData();
         goodsVO.setSaleNum(integer);
-        return goodsVO;*/
-        return null;
+        return goodsVO;
+
     }
 
 
@@ -267,11 +243,12 @@
         List<GoodsVO> goods = goodsMapper.selectListByShopId(pageInfo, shopId);
         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());
             }
@@ -294,7 +271,7 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void addGoods(Goods goods) {
-        goods.setSaleNum(0);
+      /*  goods.setSaleNum(0);
         goods.setStatus(GoodsStatus.DOWN.getCode());
         goodsMapper.insert(goods);
 
@@ -306,18 +283,18 @@
                 throw new NullPointerException("请选择指定门店");
             }
             saveGoodsShopList(goodsShopList, goods.getId());
-        }
+        }*/
     }
 
     @Override
     public void updateManageGoods(Goods goods) {
-        this.updateById(goods);
+       /* this.updateById(goods);
         //修改个别字段
         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());
+        saveGoodsShopList(goodsShopList, goods.getId());*/
     }
 
 
@@ -358,20 +335,18 @@
                 goodsShop.setAddress(shop.getAddress());
             }
         }
-        goods.setGoodsShopList(goodsShops);
+//        goods.setGoodsShopList(goodsShops);
         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)
                 .eq(SeckillActivityInfo::getIsShelves, 1).eq(SeckillActivityInfo::getDelFlag, 0)
@@ -382,7 +357,7 @@
             goodsSeckill = goodsSeckillService.getOne(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, one.getId()));
         }
         //没有秒杀活动或者添加的普通商品则使用秒杀活动价格
-        if(null == goodsSeckill || type == 1){
+        if(null == goodsSeckill ){
            return null;
         }
         //秒杀活动价格
@@ -391,6 +366,7 @@
         price.setPoint(getPoint(price.getCash()));
         price.setStartTime(one.getStartTime());
         price.setEndTime(one.getEndTime());
+        price.setPurchaseLimit(one.getMaxNum());
         return price;
     }
 
@@ -402,7 +378,7 @@
             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("获取积分兑换比例配置失败");
         }

--
Gitblit v1.7.1