Prechádzať zdrojové kódy

项目提成业务代码

wucl 2 rokov pred
rodič
commit
f87e5a291e
26 zmenil súbory, kde vykonal 380 pridanie a 416 odobranie
  1. 1 12
      biz-base/src/main/java/com/dayou/controller/BrokerageBaseAmountController.java
  2. 1 12
      biz-base/src/main/java/com/dayou/controller/BrokerageMarketerRatioController.java
  3. 11 11
      biz-base/src/main/java/com/dayou/controller/GlobalConfigController.java
  4. 12 77
      biz-base/src/test/java/BrokerageTest.java
  5. 4 0
      dao/src/main/java/com/dayou/mapper/GlobalConfigMapper.java
  6. 8 0
      dao/src/main/resources/mapper/GlobalConfigMapper.xml
  7. 3 1
      domain/src/main/java/com/dayou/entity/BrokerageMarketerRatio.java
  8. 4 2
      domain/src/main/java/com/dayou/enums/GlobalConfigEnum.java
  9. 21 0
      domain/src/main/java/com/dayou/vo/BrokerageConfigVO.java
  10. 4 0
      domain/src/main/java/com/dayou/vo/ItemStageVO.java
  11. 19 17
      service/src/main/java/com/dayou/brokerage/BrokerageCalculateSupport.java
  12. 0 1
      service/src/main/java/com/dayou/brokerage/annotation/DoBrokerage.java
  13. 0 28
      service/src/main/java/com/dayou/brokerage/annotation/RefreshBrokerageDate.java
  14. 69 5
      service/src/main/java/com/dayou/brokerage/config/BrokerageConfig.java
  15. 0 102
      service/src/main/java/com/dayou/brokerage/config/LandBrokerageDataConfiguration.java
  16. 50 33
      service/src/main/java/com/dayou/brokerage/handler/LandMarketerBrokerageHandler.java
  17. 34 23
      service/src/main/java/com/dayou/brokerage/handler/LandNonMarketerBrokerageHandler.java
  18. 0 25
      service/src/main/java/com/dayou/brokerage/interceptor/BrokerageInterceptor.java
  19. 20 0
      service/src/main/java/com/dayou/processor/AppBootProcessor.java
  20. 1 0
      service/src/main/java/com/dayou/service/IBrokerageBaseAmountService.java
  21. 2 0
      service/src/main/java/com/dayou/service/IBrokerageMarketerRatioService.java
  22. 8 0
      service/src/main/java/com/dayou/service/IGlobalConfigService.java
  23. 16 23
      service/src/main/java/com/dayou/service/impl/BrokerageBaseAmountServiceImpl.java
  24. 19 19
      service/src/main/java/com/dayou/service/impl/BrokerageMarketerRatioServiceImpl.java
  25. 67 3
      service/src/main/java/com/dayou/service/impl/GlobalConfigServiceImpl.java
  26. 6 22
      service/src/main/java/com/dayou/service/impl/ItemBrokerageSequenceServiceImpl.java

+ 1 - 12
biz-base/src/main/java/com/dayou/controller/BrokerageBaseAmountController.java

@@ -1,26 +1,15 @@
 package com.dayou.controller;
 
-import com.dayou.brokerage.annotation.RefreshBrokerageDate;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.web.bind.annotation.RestController;
-import com.dayou.controller.BaseController;
 import com.dayou.service.IBrokerageBaseAmountService;
 import com.dayou.entity.BrokerageBaseAmount;
 import com.dayou.common.RestResponse;
 import org.springframework.web.bind.annotation.*;
