From 9e8c542caf11c0b72639a8e323fa81fd3b4f594e Mon Sep 17 00:00:00 2001
From: huliguo <2023611923@qq.com>
Date: 星期二, 01 四月 2025 19:00:09 +0800
Subject: [PATCH] 首页

---
 ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/GoodsServiceImpl.java |  165 +++++++++++++++++++++++++++++-------------------------
 1 files changed, 89 insertions(+), 76 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 59a33d7..6ecba98 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
@@ -1,15 +1,12 @@
 package com.ruoyi.other.service.impl;
 
-import cn.hutool.core.util.ObjectUtil;
 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.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.account.api.feignClient.AppUserClient;
 import com.ruoyi.account.api.model.AppUser;
-import com.ruoyi.common.core.constant.TokenConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.ServletUtils;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -21,8 +18,6 @@
 import com.ruoyi.order.feignClient.RemoteOrderGoodsClient;
 import com.ruoyi.order.vo.Price;
 import com.ruoyi.other.api.domain.*;
-import com.ruoyi.other.api.vo.GetGoodsBargainPrice;
-import com.ruoyi.other.api.vo.GetSeckillActivityInfo;
 import com.ruoyi.other.enums.GoodsStatus;
 import com.ruoyi.other.mapper.GoodsMapper;
 import com.ruoyi.other.mapper.GoodsShopMapper;
@@ -30,8 +25,9 @@
 import com.ruoyi.other.service.*;
 import com.ruoyi.other.util.GeodesyUtil;
 import com.ruoyi.other.vo.GoodsVO;
-import com.ruoyi.system.api.model.LoginUser;
-import org.jetbrains.annotations.NotNull;
+import com.ruoyi.other.vo.NearbyShopVO;
+import com.ruoyi.system.api.domain.SysConfig;
+import com.ruoyi.system.api.feignClient.SysConfigClient;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -40,7 +36,6 @@
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * <p>
@@ -72,38 +67,43 @@
     private GoodsSeckillService goodsSeckillService;
     @Resource
     private OrderClient orderClient;
+    @Resource
+    private SysConfigClient  sysConfigClient;
+    @Resource
+    private ShopService shopService;
 
 
-
+    /**
+     * 热门商品列表
+     * @param search
+     * @return
+     */
 
     @Override
     public PageInfo<GoodsVO> goodsList(Goods search) {
-        Integer vipId = 0;
-        String provinceCode = "0";
-        String cityCode = "0";
-        String districtCode = "0";
-        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();
+        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());
         }
-        List<GoodsVO> list = this.baseMapper.goodsList(search.getGoodsCategoryId(), search.getName(), vipId);
+
+        List<GoodsVO> list = this.baseMapper.goodsList(search.getGoodsCategoryId(), search.getName(),shopIds);//查找所有商品
         for (GoodsVO goods : list) {
-            Price price = getPrice(vipId, goods.getGoodsId(), null, 1, provinceCode, cityCode, districtCode);
+            System.out.println(goods.getSellingPrice());
+            //计算所需价格和积分
+            Price price = getPrice( goods.getGoodsId(), 1);
             if(null != price){
-                goods.setCashPayment(price.getCashPayment() ? 1 : 0);
-                goods.setPointPayment(price.getPointPayment() ? 1 : 0);
+                //秒杀活动
                 goods.setSellingPrice(price.getCash());
                 goods.setIntegral(price.getPoint());
+                goods.setStartTime(price.getStartTime());
+                goods.setEndTime(price.getEndTime());
             }
+            //已售
             Integer data = orderClient.getGoodsSaleNum(goods.getGoodsId(), 1).getData();
             goods.setSaleNum(data);
         }
-
         //手动排序
         if(StringUtils.isNotEmpty(search.getOrderByColumn())){
             if("tgs.selling_price".equals(search.getOrderByColumn())){
@@ -123,7 +123,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,7 +139,7 @@
                         return 0;
                     }
                 });
