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