-import com.dayou.utils.ConvertUtil;
-import com.dayou.utils.HttpKit;
-import com.dayou.exception.ErrorCode;
-import java.util.Date;
-import java.util.List;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import org.springframework.http.MediaType;
-import org.springframework.web.multipart.MultipartFile;
+
 /**
  * 自定义提成基数
  *

+ 1 - 12
biz-base/src/main/java/com/dayou/controller/BrokerageMarketerRatioController.java

@@ -1,26 +1,15 @@
 package com.dayou.controller;
 
-import com.dayou.brokerage.annotation.RefreshBrokerageDate;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.web.bind.annotation.RestController;
-import com.dayou.controller.BaseController;
 import com.dayou.service.IBrokerageMarketerRatioService;
 import com.dayou.entity.BrokerageMarketerRatio;
 import com.dayou.common.RestResponse;
 import org.springframework.web.bind.annotation.*;
-import com.dayou.utils.ConvertUtil;
-import com.dayou.utils.HttpKit;
-import com.dayou.exception.ErrorCode;
-import java.util.Date;
-import java.util.List;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import org.springframework.http.MediaType;
-import org.springframework.web.multipart.MultipartFile;
+
 /**
  * 项目提成比例(市场人员)
  *

+ 11 - 11
biz-base/src/main/java/com/dayou/controller/GlobalConfigController.java

@@ -1,30 +1,24 @@
 package com.dayou.controller;
 
-import com.dayou.brokerage.annotation.RefreshBrokerageDate;
 import com.dayou.utils.EnumFactory;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import com.dayou.vo.BrokerageConfigVO;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.springframework.web.bind.annotation.RestController;
-import com.dayou.controller.BaseController;
 import com.dayou.service.IGlobalConfigService;
 import com.dayou.entity.GlobalConfig;
 import com.dayou.common.RestResponse;
 import org.springframework.web.bind.annotation.*;
 import com.dayou.common.PullDownModel;
 import com.dayou.utils.ConvertUtil;
-import com.dayou.utils.HttpKit;
-import com.dayou.exception.ErrorCode;
-import java.util.Date;
+
 import java.util.List;
 import java.util.Map;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import org.springframework.http.MediaType;
-import org.springframework.web.multipart.MultipartFile;
+
 /**
  * 全局配置
  *
@@ -90,8 +84,7 @@ public class GlobalConfigController extends BaseController {
     @GetMapping("/simpleAll")
     public RestResponse<List<PullDownModel>> simpleAll(){
         LambdaQueryWrapper<GlobalConfig> lambdaQueryWrapper = new LambdaQueryWrapper<GlobalConfig>()
-        .select(GlobalConfig::getId,GlobalConfig::getKey)
-        .eq(GlobalConfig::getDeleted,false);
+        .select(GlobalConfig::getId,GlobalConfig::getField);
         List<GlobalConfig> list= globalConfigService.list(lambdaQueryWrapper);
         List<PullDownModel> ret=ConvertUtil.copyList(list, PullDownModel.class);
         return RestResponse.data(ret);
@@ -119,5 +112,12 @@ public class GlobalConfigController extends BaseController {
         List<String> list = EnumFactory.getEnumByKey(key);
         return RestResponse.data(list);
     }
+
+    @GetMapping("/byKey/{key}")
+    public RestResponse<BrokerageConfigVO> getConfigByKey(@PathVariable("key") String key) {
+        BrokerageConfigVO result = globalConfigService.getConfigByKey(key);
+        return RestResponse.data(result);
+    }
+
 }
 

+ 12 - 77
biz-base/src/test/java/BrokerageTest.java

@@ -1,30 +1,24 @@
 import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.dayou.BaseApplication;
 import com.dayou.bo.LeaderRatioBO;
-import com.dayou.brokerage.config.LandBrokerageDataConfiguration;
-import com.dayou.brokerage.validator.BrokerageValidator;
-import com.dayou.common.BaseEntity;
 import com.dayou.dto.ItemDTO;
-import com.dayou.entity.GlobalConfig;
-import com.dayou.entity.ItemBrokerageDetail;
+import com.dayou.entity.BrokerageMarketerRatio;
 import com.dayou.entity.ItemBrokerageGeneral;
 import com.dayou.service.*;
-import com.google.common.collect.Sets;
+import com.google.common.cache.Cache;
+import com.google.common.cache.LoadingCache;
 import lombok.extern.slf4j.Slf4j;
-import org.checkerframework.checker.units.qual.A;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.support.DefaultListableBeanFactory;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.context.ApplicationContext;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 import java.math.BigDecimal;
-import java.util.HashSet;
 import java.util.Set;
+import java.util.concurrent.ExecutionException;
 
 /**
  * 类说明:
@@ -39,83 +33,24 @@ import java.util.Set;
 public class BrokerageTest {
 
     @Autowired
-    private ApplicationContext applicationContext;
+    private LoadingCache<String,BigDecimal> marketerRatioCache;
 
     @Autowired
-    private IGlobalConfigService globalConfigService;
+    private LoadingCache<Long,BigDecimal> baseAmountsCache;
 
     @Autowired
-    private IItemBrokerageDetailService iItemBrokerageDetailService;
+    private LoadingCache<String,BigDecimal> globalConfigCache;
 
     @Autowired
-    private IItemService iItemService;
+    private IBrokerageMarketerRatioService marketerRatioService;
 
-    @Autowired
-    private IItemBrokerageGeneralService iItemBrokerageGeneralService;
-
-    @Autowired
-    private LandBrokerageDataConfiguration brokerageMarketerRatioSet;
-
-    @Autowired
-    private IUserService userService;
-
-    @Autowired
-    private IItemBrokerageSequenceService iItemBrokerageSequenceService;
-
-    @Test
-    public void testBrokerageValidator(){
-        DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
-        BrokerageValidator brokerageValidator = defaultListableBeanFactory.getBean("brokerageValidator",BrokerageValidator.class);
-        log.info("brokerageValidator ===="+ brokerageMarketerRatioSet.monthOfYear.toPlainString());
-        log.info("brokerageValidator ===="+ brokerageMarketerRatioSet.nonMarketerMonthBrokerage.toPlainString());
-        System.out.println(brokerageValidator);
-        globalConfigService.update(new LambdaUpdateWrapper<GlobalConfig>().eq(BaseEntity::getId,18).set(GlobalConfig::getValue,"100"));
-        globalConfigService.update(new LambdaUpdateWrapper<GlobalConfig>().eq(BaseEntity::getId,17).set(GlobalConfig::getValue,"999"));
-        BrokerageValidator brokerageValidatorNew = defaultListableBeanFactory.getBean("brokerageValidator",BrokerageValidator.class);
-        log.info("brokerageValidatorNew ===="+ brokerageMarketerRatioSet.monthOfYear.toPlainString());
-        log.info("brokerageValidatorNew ===="+ brokerageMarketerRatioSet.nonMarketerMonthBrokerage.toPlainString());
-        System.out.println(brokerageValidatorNew);
-    }
 
-    @Test
-    public void testBrokerageMarketerRatioSet(){
-        DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
-        LandBrokerageDataConfiguration brokerageMarketerRatioSet = defaultListableBeanFactory.getBean("brokerageMarketerRatioSet", LandBrokerageDataConfiguration.class);
-        System.out.println(brokerageMarketerRatioSet);
-    }
-
-    @Test
-    public void testCreate(){
-        ItemDTO dto = new ItemDTO();
-        dto.setName("BROKERAGE_TEST");
-        dto.setBelongTo("TJC");
-        dto.setCate(3L);
-        dto.setBusinessSource(2L);
-        dto.setUserId(117L);
-        dto.setCustomerId(57L);
-        dto.setAmount(new BigDecimal("200000"));
-        dto.setPaymentMethod("分期付款");
-        dto.setDepartmentId(26L);
-        Long add = iItemService.add(dto);
-        Assert.isTrue(add!=null);
-    }
 
-    @Test
-    public void testORM(){
-        ItemBrokerageGeneral general = iItemBrokerageGeneralService
-                .getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, 365));
-        System.out.println(general.toString());
-    }
-
-    @Test
-    public void testLeaderPost(){
-        Set<LeaderRatioBO> leaderRatioBO = userService.getLeaderRatioBO(129L);
-        System.out.println(leaderRatioBO);
-    }
 
     @Test
-    public void testSettle(){
-        Boolean aBoolean = iItemBrokerageSequenceService.doAbleItemBrokerageSettle();
-        System.out.println(aBoolean);
+    public void testBrokerageCache() throws ExecutionException {
+        System.out.println(marketerRatioCache.size());
+        BigDecimal ifPresent = marketerRatioCache.get("2&3");
+        System.out.println(marketerRatioCache.size());
     }
 }

+ 4 - 0
dao/src/main/java/com/dayou/mapper/GlobalConfigMapper.java

@@ -21,4 +21,8 @@ public interface GlobalConfigMapper extends BaseMapper<GlobalConfig> {
     Boolean updateBatchByKey(@Param("list") List<GlobalConfig> globalConfigs);
 
     String getValueByKeyFiled(@Param("key") String key, @Param("field") String field);
+
+    String getValueByFiled( @Param("field") String field);
+
+    List<GlobalConfig> getConfigByKey(@Param("key") String key);
 }

+ 8 - 0
dao/src/main/resources/mapper/GlobalConfigMapper.xml

@@ -55,4 +55,12 @@
     <select id="getValueByKeyFiled" resultType="java.lang.String">
         select value from global_config where deleted=0 and `key` = #{key} and field = #{field}
     </select>
+
+    <select id="getValueByFiled" resultType="java.lang.String">
+        select value from global_config where deleted=0 and field = #{field}
+    </select>
+
+    <select id="getConfigByKey" parameterType="java.lang.String" resultType="com.dayou.entity.GlobalConfig">
+        SELECT  id,`key`,field,value,description  FROM global_config   WHERE  deleted=0  AND `key` = #{key}
+    </select>
 </mapper>

+ 3 - 1
domain/src/main/java/com/dayou/entity/BrokerageMarketerRatio.java

@@ -7,6 +7,8 @@ import com.dayou.annotation.ExcelSheet;
 import com.dayou.annotation.ExportCell;
 import com.dayou.annotation.ImportCell;
 
+import java.math.BigDecimal;
+
 import static com.dayou.common.Constants.MERGE_SYMBOL;
 
 /**
@@ -39,7 +41,7 @@ public class BrokerageMarketerRatio extends BaseEntity implements MergeKeyInterf
      */
     @ImportCell
     @ExportCell(columnName = "提成比例")
-    private Double ratio;
+    private BigDecimal ratio;
 
     /**
      * 备注

+ 4 - 2
domain/src/main/java/com/dayou/enums/GlobalConfigEnum.java

@@ -45,7 +45,7 @@ public enum GlobalConfigEnum implements CodeMsgEnumInterface<String,CodeMsgEnumI
 
     public enum Sys implements CodeMsgEnumInterface<String,String>{
 
-        MONTH_OF_YEAR("MONTH_OF_YEAR",null,"系统自定义一年月份")
+
         ;
         private String filed;
 
@@ -75,7 +75,9 @@ public enum GlobalConfigEnum implements CodeMsgEnumInterface<String,CodeMsgEnumI
 
         MARKETER_BROKERAGE_PERCENTAGE("MARKETER_BROKERAGE_PERCENTAGE",null,"土规部市场人员提成比例"),
 
-        PARTICIPANT_BROKERAGE_PERCENTAGE("PARTICIPANT_BROKERAGE_PERCENTAGE",null,"土规部参与项目整体提成比例")
+        PARTICIPANT_BROKERAGE_PERCENTAGE("PARTICIPANT_BROKERAGE_PERCENTAGE",null,"土规部参与项目整体提成比例"),
+
+        MONTH_OF_YEAR("MONTH_OF_YEAR",null,"系统自定义一年月份个数")
         ;
 
         private String filed;

+ 21 - 0
domain/src/main/java/com/dayou/vo/BrokerageConfigVO.java

@@ -0,0 +1,21 @@
+package com.dayou.vo;
+
+import com.dayou.entity.GlobalConfig;
+import lombok.Data;
+
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2023/3/15
+ * created with IntelliJ IDEA.
+ */
+@Data
+public class BrokerageConfigVO {
+
+    private GlobalConfig marketerBrokeragePercentage;
+    private GlobalConfig participantBrokeragePercentage;
+    private GlobalConfig nonMarketerMonthBrokerage;
+    private GlobalConfig monthOfYear;
+}

