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