From 34f741f39e22bf48df33321230380b40c23110c3 Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期五, 18 四月 2025 21:34:13 +0800 Subject: [PATCH] 店铺、积分、订单 --- ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java | 98 +++++++++++++++++++++++++++++++++++-------------- 1 files changed, 70 insertions(+), 28 deletions(-) diff --git a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java index a82c6fd..41c6d6d 100644 --- a/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java +++ b/ruoyi-service/ruoyi-other/src/main/java/com/ruoyi/other/service/impl/SeckillActivityInfoServiceImpl.java @@ -1,10 +1,13 @@ package com.ruoyi.other.service.impl; 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.conditions.update.UpdateWrapper; 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.domain.R; import com.ruoyi.common.core.utils.PageUtils; import com.ruoyi.common.core.utils.ServletUtils; import com.ruoyi.common.core.utils.StringUtils; @@ -22,11 +25,14 @@ import com.ruoyi.other.util.GeodesyUtil; import com.ruoyi.other.vo.SeckillActivityDetailVO; import com.ruoyi.other.vo.SeckillActivityVO; +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 javax.annotation.Resource; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -56,6 +62,8 @@ private AppUserClient appUserClient; @Resource private GoodsSeckillService goodsSeckillService; + @Resource + private SysConfigClient sysConfigClient; @Resource private GoodsService goodsService; @Resource @@ -188,42 +196,76 @@ @Transactional(rollbackFor = Exception.class) public void saveSeckillActivityInfo(SeckillActivityInfo seckillActivityInfo) { Integer goodId = seckillActivityInfo.getGoodId(); - String startTime = seckillActivityInfo.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - String endTime = seckillActivityInfo.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - long count = this.count(new LambdaQueryWrapper<SeckillActivityInfo>().eq(SeckillActivityInfo::getGoodId, goodId).eq(SeckillActivityInfo::getDelFlag, 0) - .eq(SeckillActivityInfo::getIsShelves, 1).last(" and ('" + startTime + "' between start_time and end_time or '" + endTime + "' between start_time and end_time)")); - if(0 < count){ + + //检查该商品是否有秒杀活动 + SeckillActivityInfo one = this.getOne(new LambdaQueryWrapper<SeckillActivityInfo>().eq(SeckillActivityInfo::getGoodId, goodId).eq(SeckillActivityInfo::getDelFlag, 0)); + if(null!=one){ throw new RuntimeException("该秒杀商品已在其他秒杀活动中存在"); } + seckillActivityInfo.setId(null); + seckillActivityInfo.setCreateTime(LocalDateTime.now()); + seckillActivityInfo.setDelFlag(0); + seckillActivityInfo.setIsShelves(0);//下架状态 this.baseMapper.insert(seckillActivityInfo); - List<GoodsSeckill> goodsSeckills = seckillActivityInfo.getGoodsSeckills(); - for (GoodsSeckill goodsSeckill : goodsSeckills) { - goodsSeckill.setCashPayment(null == goodsSeckill.getSellingPrice() ? 0 : 1); - goodsSeckill.setPointPayment(null == goodsSeckill.getIntegral() ? 0 : 1); - goodsSeckill.setSeckillActivityInfoId(seckillActivityInfo.getId()); - } - goodsSeckillService.saveBatch(goodsSeckills); + //添加价格积分 + GoodsSeckill goodsSeckill = new GoodsSeckill(); + goodsSeckill.setSeckillActivityInfoId(seckillActivityInfo.getId()); + goodsSeckill.setSellingPrice(seckillActivityInfo.getSellingPrice()); + Integer point =getPoint(seckillActivityInfo.getSellingPrice()); + goodsSeckill.setIntegral(point); + goodsSeckillService.save(goodsSeckill); } + /** + * 获取现金对应积分 + */ + public Integer getPoint(BigDecimal cash){ + if (cash == null || cash.compareTo(BigDecimal.ZERO) < 0) { + throw new IllegalArgumentException("金额不能为null或负数"); + } + // 获取积分兑换比例配置 + R<SysConfig> info = sysConfigClient.getInfo(6L); + 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); + } + + } + @Override @Transactional(rollbackFor = Exception.class) public void updateSeckillActivityInfo(SeckillActivityInfo seckillActivityInfo) { - Integer goodId = seckillActivityInfo.getGoodId(); - String startTime = seckillActivityInfo.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - String endTime = seckillActivityInfo.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); - long count = this.count(new LambdaQueryWrapper<SeckillActivityInfo>().eq(SeckillActivityInfo::getGoodId, goodId).eq(SeckillActivityInfo::getDelFlag, 0) - .eq(SeckillActivityInfo::getIsShelves, 1).last(" and ('" + startTime + "' between start_time and end_time or '" + endTime + "' between start_time and end_time)")); - if(1 < count){ - throw new RuntimeException("该秒杀商品已在其他秒杀活动中存在"); + SeckillActivityInfo one = this.getOne(new LambdaQueryWrapper<SeckillActivityInfo>() + .eq(SeckillActivityInfo::getId, seckillActivityInfo.getId()).eq(SeckillActivityInfo::getDelFlag, 0)); + if(null==one){ + throw new RuntimeException("该秒杀活动不存在"); } - this.baseMapper.updateById(seckillActivityInfo); - goodsSeckillService.remove(new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getSeckillActivityInfoId, seckillActivityInfo.getId())); - List<GoodsSeckill> goodsSeckills = seckillActivityInfo.getGoodsSeckills(); - for (GoodsSeckill goodsSeckill : goodsSeckills) { - goodsSeckill.setCashPayment(null == goodsSeckill.getSellingPrice() ? 0 : 1); - goodsSeckill.setPointPayment(null == goodsSeckill.getIntegral() ? 0 : 1); - goodsSeckill.setSeckillActivityInfoId(seckillActivityInfo.getId()); - } - goodsSeckillService.saveBatch(goodsSeckills); + this.baseMapper.updateById(seckillActivityInfo);//修改限购数量、开始时间、结束时间 + + //修改价格积分 + Integer point =getPoint(seckillActivityInfo.getSellingPrice()); + UpdateWrapper<GoodsSeckill> wrapper = new UpdateWrapper<>(); + wrapper.eq("seckill_activity_info_id", seckillActivityInfo.getId()) + .set("selling_price", seckillActivityInfo.getSellingPrice()) + .set("integral", point); + goodsSeckillService.update(wrapper); } } -- Gitblit v1.7.1