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