mitao
2024-05-23 8bfb27fe120fabff001a2dbe966396eb2ee98472
Merge branch 'dev-mitao'

# Conflicts:
# ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/IAgreementService.java
17个文件已修改
24个文件已添加
867 ■■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/constants/DelayTaskEnum.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/GoodsSkuFactory.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/CacheConstants.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-redis/pom.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/GoodsGroupPurchaseController.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/GoodsSeckillController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsGroupPurchaseService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSeckillService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberPointsController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/MemberPoints.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/MemberPointsMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberPointsService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberPointsServiceImpl.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceOrderController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceRiseController.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoice.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoiceOrder.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoiceRise.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceOrderMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceRiseMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceOrderService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceRiseService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceOrderServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceRiseServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceOrderMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceRiseMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/listener/RedisListener.java 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ICustomConfigService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/MemberPointsMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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;
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());
            }
        };
    }
}
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);
}
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:";
}
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>
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);
    }
}
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();
    }
}
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();
    }
}
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);
}
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);
}
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);
}
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) {
    }
}
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 推送秒杀结束消息
    }
}
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())
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/MemberPointsController.java
New file
@@ -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 {
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/domain/pojo/MemberPoints.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/mapper/MemberPointsMapper.java
New file
@@ -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> {
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/IMemberPointsService.java
New file
@@ -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> {
}
ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberPointsServiceImpl.java
New file
@@ -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 {
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceController.java
New file
@@ -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 {
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceOrderController.java
New file
@@ -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 {
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/MemberInvoiceRiseController.java
New file
@@ -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 {
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoice.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoiceOrder.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/domain/pojo/MemberInvoiceRise.java
New file
@@ -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;
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceMapper.java
New file
@@ -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> {
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceOrderMapper.java
New file
@@ -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> {
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/mapper/MemberInvoiceRiseMapper.java
New file
@@ -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> {
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceOrderService.java
New file
@@ -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> {
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceRiseService.java
New file
@@ -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> {
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/IMemberInvoiceService.java
New file
@@ -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> {
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceOrderServiceImpl.java
New file
@@ -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 {
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceRiseServiceImpl.java
New file
@@ -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 {
}
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceServiceImpl.java
New file
@@ -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 {
}
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceMapper.xml
New file
@@ -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>
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceOrderMapper.xml
New file
@@ -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>
ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/MemberInvoiceRiseMapper.xml
New file
@@ -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>
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
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);
    }
}
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>
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/MemberPointsMapper.xml
New file
@@ -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>