-            }
+            }*/
             if("sale_num".equals(search.getOrderByColumn())){
                 list.sort(new Comparator<GoodsVO>() {
                     @Override
@@ -180,7 +180,7 @@
 
     @Override
     public GoodsVO goodsDetail(Long goodsId, Integer shopId, String longitude, String latitude) {
-        if (goodsId == null || goodsId <= 0) {
+        /*if (goodsId == null || goodsId <= 0) {
             throw new NullPointerException("商品ID不能为空");
         }
 
@@ -256,35 +256,26 @@
         }
         Integer integer = orderClient.getGoodsSaleNum(goods.getId(), 1).getData();
         goodsVO.setSaleNum(integer);
-        return goodsVO;
+        return goodsVO;*/
+        return null;
     }
 
 
     @Override
-    public List<Goods> getGoodsListByShopId(PageInfo<Goods> pageInfo, Integer shopId) {
-        Integer vipId = 0;
-        String provinceCode = "0";
-        String cityCode = "0";
-        String districtCode = "0";
-        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();
-        }
-        List<Goods> goods = goodsMapper.selectListByShopId(pageInfo, shopId, vipId);
-        for (Goods good : goods) {
-            Price price = getPrice(vipId, good.getId(), shopId, 1, provinceCode, cityCode, districtCode);
+    public List<GoodsVO> getGoodsListByShopId(PageInfo<GoodsVO> pageInfo, Integer shopId) {
+        //查询该门店商品
+        List<GoodsVO> goods = goodsMapper.selectListByShopId(pageInfo, shopId);
+        for (GoodsVO good : goods) {
+            //价格
+            Price price = getPrice( good.getGoodsId(), 1);
             if(null != price){
-                good.setCashPayment(price.getCashPayment() ? 1 : 0);
-                good.setPointPayment(price.getPointPayment() ? 1 : 0);
+                //秒杀活动
                 good.setSellingPrice(price.getCash());
                 good.setIntegral(price.getPoint());
+                good.setStartTime(price.getStartTime());
+                good.setEndTime(price.getEndTime());
             }
-            Integer data = orderClient.getGoodsSaleNum(good.getId(), 1).getData();
+            Integer data = orderClient.getGoodsSaleNum(good.getGoodsId(), 1).getData();
             good.setSaleNum(data);
         }
         return goods;
@@ -375,44 +366,66 @@
 
     /**
      * 根据商品的价格配置体系获取商品当前的价格
-     * @param vip
      * @param goodsId
      * @param type          1普通商品,2秒杀商品
-     * @param shopId
-     * @param provinceCode
-     * @param cityCode
-     * @param districtCode
      * @return
      */
-    public Price getPrice(Integer vip, Integer goodsId, Integer shopId, Integer type, String provinceCode, String cityCode, String districtCode){
-        //获取支付价格
-        //秒杀活动>门店特价>地区价格>会员价格
+    public Price getPrice( Integer goodsId, Integer type){
         //判断是否有秒杀活动
         Price price = new Price();
         SeckillActivityInfo one = seckillActivityInfoService.getOne(new LambdaQueryWrapper<SeckillActivityInfo>().eq(SeckillActivityInfo::getGoodId, goodsId)
                 .eq(SeckillActivityInfo::getIsShelves, 1).eq(SeckillActivityInfo::getDelFlag, 0)
-                .last(" and now() between start_time and end_time and FIND_IN_SET(" + vip + ", vip_ids) order by create_time desc limit 0, 1"));
-        GoodsSeckill goodsSeckill = null;
+                .last(" and now() between start_time and end_time order by create_time desc limit 0, 1"));
+        GoodsSeckill goodsSeckill = null;//秒杀配置
         if(null != one){
-            goodsSeckill = goodsSeckillService.getOne(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, one.getId()).eq(GoodsSeckill::getVip, vip));
+            //有秒杀活动,查看秒杀价格
+            goodsSeckill = goodsSeckillService.getOne(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, one.getId()));
         }
-        //没有秒杀活动或者添加的普通商品则不使用秒杀活动价格
-        if(null != goodsSeckill && type == 1){
-            //构建价格数据
-            if(goodsSeckill.getCashPayment() == 1 && goodsSeckill.getPointPayment() == 1){
-                price.setCash(goodsSeckill.getSellingPrice());
-                price.setPoint(goodsSeckill.getIntegral());
-            }
-            if(goodsSeckill.getCashPayment() == 1 && goodsSeckill.getPointPayment() == 0){
-                price.setCash(goodsSeckill.getSellingPrice());
-            }
-            if(goodsSeckill.getCashPayment() == 0 && goodsSeckill.getPointPayment() == 1){
-                price.setPoint(goodsSeckill.getIntegral());
-            }
-            price.setCashPayment(goodsSeckill.getCashPayment() == 1);
-            price.setPointPayment(goodsSeckill.getPointPayment() == 1);
+        //没有秒杀活动或者添加的普通商品则使用秒杀活动价格
+        if(null == goodsSeckill || type == 1){
+           return null;
         }
+        //秒杀活动价格
+        price.setCash(goodsSeckill.getSellingPrice());
+        //计算对应积分
+        price.setPoint(getPoint(price.getCash()));
+        price.setStartTime(one.getStartTime());
+        price.setEndTime(one.getEndTime());
         return price;
     }
 
+    /**
+     * 获取现金对应积分
+     */
+    public Integer getPoint(BigDecimal cash){
+        if (cash == null || cash.compareTo(BigDecimal.ZERO) < 0) {
+            throw new IllegalArgumentException("金额不能为null或负数");
+        }
+        // 获取积分兑换比例配置
+        R<SysConfig> info = sysConfigClient.getInfo("6");
+        if (info == null || info.getData() == null) {
+            throw new RuntimeException("获取积分兑换比例配置失败");
+        }
+        String configValue = info.getData().getConfigValue();
+        if (StringUtils.isBlank(configValue)) {
+            throw new RuntimeException("积分兑换比例配置值为空");
+        }
+        try {
+            // 使用BigDecimal处理比例,避免精度问题
+            BigDecimal ratio = new BigDecimal(configValue.trim());
+            if (ratio.compareTo(BigDecimal.ZERO) <= 0) {
+                throw new RuntimeException("积分兑换比例必须大于0");
+            }
+
+            // 计算积分并四舍五入取整
+            return cash.multiply(ratio).intValue();
+
+        } catch (NumberFormatException e) {
+            throw new RuntimeException("积分兑换比例配置值格式错误", e);
+        } catch (ArithmeticException e) {
+            throw new RuntimeException("积分计算结果溢出", e);
+        }
+
+    }
+
 }

--
Gitblit v1.7.1