BossConfiguration.java 2.04 KB
package com.diligrp.cashier.boss;

import com.diligrp.cashier.shared.http.DuplicateSubmitFilter;
import com.diligrp.cashier.shared.mybatis.MybatisMapperSupport;
import com.diligrp.cashier.shared.service.LifeCycle;
import jakarta.annotation.Resource;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.GenericFilterBean;

import java.util.List;
import java.util.concurrent.TimeUnit;

@Configuration
@ComponentScan("com.diligrp.cashier.boss")
@MapperScan(basePackages =  {"com.diligrp.cashier.boss.dao"}, markerInterface = MybatisMapperSupport.class)
public class BossConfiguration implements ApplicationRunner {

    @Resource
    private ObjectProvider<LifeCycle> lifeCycleProvider;

    @Bean
    @ConfigurationProperties("merchant")
    public CashierDeskProperties cashierDeskProperties() {
        return new CashierDeskProperties();
    }

    @Bean
    public GenericFilterBean duplicateSubmitFilter() {
        // 配置防重复提交过滤器
        DuplicateSubmitFilter.Builder builder = new DuplicateSubmitFilter.Builder();
        builder.requestMatcher("/payment/cashier/submitOrder")
            .forbidSubmit(1, TimeUnit.SECONDS)
            .requestMatchers("/payment/cashier/orderPayment", "/payment/cashier/orderRefund")
            .forbidSubmit(1200, TimeUnit.MILLISECONDS);
        return builder.build();
    }

    @Override
    public void run(ApplicationArguments args) throws Exception {
        List<LifeCycle> lifeCycles = lifeCycleProvider.stream().toList();
        for (LifeCycle lifeCycle : lifeCycles) {
            lifeCycle.start();
        }
    }
}