浏览代码

项目提成业务代码

wucl 2 年之前
父节点
当前提交
3761fa633a
共有 32 个文件被更改,包括 387 次插入189 次删除
  1. 2 2
      biz-base/src/main/java/com/dayou/controller/ItemStageController.java
  2. 22 6
      biz-base/src/test/java/BrokerageTest.java
  3. 1 0
      dao/src/main/java/com/dayou/mapper/ItemBrokerageGeneralMapper.java
  4. 2 0
      dao/src/main/java/com/dayou/mapper/MarketStatMapper.java
  5. 0 1
      dao/src/main/resources/mapper/ItemBrokerageGeneralMapper.xml
  6. 38 3
      dao/src/main/resources/mapper/MarketStatMapper.xml
  7. 9 1
      domain/src/main/java/com/dayou/entity/BrokerageMarketerRatio.java
  8. 4 10
      domain/src/main/java/com/dayou/entity/ItemBrokerageDetail.java
  9. 4 0
      domain/src/main/java/com/dayou/entity/ItemBrokerageGeneral.java
  10. 3 2
      domain/src/main/java/com/dayou/entity/ItemStage.java
  11. 3 2
      domain/src/main/java/com/dayou/entity/ItemStageUser.java
  12. 5 1
      domain/src/main/java/com/dayou/enums/GlobalConfigEnum.java
  13. 10 0
      service/src/main/java/com/dayou/bo/BrokerageDetailBO.java
  14. 11 1
      service/src/main/java/com/dayou/brokerage/BrokerageCalculateSupport.java
  15. 6 0
      service/src/main/java/com/dayou/brokerage/BrokerageCalculator.java
  16. 2 0
      service/src/main/java/com/dayou/brokerage/MarketerBrokerageCalculator.java
  17. 1 1
      service/src/main/java/com/dayou/brokerage/annotation/DoBrokerage.java
  18. 3 3
      service/src/main/java/com/dayou/brokerage/config/BrokerageConfig.java
  19. 0 51
      service/src/main/java/com/dayou/brokerage/config/BrokerageMarketerRatioSet.java
  20. 82 0
      service/src/main/java/com/dayou/brokerage/config/LandBrokerageDataConfiguration.java
  21. 0 1
      service/src/main/java/com/dayou/brokerage/constants/BrokerageRule.java
  22. 14 13
      service/src/main/java/com/dayou/brokerage/handler/LandMarketerBrokerageHandler.java
  23. 23 3
      service/src/main/java/com/dayou/brokerage/handler/LandNonMarketerBrokerageHandler.java
  24. 15 2
      service/src/main/java/com/dayou/brokerage/interceptor/BrokerageInterceptor.java
  25. 1 15
      service/src/main/java/com/dayou/brokerage/validator/BrokerageValidator.java
  26. 4 0
      service/src/main/java/com/dayou/service/IItemBrokerageGeneralService.java
  27. 1 1
      service/src/main/java/com/dayou/service/IItemStageService.java
  28. 2 0
      service/src/main/java/com/dayou/service/IMarketStatService.java
  29. 84 39
      service/src/main/java/com/dayou/service/impl/ItemBrokerageGeneralServiceImpl.java
  30. 1 1
      service/src/main/java/com/dayou/service/impl/ItemServiceImpl.java
  31. 28 30
      service/src/main/java/com/dayou/service/impl/ItemStageServiceImpl.java
  32. 6 0
      service/src/main/java/com/dayou/service/impl/MarketStatServiceImpl.java

+ 2 - 2
biz-base/src/main/java/com/dayou/controller/ItemStageController.java

@@ -73,8 +73,8 @@ public class ItemStageController extends BaseController {
      */
     @OperLog(title = "更新项目阶段列表")
     @PutMapping("")
-    public RestResponse<Boolean> update(@RequestBody ItemStage itemStage) {
-        Boolean ret = itemStageService.update(itemStage);
+    public RestResponse<Boolean> update(@RequestBody ItemStageVO itemStageVO) {
+        Boolean ret = itemStageService.update(itemStageVO);
         return RestResponse.data(ret);
     }
 

+ 22 - 6
biz-base/src/test/java/BrokerageTest.java

@@ -1,14 +1,17 @@
 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.brokerage.config.BrokerageMarketerRatioSet;
+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.ItemBrokerageGeneral;
 import com.dayou.service.IGlobalConfigService;
 import com.dayou.service.IItemBrokerageDetailService;
+import com.dayou.service.IItemBrokerageGeneralService;
 import com.dayou.service.IItemService;
 import lombok.extern.slf4j.Slf4j;
 import org.checkerframework.checker.units.qual.A;
@@ -46,26 +49,32 @@ public class BrokerageTest {
     @Autowired
     private IItemService iItemService;
 
+    @Autowired
+    private IItemBrokerageGeneralService iItemBrokerageGeneralService;
+
+    @Autowired
+    private LandBrokerageDataConfiguration brokerageMarketerRatioSet;
+
     @Test
     public void testBrokerageValidator(){
         DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
         BrokerageValidator brokerageValidator = defaultListableBeanFactory.getBean("brokerageValidator",BrokerageValidator.class);
-        log.info("brokerageValidator ===="+ brokerageValidator.monthOfYear.toPlainString());
-        log.info("brokerageValidator ===="+ brokerageValidator.nonMarketerMonthBrokerage.toPlainString());
+        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.reloadBrokerageValidator();
         BrokerageValidator brokerageValidatorNew = defaultListableBeanFactory.getBean("brokerageValidator",BrokerageValidator.class);
-        log.info("brokerageValidatorNew ===="+ brokerageValidatorNew.monthOfYear.toPlainString());
-        log.info("brokerageValidatorNew ===="+ brokerageValidatorNew.nonMarketerMonthBrokerage.toPlainString());
+        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();
-        BrokerageMarketerRatioSet brokerageMarketerRatioSet = defaultListableBeanFactory.getBean("brokerageMarketerRatioSet", BrokerageMarketerRatioSet.class);
+        LandBrokerageDataConfiguration brokerageMarketerRatioSet = defaultListableBeanFactory.getBean("brokerageMarketerRatioSet", LandBrokerageDataConfiguration.class);
         System.out.println(brokerageMarketerRatioSet);
     }
 
@@ -84,4 +93,11 @@ public class BrokerageTest {
         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());
+    }
 }

+ 1 - 0
dao/src/main/java/com/dayou/mapper/ItemBrokerageGeneralMapper.java

@@ -2,6 +2,7 @@ package com.dayou.mapper;
 
 import com.dayou.entity.ItemBrokerageGeneral;
 import com.dayou.dao.CustomBaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>

+ 2 - 0
dao/src/main/java/com/dayou/mapper/MarketStatMapper.java

@@ -18,4 +18,6 @@ public interface MarketStatMapper {
     MarketStatVO marketStat(@Param("dto") MarketStatDTO dto, @Param("lastMonth23")LocalDate lastMonth23);
 
     BigDecimal currentMonthPayment(@Param("userId") Long userId, @Param("lastMonth23") LocalDate lastMonth23);
+
+    BigDecimal currentYearPayment(@Param("userId") Long userId);
 }

+ 0 - 1
dao/src/main/resources/mapper/ItemBrokerageGeneralMapper.xml

@@ -29,5 +29,4 @@
         modified,
         item_id, marketer_brokerage_amount, marketer_advance_brokerage_able, marketer_advance_brokerage_done, participant_predict_brokerage_amount, participant_actual_brokerage_amount, participant_advance_status, brokerage_predict_amount, brokerage_actual_amount, brokerage_rate, status
     </sql>
-
 </mapper>

+ 38 - 3
dao/src/main/resources/mapper/MarketStatMapper.xml

@@ -43,8 +43,23 @@
          </foreach>
       </if>
         ) AS yearSaleDone,
