From 8bfb27fe120fabff001a2dbe966396eb2ee98472 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期四, 23 五月 2024 17:21:54 +0800
Subject: [PATCH] Merge branch 'dev-mitao'

---
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/GoodsSeckillController.java          |   33 ++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceOrderServiceImpl.java |   20 +
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java           |   14 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/GoodsGroupPurchaseController.java    |   22 +
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/MemberPoints.java                 |   58 +++
 ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java         |   25 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoiceOrder.java             |   50 +++
 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceMapper.xml                       |    5 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeckillService.java               |   14 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java                   |    8 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceServiceImpl.java      |   20 +
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICustomConfigService.java             |    2 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/DelayTaskEnum.java              |    8 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java |   18 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceRiseMapper.java             |   16 +
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberPointsController.java        |   20 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceController.java         |   20 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java                   |    2 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceRiseController.java     |   20 +
 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceRiseMapper.xml                   |    5 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/MemberPointsMapper.java                |   16 +
 ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/MemberPointsMapper.xml                      |    5 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java                   |   53 ++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceOrderMapper.java            |   16 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceOrderService.java         |   16 +
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java         |    5 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java           |    2 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceService.java              |   16 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceMapper.java                 |   16 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java       |   47 +++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceRiseServiceImpl.java  |   20 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceOrderController.java    |   20 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoiceRise.java              |   86 +++++
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberPointsServiceImpl.java     |   21 +
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java         |    4 
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberPointsService.java             |   16 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceRiseService.java          |   16 +
 ruoyi-common/ruoyi-common-redis/pom.xml                                                                 |    8 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/GoodsSkuFactory.java              |   28 +
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoice.java                  |   71 ++++
 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceOrderMapper.xml                  |    5 
 41 files changed, 830 insertions(+), 37 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/DelayTaskEnum.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/DelayTaskEnum.java