+ 4 - 0
domain/src/main/java/com/dayou/vo/ItemStageVO.java

@@ -26,10 +26,14 @@ public class ItemStageVO extends ItemStage {
 
     private String itemName;
 
+    private Set<Long> userIds;
+
     private Set<ParticipatorWeight> participators;
 
     private List<Long> departmentIds;
 
+
+
     @Data
     public static class ParticipatorWeight{
 

+ 19 - 17
service/src/main/java/com/dayou/brokerage/BrokerageCalculateSupport.java

@@ -1,20 +1,16 @@
 package com.dayou.brokerage;
 
 import com.dayou.bo.BrokerageDetailBO;
-import com.dayou.brokerage.config.LandBrokerageDataConfiguration;
 import com.dayou.brokerage.factory.BrokerageCalculateFactory;
 import com.dayou.brokerage.constants.BrokerageRule;
 import com.dayou.brokerage.handler.LandMarketerBrokerageHandler;
 import com.dayou.brokerage.handler.LandNonMarketerBrokerageHandler;
 import com.dayou.brokerage.validator.BrokerageValidator;
-import com.dayou.dto.ItemDTO;
-import com.dayou.dto.ParticipantSettleDTO;
-import com.dayou.dto.SalarySettleDTO;
-import com.dayou.entity.ItemBrokerageDetail;
-import com.dayou.entity.ItemBrokerageGeneral;
-import com.dayou.entity.ItemStage;
+import com.dayou.enums.GlobalConfigEnum;
 import com.dayou.utils.DateUtils;
-import org.checkerframework.checker.units.qual.A;
+import com.google.common.cache.Cache;
+import com.google.common.cache.LoadingCache;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
@@ -23,7 +19,7 @@ import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.Date;
-import java.util.List;
+import java.util.concurrent.ExecutionException;
 
 /**
  * 类说明:
@@ -32,6 +28,7 @@ import java.util.List;
  * @since: 2023/3/3
  * created with IntelliJ IDEA.
  */
+@Slf4j
 @Component
 public class BrokerageCalculateSupport implements BrokerageCalculateFactory,BrokerageCalculator{
 
@@ -47,7 +44,7 @@ public class BrokerageCalculateSupport implements BrokerageCalculateFactory,Brok
     private LandNonMarketerBrokerageHandler landNonMarketerBrokerageHandler;
 
     @Autowired
-    private LandBrokerageDataConfiguration landBrokerageDataConfiguration;
+    private LoadingCache<String,BigDecimal> globalConfigCache;
 
     @Override
     public BrokerageCalculator getCalculator(BrokerageRule rule){
@@ -91,13 +88,18 @@ public class BrokerageCalculateSupport implements BrokerageCalculateFactory,Brok
      * @return
      */
     protected Boolean checkMarketerPredictBrokerage(BrokerageDetailBO brokerageDetailBo){
-        @NotNull
-        BigDecimal paymentTarget = brokerageDetailBo.getPaymentTarget();
-        BigDecimal avgMonthTarget = paymentTarget.divide(landBrokerageDataConfiguration.monthOfYear, 2, RoundingMode.HALF_UP);
-        int month = DateUtils.getMonth(new Date());
-        //当月应完成回款金额
-        BigDecimal brokerageTarget = avgMonthTarget.multiply(new BigDecimal(month));
-        return brokerageValidator.checkMarketerPredictBrokerage(brokerageDetailBo,brokerageTarget);
+        try {
+            @NotNull
+            BigDecimal paymentTarget = brokerageDetailBo.getPaymentTarget();
+            BigDecimal avgMonthTarget = paymentTarget.divide(globalConfigCache.get(GlobalConfigEnum.Finance.MONTH_OF_YEAR.getCode()), 2, RoundingMode.HALF_UP);
+            int month = DateUtils.getMonth(new Date());
+            //当月应完成回款金额
+            BigDecimal brokerageTarget = avgMonthTarget.multiply(new BigDecimal(month));
+            return brokerageValidator.checkMarketerPredictBrokerage(brokerageDetailBo,brokerageTarget);
+        } catch (ExecutionException e) {
+            log.error("获取提成缓存数据失败");
+            return Boolean.FALSE;
+        }
     }
 
     /**

+ 0 - 1
service/src/main/java/com/dayou/brokerage/annotation/DoBrokerage.java

@@ -20,7 +20,6 @@ import java.lang.annotation.*;
 public @interface DoBrokerage {
 
     OperationTypeEnum operation();
-
     BrokerageRule rule();
     BrokerageBusiness business() default BrokerageBusiness.ITEM_PREDICT;
 

+ 0 - 28
service/src/main/java/com/dayou/brokerage/annotation/RefreshBrokerageDate.java

@@ -1,28 +0,0 @@
-package com.dayou.brokerage.annotation;
-
-
-import com.dayou.enums.CodeMsgEnumInterface;
-import com.dayou.enums.GlobalConfigEnum;
-
-import java.lang.annotation.*;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * 类说明:
- *
- * @author: wucl
- * @since: 2023/3/14
- * created with IntelliJ IDEA.
- */
-@Target({ElementType.PARAMETER, ElementType.METHOD})
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface RefreshBrokerageDate {
-
-    List<String> fields = Arrays.asList(GlobalConfigEnum.Finance.NON_MARKETER_MONTH_BROKERAGE.getCode(),
-                                                            GlobalConfigEnum.Finance.MARKETER_BROKERAGE_PERCENTAGE.getCode(),
-                                                            GlobalConfigEnum.Finance.PARTICIPANT_BROKERAGE_PERCENTAGE.getCode(),
-                                                            GlobalConfigEnum.Sys.MONTH_OF_YEAR.getCode() ) ;
-    boolean globalConfig() default false;
-}

+ 69 - 5
service/src/main/java/com/dayou/brokerage/config/BrokerageConfig.java

@@ -1,13 +1,30 @@
 package com.dayou.brokerage.config;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.dayou.brokerage.interceptor.BrokerageInterceptor;
 import com.dayou.brokerage.validator.BrokerageValidator;
+import com.dayou.constants.JwtConstants;
+import com.dayou.entity.BrokerageBaseAmount;
+import com.dayou.entity.BrokerageMarketerRatio;
+import com.dayou.service.IBrokerageBaseAmountService;
+import com.dayou.service.IBrokerageMarketerRatioService;
+import com.dayou.service.IGlobalConfigService;
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
 import org.springframework.aop.aspectj.AspectJExpressionPointcut;
 import org.springframework.aop.support.DefaultPointcutAdvisor;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
+import java.math.BigDecimal;
+import java.util.concurrent.TimeUnit;
+
+import static com.dayou.common.Constants.MERGE_SYMBOL;
+
 /**
  * 类说明:提成逻辑相关配置类
  *
@@ -23,6 +40,15 @@ public class BrokerageConfig {
     @Autowired
     private BrokerageInterceptor brokerageInterceptor;
 
+    @Autowired
+    private IGlobalConfigService globalConfigService;
+
+    @Autowired
+    private IBrokerageBaseAmountService brokerageBaseAmountService;
+
+    @Autowired
+    private IBrokerageMarketerRatioService marketerRatioService;
+
 
     @Bean
     public BrokerageValidator brokerageValidator() {
@@ -30,11 +56,6 @@ public class BrokerageConfig {
         return brokerageValidator;
     }
 
-    @Bean(initMethod = "loadRatioList")
-    public LandBrokerageDataConfiguration landBrokerageDataConfiguration(){
-        LandBrokerageDataConfiguration landBrokerageDataConfiguration = new LandBrokerageDataConfiguration();
-        return landBrokerageDataConfiguration;
-    }
 
     @Bean
     public DefaultPointcutAdvisor brokerageAdvisor(){
@@ -47,4 +68,47 @@ public class BrokerageConfig {
     }
 
 
+    @Bean
+    @Qualifier("marketerRatioCache")
+    public LoadingCache<String,BigDecimal> marketerRatioCache(){
+        LoadingCache<String,BigDecimal> cache = CacheBuilder.newBuilder().maximumSize(50)
+                .expireAfterWrite(1,TimeUnit.DAYS).build(new CacheLoader<String, BigDecimal>() {
+                    @Override
+                    public BigDecimal load(String key) throws Exception {
+                        String[] ids = key.split(MERGE_SYMBOL);
+                        Long itemCate = Long.valueOf(ids[0]);
+                        Long itemSource = Long.valueOf(ids[1]);
+                        BigDecimal ratio = marketerRatioService.getOne(new LambdaQueryWrapper<BrokerageMarketerRatio>().eq(BrokerageMarketerRatio::getItemCate, itemCate)
+                                .eq(BrokerageMarketerRatio::getItemSource, itemSource)).getRatio();
+                        return ratio;
+                    }
+                });
+        return cache;
+    }
+
+    @Bean
+    @Qualifier("baseAmountsCache")
+    public LoadingCache<Long,BigDecimal> baseAmountsCache(){
+        LoadingCache<Long,BigDecimal> cache = CacheBuilder.newBuilder().maximumSize(100)
+                .expireAfterWrite(1,TimeUnit.DAYS).build(new CacheLoader<Long, BigDecimal>() {
+                    @Override
+                    public BigDecimal load(Long key) throws Exception {
+                        return brokerageBaseAmountService.getOne(new LambdaQueryWrapper<BrokerageBaseAmount>().eq(BrokerageBaseAmount::getUserId,key)).getBaseAmount();
+                    }
+                });
+        return cache;
+    }
+
+    @Bean
+    @Qualifier("globalConfigCache")
+    public LoadingCache<String,BigDecimal> globalConfigCache(){
+        LoadingCache<String,BigDecimal> cache = CacheBuilder.newBuilder().maximumSize(50)
+                .expireAfterWrite(1,TimeUnit.DAYS).build(new CacheLoader<String, BigDecimal>() {
+                    @Override
+                    public BigDecimal load(String key) throws Exception {
+                        return globalConfigService.getValueByFiled(key);
+                    }
+                });
+        return cache;
+    }
 }

+ 0 - 102
service/src/main/java/com/dayou/brokerage/config/LandBrokerageDataConfiguration.java

@@ -1,102 +0,0 @@
-package com.dayou.brokerage.config;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.dayou.brokerage.validator.BrokerageValidator;
-import com.dayou.common.BaseEntity;
-import com.dayou.entity.BrokerageBaseAmount;
-import com.dayou.entity.BrokerageMarketerRatio;
-import com.dayou.enums.GlobalConfigEnum;
-import com.dayou.enums.MergeKeyInterface;
-import com.dayou.service.IBrokerageBaseAmountService;
-import com.dayou.service.IBrokerageMarketerRatioService;
-import com.dayou.service.IGlobalConfigService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.support.DefaultListableBeanFactory;
-import org.springframework.context.ApplicationContext;
-
-import javax.annotation.Nullable;
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.stream.Collectors;
-
-
-/**
- * 类说明:市场人员提成系数表
- *
- * @author: wucl
- * @since: 2023/3/6
- * created with IntelliJ IDEA.
- */
-public class LandBrokerageDataConfiguration extends BrokerageMarketerRatio implements MergeKeyInterface {
-
-
-    @Autowired
-    private ApplicationContext applicationContext;
-
-    @Autowired
-    private IBrokerageMarketerRatioService brokerageMarketerRatioService;
-
-    @Autowired
-    private IGlobalConfigService globalConfigService;
-
-    @Autowired
-    private IBrokerageBaseAmountService brokerageBaseAmountService;
-
-    /**
-     * 由项目类型和项目来源决定的提成系数集合
-     */
-    public  ConcurrentHashMap<String, BigDecimal> ratioList = new ConcurrentHashMap<String,BigDecimal>(256);
-
-    /**
-     * 参与人基础提成金额
-     */
-    public ConcurrentHashMap<Long,BigDecimal> userBaseBrokerageAmounts = new ConcurrentHashMap<>(256);
-
-    @Nullable
-    public BigDecimal marketerBrokeragePercentage ;
-
-    @Nullable
-    public BigDecimal monthOfYear;
-
-    @Nullable
-    public BigDecimal nonMarketerMonthBrokerage;
-
-    @Nullable
-    public BigDecimal participantBrokeragePercentage;
-
-    public void reloadLandBrokerageData(){
-        DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
-        defaultListableBeanFactory.destroySingleton("landBrokerageDataConfiguration");
-        defaultListableBeanFactory.getBean("landBrokerageDataConfiguration", LandBrokerageDataConfiguration.class);
-    }
-
-    public void loadRatioList(){
-        List<BrokerageMarketerRatio> list = brokerageMarketerRatioService.list(new LambdaQueryWrapper<BrokerageMarketerRatio>()
-                .eq(BaseEntity::getDeleted, Boolean.FALSE));
-        list.stream().forEach(x->{
-            ratioList.put(x.mergeKey(),new BigDecimal(x.getRatio().toString()));
-        });
-
-        nonMarketerMonthBrokerage = globalConfigService.getMathValue(GlobalConfigEnum.FINANCE.getCode(),
-                GlobalConfigEnum.Finance.NON_MARKETER_MONTH_BROKERAGE.getCode());
-
-        BigDecimal month = globalConfigService.getMathValue(GlobalConfigEnum.SYS.getCode(),
-                GlobalConfigEnum.Sys.MONTH_OF_YEAR.getCode());
-
-        monthOfYear = month.intValue()==0?new BigDecimal("10"):month;
-
-        marketerBrokeragePercentage = globalConfigService.getMathValue(GlobalConfigEnum.FINANCE.getCode(),
-                GlobalConfigEnum.Finance.MARKETER_BROKERAGE_PERCENTAGE.getCode());
-
-        participantBrokeragePercentage = globalConfigService.getMathValue(GlobalConfigEnum.FINANCE.getCode(),
-                GlobalConfigEnum.Finance.PARTICIPANT_BROKERAGE_PERCENTAGE.getCode());
-
-        List<BrokerageBaseAmount> baseAmounts = brokerageBaseAmountService.list();
-
-        baseAmounts.stream().forEach(x->{
-            userBaseBrokerageAmounts.put(x.getUserId(), x.getBaseAmount());
-        });
-    }
-}

+ 50 - 33
service/src/main/java/com/dayou/brokerage/handler/LandMarketerBrokerageHandler.java

@@ -4,12 +4,13 @@ import com.dayou.bo.BrokerageDetailBO;
 import com.dayou.bo.LeaderRatioBO;
 import com.dayou.brokerage.BrokerageCalculateSupport;
 import com.dayou.brokerage.MarketerBrokerageCalculator;
-import com.dayou.brokerage.config.LandBrokerageDataConfiguration;
 import com.dayou.brokerage.constants.BrokerageMode;
 import com.dayou.brokerage.constants.BrokerageRule;
 import com.dayou.brokerage.constants.BrokerageState;
 import com.dayou.entity.ItemBrokerageDetail;
+import com.dayou.enums.GlobalConfigEnum;
 import com.dayou.exception.BusinessException;
+import com.google.common.cache.LoadingCache;
 import com.google.common.collect.Sets;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,6 +18,7 @@ import org.springframework.stereotype.Component;
 
 import java.math.BigDecimal;
 import java.util.Set;
+import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 
 /**
@@ -30,17 +32,21 @@ import java.util.stream.Collectors;
 @Slf4j
 public class LandMarketerBrokerageHandler extends BrokerageCalculateSupport implements MarketerBrokerageCalculator {
 
+
+    @Autowired
+    private LoadingCache<String,BigDecimal> marketerRatioCache;
+
     @Autowired
-    private LandBrokerageDataConfiguration landBrokerageDataConfiguration;
+    private LoadingCache<String,BigDecimal> globalConfigCache;
 
     @Override
     public BrokerageDetailBO predictPersonalAmount(BrokerageDetailBO bo) {
-        String mergeKey = bo.mergeKey();
-        BigDecimal ratio = landBrokerageDataConfiguration.ratioList.get(mergeKey);
-        bo.setRate(ratio);
-        if (ratio !=null){
-            checkItemBrokerageStatus(bo);
-            try {
+        try {
+            String mergeKey = bo.mergeKey();
+            BigDecimal ratio = marketerRatioCache.get(mergeKey);
+            bo.setRate(ratio);
+            if (ratio !=null){
+                checkItemBrokerageStatus(bo);
                 bo.setPredictAmount(bo.getAmount().multiply(ratio));
                 bo.setBrokerageMode(BrokerageMode.PERSONAL.getCode());
                 bo.setActualAmount(actualAmount(bo.getPredictAmount()));
@@ -49,44 +55,55 @@ public class LandMarketerBrokerageHandler extends BrokerageCalculateSupport impl
                     bo.setMarketerStatus(BrokerageState.TO_PREDICTING.getCode());
                     bo.setAheadAmount(aheadAmount(bo.getPredictAmount()));
                 }
-            } catch (BusinessException e) {
-                log.info("项目id:[{}],客户经理id:[{}],[{}]",bo.getId(),bo.getUserId(),e.getMessage());
+            }else {
+                log.info("项目id:[{}],合同金额:[{}],提成系数:[null],[未设置提成系数,无法计算客户经理提成]",bo.getId(),bo.getAmount());
             }
-        }else {
-            log.info("项目id:[{}],合同金额:[{}],提成系数:[null],[未设置提成系数,无法计算客户经理提成]",bo.getId(),bo.getAmount());
+        }   catch (BusinessException e) {
+            log.info("项目id:[{}],客户经理id:[{}],[{}]",bo.getId(),bo.getUserId(),e.getMessage());
+        } catch (ExecutionException e) {
+            throw new RuntimeException(e);
         }
         return bo;
-
     }
 
     @Override
     public BigDecimal aheadAmount(BigDecimal predictAmount){
-        BigDecimal aheadAmount = predictAmount.multiply(landBrokerageDataConfiguration.marketerBrokeragePercentage);
-        return aheadAmount;
+        try {
+            BigDecimal aheadAmount = predictAmount.multiply(globalConfigCache.get(GlobalConfigEnum.Finance.MARKETER_BROKERAGE_PERCENTAGE.getCode()));
+            return aheadAmount;
+        } catch (ExecutionException e) {
+            log.error("获取提成缓存数据失败");
+            return BigDecimal.ZERO;
+        }
+
     }
 
     @Override
     public Set<ItemBrokerageDetail> predictTeamShareAmount(BrokerageDetailBO bo, Set<LeaderRatioBO> leaderRatioBOSet) {
-        String mergeKey = bo.mergeKey();
-        BigDecimal ratio = landBrokerageDataConfiguration.ratioList.get(mergeKey);
         Set<ItemBrokerageDetail> itemBrokerageDetails = Sets.newHashSet();
-        if (ratio!=null){
-            checkItemBrokerageStatus(bo);
-            itemBrokerageDetails = leaderRatioBOSet.stream().map(x -> {
-                ItemBrokerageDetail itemBrokerageDetail = new ItemBrokerageDetail();
-                itemBrokerageDetail.setGeneralId(bo.getGeneralId());
-                itemBrokerageDetail.setPredictAmount(bo.getAmount().multiply(ratio).multiply(x.getRatio()));
-                itemBrokerageDetail.setUserId(x.getUserId());
-                itemBrokerageDetail.setAheadAmount(BigDecimal.ZERO);
-                itemBrokerageDetail.setActualAmount(actualAmount(itemBrokerageDetail.getPredictAmount()));
-                itemBrokerageDetail.setAdvanceAmount(BigDecimal.ZERO);
-                itemBrokerageDetail.setBrokerageMode(BrokerageMode.TEAM_SHARE.getCode());
-                itemBrokerageDetail.setBrokerageRule(BrokerageRule.LAND_MARKETER_RULE.getCode());
-                return itemBrokerageDetail;
-            }).collect(Collectors.toSet());
+        try {
+            String mergeKey = bo.mergeKey();
+            BigDecimal ratio = marketerRatioCache.get(mergeKey);
+            if (ratio!=null){
+                checkItemBrokerageStatus(bo);
+                itemBrokerageDetails = leaderRatioBOSet.stream().map(x -> {
+                    ItemBrokerageDetail itemBrokerageDetail = new ItemBrokerageDetail();
+                    itemBrokerageDetail.setGeneralId(bo.getGeneralId());
+                    itemBrokerageDetail.setPredictAmount(bo.getAmount().multiply(ratio).multiply(x.getRatio()));
+                    itemBrokerageDetail.setUserId(x.getUserId());
+                    itemBrokerageDetail.setAheadAmount(BigDecimal.ZERO);
+                    itemBrokerageDetail.setActualAmount(actualAmount(itemBrokerageDetail.getPredictAmount()));
+                    itemBrokerageDetail.setAdvanceAmount(BigDecimal.ZERO);
+                    itemBrokerageDetail.setBrokerageMode(BrokerageMode.TEAM_SHARE.getCode());
+                    itemBrokerageDetail.setBrokerageRule(BrokerageRule.LAND_MARKETER_RULE.getCode());
+                    return itemBrokerageDetail;
+                }).collect(Collectors.toSet());
 
-        }else {
-            log.info("项目id:[{}],合同金额:[{}],提成系数:[null],[未设置提成系数,无法计算客户经理领导提成]",bo.getId(),bo.getAmount());
+            }else {
+                log.info("项目id:[{}],合同金额:[{}],提成系数:[null],[未设置提成系数,无法计算客户经理领导提成]",bo.getId(),bo.getAmount());
+            }
+        } catch (ExecutionException e) {
+            log.error("获取提成缓存数据失败");
         }
         return itemBrokerageDetails;
     }

+ 34 - 23
service/src/main/java/com/dayou/brokerage/handler/LandNonMarketerBrokerageHandler.java

@@ -5,15 +5,15 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.dayou.bo.BrokerageDetailBO;
 import com.dayou.brokerage.BrokerageCalculateSupport;
 import com.dayou.brokerage.NonMarketerMarketerBrokerageCalculator;
-import com.dayou.brokerage.config.LandBrokerageDataConfiguration;
 import com.dayou.brokerage.constants.BrokerageRule;
 import com.dayou.common.BaseEntity;
 import com.dayou.dto.ParticipantSettleDTO;
-import com.dayou.dto.SalarySettleDTO;
 import com.dayou.entity.ItemBrokerageDetail;
 import com.dayou.entity.ItemStage;
+import com.dayou.enums.GlobalConfigEnum;
 import com.dayou.service.IItemBrokerageDetailService;
-import com.dayou.service.IItemBrokerageSequenceService;
+import com.google.common.cache.Cache;
+import com.google.common.cache.LoadingCache;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -21,6 +21,7 @@ import org.springframework.stereotype.Component;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 
 /**
@@ -34,39 +35,49 @@ import java.util.stream.Collectors;
 @Slf4j
 public class LandNonMarketerBrokerageHandler extends BrokerageCalculateSupport implements NonMarketerMarketerBrokerageCalculator {
 
-    @Autowired
-    private LandBrokerageDataConfiguration landBrokerageDataConfiguration;
 
     @Autowired
     private IItemBrokerageDetailService brokerageDetailService;
 
     @Autowired
-    private IItemBrokerageSequenceService brokerageSequenceService;
+    private LoadingCache<String,BigDecimal> globalConfigCache;
 
+    @Autowired
+    private LoadingCache<Long,BigDecimal> baseAmountsCache;
     @Override
     public ItemBrokerageDetail predictAmount(BrokerageDetailBO brokerageDetailBO) {
-        checkItemBrokerageStatus(brokerageDetailBO);
-        ItemBrokerageDetail itemBrokerageDetail = new ItemBrokerageDetail();
-        if (landBrokerageDataConfiguration.participantBrokeragePercentage!=null){
-            //合同金额
-            BigDecimal predictAmount = brokerageDetailBO.getAmount()
-                    //参与项目提成总比例
-                    .multiply(landBrokerageDataConfiguration.participantBrokeragePercentage)
-                    //阶段权重
-                    .multiply(brokerageDetailBO.getStageWeight())
-                    //参与人权重
-                    .multiply(brokerageDetailBO.getParticipantWeight());
-            brokerageDetailBO.setPredictAmount(predictAmount.setScale(2,BigDecimal.ROUND_HALF_UP));
-            BeanUtil.copyProperties(brokerageDetailBO,itemBrokerageDetail);
+        try {
+            checkItemBrokerageStatus(brokerageDetailBO);
+            ItemBrokerageDetail itemBrokerageDetail = new ItemBrokerageDetail();
+            if (globalConfigCache.get(GlobalConfigEnum.Finance.PARTICIPANT_BROKERAGE_PERCENTAGE.getCode())!=null){
+                //合同金额
+                BigDecimal predictAmount = brokerageDetailBO.getAmount()
+                        //参与项目提成总比例
+                        .multiply(globalConfigCache.get(GlobalConfigEnum.Finance.PARTICIPANT_BROKERAGE_PERCENTAGE.getCode()))
+                        //阶段权重
+                        .multiply(brokerageDetailBO.getStageWeight())
+                        //参与人权重
+                        .multiply(brokerageDetailBO.getParticipantWeight());
+                brokerageDetailBO.setPredictAmount(predictAmount.setScale(2,BigDecimal.ROUND_HALF_UP));
+                BeanUtil.copyProperties(brokerageDetailBO,itemBrokerageDetail);
+            }
+            log.info("项目id:[{}],合同金额:[{}],提成系数:[null],[未设置[土规部参与项目整体提成比例],无法计算参与人员提成]",brokerageDetailBO.getItemId(),brokerageDetailBO.getAmount());
+            return itemBrokerageDetail;
+        } catch (ExecutionException e) {
+            log.error("获取提成缓存数据失败");
+            return brokerageDetailBO;
         }
-        log.info("项目id:[{}],合同金额:[{}],提成系数:[null],[未设置[土规部参与项目整体提成比例],无法计算参与人员提成]",brokerageDetailBO.getItemId(),brokerageDetailBO.getAmount());
-        return itemBrokerageDetail;
     }
 
     @Override
     public BigDecimal aheadAmount(Long userId){
-        BigDecimal baseAheadAmount = landBrokerageDataConfiguration.userBaseBrokerageAmounts.get(userId);
-        return baseAheadAmount;
+        try {
+            BigDecimal baseAheadAmount = baseAmountsCache.get(userId);
+            return baseAheadAmount;
+        } catch (ExecutionException e) {
+            log.error("获取提成缓存数据失败");
+            return BigDecimal.ZERO;
+        }
     }
     @Override
     public List<ItemBrokerageDetail> actualAmount(ParticipantSettleDTO participantSettleDTO) {

+ 0 - 25
service/src/main/java/com/dayou/brokerage/interceptor/BrokerageInterceptor.java

@@ -1,19 +1,10 @@
 package com.dayou.brokerage.interceptor;
 
 import com.dayou.brokerage.annotation.DoBrokerage;
-import com.dayou.brokerage.annotation.RefreshBrokerageDate;
-import com.dayou.brokerage.config.LandBrokerageDataConfiguration;
-import com.dayou.brokerage.constants.BrokerageBusiness;
 import com.dayou.dto.ItemDTO;
-import com.dayou.entity.GlobalConfig;
 import com.dayou.entity.ItemEvaluate;
 import com.dayou.entity.PaymentCollection;
-import com.dayou.enums.CodeMsgEnumInterface;
-import com.dayou.enums.OperationTypeEnum;
-import com.dayou.mapper.ItemMapper;
 import com.dayou.service.IItemBrokerageGeneralService;
-import com.dayou.service.IItemService;
-import com.dayou.service.IItemStageService;
 import com.dayou.vo.ItemStageVO;
 import lombok.extern.slf4j.Slf4j;
 import org.aopalliance.intercept.MethodInterceptor;
@@ -22,11 +13,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.lang.reflect.Method;
-import java.util.List;
-import java.util.stream.Collectors;
 
 import static com.dayou.brokerage.constants.BrokerageBusiness.ITEM_SETTLE;
-import static com.dayou.brokerage.constants.BrokerageBusiness.SETTLE;
 import static com.dayou.brokerage.constants.BrokerageRule.LAND_MARKETER_RULE;
 import static com.dayou.brokerage.constants.BrokerageRule.LAND_OTHER_RULE;
 import static com.dayou.enums.OperationTypeEnum.*;
@@ -50,20 +38,7 @@ public class BrokerageInterceptor implements MethodInterceptor {
     public Object invoke(MethodInvocation methodInvocation) throws Throwable {
         Method method = methodInvocation.getMethod();
         DoBrokerage doBrokerageAnnotation = method.getAnnotation(DoBrokerage.class);
-        RefreshBrokerageDate refreshAnnotation = method.getAnnotation(RefreshBrokerageDate.class);
         Object result = methodInvocation.proceed();
-        if (refreshAnnotation !=null && refreshAnnotation.globalConfig()){
-            GlobalConfig config = (GlobalConfig) methodInvocation.getArguments()[0];
-            List<String> fields = refreshAnnotation.fields;
-            if (fields.contains(config.getField())){
-               // configuration.reloadLandBrokerageData();
-                return result;
-            }
-        }
-        if (refreshAnnotation !=null){
-            //configuration.reloadLandBrokerageData();
-            return result;
-        }
 
         if (doBrokerageAnnotation!=null && doBrokerageAnnotation.rule() == LAND_MARKETER_RULE && doBrokerageAnnotation.operation() == ADD){
             if (result instanceof Long){

+ 20 - 0
service/src/main/java/com/dayou/processor/AppBootProcessor.java

@@ -10,6 +10,7 @@ import com.dayou.enums.GlobalConfigEnum;
 import com.dayou.enums.SexEnum;
 import com.dayou.service.*;
 import com.dayou.utils.DigestUtils;
+import com.google.common.cache.Cache;
 import com.google.common.collect.Sets;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
@@ -25,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
 import static com.dayou.common.Constants.*;
@@ -56,6 +58,16 @@ public class AppBootProcessor implements BeanPostProcessor, CommandLineRunner {
     @Autowired
     private IUserPostService userPostService;
 
+    @Autowired
+    private IBrokerageMarketerRatioService brokerageMarketerRatioService;
+
+    @Autowired
+    private IBrokerageBaseAmountService brokerageBaseAmountService;
+
+
+    @Autowired
+    private IGlobalConfigService globalConfigService;
+
 
     private Gson gson = new Gson();
 
@@ -65,6 +77,7 @@ public class AppBootProcessor implements BeanPostProcessor, CommandLineRunner {
     public void run(String... args) throws Exception {
         log.info("【initialize admin begin...】");
         initializeAdmin();
+        loadBrokerageData();
     }
 
 
@@ -123,4 +136,11 @@ public class AppBootProcessor implements BeanPostProcessor, CommandLineRunner {
 
     }
 
+
+    private void loadBrokerageData(){
+        brokerageMarketerRatioService.cacheMarketerRatio();
+        brokerageBaseAmountService.cacheBaseAmount();
+        globalConfigService.cacheBrokerageGlobalConfigData();
+    }
+
 }

+ 1 - 0
service/src/main/java/com/dayou/service/IBrokerageBaseAmountService.java

@@ -25,4 +25,5 @@ public interface IBrokerageBaseAmountService extends IService<BrokerageBaseAmoun
 
         Boolean delete(Long id);
 
+        void cacheBaseAmount();
 }

+ 2 - 0
service/src/main/java/com/dayou/service/IBrokerageMarketerRatioService.java

@@ -25,4 +25,6 @@ public interface IBrokerageMarketerRatioService extends IService<BrokerageMarket
 
         Boolean delete(Long id);
 
+        void cacheMarketerRatio();
+
 }

+ 8 - 0
service/src/main/java/com/dayou/service/IGlobalConfigService.java

@@ -3,10 +3,12 @@ import com.dayou.entity.GlobalConfig;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.dayou.vo.BrokerageConfigVO;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 /**
  * <p>
@@ -31,4 +33,10 @@ public interface IGlobalConfigService extends IService<GlobalConfig> {
         String getValue(String key,String field);
 
         BigDecimal getMathValue(String key, String field);
+
+        void cacheBrokerageGlobalConfigData();
+
+        BigDecimal getValueByFiled(String filed);
+
+        BrokerageConfigVO getConfigByKey(String key);
 }

+ 16 - 23
service/src/main/java/com/dayou/service/impl/BrokerageBaseAmountServiceImpl.java

@@ -1,29 +1,17 @@
 package com.dayou.service.impl;
 
-import com.dayou.brokerage.annotation.RefreshBrokerageDate;
 import com.dayou.entity.BrokerageBaseAmount;
 import com.dayou.mapper.BrokerageBaseAmountMapper;
 import com.dayou.service.IBrokerageBaseAmountService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.cache.LoadingCache;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.dayou.utils.ExcelUtil;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.web.multipart.MultipartFile;
+
+import java.math.BigDecimal;
 import java.util.List;
-import java.util.ArrayList;
-import org.springframework.transaction.annotation.Transactional;
-import com.dayou.enums.BatchTaskTypeEnum;
 
 /**
  * <p>
@@ -37,6 +25,8 @@ import com.dayou.enums.BatchTaskTypeEnum;
 public class BrokerageBaseAmountServiceImpl extends ServiceImpl<BrokerageBaseAmountMapper, BrokerageBaseAmount> implements IBrokerageBaseAmountService {
 
 
+    @Autowired
+    private LoadingCache<Long, BigDecimal> baseAmountsCache;
     @Override
     @SuppressWarnings("unchecked")
     public Page<BrokerageBaseAmount> selectPage(Page page,BrokerageBaseAmount brokerageBaseAmount){
@@ -49,25 +39,28 @@ public class BrokerageBaseAmountServiceImpl extends ServiceImpl<BrokerageBaseAmo
         return this.getById(id);
     }
 
-    @RefreshBrokerageDate
-
     @Override
     public Boolean add(BrokerageBaseAmount brokerageBaseAmount){
         return  this.save(brokerageBaseAmount);
     }
 
-    @RefreshBrokerageDate
-
     @Override
     public Boolean update(BrokerageBaseAmount brokerageBaseAmount){
-        return  this.updateById(brokerageBaseAmount);
+        boolean b = this.updateById(brokerageBaseAmount);
+        this.cacheBaseAmount();
+        return b;
     }
 
-    @RefreshBrokerageDate
-
     @Override
     public Boolean delete(Long id){
         //逻辑删除
         return this.removeById(id);
     }
+
+    public void cacheBaseAmount(){
+        List<BrokerageBaseAmount> list = this.list();
+        list.stream().forEach(x->{
+            baseAmountsCache.put(x.getUserId(),x.getBaseAmount());
+        });
+    }
 }

+ 19 - 19
service/src/main/java/com/dayou/service/impl/BrokerageMarketerRatioServiceImpl.java

@@ -1,29 +1,19 @@
 package com.dayou.service.impl;
 
-import com.dayou.brokerage.annotation.RefreshBrokerageDate;
+import com.dayou.common.BaseEntity;
 import com.dayou.entity.BrokerageMarketerRatio;
 import com.dayou.mapper.BrokerageMarketerRatioMapper;
 import com.dayou.service.IBrokerageMarketerRatioService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.cache.LoadingCache;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.dayou.utils.ExcelUtil;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.web.multipart.MultipartFile;
+
+import java.math.BigDecimal;
 import java.util.List;
-import java.util.ArrayList;
-import org.springframework.transaction.annotation.Transactional;
-import com.dayou.enums.BatchTaskTypeEnum;
 
 /**
  * <p>
@@ -36,6 +26,8 @@ import com.dayou.enums.BatchTaskTypeEnum;
 @Service
 public class BrokerageMarketerRatioServiceImpl extends ServiceImpl<BrokerageMarketerRatioMapper, BrokerageMarketerRatio> implements IBrokerageMarketerRatioService {
 
+    @Autowired
+    private LoadingCache<String,BigDecimal> marketerRatioCache;
 
     @Override
     @SuppressWarnings("unchecked")
@@ -49,22 +41,30 @@ public class BrokerageMarketerRatioServiceImpl extends ServiceImpl<BrokerageMark
         return this.getById(id);
     }
 
-    @RefreshBrokerageDate
     @Override
     public Boolean add(BrokerageMarketerRatio brokerageMarketerRatio){
         return  this.save(brokerageMarketerRatio);
     }
 
-    @RefreshBrokerageDate
     @Override
     public Boolean update(BrokerageMarketerRatio brokerageMarketerRatio){
-        return  this.updateById(brokerageMarketerRatio);
+        boolean b = this.updateById(brokerageMarketerRatio);
+        this.cacheMarketerRatio();
+        return b;
     }
 
-    @RefreshBrokerageDate
     @Override
     public Boolean delete(Long id){
         //逻辑删除
         return this.removeById(id);
     }
+
+    @Override
+    public void cacheMarketerRatio(){
+        List<BrokerageMarketerRatio> list = this.list(new LambdaQueryWrapper<BrokerageMarketerRatio>()
+                .eq(BaseEntity::getDeleted, Boolean.FALSE));
+        list.stream().forEach(x->{
+            marketerRatioCache.put(x.mergeKey(),x.getRatio());
+        });
+    }
 }

+ 67 - 3
service/src/main/java/com/dayou/service/impl/GlobalConfigServiceImpl.java

@@ -1,7 +1,6 @@
 package com.dayou.service.impl;
 
 import cn.hutool.core.util.StrUtil;
-import com.dayou.brokerage.annotation.RefreshBrokerageDate;
 import com.dayou.common.BaseEntity;
 import com.dayou.entity.GlobalConfig;
 import com.dayou.enums.CodeMsgEnumInterface;
@@ -9,7 +8,10 @@ import com.dayou.enums.GlobalConfigEnum;
 import com.dayou.mapper.GlobalConfigMapper;
 import com.dayou.service.IGlobalConfigService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dayou.vo.BrokerageConfigVO;
+import com.google.common.cache.LoadingCache;
 import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -33,6 +35,7 @@ import static com.dayou.common.Constants.MATH_REGULAR;
  * @author wucl
  * @since 2022-12-07
  */
+@Slf4j
 @Service
 public class GlobalConfigServiceImpl extends ServiceImpl<GlobalConfigMapper, GlobalConfig> implements IGlobalConfigService , InitializingBean {
 
@@ -48,6 +51,9 @@ public class GlobalConfigServiceImpl extends ServiceImpl<GlobalConfigMapper, Glo
 
     @Autowired
     private GlobalConfigMapper globalConfigMapper;
+
+    @Autowired
+    private LoadingCache<String,BigDecimal> globalConfigCache;
     @Override
     @SuppressWarnings("unchecked")
     public Page<GlobalConfig> selectPage(Page page,GlobalConfig globalConfig){
@@ -74,10 +80,11 @@ public class GlobalConfigServiceImpl extends ServiceImpl<GlobalConfigMapper, Glo
         return this.update(globalConfig);
     }
 
-    @RefreshBrokerageDate(globalConfig = true)
     @Override
     public Boolean update(GlobalConfig globalConfig){
-        return  this.updateById(globalConfig);
+        boolean b = globalConfigMapper.updateBatchByKey(Lists.newArrayList(globalConfig));
+        this.cacheBrokerageGlobalConfigData();
+        return  b;
     }
 
     @Override
@@ -123,4 +130,61 @@ public class GlobalConfigServiceImpl extends ServiceImpl<GlobalConfigMapper, Glo
         }
         baseMapper.insertOrUpdateBatch(list);
     }
+
+    public void cacheBrokerageGlobalConfigData(){
+        BigDecimal nonMarketerMonthBrokerage = this.getMathValue(GlobalConfigEnum.FINANCE.getCode(),
+                GlobalConfigEnum.Finance.NON_MARKETER_MONTH_BROKERAGE.getCode());
+
+        BigDecimal marketerBrokeragePercentage = this.getMathValue(GlobalConfigEnum.FINANCE.getCode(),
+                GlobalConfigEnum.Finance.MARKETER_BROKERAGE_PERCENTAGE.getCode());
+
+        BigDecimal participantBrokeragePercentage = this.getMathValue(GlobalConfigEnum.FINANCE.getCode(),
+                GlobalConfigEnum.Finance.PARTICIPANT_BROKERAGE_PERCENTAGE.getCode());
+
+        BigDecimal month = this.getMathValue(GlobalConfigEnum.SYS.getCode(),
+                GlobalConfigEnum.Finance.MONTH_OF_YEAR.getCode());
+        month = month.intValue()==0?new BigDecimal("10"):month;
+
+        globalConfigCache.put(GlobalConfigEnum.Finance.NON_MARKETER_MONTH_BROKERAGE.getCode(),nonMarketerMonthBrokerage);
+        globalConfigCache.put(GlobalConfigEnum.Finance.MARKETER_BROKERAGE_PERCENTAGE.getCode(),marketerBrokeragePercentage);
+        globalConfigCache.put(GlobalConfigEnum.Finance.PARTICIPANT_BROKERAGE_PERCENTAGE.getCode(),participantBrokeragePercentage);
+        globalConfigCache.put(GlobalConfigEnum.Finance.MONTH_OF_YEAR.getCode(),month);
+    }
+
+    @Override
+    public BigDecimal getValueByFiled(String filed) {
+        try {
+            String value = globalConfigMapper.getValueByFiled(filed);
+            if (StrUtil.isNotBlank(value)){
+                Pattern pattern = Pattern.compile(MATH_REGULAR);
+                return pattern.matcher(value).matches()? new BigDecimal(value) : BigDecimal.ZERO;
+            }
+        } catch (Exception e) {
+            log.error("根据filed获取值发生错误,可能是存在相同的filed字段,也可能是值格式化异常。");
+
+        }
+        return BigDecimal.ZERO;
+    }
+
+    //骚操作,后面优化. todo
+    @Override
+    public BrokerageConfigVO getConfigByKey(String key) {
+        List<GlobalConfig> list = globalConfigMapper.getConfigByKey(key);
+        BrokerageConfigVO brokerageConfigVO = new BrokerageConfigVO();
+        for (GlobalConfig config :list){
+            if (config.getField().equals(GlobalConfigEnum.Finance.NON_MARKETER_MONTH_BROKERAGE.getCode())){
+                brokerageConfigVO.setNonMarketerMonthBrokerage(config);
+            }
+            if (config.getField().equals(GlobalConfigEnum.Finance.MARKETER_BROKERAGE_PERCENTAGE.getCode())){
+                brokerageConfigVO.setMarketerBrokeragePercentage(config);
+            }
+            if (config.getField().equals(GlobalConfigEnum.Finance.PARTICIPANT_BROKERAGE_PERCENTAGE.getCode())){
+                brokerageConfigVO.setParticipantBrokeragePercentage(config);
+            }
+            if (config.getField().equals(GlobalConfigEnum.Finance.MONTH_OF_YEAR.getCode())){
+                brokerageConfigVO.setMonthOfYear(config);
+            }
+        }
+        return brokerageConfigVO;
+    }
 }

+ 6 - 22
service/src/main/java/com/dayou/service/impl/ItemBrokerageSequenceServiceImpl.java

@@ -1,15 +1,10 @@
 package com.dayou.service.impl;
 
-import com.dayou.brokerage.BrokerageCalculateSupport;
-import com.dayou.brokerage.NonMarketerMarketerBrokerageCalculator;
-import com.dayou.brokerage.config.LandBrokerageDataConfiguration;
 import com.dayou.brokerage.constants.BrokerageBusiness;
 import com.dayou.brokerage.constants.BrokerageMode;
 import com.dayou.brokerage.constants.BrokerageRule;
 import com.dayou.brokerage.constants.BrokerageState;
-import com.dayou.brokerage.factory.BrokerageCalculateFactory;
 import com.dayou.common.BaseEntity;
-import com.dayou.dto.SalarySettleDTO;
 import com.dayou.entity.ItemBrokerageDetail;
 import com.dayou.entity.ItemBrokerageGeneral;
 import com.dayou.entity.ItemBrokerageSequence;
@@ -18,33 +13,22 @@ import com.dayou.mapper.ItemBrokerageSequenceMapper;
 import com.dayou.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayou.utils.DateUtils;
+import com.google.common.cache.Cache;
+import com.google.common.cache.LoadingCache;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.dayou.utils.ExcelUtil;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.web.multipart.MultipartFile;
 
 import java.math.BigDecimal;
-import java.time.LocalDate;
 import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 import java.util.stream.Collectors;
 
 import org.springframework.transaction.annotation.Transactional;
-import com.dayou.enums.BatchTaskTypeEnum;
 
 import static com.dayou.brokerage.constants.BrokerageMsg.*;
 
@@ -70,7 +54,7 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
     private IItemBrokerageDetailService brokerageDetailService;
 
     @Autowired
-    private LandBrokerageDataConfiguration landBrokerageDataConfiguration;
+    private LoadingCache<Long,BigDecimal> baseAmountsCache;
 
     @Override
     @SuppressWarnings("unchecked")
@@ -105,8 +89,8 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
      * @return
      */
     @Override
-    public Boolean doNonMarketerAheadSettle() {
-        ConcurrentHashMap<Long, BigDecimal> nonMarketerAheadAmounts = landBrokerageDataConfiguration.userBaseBrokerageAmounts;
+    public synchronized Boolean doNonMarketerAheadSettle() {
+        ConcurrentMap<Long, BigDecimal> nonMarketerAheadAmounts = baseAmountsCache.asMap();
         Date now = new Date();
         int year = DateUtils.getYear(now);
         int month = DateUtils.getMonth(now);