-      ( SELECT ifnull(sum( pc.amount ),0) FROM payment_collection pc left join item i on i.id = pc.item_id WHERE pc.deleted = 0 AND pc.payment_date &gt;= DATE_SUB( CURDATE(), INTERVAL dayofyear( now())- 1 DAY )
-      AND pc.payment_date &lt;= concat( YEAR ( now()), '-12-31' )
+      ( SELECT
+       ifnull( sum( pc.amount ), 0 )
+       FROM
+       payment_collection pc
+       LEFT JOIN item i ON i.id = pc.item_id
+       WHERE
+       pc.deleted = 0
+       AND pc.payment_date &gt;= concat(
+       YEAR (
+       now())-1,
+       '-12-22'
+       )
+       AND pc.payment_date &lt;=  concat(
+       YEAR (
+       now()),
+       '-12-23'
+       )
       <if test="dto!=null and dto.userIds!=null and dto.userIds.size!=0">
          and i.user_id in
          <foreach collection="dto.userIds" open="(" close=")" separator="," item="userId">
@@ -52,7 +67,7 @@
          </foreach>
       </if>
                                                          ) AS yearPaymentDone,
-          ( SELECT ifnull(sum( pc.amount ),0) FROM payment_collection pc left join item i on i.id = pc.item_id WHERE pc.deleted = 0 AND pc.payment_date >= #{lastMonth23}
+          ( SELECT ifnull(sum( pc.amount ),0) FROM payment_collection pc left join item i on i.id = pc.item_id WHERE pc.deleted = 0 AND pc.payment_date &gt;= #{lastMonth23}
       AND pc.payment_date &lt;= concat( date_format( LAST_DAY( now()), '%Y-%m-' ), '22' )
       <if test="dto!=null and dto.userIds!=null and dto.userIds.size!=0">
          and i.user_id in
@@ -68,4 +83,24 @@
             AND pc.payment_date &lt;= concat( date_format( LAST_DAY( now()), '%Y-%m-' ), '22' ) and i.user_id = #{userId}
     </select>
 
+    <select id="currentYearPayment" resultType="java.math.BigDecimal">
+        SELECT
+            ifnull( sum( pc.amount ), 0 )
+        FROM
+            payment_collection pc
+                LEFT JOIN item i ON i.id = pc.item_id
+        WHERE
+            pc.deleted = 0
+          AND pc.payment_date &gt;= concat(
+            YEAR (
+       now())-1,
+                '-12-22'
+            )
+          AND pc.payment_date &lt;=  concat(
+            YEAR (
+       now()),
+                '-12-23'
+            )
+          and i.user_id = #{userId}
+    </select>
 </mapper>

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

@@ -1,10 +1,14 @@
 package com.dayou.entity;
 import com.dayou.common.BaseEntity;
+import com.dayou.enums.MergeKeyInterface;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import com.dayou.annotation.ExcelSheet;
 import com.dayou.annotation.ExportCell;
 import com.dayou.annotation.ImportCell;
+
+import static com.dayou.common.Constants.MERGE_SYMBOL;
+
 /**
  * <p>
  * 项目提成比例(市场人员)
@@ -16,7 +20,7 @@ import com.dayou.annotation.ImportCell;
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ExcelSheet(sheetName = "项目提成比例(市场人员)")
-public class BrokerageMarketerRatio extends BaseEntity {
+public class BrokerageMarketerRatio extends BaseEntity implements MergeKeyInterface {
 
     private static final long serialVersionUID=1L;
 
@@ -44,4 +48,8 @@ public class BrokerageMarketerRatio extends BaseEntity {
     @ExportCell(columnName = "备注")
     private String remark;
 
+    @Override
+    public String mergeKey() {
+        return itemCate + MERGE_SYMBOL+ itemSource;
+    }
 }

+ 4 - 10
domain/src/main/java/com/dayou/entity/ItemBrokerageDetail.java

@@ -35,36 +35,30 @@ public class ItemBrokerageDetail extends BaseEntity {
     /**
      * 预计提成金额
      */
-    @ImportCell
-    @ExportCell(columnName = "预计提成金额")
     private BigDecimal predictAmount;
 
     /**
+     * 预提金额
+     */
+    private BigDecimal aheadAmount;
+    /**
      * 实际提成金额
      */
-    @ImportCell
-    @ExportCell(columnName = "实际提成金额")
     private BigDecimal actualAmount;
 
     /**
      * 已预提金额
      */
-    @ImportCell
-    @ExportCell(columnName = "已预提金额")
     private BigDecimal advanceAmount;
 
     /**
      * 提成规则
      */
-    @ImportCell
-    @ExportCell(columnName = "提成规则")
     private String brokerageRule;
 
     /**
      * 提成方式
      */
-    @ImportCell
-    @ExportCell(columnName = "提成方式")
     private String brokerageMode;
 
     /**

+ 4 - 0
domain/src/main/java/com/dayou/entity/ItemBrokerageGeneral.java

@@ -1,5 +1,7 @@
 package com.dayou.entity;
 import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.dayou.common.BaseEntity;
 import lombok.Builder;
 import lombok.Data;
@@ -54,6 +56,7 @@ public class ItemBrokerageGeneral extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "参与人预计提成总金额")
+    @TableField("participant_predict_brokerage_amount")
     private BigDecimal participantPredictBrokerageAmount;
 
     /**
@@ -61,6 +64,7 @@ public class ItemBrokerageGeneral extends BaseEntity {
      */
     @ImportCell
     @ExportCell(columnName = "参与人实际提成总金额")
+    @TableField("participant_actual_brokerage_amount")
     private BigDecimal participantActualBrokerageAmount;
 
     /**

+ 3 - 2
domain/src/main/java/com/dayou/entity/ItemStage.java

@@ -1,6 +1,7 @@
 package com.dayou.entity;
 import com.dayou.common.BaseEntity;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.Date;
@@ -95,11 +96,11 @@ public class ItemStage{
     /**
      *提成权重
      */
-    private Double weight;
+    private BigDecimal weight;
     /**
      *逾期提成系数
      */
-    private Double coefficient;
+    private BigDecimal coefficient;
     /**
      *是否逾期
      */

+ 3 - 2
domain/src/main/java/com/dayou/entity/ItemStageUser.java

@@ -18,13 +18,14 @@ import java.math.BigDecimal;
  * @since 2023-03-03
  */
 @Data
-@EqualsAndHashCode(callSuper = true)
 @ExcelSheet(sheetName = "项目人员阶段参与表")
 @Builder
-public class ItemStageUser extends BaseEntity {
+public class ItemStageUser {
 
     private static final long serialVersionUID=1L;
 
+    private Long id;
+
     /**
      * 用户id
      */

+ 5 - 1
domain/src/main/java/com/dayou/enums/GlobalConfigEnum.java

@@ -71,7 +71,11 @@ public enum GlobalConfigEnum implements CodeMsgEnumInterface<String,CodeMsgEnumI
     }
     public enum Finance implements CodeMsgEnumInterface<String,String>{
 
-        NON_MARKETER_MONTH_BROKERAGE("NON_MARKETER_MONTH_BROKERAGE",null,"土规部非市场人员每月固定预提金额")
+        NON_MARKETER_MONTH_BROKERAGE("NON_MARKETER_MONTH_BROKERAGE",null,"土规部非市场人员每月固定预提金额"),
+
+        MARKETER_BROKERAGE_PERCENTAGE("NON_MARKETER_MONTH_BROKERAGE",null,"土规部市场人员提成比例"),
+
+        PARTICIPANT_BROKERAGE_PERCENTAGE("PARTICIPANT_BROKERAGE_PERCENTAGE",null,"土规部参与项目整体提成比例")
         ;
 
         private String filed;

+ 10 - 0
service/src/main/java/com/dayou/bo/BrokerageDetailBO.java

@@ -65,6 +65,16 @@ public class BrokerageDetailBO extends ItemBrokerageDetail implements MergeKeyIn
      */
     private Long itemId;
 
+    /**
+     * 阶段权重
+     */
+    private BigDecimal stageWeight;
+
+    /**
+     * 参与人权重
+     */
+    private BigDecimal participantWeight;
+
     @Override
     public String mergeKey() {
         return this.cate +MERGE_SYMBOL+ this.businessSource;

+ 11 - 1
service/src/main/java/com/dayou/brokerage/BrokerageCalculateSupport.java

@@ -1,6 +1,7 @@
 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;
@@ -8,6 +9,7 @@ import com.dayou.brokerage.handler.LandNonMarketerBrokerageHandler;
 import com.dayou.brokerage.validator.BrokerageValidator;
 import com.dayou.dto.ItemDTO;
 import com.dayou.utils.DateUtils;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Component;
@@ -38,6 +40,9 @@ public class BrokerageCalculateSupport implements BrokerageCalculateFactory,Brok
     @Qualifier("landNonMarketerBrokerageHandler")
     private LandNonMarketerBrokerageHandler landNonMarketerBrokerageHandler;
 
+    @Autowired
+    private LandBrokerageDataConfiguration landBrokerageDataConfiguration;
+
     @Override
     public BrokerageCalculator getCalculator(BrokerageRule rule){
         switch (rule){
@@ -65,7 +70,7 @@ public class BrokerageCalculateSupport implements BrokerageCalculateFactory,Brok
     protected void checkMarketerPredictBrokerage(BrokerageDetailBO brokerageDetailBo){
         @NotNull
         BigDecimal paymentTarget = brokerageDetailBo.getPaymentTarget();
-        BigDecimal avgMonthTarget = paymentTarget.divide(brokerageValidator.monthOfYear, 2, RoundingMode.HALF_UP);
+        BigDecimal avgMonthTarget = paymentTarget.divide(landBrokerageDataConfiguration.monthOfYear, 2, RoundingMode.HALF_UP);
         int month = DateUtils.getMonth(new Date());
         //当月应完成回款金额
         BigDecimal brokerageTarget = avgMonthTarget.multiply(new BigDecimal(month));
@@ -78,6 +83,11 @@ public class BrokerageCalculateSupport implements BrokerageCalculateFactory,Brok
     }
 
     @Override
+    public BigDecimal aheadAmount(BigDecimal predictAmount) {
+        return null;
+    }
+
+    @Override
     public BigDecimal advanceAmount() {
         return null;
     }

+ 6 - 0
service/src/main/java/com/dayou/brokerage/BrokerageCalculator.java

@@ -23,6 +23,12 @@ public interface BrokerageCalculator extends BrokerageCalculateFactory {
 
     /**
      * 预提金额
+     * @return
+     */
+    BigDecimal aheadAmount(BigDecimal predictAmount);
+
+    /**
+     * 已预提金额
      */
     BigDecimal advanceAmount();
 

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

@@ -26,4 +26,6 @@ public interface MarketerBrokerageCalculator extends BrokerageCalculator {
     BrokerageDetailBO predictTeamShareAmount(BrokerageDetailBO bo);
 
 
+
+
 }

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

@@ -20,6 +20,6 @@ public @interface DoBrokerage {
 
     OperationTypeEnum operation();
 
-    BrokerageRule rule() default BrokerageRule.NULL;
+    BrokerageRule rule();
 
 }

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

@@ -24,15 +24,15 @@ public class BrokerageConfig {
     private BrokerageInterceptor brokerageInterceptor;
 
 
-    @Bean(initMethod = "setStatus")
+    @Bean
     public BrokerageValidator brokerageValidator() {
         BrokerageValidator brokerageValidator = new BrokerageValidator();
         return brokerageValidator;
     }
 
     @Bean(initMethod = "loadRatioList")
-    public BrokerageMarketerRatioSet brokerageMarketerRatioSet(){
-        BrokerageMarketerRatioSet brokerageMarketerRatioSet = new BrokerageMarketerRatioSet();
+    public LandBrokerageDataConfiguration brokerageMarketerRatioSet(){
+        LandBrokerageDataConfiguration brokerageMarketerRatioSet = new LandBrokerageDataConfiguration();
         return brokerageMarketerRatioSet;
     }
 

+ 0 - 51
service/src/main/java/com/dayou/brokerage/config/BrokerageMarketerRatioSet.java

@@ -1,51 +0,0 @@
-package com.dayou.brokerage.config;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.dayou.common.BaseEntity;
-import com.dayou.entity.BrokerageMarketerRatio;
-import com.dayou.enums.MergeKeyInterface;
-import com.dayou.service.IBrokerageMarketerRatioService;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-
-import static com.dayou.common.Constants.MERGE_SYMBOL;
-
-/**
- * 类说明:市场人员提成系数表
- *
- * @author: wucl
- * @since: 2023/3/6
- * created with IntelliJ IDEA.
- */
-public class BrokerageMarketerRatioSet extends BrokerageMarketerRatio implements MergeKeyInterface {
-
-
-    @Autowired
-    private IBrokerageMarketerRatioService brokerageMarketerRatioService;
-
-    private ConcurrentHashMap<String, BigDecimal> ratioList = new ConcurrentHashMap<String,BigDecimal>(256);
-
-
-    @Override
-    public String mergeKey() {
-        return super.getItemCate() +MERGE_SYMBOL+ super.getItemSource();
-    }
-
-    public void loadRatioList(){
-        List<BrokerageMarketerRatio> list = brokerageMarketerRatioService.list(new LambdaQueryWrapper<BrokerageMarketerRatio>()
-                .eq(BaseEntity::getDeleted, Boolean.FALSE));
-        list.stream().forEach(x->{
-            BrokerageMarketerRatioSet brokerageMarketerRatioSet = new BrokerageMarketerRatioSet();
-            BeanUtils.copyProperties(x,brokerageMarketerRatioSet);
-            ratioList.put(brokerageMarketerRatioSet.mergeKey(),new BigDecimal(x.getRatio().toString()));
-        });
-    }
-
-    public ConcurrentHashMap<String, BigDecimal> getRatioList() {
-        return ratioList;
-    }
-}

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

@@ -0,0 +1,82 @@
+package com.dayou.brokerage.config;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.dayou.common.BaseEntity;
+import com.dayou.entity.BrokerageMarketerRatio;
+import com.dayou.enums.GlobalConfigEnum;
+import com.dayou.enums.MergeKeyInterface;
+import com.dayou.service.IBrokerageMarketerRatioService;
+import com.dayou.service.IGlobalConfigService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import javax.annotation.Nullable;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static com.dayou.common.Constants.MERGE_SYMBOL;
+
+/**
+ * 类说明:市场人员提成系数表
+ *
+ * @author: wucl
+ * @since: 2023/3/6
+ * created with IntelliJ IDEA.
+ */
+public class LandBrokerageDataConfiguration extends BrokerageMarketerRatio implements MergeKeyInterface {
+
+
+    @Autowired
+    private IBrokerageMarketerRatioService brokerageMarketerRatioService;
+
+    @Autowired
+    private IGlobalConfigService globalConfigService;
+
+    /**
+     * 由项目类型和项目来源决定的提成系数集合
+     */
+    private ConcurrentHashMap<String, BigDecimal> ratioList = new ConcurrentHashMap<String,BigDecimal>(256);
+
+    /**
+     * 每个人基础提成金额
+     */
+    private 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 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 = new BigDecimal(globalConfigService.getValue(GlobalConfigEnum.FINANCE.getCode(),
+                GlobalConfigEnum.Finance.NON_MARKETER_MONTH_BROKERAGE.getCode()));
+
+        monthOfYear = new BigDecimal(globalConfigService.getValue(GlobalConfigEnum.SYS.getCode(),
+                GlobalConfigEnum.Sys.MONTH_OF_YEAR.getCode()));
+
+        marketerBrokeragePercentage = new BigDecimal(globalConfigService.getValue(GlobalConfigEnum.FINANCE.getCode(),
+                GlobalConfigEnum.Finance.MARKETER_BROKERAGE_PERCENTAGE.getCode()));
+
+        participantBrokeragePercentage = new BigDecimal(globalConfigService.getValue(GlobalConfigEnum.FINANCE.getCode(),
+                GlobalConfigEnum.Finance.PARTICIPANT_BROKERAGE_PERCENTAGE.getCode()));
+    }
+
+    public ConcurrentHashMap<String, BigDecimal> getRatioList() {
+        return ratioList;
+    }
+}

+ 0 - 1
service/src/main/java/com/dayou/brokerage/constants/BrokerageRule.java

@@ -11,7 +11,6 @@ public enum BrokerageRule {
 
     LAND_MARKETER_RULE("土地规划部市场人员规则","LAND_MARKETER_RULE"),
     LAND_OTHER_RULE("土地规划部参与人员规则","LAND_OTHER_RULE"),
-    NULL("NULL","NULL")
     ;
 
     private String name;

+ 14 - 13
service/src/main/java/com/dayou/brokerage/handler/LandMarketerBrokerageHandler.java

@@ -3,7 +3,7 @@ package com.dayou.brokerage.handler;
 import com.dayou.bo.BrokerageDetailBO;
 import com.dayou.brokerage.BrokerageCalculateSupport;
 import com.dayou.brokerage.MarketerBrokerageCalculator;
-import com.dayou.brokerage.config.BrokerageMarketerRatioSet;
+import com.dayou.brokerage.config.LandBrokerageDataConfiguration;
 import com.dayou.dto.ItemDTO;
 import com.dayou.exception.BusinessException;
 import lombok.extern.slf4j.Slf4j;
@@ -24,44 +24,45 @@ import java.math.BigDecimal;
 public class LandMarketerBrokerageHandler extends BrokerageCalculateSupport implements MarketerBrokerageCalculator {
 
     @Autowired
-    private BrokerageMarketerRatioSet brokerageMarketerRatioSet;
+    private LandBrokerageDataConfiguration landBrokerageDataConfiguration;
 
     @Override
     public BrokerageDetailBO predictPersonalAmount(BrokerageDetailBO bo) {
         String mergeKey = bo.mergeKey();
-        BigDecimal ratio = brokerageMarketerRatioSet.getRatioList().get(mergeKey);
+        BigDecimal ratio = landBrokerageDataConfiguration.getRatioList().get(mergeKey);
         bo.setRate(ratio);
-        if (bo.getAmount()!=null && ratio !=null){
+        if (ratio !=null){
             checkItemBrokerageStatus(bo);
             try {
                 checkMarketerPredictBrokerage(bo);
-                //todo 可提成金额计算规则这个地方应该要改
                 bo.setPredictAmount(bo.getAmount().multiply(ratio));
-                //todo 实际提成金额可能与可提成金额不一致,可能存在考核指标打折
-                bo.setActualAmount(bo.getPredictAmount());
+                bo.setAheadAmount(aheadAmount(bo.getPredictAmount()));
                 bo.setMarketerAdvanceBrokerageAble(Boolean.TRUE);
             } catch (BusinessException e) {
                 log.info("项目id:[{}],客户经理id:[{}],[{}]",bo.getId(),bo.getUserId(),e.getMessage());
             }
         }else {
-            log.info("项目id:[{}],合同金额:[{}],提成系数:[{}],[未填写合同金额或未设置提成系数,无法计算客户经理提成]",bo.getId(),bo.getAmount(),ratio);
+            log.info("项目id:[{}],合同金额:[{}],提成系数:[null],[未设置提成系数,无法计算客户经理提成]",bo.getId(),bo.getAmount());
         }
         return bo;
 
     }
 
     @Override
-    public BrokerageDetailBO predictTeamShareAmount(BrokerageDetailBO bo) {
+    public BigDecimal aheadAmount(BigDecimal predictAmount){
+        BigDecimal aheadAmount = predictAmount.multiply(landBrokerageDataConfiguration.marketerBrokeragePercentage);
+        return aheadAmount;
+    }
+    @Override
+    public BigDecimal advanceAmount() {
         return null;
     }
-
     @Override
-    public BigDecimal actualAmount(ItemDTO itemDTO) {
+    public BrokerageDetailBO predictTeamShareAmount(BrokerageDetailBO bo) {
         return null;
     }
-
     @Override
-    public BigDecimal advanceAmount() {
+    public BigDecimal actualAmount(ItemDTO itemDTO) {
         return null;
     }
 

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

@@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
 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.validator.BrokerageValidator;
 import com.dayou.dto.ItemDTO;
 import com.dayou.entity.ItemBrokerageDetail;
@@ -26,17 +27,36 @@ public class LandNonMarketerBrokerageHandler extends BrokerageCalculateSupport i
 
     @Autowired
     private BrokerageValidator brokerageValidator;
+
+    @Autowired
+    private LandBrokerageDataConfiguration landBrokerageDataConfiguration;
+
     @Override
     public ItemBrokerageDetail predictAmount(BrokerageDetailBO brokerageDetailBO) {
         brokerageValidator.checkItemBrokerageStatus(brokerageDetailBO);
-        //todo 非市场人与对一个项目的金额
         ItemBrokerageDetail itemBrokerageDetail = new ItemBrokerageDetail();
-        brokerageDetailBO.setPredictAmount(brokerageValidator.nonMarketerMonthBrokerage);
-        BeanUtil.copyProperties(brokerageDetailBO,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);
+        }
+        log.info("项目id:[{}],合同金额:[{}],提成系数:[null],[未设置[土规部参与项目整体提成比例],无法计算参与人员提成]",brokerageDetailBO.getItemId(),brokerageDetailBO.getAmount());
         return itemBrokerageDetail;
     }
 
     @Override
+    public BigDecimal aheadAmount(BigDecimal predictAmount){
+        //todo
+        return null;
+    }
+    @Override
     public BigDecimal actualAmount(ItemDTO itemDTO) {
         return null;
     }

+ 15 - 2
service/src/main/java/com/dayou/brokerage/interceptor/BrokerageInterceptor.java

@@ -50,7 +50,7 @@ public class BrokerageInterceptor implements MethodInterceptor {
             iItemBrokerageGeneralService.editMarketerBrokerage(itemDTO);
             log.info("updated general and marketer detail,itemId[{}]", itemDTO.getId());
         }
-        if (annotation!=null && annotation.operation() == DELETE){
+        if (annotation!=null && annotation.rule() == LAND_MARKETER_RULE && annotation.operation() == DELETE){
             Long itemId = (Long) methodInvocation.getArguments()[0];
             iItemBrokerageGeneralService.removeMarketerBrokerage(itemId);
             log.info("deleted general and marketer and non-marketer detail,itemId[{}]", itemId);
@@ -61,7 +61,20 @@ public class BrokerageInterceptor implements MethodInterceptor {
                 iItemBrokerageGeneralService.addParticipatorBrokerage(itemStageVO,(Long) result);
                 log.info("created participator detail,itemId[{}]", itemStageVO.getItemId());
             };
-
+        }
+        if (annotation!=null && annotation.rule() == LAND_OTHER_RULE && annotation.operation() == EDIT){
+            if (result instanceof Boolean && (Boolean) result){
+                ItemStageVO itemStageVO = (ItemStageVO) methodInvocation.getArguments()[0];
+                iItemBrokerageGeneralService.editParticipatorBrokerage(itemStageVO);
+                log.info("created participator detail,itemId[{}]", itemStageVO.getItemId());
+            };
+        }
+        if (annotation!=null && annotation.rule() == LAND_OTHER_RULE && annotation.operation() == DELETE){
+            if (result instanceof Boolean && (Boolean) result){
+                Long itemStageId = (Long) methodInvocation.getArguments()[0];
+                iItemBrokerageGeneralService.removeParticipatorBrokerage(itemStageId);
+                log.info("deleted non-marketer detail,itemId[{}]", itemStageId);
+            };
         }
         return result;
     }

+ 1 - 15
service/src/main/java/com/dayou/brokerage/validator/BrokerageValidator.java

@@ -27,15 +27,6 @@ public class BrokerageValidator {
     @Autowired
     private ApplicationContext applicationContext;
 
-    @Autowired
-    private IGlobalConfigService globalConfigService;
-
-    @Nullable
-    public BigDecimal monthOfYear;
-
-    @Nullable
-    public BigDecimal nonMarketerMonthBrokerage;
-
     //todo 通过切面实现校验器更新
     public void reloadBrokerageValidator(){
         DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
@@ -61,12 +52,7 @@ public class BrokerageValidator {
         }
     }
 
-    public void setStatus(){
-        nonMarketerMonthBrokerage = new BigDecimal(globalConfigService.getValue(GlobalConfigEnum.FINANCE.getCode(),
-                GlobalConfigEnum.Finance.NON_MARKETER_MONTH_BROKERAGE.getCode()));
-        monthOfYear = new BigDecimal(globalConfigService.getValue(GlobalConfigEnum.SYS.getCode(),
-                GlobalConfigEnum.Sys.MONTH_OF_YEAR.getCode()));
-    }
+
 
     //todo m3 校验参与者是否可继续预提
 }

+ 4 - 0
service/src/main/java/com/dayou/service/IItemBrokerageGeneralService.java

@@ -37,4 +37,8 @@ public interface IItemBrokerageGeneralService extends IService<ItemBrokerageGene
     void removeMarketerBrokerage(Long itemId);
 
     void addParticipatorBrokerage(ItemStageVO itemStageVO,Long brokerageStageId);
+
+    void editParticipatorBrokerage(ItemStageVO itemStageVO);
+
+    void removeParticipatorBrokerage(Long itemStageId);
 }

+ 1 - 1
service/src/main/java/com/dayou/service/IItemStageService.java

@@ -25,7 +25,7 @@ public interface IItemStageService extends IService<ItemStage> {
 
     Long add(ItemStageVO itemStageVO);
 
-        Boolean update(ItemStage itemStage);
+        Boolean update(ItemStageVO itemStageVO);
 
         Boolean delete(Long id);
 

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

@@ -16,4 +16,6 @@ public interface IMarketStatService {
     MarketStatVO marketStat(MarketStatDTO dto);
 
     BigDecimal currentMonthPayment(Long userId);
+
+    BigDecimal currentYearPayment(Long userId);
 }

+ 84 - 39
service/src/main/java/com/dayou/service/impl/ItemBrokerageGeneralServiceImpl.java

@@ -1,5 +1,7 @@
 package com.dayou.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.dayou.bo.BrokerageDetailBO;
 import com.dayou.brokerage.BrokerageCalculateSupport;
 import com.dayou.brokerage.BrokerageCalculator;
@@ -26,6 +28,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 
 import java.math.BigDecimal;
+import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -93,7 +96,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
         MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_MARKETER_RULE);
         Long userId = bo.getUserId();
         UserTarget userTarget = getUserTarget(userId);
-        BigDecimal currentMonthPayment = marketStatService.currentMonthPayment(userId);
+        BigDecimal currentMonthPayment = marketStatService.currentYearPayment(userId);
         BigDecimal paymentTarget = new BigDecimal(userTarget.getPaymentTarget());
         bo.setCurrentPayment(currentMonthPayment);
         bo.setPaymentTarget(paymentTarget);
@@ -113,14 +116,20 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
     @Override
     public void addMarketerBrokerage(Long id) {
         Item item = itemMapper.selectById(id);
-        BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().amount(item.getAmount()).cate(item.getCate()).businessSource(item.getBusinessSource()).itemId(id).build();
-        brokerageDetailBO.setBrokerageRule(BrokerageRule.LAND_MARKETER_RULE.getCode());
-        brokerageDetailBO.setBrokerageMode(BrokerageMode.PERSONAL.getCode());
-        brokerageDetailBO.setAdvanceAmount(BigDecimal.ZERO);
-        brokerageDetailBO.setPredictAmount(BigDecimal.ZERO);
-        brokerageDetailBO.setActualAmount(BigDecimal.ZERO);
-        brokerageDetailBO.setUserId(item.getUserId());
-        this.doCreateBrokerageGeneralAndDetail(brokerageDetailBO);
+        if (item.getAmount()!=null){
+            BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().amount(item.getAmount()).cate(item.getCate()).businessSource(item.getBusinessSource()).itemId(id).build();
+            brokerageDetailBO.setBrokerageRule(BrokerageRule.LAND_MARKETER_RULE.getCode());
+            brokerageDetailBO.setBrokerageMode(BrokerageMode.PERSONAL.getCode());
+            brokerageDetailBO.setAdvanceAmount(BigDecimal.ZERO);
+            brokerageDetailBO.setPredictAmount(BigDecimal.ZERO);
+            brokerageDetailBO.setActualAmount(BigDecimal.ZERO);
+            brokerageDetailBO.setAheadAmount(BigDecimal.ZERO);
+            brokerageDetailBO.setUserId(item.getUserId());
+            this.doCreateBrokerageGeneralAndDetail(brokerageDetailBO);
+        }else {
+            log.info("未设置合同金额,创建提成总表和客户经理提成记录终止。itemId[{}]",id);
+        }
+
     }
 
     @Transactional
@@ -160,41 +169,77 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
     @Transactional
     @Override
     public void addParticipatorBrokerage(ItemStageVO itemStageVO,Long brokerageStageId) {
-        NonMarketerMarketerBrokerageCalculator calculator = (NonMarketerMarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_OTHER_RULE);
-        ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemStageVO.getItemId()));
-        if (general == null){
-            addMarketerBrokerage(itemStageVO.getItemId());
-            addParticipatorBrokerage(itemStageVO,brokerageStageId);
-            log.info("非正常情况下,更新项目信息时创建了相关的提成记录");
-            return;
+        Item item = itemMapper.selectById(itemStageVO.getItemId());
+        if (item.getAmount()!=null){
+            NonMarketerMarketerBrokerageCalculator calculator = (NonMarketerMarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_OTHER_RULE);
+            ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemStageVO.getItemId()));
+            if (general == null){
+                addMarketerBrokerage(itemStageVO.getItemId());
+                addParticipatorBrokerage(itemStageVO,brokerageStageId);
+                log.info("非正常情况下,更新项目信息时创建了相关的提成记录");
+                return;
+            }
+            Set<ItemStageVO.ParticipatorWeight> participators = itemStageVO.getParticipators();
+            Set<ItemBrokerageDetail> participatorBrokerageDetails = participators.stream().map(x -> {
+                BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().build();
+                brokerageDetailBO.setBrokerageRule(BrokerageRule.LAND_OTHER_RULE.getCode());
+                brokerageDetailBO.setBrokerageMode(BrokerageMode.PERSONAL.getCode());
+                brokerageDetailBO.setAdvanceAmount(BigDecimal.ZERO);
+                brokerageDetailBO.setPredictAmount(BigDecimal.ZERO);
+                brokerageDetailBO.setActualAmount(BigDecimal.ZERO);
+                brokerageDetailBO.setAmount(item.getAmount());
+                brokerageDetailBO.setUserId(x.getUserId());
+                brokerageDetailBO.setGeneralId(general.getId());
+                brokerageDetailBO.setBrokerageStageId(brokerageStageId);
+                brokerageDetailBO.setStageWeight(itemStageVO.getWeight());
+                brokerageDetailBO.setParticipantWeight(x.getWeight());
+                ItemBrokerageDetail itemBrokerageDetail = calculator.predictAmount(brokerageDetailBO);
+                return itemBrokerageDetail;
+            }).collect(Collectors.toSet());
+            BigDecimal participatorPredictTotalAmount = participatorBrokerageDetails.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+
+            //创建参与人的项目提成详情
+            iItemBrokerageDetailService.saveBatch(participatorBrokerageDetails);
+            //更新项目提成总表信息
+            general.setParticipantPredictBrokerageAmount(participatorPredictTotalAmount);
+            general.setParticipantAdvanceStatus(Boolean.TRUE);
+            general.setBrokeragePredictAmount(general.getMarketerBrokerageAmount().add(participatorPredictTotalAmount));
+            general.setParticipantActualBrokerageAmount(BigDecimal.ZERO);
+            general.setStatus(BrokerageState.PREDICTING.getCode());
+
+            this.updateById(general);
+
+        }else {
+            log.info("未设置合同金额,创建参与人提成记录终止。itemId[{}]",item.getId());
         }
-        Set<ItemStageVO.ParticipatorWeight> participators = itemStageVO.getParticipators();
-        Set<ItemBrokerageDetail> participatorBrokerageDetails = participators.stream().map(x -> {
-            BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().build();
-            brokerageDetailBO.setBrokerageRule(BrokerageRule.LAND_OTHER_RULE.getCode());
-            brokerageDetailBO.setBrokerageMode(BrokerageMode.PERSONAL.getCode());
-            brokerageDetailBO.setAdvanceAmount(BigDecimal.ZERO);
-            brokerageDetailBO.setPredictAmount(BigDecimal.ZERO);
-            brokerageDetailBO.setActualAmount(BigDecimal.ZERO);
-            brokerageDetailBO.setUserId(x.getUserId());
-            brokerageDetailBO.setGeneralId(general.getId());
-            brokerageDetailBO.setBrokerageStageId(brokerageStageId);
-            ItemBrokerageDetail itemBrokerageDetail = calculator.predictAmount(brokerageDetailBO);
-            return itemBrokerageDetail;
-        }).collect(Collectors.toSet());
-        BigDecimal participatorPredictTotalAmount = participatorBrokerageDetails.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
 
-        //创建参与人的项目提成详情
-        iItemBrokerageDetailService.saveBatch(participatorBrokerageDetails);
-        //更新项目提成总表信息
-        general.setParticipantPredictBrokerageAmount(participatorPredictTotalAmount);
-        general.setParticipantAdvanceStatus(Boolean.TRUE);
-        general.setBrokeragePredictAmount(general.getBrokeragePredictAmount().add(participatorPredictTotalAmount));
-        general.setStatus(BrokerageState.PREDICTING.getCode());
 
-        this.updateById(general);
+    }
 
+    @Override
+    public void editParticipatorBrokerage(ItemStageVO itemStageVO) {
+        iItemBrokerageDetailService.remove(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getBrokerageStageId,itemStageVO.getId()));
+        addParticipatorBrokerage(itemStageVO,itemStageVO.getId());
+    }
 
+    @Transactional
+    @Override
+    public void removeParticipatorBrokerage(Long itemStageId) {
+        List<ItemBrokerageDetail> list = iItemBrokerageDetailService.list(new LambdaQueryWrapper<ItemBrokerageDetail>()
+                .eq(ItemBrokerageDetail::getBrokerageStageId, itemStageId));
+        if (CollectionUtils.isEmpty(list)){
+            return ;
+        }
+        Long generalId = list.get(0).getGeneralId();
+        if (generalId == null){
+            return ;
+        }
+        ItemBrokerageGeneral general = this.getById(generalId);
+        BigDecimal participatorPredictTotalAmount = list.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        general.setParticipantPredictBrokerageAmount(general.getParticipantPredictBrokerageAmount().subtract(participatorPredictTotalAmount));
+        general.setBrokeragePredictAmount(general.getBrokeragePredictAmount().subtract(participatorPredictTotalAmount));
+       this.updateById(general);
+        iItemBrokerageDetailService.remove(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getBrokerageStageId,itemStageId));
     }
 
     /**

+ 1 - 1
service/src/main/java/com/dayou/service/impl/ItemServiceImpl.java

@@ -124,7 +124,7 @@ public class ItemServiceImpl extends ServiceImpl<ItemMapper, Item> implements II
     }
 
     @Override
-    @DoBrokerage(operation = DELETE)
+    @DoBrokerage(operation = DELETE ,rule = BrokerageRule.LAND_MARKETER_RULE)
     public Boolean delete(Long id){
         //逻辑删除
         return this.removeById(id);

+ 28 - 30
service/src/main/java/com/dayou/service/impl/ItemStageServiceImpl.java

@@ -4,12 +4,10 @@ import cn.hutool.core.lang.UUID;
 import cn.hutool.core.util.StrUtil;
 import com.dayou.brokerage.annotation.DoBrokerage;
 import com.dayou.brokerage.constants.BrokerageRule;
-import com.dayou.common.BaseEntity;
 import com.dayou.entity.Item;
 import com.dayou.entity.ItemStage;
 import com.dayou.entity.ItemStageUser;
 import com.dayou.enums.ItemStateEnum;
-import com.dayou.enums.OperationTypeEnum;
 import com.dayou.exception.ErrorCode;
 import com.dayou.mapper.ItemMapper;
 import com.dayou.mapper.ItemStageMapper;
@@ -18,24 +16,13 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayou.service.IItemStageUserService;
 import com.dayou.vo.ItemStageVO;
 import org.apache.commons.collections4.CollectionUtils;
-import org.apache.ibatis.annotations.Case;
-import org.checkerframework.checker.units.qual.A;
 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.time.LocalDate;
 import java.util.*;
@@ -69,6 +56,7 @@ public class ItemStageServiceImpl extends ServiceImpl<ItemStageMapper, ItemStage
     @Autowired
     private IItemStageUserService iItemStageUserService;
 
+
     @Override
     @SuppressWarnings("unchecked")
     public Page<ItemStage> selectPage(Page page,ItemStage itemStage){
@@ -81,6 +69,7 @@ public class ItemStageServiceImpl extends ServiceImpl<ItemStageMapper, ItemStage
         return this.getById(id);
     }
 
+    @Transactional
     @Override
     @DoBrokerage(operation = ADD,rule = BrokerageRule.LAND_OTHER_RULE)
     public Long add(ItemStageVO itemStageVO){
@@ -104,8 +93,8 @@ public class ItemStageServiceImpl extends ServiceImpl<ItemStageMapper, ItemStage
             itemStageVO.setFooterId(UUID.randomUUID().toString());
         }
         this.save(itemStageVO);
-        Set<ItemStageVO.ParticipatorWeight> joiners = itemStageVO.getParticipators();
-        Set<ItemStageUser> itemStageUsers = joiners.stream().map(x -> {
+        Set<ItemStageVO.ParticipatorWeight> participators = itemStageVO.getParticipators();
+        Set<ItemStageUser> itemStageUsers = participators.stream().map(x -> {
             return ItemStageUser.builder().itemId(itemStageVO.getItemId()).stageId(itemStageVO.getId()).userId(x.getUserId()).weight(x.getWeight()).build();
         }).collect(Collectors.toSet());
         iItemStageUserService.saveBatch(itemStageUsers);
@@ -114,40 +103,48 @@ public class ItemStageServiceImpl extends ServiceImpl<ItemStageMapper, ItemStage
 
     @Transactional
     @Override
-    public Boolean update(ItemStage itemStage){
+    @DoBrokerage(operation = EDIT,rule = BrokerageRule.LAND_OTHER_RULE)
+    public Boolean update(ItemStageVO itemStageVO){
         //判断阶段时间是否与已有阶段时间重复
-        LocalDate startDate = itemStage.getStartDate();
-        LocalDate endDate = itemStage.getEndDate();
-        int check = itemStageMapper.checkDate(itemStage.getId(),itemStage.getItemId(),startDate,endDate);
+        LocalDate startDate = itemStageVO.getStartDate();
+        LocalDate endDate = itemStageVO.getEndDate();
+        int check = itemStageMapper.checkDate(itemStageVO.getId(),itemStageVO.getItemId(),startDate,endDate);
         if (check!=0){
             ErrorCode.throwBusinessException(ErrorCode.CUSTOM_ERROR,"日期段与已存在的排期日期重复,请检查.");
         }
-        if (StrUtil.isBlank(itemStage.getHeaderId())){
+        //原节点headerId
+        ItemStage oldStage = this.getById(itemStageVO.getId());
+        if (StrUtil.isBlank(itemStageVO.getHeaderId()) && StrUtil.isNotBlank(oldStage.getHeaderId())){
             ErrorCode.throwBusinessException(STAGE_NODE_ERROR);
         }
-        if (StrUtil.isNotBlank(itemStage.getHeaderId()) &&
-                StrUtil.isNotBlank(itemStage.getFooterId()) &&
-                StrUtil.equals(itemStage.getHeaderId(),itemStage.getFooterId())){
+        if (StrUtil.isNotBlank(itemStageVO.getHeaderId()) &&
+                StrUtil.isNotBlank(itemStageVO.getFooterId()) &&
+                StrUtil.equals(itemStageVO.getHeaderId(),itemStageVO.getFooterId())){
             ErrorCode.throwBusinessException(STAGE_NODE_ERROR1);
         }
-        //原节点headerId
-        ItemStage oldStage = this.getById(itemStage.getId());
 
-        ItemStage stage1 = this.getOne(new LambdaQueryWrapper<ItemStage>().eq(ItemStage::getHeaderId, itemStage.getHeaderId()));
+        ItemStage stage1 = this.getOne(new LambdaQueryWrapper<ItemStage>().eq(ItemStage::getHeaderId, itemStageVO.getHeaderId()));
         ItemStage stage2 = this.getOne(new LambdaQueryWrapper<ItemStage>().eq(ItemStage::getHeaderId, oldStage.getFooterId()));
-        if (stage1!=null && stage1.getId() != itemStage.getId()){
+        if (stage1!=null && stage1.getId() != itemStageVO.getId()){
             stage1.setHeaderId(oldStage.getFooterId());
             this.update(new LambdaUpdateWrapper<ItemStage>().set(ItemStage::getHeaderId,oldStage.getFooterId()).eq(ItemStage::getId,stage1.getId()));
         }
         if (stage2!=null){
             this.update(new LambdaUpdateWrapper<ItemStage>().set(ItemStage::getHeaderId,oldStage.getHeaderId()).eq(ItemStage::getId,stage2.getId()));
         }
+        this.updateById(itemStageVO);
 
-        return  this.updateById(itemStage);
+        iItemStageUserService.remove(new LambdaQueryWrapper<ItemStageUser>().eq(ItemStageUser::getStageId,itemStageVO.getId()));
+        Set<ItemStageVO.ParticipatorWeight> participators = itemStageVO.getParticipators();
+        Set<ItemStageUser> itemStageUsers = participators.stream().map(x -> {
+            return ItemStageUser.builder().itemId(itemStageVO.getItemId()).stageId(itemStageVO.getId()).userId(x.getUserId()).weight(x.getWeight()).build();
+        }).collect(Collectors.toSet());
+        return iItemStageUserService.saveBatch(itemStageUsers);
     }
 
     @Override
     @Transactional
+    @DoBrokerage(operation = DELETE,rule = BrokerageRule.LAND_OTHER_RULE)
     public Boolean delete(Long id){
         ItemStage itemStage = this.getById(id);
         if (itemStage.getHeaderId()==null){
@@ -162,7 +159,8 @@ public class ItemStageServiceImpl extends ServiceImpl<ItemStageMapper, ItemStage
                 this.update(new LambdaUpdateWrapper<ItemStage>().set(ItemStage::getHeaderId,headerStage.getFooterId()).eq(ItemStage::getId,footerStage.getId()));
             }
         }
-        return this.removeById(id);
+        this.removeById(id);
+        return iItemStageUserService.remove(new LambdaQueryWrapper<ItemStageUser>().eq(ItemStageUser::getStageId,id));
     }
 
     @Override

+ 6 - 0
service/src/main/java/com/dayou/service/impl/MarketStatServiceImpl.java

@@ -45,5 +45,11 @@ public class MarketStatServiceImpl implements IMarketStatService {
         return currentMontAmount;
     }
 
+    @Override
+    public BigDecimal currentYearPayment(Long userId) {
+        BigDecimal currentYearPayment = marketStatMapper.currentYearPayment(userId);
+        return currentYearPayment;
+    }
+
 
 }