index fcdc58a..5e0e3b2 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/DelayTaskEnum.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/DelayTaskEnum.java
@@ -10,10 +10,10 @@
 public enum DelayTaskEnum {
 
     ORDER_AUTOMATIC_CANCEL("订单延时任务-自动关闭", "超时订单自动关闭"),
-    SECKILL_START_TASK("秒杀商品延时任务", "定时开始任务"),
-    SECKILL_END_TASK("秒杀商品延时任务", "定时结束任务"),
-    GROUP_PURCHASES_START_TASK("团购商品延时任务", "定时开始任务"),
-    GROUP_PURCHASES_END_TASK("团购商品延时任务", "定时结束任务"),
+    SECKILL_START_TASK("秒杀商品延时任务", "秒杀商品定时开始任务"),
+    SECKILL_END_TASK("秒杀商品延时任务", "秒杀商品定时结束任务"),
+    GROUP_PURCHASES_START_TASK("团购商品延时任务", "团购商品定时开始任务"),
+    GROUP_PURCHASES_END_TASK("团购商品延时任务", "团购商品定时结束任务"),
     ;
 
     String name;
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/GoodsSkuFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/GoodsSkuFactory.java
index 66a5648..3ef7909 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/GoodsSkuFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/GoodsSkuFactory.java
@@ -1,20 +1,13 @@
 package com.ruoyi.system.api.factory;
 
 import com.ruoyi.common.core.domain.R;
-import com.ruoyi.system.api.RemoteFileService;
-import com.ruoyi.system.api.RemoteLogService;
-import com.ruoyi.system.api.domain.*;
+import com.ruoyi.system.api.domain.GoodsSku;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
-import com.ruoyi.system.api.feignClient.SysUserClient;
-import com.ruoyi.system.api.model.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.cloud.openfeign.FallbackFactory;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.List;
 @Component
 public class GoodsSkuFactory  implements FallbackFactory<GoodsSkuClient> {
 
@@ -32,6 +25,25 @@
                 return R.fail("更新商品失败:" + cause.getMessage());
             }
 
+            @Override
+            public R<?> startSeckill(Long seckillId) {
+                return R.fail("开始秒杀失败:" + cause.getMessage());
+            }
+
+            @Override
+            public R<?> endSeckill(Long seckillId) {
+                return R.fail("结束秒杀失败:" + cause.getMessage());
+            }
+
+            @Override
+            public R<?> startGroupPurchase(Long groupPurchaseId) {
+                return R.fail("开始团购失败:" + cause.getMessage());
+            }
+
+            @Override
+            public R<?> endGroupPurchase(Long groupPurchaseId) {
+                return R.fail("结束团购失败:" + cause.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java
index d0011ef..6913caa 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java
@@ -1,15 +1,16 @@
 package com.ruoyi.system.api.feignClient;
 
-import com.ruoyi.common.core.constant.ServiceNameConstants;;
+import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.system.api.domain.GoodsSku;
 import com.ruoyi.system.api.factory.GoodsSkuFactory;
-import com.ruoyi.system.api.factory.SysUserFallbackFactory;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+
+;
 
 @FeignClient(contextId = "GoodsSkuClient", value = ServiceNameConstants.RUOYI_GOODS, fallbackFactory = GoodsSkuFactory.class)
 public interface GoodsSkuClient {
@@ -22,6 +23,15 @@
     @PostMapping("/goods-sku/updateGoodsSkuOne")
     R<Boolean> updateGoodsSkuOne(@RequestBody GoodsSku goodsSku);
 
+    @GetMapping("/goods-seckill/start/{seckillId}")
+    R<?> startSeckill(@PathVariable("seckillId") Long seckillId);
 
+    @GetMapping("/goods-seckill/end/{seckillId}")
+    R<?> endSeckill(@PathVariable("seckillId") Long seckillId);
 
+    @GetMapping("/goods-group-purchase/start/{groupPurchaseId}")
+    R<?> startGroupPurchase(@PathVariable("groupPurchaseId") Long groupPurchaseId);
+
+    @GetMapping("/goods-group-purchase/end/{groupPurchaseId}")
+    R<?> endGroupPurchase(@PathVariable("groupPurchaseId") Long groupPurchaseId);
 }
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
index c33b1f9..928405a 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java
@@ -70,4 +70,9 @@
      * 省市区列表key
      */
     public static final String CITY_LIST = "city_list";
+
+    /**
+     * 秒杀活动商品key前缀
+     */
+    public static final String SECKILL_GOODS = "seckill_goods:";
 }
diff --git a/ruoyi-common/ruoyi-common-redis/pom.xml b/ruoyi-common/ruoyi-common-redis/pom.xml
index 97c986b..529a141 100644
--- a/ruoyi-common/ruoyi-common-redis/pom.xml
+++ b/ruoyi-common/ruoyi-common-redis/pom.xml
@@ -28,6 +28,12 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common-core</artifactId>
         </dependency>
-        
+        <!-- redis分布式锁框架 -->
+        <dependency>
+            <groupId>org.redisson</groupId>
+            <artifactId>redisson</artifactId>
+            <version>3.19.3</version>
+        </dependency>
+
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java
index 6e1ec8a..326a791 100644
--- a/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java
+++ b/ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java
@@ -1,5 +1,9 @@
 package com.ruoyi.common.redis.configure;
 
+import java.io.IOException;
+import org.redisson.Redisson;
+import org.redisson.api.RedissonClient;
+import org.redisson.config.Config;
 import org.springframework.boot.autoconfigure.AutoConfigureBefore;
 import org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration;
 import org.springframework.cache.annotation.CachingConfigurerSupport;
@@ -8,6 +12,7 @@
 import org.springframework.context.annotation.Configuration;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.listener.RedisMessageListenerContainer;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
 
 /**
@@ -40,4 +45,24 @@
         template.afterPropertiesSet();
         return template;
     }
+
+    //Redis监听容器
+    @Bean
+    public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory) {
+        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
+        container.setConnectionFactory(connectionFactory);
+        return container;
+    }
+
+    @Bean(destroyMethod = "shutdown") // 服务停止后调用 shutdown 方法。
+    public RedissonClient redisson() throws IOException {
+        // 1.创建配置
+        Config config = new Config();
+        // 集群模式
+        // config.useClusterServers().addNodeAddress("127.0.0.1:7004", "127.0.0.1:7001");
+        // 2.根据 Config 创建出 RedissonClient 示例。
+        config.useSingleServer().setAddress("redis://192.168.110.188:6379").setPassword("123456");
+        return Redisson.create(config);
+    }
+
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/GoodsGroupPurchaseController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/GoodsGroupPurchaseController.java
index d263ca4..fd93cb6 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/GoodsGroupPurchaseController.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/GoodsGroupPurchaseController.java
@@ -1,8 +1,13 @@
 package com.ruoyi.goods.controller;
 
 
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.goods.service.IGoodsGroupPurchaseService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
-
 import org.springframework.web.bind.annotation.RestController;
 
 /**
@@ -13,8 +18,23 @@
  * @author mitao
  * @since 2024-05-16
  */
+@Slf4j
 @RestController
+@RequiredArgsConstructor
 @RequestMapping("/goods-group-purchase")
 public class GoodsGroupPurchaseController {
 
+    private final IGoodsGroupPurchaseService goodsGroupPurchaseService;
+
+    @GetMapping("/start/{groupPurchaseId}")
+    R<?> startGroupPurchase(@PathVariable("groupPurchaseId") Long groupPurchaseId) {
+        goodsGroupPurchaseService.startGroupPurchase(groupPurchaseId);
+        return R.ok();
+    }
+
+    @GetMapping("/end/{groupPurchaseId}")
+    R<?> endGroupPurchase(@PathVariable("groupPurchaseId") Long groupPurchaseId) {
+        goodsGroupPurchaseService.endGroupPurchase(groupPurchaseId);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/GoodsSeckillController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/GoodsSeckillController.java
index c021ac0..cc8b068 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/GoodsSeckillController.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/GoodsSeckillController.java
@@ -1,8 +1,13 @@
 package com.ruoyi.goods.controller;
 
 
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.goods.service.IGoodsSeckillService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RequestMapping;
-
 import org.springframework.web.bind.annotation.RestController;
 
 /**
@@ -13,8 +18,34 @@
  * @author mitao
  * @since 2024-05-16
  */
+@Slf4j
 @RestController
+@RequiredArgsConstructor
 @RequestMapping("/goods-seckill")
 public class GoodsSeckillController {
 
+    private final IGoodsSeckillService goodsSeckillService;
+
+    /**
+     * 开始秒杀
+     *
+     * @param seckillId 秒杀id
+     */
+    @GetMapping("/start/{seckillId}")
+    R<?> startSeckill(@PathVariable("seckillId") Long seckillId) {
+        goodsSeckillService.startSeckill(seckillId);
+        return R.ok();
+    }
+
+    /**
+     * 结束秒杀
+     *
+     * @param seckillId 秒杀id
+     */
+    @GetMapping("/end/{seckillId}")
+    R<?> endSeckill(@PathVariable("seckillId") Long seckillId) {
+        goodsSeckillService.endSeckill(seckillId);
+        return R.ok();
+    }
+
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java
index eebd533..e70c423 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java
@@ -47,4 +47,8 @@
      * @param dto 商品上下架状态对象
      */
     void updStatus(ListStatusDTO dto);
+
+    void startGroupPurchase(Long groupPurchaseId);
+
+    void endGroupPurchase(Long groupPurchaseId);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeckillService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeckillService.java
index 71ffec0..95d6508 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeckillService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeckillService.java
@@ -55,4 +55,18 @@
      * @return GoodsSeckillVO 商品秒杀视图对象
      */
     GoodsSeckillVO getDetail(Long id);
+
+    /**
+     * 开始秒杀
+     *
+     * @param seckillId 秒杀id
+     */
+    void startSeckill(Long seckillId);
+
+    /**
+     * 结束秒杀
+     *
+     * @param seckillId 秒杀id
+     */
+    void endSeckill(Long seckillId);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
index 94cf0d9..b14f61a 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
@@ -41,6 +41,6 @@
      * @param dto 数据传输对象,包含需要更新的SKU的ID和新的上架状态。 其中,ID用于指定要更新的具体SKU,listingStatus用于指定新的上架状态。
      * @return 无返回值。
      */
-    void updStatus(ListStatusDTO dto) throws Exception;
+    void updStatus(ListStatusDTO dto);
 
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
index 905f7d9..cba8dcc 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
@@ -17,6 +17,7 @@
 import com.ruoyi.system.api.domain.dto.ListStatusDTO;
 import com.ruoyi.system.api.feignClient.OrderClient;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 /**
@@ -27,6 +28,7 @@
  * @author mitao
  * @since 2024-05-16
  */
+@Slf4j
 @Service
 @RequiredArgsConstructor
 public class GoodsGroupPurchaseServiceImpl extends ServiceImpl<GoodsGroupPurchaseMapper, GoodsGroupPurchase> implements IGoodsGroupPurchaseService {
@@ -106,4 +108,20 @@
         groupPurchase.setListingStatus(dto.getListingStatus());
         this.updateById(groupPurchase);
     }
+
+    @Override
+    public void startGroupPurchase(Long groupPurchaseId) {
+        log.info(">>>>>>>>>>>>>>>>>>>>团购商品开始团购<<<<<<<<<<<<<<<<<<<<");
+        GoodsGroupPurchase groupPurchase = this.getById(groupPurchaseId);
+        if (StringUtils.isNotNull(groupPurchase)) {
+            this.lambdaUpdate().set(GoodsGroupPurchase::getStartStatus, StartStatusEnum.STARTED)
+                    .eq(GoodsGroupPurchase::getId, groupPurchaseId).update();
+            //TODO 通知小程勋
+        }
+    }
+
+    @Override
+    public void endGroupPurchase(Long groupPurchaseId) {
+
+    }
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
index e39abe7..6511b81 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
@@ -2,10 +2,12 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.core.constant.CacheConstants;
 import com.ruoyi.common.core.enums.StartStatusEnum;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.page.BeanUtils;
 import com.ruoyi.common.core.utils.page.PageDTO;
+import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.goods.controller.management.DTO.GoodsSeckillDTO;
 import com.ruoyi.goods.controller.management.DTO.GoodsSeckillQuery;
 import com.ruoyi.goods.controller.management.DTO.GoodsSeckillUpd;
@@ -39,7 +41,7 @@
 
     private final IGoodsSkuService goodsSkuService;
     private final OrderClient orderClient;
-
+    private final RedisService redisService;
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void addGoodsSeckill(GoodsSeckillDTO dto) {
@@ -117,4 +119,47 @@
         vo.setNumberOfPurchasedMembers(num);
         return vo;
     }
+
+    /**
+     * 开始秒杀
+     *
+     * @param seckillId 秒杀id
+     */
+    @Override
+    public void startSeckill(Long seckillId) {
+        log.info(">>>>>>>>>>>>>>>>>>>>{}秒杀开始<<<<<<<<<<<<<<<<<<<<", seckillId);
+        GoodsSeckill goodsSeckill = this.getById(seckillId);
+        //秒杀商品不能为空且状态为未开始
+        if (StringUtils.isNotNull(goodsSeckill)
+                && goodsSeckill.getStartStatus().equals(StartStatusEnum.NOT_STARTED)) {
+            //开始秒杀
+            this.lambdaUpdate().set(GoodsSeckill::getStartStatus, StartStatusEnum.STARTED)
+                    .eq(GoodsSeckill::getId, seckillId).update();
+//            将秒杀商品放入缓存
+            redisService.setCacheObject(
+                    CacheConstants.SECKILL_GOODS + goodsSeckill.getId(),
+                    goodsSeckill.getSeckillStock());
+        }
+        //TODO websocket 推送秒杀开始消息
+    }
+
+    /**
+     * 结束秒杀
+     *
+     * @param seckillId 秒杀id
+     */
+    @Override
+    public void endSeckill(Long seckillId) {
+        log.info(">>>>>>>>>>>>>>>>>>>>{}秒杀结束<<<<<<<<<<<<<<<<<<<<", seckillId);
+        GoodsSeckill goodsSeckill = this.getById(seckillId);
+        if (StringUtils.isNotNull(goodsSeckill)
+                && goodsSeckill.getStartStatus().equals(StartStatusEnum.STARTED)) {
+            //结束秒杀
+            this.lambdaUpdate().set(GoodsSeckill::getStartStatus, StartStatusEnum.ENDED)
+                    .eq(GoodsSeckill::getId, seckillId).update();
+//            将秒杀商品从缓存中移除
+            redisService.deleteObject(CacheConstants.SECKILL_GOODS + goodsSeckill.getId());
+        }
+        //TODO websocket 推送秒杀结束消息
+    }
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
index 41eaf12..2627617 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
@@ -161,7 +161,7 @@
      */
     @Override
     @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
-    public void updStatus(ListStatusDTO dto) throws Exception {
+    public void updStatus(ListStatusDTO dto) {
         this.lambdaUpdate()
                 .eq(GoodsSku::getId, dto.getId())
                 .set(GoodsSku::getListingStatus, dto.getListingStatus())
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberPointsController.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberPointsController.java
new file mode 100644
index 0000000..ae278ff
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberPointsController.java
@@ -0,0 +1,20 @@
+package com.ruoyi.member.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 会员积分表 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+@RestController
+@RequestMapping("/member-points")
+public class MemberPointsController {
+
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/MemberPoints.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/MemberPoints.java
new file mode 100644
index 0000000..27260ef
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/MemberPoints.java
@@ -0,0 +1,58 @@
+package com.ruoyi.member.domain.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 会员积分表
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_member_points")
+@ApiModel(value = "MemberPoints对象", description = "会员积分表")
+public class MemberPoints implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "积分")
+    private Integer points;
+
+    @ApiModelProperty(value = "积分类型 1支付订单")
+    private Integer pointsType;
+
+    @ApiModelProperty(value = "积分状态 1是加积分,2 是减积分")
+    private Integer pointsStatus;
+
+    @ApiModelProperty(value = "会员id")
+    private Long memberId;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "删除标志(0代表存在 1代表删除)")
+    @TableLogic
+    private Integer delFlag;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/MemberPointsMapper.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/MemberPointsMapper.java
new file mode 100644
index 0000000..be4e640
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/MemberPointsMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.member.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.member.domain.pojo.MemberPoints;
+
+/**
+ * <p>
+ * 会员积分表 Mapper 接口
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+public interface MemberPointsMapper extends BaseMapper<MemberPoints> {
+
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberPointsService.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberPointsService.java
new file mode 100644
index 0000000..86bfe4a
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberPointsService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.member.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.member.domain.pojo.MemberPoints;
+
+/**
+ * <p>
+ * 会员积分表 服务类
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+public interface IMemberPointsService extends IService<MemberPoints> {
+
+}
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberPointsServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberPointsServiceImpl.java
new file mode 100644
index 0000000..b9cd29c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberPointsServiceImpl.java
@@ -0,0 +1,21 @@
+package com.ruoyi.member.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.member.domain.pojo.MemberPoints;
+import com.ruoyi.member.mapper.MemberPointsMapper;
+import com.ruoyi.member.service.IMemberPointsService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 会员积分表 服务实现类
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+@Service
+public class MemberPointsServiceImpl extends
+        ServiceImpl<MemberPointsMapper, MemberPoints> implements IMemberPointsService {
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceController.java
new file mode 100644
index 0000000..400c2e8
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceController.java
@@ -0,0 +1,20 @@
+package com.ruoyi.order.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 我的发票 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+@RestController
+@RequestMapping("/member-invoice")
+public class MemberInvoiceController {
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceOrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceOrderController.java
new file mode 100644
index 0000000..3637751
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceOrderController.java
@@ -0,0 +1,20 @@
+package com.ruoyi.order.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 开票和订单关联 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+@RestController
+@RequestMapping("/member-invoice-order")
+public class MemberInvoiceOrderController {
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceRiseController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceRiseController.java
new file mode 100644
index 0000000..25d4763
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceRiseController.java
@@ -0,0 +1,20 @@
+package com.ruoyi.order.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 我的发票抬头 前端控制器
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+@RestController
+@RequestMapping("/member-invoice-rise")
+public class MemberInvoiceRiseController {
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoice.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoice.java
new file mode 100644
index 0000000..5b9d253
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoice.java
@@ -0,0 +1,71 @@
+package com.ruoyi.order.domain.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 我的发票
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_member_invoice")
+@ApiModel(value = "MemberInvoice对象", description = "我的发票")
+public class MemberInvoice implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "创建者")
+    @TableField(value = "create_by", fill = FieldFill.INSERT)
+    private String createBy;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "更新者")
+    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "删除标志(0代表存在 1代表删除)")
+    @TableLogic
+    private Integer delFlag;
+
+    @ApiModelProperty(value = "发票金额")
+    private BigDecimal invoiceMoney;
+
+    @ApiModelProperty(value = "开票状态 1待审核,2 已开票,3 拒绝")
+    private Integer invoiceStatus;
+
+    @ApiModelProperty(value = "拒绝原因")
+    private String remark;
+
+    @ApiModelProperty(value = "会员id")
+    private Long memberId;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoiceOrder.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoiceOrder.java
new file mode 100644
index 0000000..c5bc230
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoiceOrder.java
@@ -0,0 +1,50 @@
+package com.ruoyi.order.domain.pojo;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 开票和订单关联
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_member_invoice_order")
+@ApiModel(value="MemberInvoiceOrder对象", description="开票和订单关联")
+public class MemberInvoiceOrder implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "开票id")
+    private Integer invoiceId;
+
+    @ApiModelProperty(value = "订单名称")
+    private String orderName;
+
+    @ApiModelProperty(value = "订单编号")
+    private String orderNo;
+
+    @ApiModelProperty(value = "订单金额")
+    private BigDecimal orderMoney;
+
+    @ApiModelProperty(value = "订单id")
+    private Integer orderId;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoiceRise.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoiceRise.java
new file mode 100644
index 0000000..9a6aab4
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoiceRise.java
@@ -0,0 +1,86 @@
+package com.ruoyi.order.domain.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 我的发票抬头
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("t_member_invoice_rise")
+@ApiModel(value = "MemberInvoiceRise对象", description = "我的发票抬头")
+public class MemberInvoiceRise implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "发票类型 1 普通,2 专票")
+    private Integer invoiceType;
+
+    @ApiModelProperty(value = "抬头类型 1 企业单位,2 个人/非企业单位")
+    private Integer riseType;
+
+    @ApiModelProperty(value = "公司名称")
+    private String corporationName;
+
+    @ApiModelProperty(value = "公司税号")
+    private String corporationId;
+
+    @ApiModelProperty(value = "公司地址")
+    private String corporationAddress;
+
+    @ApiModelProperty(value = "公司电话")
+    private String corporationPhone;
+
+    @ApiModelProperty(value = "公司开户行")
+    private String corporationOpen;
+
+    @ApiModelProperty(value = "公司账号")
+    private String corporationAccount;
+
+    @ApiModelProperty(value = "创建者")
+    @TableField(value = "create_by", fill = FieldFill.INSERT)
+    private String createBy;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "create_time", fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "更新者")
+    @TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+    @ApiModelProperty(value = "1是其他,2 是默认")
+    private Integer isDefault;
+
+    @ApiModelProperty(value = "会员id")
+    private Long memberId;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceMapper.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceMapper.java
new file mode 100644
index 0000000..986ae27
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.order.mapper;
+
+import com.ruoyi.order.domain.pojo.MemberInvoice;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 我的发票 Mapper 接口
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+public interface MemberInvoiceMapper extends BaseMapper<MemberInvoice> {
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceOrderMapper.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceOrderMapper.java
new file mode 100644
index 0000000..6fbff89
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceOrderMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.order.mapper;
+
+import com.ruoyi.order.domain.pojo.MemberInvoiceOrder;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 开票和订单关联 Mapper 接口
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+public interface MemberInvoiceOrderMapper extends BaseMapper<MemberInvoiceOrder> {
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceRiseMapper.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceRiseMapper.java
new file mode 100644
index 0000000..992c1be
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceRiseMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.order.mapper;
+
+import com.ruoyi.order.domain.pojo.MemberInvoiceRise;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 我的发票抬头 Mapper 接口
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+public interface MemberInvoiceRiseMapper extends BaseMapper<MemberInvoiceRise> {
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceOrderService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceOrderService.java
new file mode 100644
index 0000000..1eaa677
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceOrderService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.order.service;
+
+import com.ruoyi.order.domain.pojo.MemberInvoiceOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 开票和订单关联 服务类
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+public interface IMemberInvoiceOrderService extends IService<MemberInvoiceOrder> {
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceRiseService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceRiseService.java
new file mode 100644
index 0000000..8bd6d11
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceRiseService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.order.service;
+
+import com.ruoyi.order.domain.pojo.MemberInvoiceRise;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 我的发票抬头 服务类
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+public interface IMemberInvoiceRiseService extends IService<MemberInvoiceRise> {
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceService.java
new file mode 100644
index 0000000..580cc3b
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.order.service;
+
+import com.ruoyi.order.domain.pojo.MemberInvoice;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 我的发票 服务类
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+public interface IMemberInvoiceService extends IService<MemberInvoice> {
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceOrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceOrderServiceImpl.java
new file mode 100644
index 0000000..1991492
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceOrderServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.order.service.impl;
+
+import com.ruoyi.order.domain.pojo.MemberInvoiceOrder;
+import com.ruoyi.order.mapper.MemberInvoiceOrderMapper;
+import com.ruoyi.order.service.IMemberInvoiceOrderService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 开票和订单关联 服务实现类
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+@Service
+public class MemberInvoiceOrderServiceImpl extends ServiceImpl<MemberInvoiceOrderMapper, MemberInvoiceOrder> implements IMemberInvoiceOrderService {
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceRiseServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceRiseServiceImpl.java
new file mode 100644
index 0000000..24139ac
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceRiseServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.order.service.impl;
+
+import com.ruoyi.order.domain.pojo.MemberInvoiceRise;
+import com.ruoyi.order.mapper.MemberInvoiceRiseMapper;
+import com.ruoyi.order.service.IMemberInvoiceRiseService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 我的发票抬头 服务实现类
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+@Service
+public class MemberInvoiceRiseServiceImpl extends ServiceImpl<MemberInvoiceRiseMapper, MemberInvoiceRise> implements IMemberInvoiceRiseService {
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceServiceImpl.java
new file mode 100644
index 0000000..8ba8136
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.order.service.impl;
+
+import com.ruoyi.order.domain.pojo.MemberInvoice;
+import com.ruoyi.order.mapper.MemberInvoiceMapper;
+import com.ruoyi.order.service.IMemberInvoiceService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 我的发票 服务实现类
+ * </p>
+ *
+ * @author mitao
+ * @since 2024-05-23
+ */
+@Service
+public class MemberInvoiceServiceImpl extends ServiceImpl<MemberInvoiceMapper, MemberInvoice> implements IMemberInvoiceService {
+
+}
diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceMapper.xml
new file mode 100644
index 0000000..8d6514c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.order.mapper.MemberInvoiceMapper">
+
+</mapper>
diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceOrderMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceOrderMapper.xml
new file mode 100644
index 0000000..6a02bc7
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceOrderMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.order.mapper.MemberInvoiceOrderMapper">
+
+</mapper>
diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceRiseMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceRiseMapper.xml
new file mode 100644
index 0000000..46343c2
--- /dev/null
+++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceRiseMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.order.mapper.MemberInvoiceRiseMapper">
+
+</mapper>
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java
index 722a87a..fc5d736 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java
@@ -1,17 +1,19 @@
 package com.ruoyi.system;
 
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
 import com.ruoyi.common.security.annotation.EnableCustomConfig;
 import com.ruoyi.common.security.annotation.EnableRyFeignClients;
 import com.ruoyi.common.swagger.annotation.EnableCustomSwagger2;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableAsync;
 
 /**
  * 系统模块
  * 
  * @author ruoyi
  */
+@EnableAsync
 @EnableCustomConfig
 @MapperScan({"com.ruoyi.system.mapper"})
 @EnableCustomSwagger2
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java
index 2062fef..0421920 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java
@@ -4,13 +4,16 @@
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.system.api.constants.DelayTaskEnum;
+import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import java.util.Date;
-import lombok.extern.log4j.Log4j2;
+import javax.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.redis.connection.Message;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.ValueOperations;
 import org.springframework.data.redis.listener.KeyExpirationEventMessageListener;
 import org.springframework.data.redis.listener.RedisMessageListenerContainer;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
 
@@ -18,12 +21,13 @@
  * @author mitao
  * @date 2024/5/22
  */
-@Log4j2
+@Slf4j
 @Component
 public class RedisListener extends KeyExpirationEventMessageListener {
 
     private RedisTemplate<String, Object> redisTemplate;
-
+    @Resource
+    private GoodsSkuClient goodsSkuClient;
     public RedisListener(RedisMessageListenerContainer listenerContainer,
                          RedisTemplate redisTemplate) {
         super(listenerContainer);
@@ -41,17 +45,23 @@
                 if(expiredKey.contains("-")){
                     String[] split = expiredKey.split("-");
                     String operation=split[0];
+                    Long id = Long.valueOf(split[1]);
                     if(DelayTaskEnum.SECKILL_START_TASK.getCode().equals(operation)){
-                        //自动开始任务
+                        //自动开始秒杀任务
+                        autoStartSeckill(id);
                     }else if(DelayTaskEnum.SECKILL_END_TASK.getCode().equals(operation)){
-                        //自动结束任务
+                        //自动结束秒杀任务
+                        autoEndSeckill(id);
                     }else if(DelayTaskEnum.GROUP_PURCHASES_START_TASK.getCode().equals(operation)){
-                        //自动开始任务
+                        //自动开始团购任务
+                        autoStartGroupPurchase(id);
                     }
                     else if(DelayTaskEnum.GROUP_PURCHASES_END_TASK.getCode().equals(operation)){
-                        //自动结束任务
+                        //自动结束团购任务
+                        autoEndGroupPurchase(id);
                     }else if(DelayTaskEnum.ORDER_AUTOMATIC_CANCEL.getCode().equals(operation)){
-                        //自动结束任务
+                        //自动取消订单
+                        autoCancelOrder(id);
                     }
                     //删除失效的key
                     redisTemplate.delete(expiredKey);
@@ -74,16 +84,33 @@
     }
 
     //延时任务表
+    @Async
+    public void autoStartSeckill(Long seckillId) {
+        log.info("autoStartSeckill scheduler task is running :" + seckillId);
+        goodsSkuClient.startSeckill(seckillId);
 
-    private void autoStartActivity(String activityId){
-        log.info("autoStartActivity scheduler task is running :" + activityId);
     }
 
-    private void autoEndActivity(String activityId){
-        log.info("autoEndActivity scheduler task is running :" + activityId);
+    @Async
+    public void autoEndSeckill(Long seckillId) {
+        log.info("autoEndSeckill scheduler task is running :" + seckillId);
+        goodsSkuClient.endSeckill(seckillId);
     }
 
-    private void autoCancelOrder(String orderId){
+    @Async
+    public void autoStartGroupPurchase(Long GroupPurchaseId) {
+        log.info("autoStartGroupPurchase scheduler task is running :" + GroupPurchaseId);
+        goodsSkuClient.startGroupPurchase(GroupPurchaseId);
+    }
+
+    @Async
+    public void autoEndGroupPurchase(Long GroupPurchaseId) {
+        log.info("autoEndGroupPurchase scheduler task is running :" + GroupPurchaseId);
+        goodsSkuClient.endGroupPurchase(GroupPurchaseId);
+    }
+
+    @Async
+    public void autoCancelOrder(Long orderId) {
         log.info("autoCancelOrder scheduler task is running :" + orderId);
     }
 }
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICustomConfigService.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICustomConfigService.java
index cba13ff..99ac2e5 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICustomConfigService.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICustomConfigService.java
@@ -1,7 +1,7 @@
 package com.ruoyi.system.service;
 
-import com.ruoyi.system.domain.pojo.CustomConfig;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.domain.CustomConfig;
 
 /**
  * <p>
diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/MemberPointsMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/MemberPointsMapper.xml
new file mode 100644
index 0000000..029ad7c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/MemberPointsMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.member.mapper.MemberPointsMapper">
+
+</mapper>

--
Gitblit v1.7.1