Browse Source

提成优化部分

wucl 2 years ago
parent
commit
d1d7ced40d
29 changed files with 467 additions and 156 deletions
  1. 2 21
      biz-base/src/test/java/BrokerageTest.java
  2. 1 1
      common/src/main/java/com/dayou/exception/ErrorCode.java
  3. 16 0
      dao/src/main/java/com/dayou/mapper/PostCultivateMapper.java
  4. 4 2
      dao/src/main/resources/mapper/BrokeragePostRatioMapper.xml
  5. 4 1
      dao/src/main/resources/mapper/ItemBrokerageDetailMapper.xml
  6. 26 0
      dao/src/main/resources/mapper/PostCultivateMapper.xml
  7. 2 0
      domain/src/main/java/com/dayou/bo/LeaderRatioBO.java
  8. 2 0
      domain/src/main/java/com/dayou/common/Constants.java
  9. 5 0
      domain/src/main/java/com/dayou/entity/BrokeragePostRatio.java
  10. 44 0
      domain/src/main/java/com/dayou/entity/PostCultivate.java
  11. 7 7
      domain/src/main/java/com/dayou/enums/GlobalConfigEnum.java
  12. 33 24
      service/src/main/java/com/dayou/brokerage/BrokerageCalculateSupport.java
  13. 19 0
      service/src/main/java/com/dayou/brokerage/MarketerBrokerageCalculator.java
  14. 0 16
      service/src/main/java/com/dayou/brokerage/config/BrokerageConfig.java
  15. 53 0
      service/src/main/java/com/dayou/brokerage/constants/BrokerageMsg.java
  16. 13 0
      service/src/main/java/com/dayou/brokerage/constants/BrokerageRule.java
  17. 87 13
      service/src/main/java/com/dayou/brokerage/handler/LandMarketerBrokerageHandler.java
  18. 19 26
      service/src/main/java/com/dayou/brokerage/handler/LandNonMarketerBrokerageHandler.java
  19. 1 1
      service/src/main/java/com/dayou/brokerage/validator/BrokerageValidator.java
  20. 0 1
      service/src/main/java/com/dayou/processor/AppBootProcessor.java
  21. 0 2
      service/src/main/java/com/dayou/service/IGlobalConfigService.java
  22. 1 1
      service/src/main/java/com/dayou/service/IMarketStatService.java
  23. 25 0
      service/src/main/java/com/dayou/service/IPostCultivateService.java
  24. 35 36
      service/src/main/java/com/dayou/service/impl/GlobalConfigServiceImpl.java
  25. 1 0
      service/src/main/java/com/dayou/service/impl/ItemBrokerageGeneralServiceImpl.java
  26. 4 1
      service/src/main/java/com/dayou/service/impl/ItemBrokerageSequenceServiceImpl.java
  27. 7 2
      service/src/main/java/com/dayou/service/impl/MarketStatServiceImpl.java
  28. 55 0
      service/src/main/java/com/dayou/service/impl/PostCultivateServiceImpl.java
  29. 1 1
      service/src/main/java/com/dayou/service/impl/UserServiceImpl.java

+ 2 - 21
biz-base/src/test/java/BrokerageTest.java

@@ -47,36 +47,17 @@ import java.util.stream.Collectors;
 public class BrokerageTest {
 
     @Autowired
-    private LoadingCache<String,BigDecimal> marketerRatioCache;
-
-    @Autowired
-    private LoadingCache<Long,BigDecimal> baseAmountsCache;
-
-    @Autowired
-    private LoadingCache<String,BigDecimal> globalConfigCache;
-
-    @Autowired
-    private ICustomerService customerService;
-
-    @Autowired
-    private IItemBrokerageSequenceService itemBrokerageSequenceService;
-
-    private HikariDataSource hikariDataSource;
-
-    @Autowired
     private IUserService userService;
     
     @Autowired
-    private IMarketStatService marketStatService;
+    private IItemBrokerageSequenceService itemBrokerageSequenceService;
 
 
 
 
     @Test
     public void testBrokerageCache() throws ExecutionException {
-        Set<Long> juniorUserId = userService.getJuniorUserId(117L);
-        BigDecimal bigDecimal = marketStatService.currentYearTeamPayment(juniorUserId);
-        System.out.println(bigDecimal);
+        itemBrokerageSequenceService.doAbleItemBrokerageSettle();
     }
 
     public static void main(String ages []) {

+ 1 - 1
common/src/main/java/com/dayou/exception/ErrorCode.java

@@ -41,7 +41,7 @@ public class ErrorCode {
 
     public static final ErrorCode BROKERAGE_ITEM_STATE_ERROR1 = ErrorCode("10018", "抱歉,项目已被结算不支持修改项目信息.");
 
-    public static final ErrorCode BROKERAGE_ITEM_STATE_ERROR2 = ErrorCode("10019", "客户经理未达到回款目标,无法计算提成");
+    public static final ErrorCode BROKERAGE_ITEM_STATE_ERROR2 = ErrorCode("10019", "当月回款目标未达成.");
 
     public static final ErrorCode BROKERAGE_SETTLE_FAILED = ErrorCode("10020", "项目评价失败,请检查项目排期或提成权重。");
 

+ 16 - 0
dao/src/main/java/com/dayou/mapper/PostCultivateMapper.java

@@ -0,0 +1,16 @@
+package com.dayou.mapper;
+
+import com.dayou.entity.PostCultivate;
+import com.dayou.dao.CustomBaseMapper;
+
+/**
+ * <p>
+ * 岗位培育关系 Mapper 接口
+ * </p>
+ *
+ * @author wucl
+ * @since 2023-04-06
+ */
+public interface PostCultivateMapper extends CustomBaseMapper<PostCultivate> {
+
+}

+ 4 - 2
dao/src/main/resources/mapper/BrokeragePostRatioMapper.xml

@@ -26,7 +26,8 @@
             up.user_id,
             up.post_id,
             p.NAME AS postName,
-            bpr.brokerage_ratio AS ratio
+            bpr.brokerage_ratio AS ratio,
+            bpr.brokerage_rule as brokerageRule
         FROM
             user_post up
                 LEFT JOIN brokerage_post_ratio bpr ON bpr.post_id = up.post_id
@@ -48,7 +49,8 @@
             p.id AS postId,
             p.NAME AS postName,
             d.NAME AS departmentName,
-            r.brokerage_ratio
+            r.brokerage_ratio,
+            r.brokerage_rule
         FROM
             post p
                 LEFT JOIN department d ON p.department_id = d.id

+ 4 - 1
dao/src/main/resources/mapper/ItemBrokerageDetailMapper.xml

@@ -34,7 +34,10 @@
             i.name as itemName,
             i.amount,
             s.name as stageName,
-        (case ibd.brokerage_rule when 'LAND_MARKETER_RULE' then '市场人员'  when 'LAND_OTHER_RULE' then '参与人员' end) as userType
+        (case ibd.brokerage_rule when 'LAND_MARKETER_RULE' then '市场人员'
+            when 'LAND_SUPERVISOR_RULE' then '营销主管'
+            when 'LAND_MANAGER_RULE' then '营销经理'
+            when 'LAND_OTHER_RULE' then '参与人员' end) as userType
         FROM
             item_brokerage_detail ibd
                 LEFT JOIN item_brokerage_general ibg ON ibg.id = ibd.general_id

+ 26 - 0
dao/src/main/resources/mapper/PostCultivateMapper.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.dayou.mapper.PostCultivateMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.dayou.entity.PostCultivate">
+        <result column="id" property="id" />
+        <result column="deleted" property="deleted" />
+        <result column="created" property="created" />
+        <result column="modified" property="modified" />
+        <result column="user_id" property="userId" />
+        <result column="user_post_id" property="userPostId" />
+        <result column="parent_user_id" property="parentUserId" />
+        <result column="parent_user_post_id" property="parentUserPostId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id,
+        deleted,
+        created,
+        modified,
+        user_id, user_post_id, parent_user_id, parent_user_post_id
+    </sql>
+
+</mapper>

+ 2 - 0
domain/src/main/java/com/dayou/bo/LeaderRatioBO.java

@@ -24,6 +24,8 @@ public class LeaderRatioBO {
 
     private BigDecimal ratio;
 
+    private String brokerageRule;
+
     @Override
     public boolean equals(Object o) {
         if (this == o) return true;

+ 2 - 0
domain/src/main/java/com/dayou/common/Constants.java

@@ -86,4 +86,6 @@ public interface Constants {
     String CUSTOMER_MANAGER = "客户经理";
 
     String SALESMAN = "客户经理-业务员";
+
+    String SUPERVISOR = "营销主管";
 }

+ 5 - 0
domain/src/main/java/com/dayou/entity/BrokeragePostRatio.java

@@ -42,5 +42,10 @@ public class BrokeragePostRatio extends BaseEntity {
     @TableField(value = "brokerage_ratio", fill = FieldFill.UPDATE)
     private BigDecimal brokerageRatio;
 
+    /**
+     * 岗位提成规则
+     */
+    private String brokerageRule;
+
 
 }

+ 44 - 0
domain/src/main/java/com/dayou/entity/PostCultivate.java

@@ -0,0 +1,44 @@
+package com.dayou.entity;
+import com.dayou.common.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import com.dayou.annotation.ExcelSheet;
+import com.dayou.annotation.ExportCell;
+import com.dayou.annotation.ImportCell;
+/**
+ * <p>
+ * 岗位培育关系
+ * </p>
+ *
+ * @author wucl
+ * @since 2023-04-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ExcelSheet(sheetName = "岗位培育关系")
+public class PostCultivate extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 用户岗位id
+     */
+    private Long userPostId;
+
+    /**
+     * 父级用户id
+     */
+    private Long parentUserId;
+
+    /**
+     * 父级用户岗位id
+     */
+    private Long parentUserPostId;
+
+
+}

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

@@ -71,13 +71,13 @@ public enum GlobalConfigEnum implements CodeMsgEnumInterface<String,CodeMsgEnumI
     }
     public enum Finance implements CodeMsgEnumInterface<String,String>{
 
-        NON_MARKETER_MONTH_BROKERAGE("NON_MARKETER_MONTH_BROKERAGE",null,"土规部非市场人员每月固定预提金额"),
-
-        MARKETER_BROKERAGE_PERCENTAGE("MARKETER_BROKERAGE_PERCENTAGE",null,"土规部客户经理预提比例"),
-
-        PARTICIPANT_BROKERAGE_PERCENTAGE("PARTICIPANT_BROKERAGE_PERCENTAGE",null,"土规部参与项目整体提成比例"),
-
-        MONTH_OF_YEAR("MONTH_OF_YEAR",null,"系统自定义一年月份个数")
+//        NON_MARKETER_MONTH_BROKERAGE("NON_MARKETER_MONTH_BROKERAGE",null,"土规部非市场人员每月固定预提金额"),
+//
+//        MARKETER_BROKERAGE_PERCENTAGE("MARKETER_BROKERAGE_PERCENTAGE",null,"土规部客户经理预提比例"),
+//
+//        PARTICIPANT_BROKERAGE_PERCENTAGE("PARTICIPANT_BROKERAGE_PERCENTAGE",null,"土规部参与项目整体提成比例"),
+//
+//        MONTH_OF_YEAR("MONTH_OF_YEAR",null,"系统自定义一年月份个数")
         ;
 
         private String filed;

+ 33 - 24
service/src/main/java/com/dayou/brokerage/BrokerageCalculateSupport.java

@@ -20,6 +20,9 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.Date;
 import java.util.concurrent.ExecutionException;
+
+import static com.dayou.brokerage.constants.BrokerageMsg.MONTH_OF_YEAR;
+
 /**
  * 类说明:
  *
@@ -42,8 +45,6 @@ public class BrokerageCalculateSupport implements BrokerageCalculateFactory,Brok
     @Qualifier("landNonMarketerBrokerageHandler")
     private LandNonMarketerBrokerageHandler landNonMarketerBrokerageHandler;
 
-    @Autowired
-    private LoadingCache<String,BigDecimal> globalConfigCache;
 
     @Override
     public BrokerageCalculator getCalculator(BrokerageRule rule){
@@ -105,39 +106,47 @@ public class BrokerageCalculateSupport implements BrokerageCalculateFactory,Brok
      * @return
      */
     protected Boolean checkMarketerPredictBrokerage(BrokerageDetailBO brokerageDetailBo){
-        try {
-            @NotNull
-            BigDecimal paymentTarget = brokerageDetailBo.getPaymentTarget();
-            if (paymentTarget.compareTo(BigDecimal.ZERO)!=0){
-                BigDecimal currentPayment = brokerageDetailBo.getCurrentPayment();
-                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(currentPayment,brokerageTarget);
-            }
-        } catch (ExecutionException e) {
-            log.error("获取提成缓存数据失败");
+        @NotNull
+        BigDecimal paymentTarget = brokerageDetailBo.getPaymentTarget();
+        if (paymentTarget.compareTo(BigDecimal.ZERO)!=0){
+            BigDecimal currentPayment = brokerageDetailBo.getCurrentPayment();
+            BigDecimal avgMonthTarget = paymentTarget.divide(MONTH_OF_YEAR, 2, RoundingMode.HALF_UP);
+            int month = DateUtils.getMonth(new Date());
+            //当月应完成回款金额
+            BigDecimal brokerageTarget = avgMonthTarget.multiply(new BigDecimal(month));
+            return brokerageValidator.checkMarketerPredictBrokerage(currentPayment,brokerageTarget);
         }
         return Boolean.FALSE;
     }
 
     /**
+     * 团队月度回款校验
+     * @param teamCurrentYearPayment
+     * @param teamPaymentTarget
+     * @return
+     */
+    protected Boolean checkTeamMonthlyPayment(BigDecimal teamCurrentYearPayment,BigDecimal teamPaymentTarget){
+        if (teamPaymentTarget.compareTo(BigDecimal.ZERO)!=0){
+            BigDecimal avgMonthTarget = teamPaymentTarget.divide(MONTH_OF_YEAR, 2, RoundingMode.HALF_UP);
+            int month = DateUtils.getMonth(new Date());
+            //当月应完成回款金额
+            BigDecimal brokerageTarget = avgMonthTarget.multiply(new BigDecimal(month));
+            return brokerageValidator.checkMarketerPredictBrokerage(teamCurrentYearPayment,brokerageTarget);
+        }
+        return Boolean.FALSE;
+    }
+    /**
      * 市场人员预提校验
      * @param paymentDone
      * @param paymentTarget
      * @return
      */
     public Boolean checkMarketerPredictBrokerage(BigDecimal paymentDone,BigDecimal paymentTarget){
-        try {
-            if (paymentTarget.compareTo(BigDecimal.ZERO)!=0){
-                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(paymentDone,brokerageTarget);
-            }
-        } catch (ExecutionException e) {
-            log.error("获取提成缓存数据失败");
+        if (paymentTarget.compareTo(BigDecimal.ZERO)!=0){
+            BigDecimal avgMonthTarget = paymentTarget.divide(MONTH_OF_YEAR, 2, RoundingMode.HALF_UP);
+            int month = DateUtils.getMonth(new Date());
+            BigDecimal brokerageTarget = avgMonthTarget.multiply(new BigDecimal(month));
+            return brokerageValidator.checkMarketerPredictBrokerage(paymentDone,brokerageTarget);
         }
         return Boolean.FALSE;
     }

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

@@ -29,6 +29,23 @@ public interface MarketerBrokerageCalculator extends BrokerageCalculator {
     Set<ItemBrokerageDetail> predictTeamShareAmount(BrokerageDetailBO bo, Set<LeaderRatioBO> leaderRatioBOSet);
 
     /**
+     * 营销主管提成计算
+     * @param bo
+     * @param leaderRatioBO 岗位抽成率对象
+     * @param ratio 项目提成系数
+     * @return
+     */
+    BigDecimal supervisorAmount(BrokerageDetailBO bo,LeaderRatioBO leaderRatioBO,BigDecimal ratio);
+
+    /**
+     * 市场部部门经理提成计算
+     * @param bo
+     * @param leaderRatioBO 岗位抽成率对象
+     * @return
+     */
+    BigDecimal managerAmount(BrokerageDetailBO bo,LeaderRatioBO leaderRatioBO);
+
+    /**
      * 市场人员实际提成金额
      */
     BigDecimal actualAmount(BigDecimal predictAmount);
@@ -42,4 +59,6 @@ public interface MarketerBrokerageCalculator extends BrokerageCalculator {
 
 
 
+
+
 }

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

@@ -41,9 +41,6 @@ public class BrokerageConfig {
     private BrokerageInterceptor brokerageInterceptor;
 
     @Autowired
-    private IGlobalConfigService globalConfigService;
-
-    @Autowired
     private IBrokerageBaseAmountService brokerageBaseAmountService;
 
     @Autowired
@@ -98,17 +95,4 @@ public class BrokerageConfig {
                 });
         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;
-    }
 }

+ 53 - 0
service/src/main/java/com/dayou/brokerage/constants/BrokerageMsg.java

@@ -1,5 +1,7 @@
 package com.dayou.brokerage.constants;
 
+import java.math.BigDecimal;
+
 /**
  * 类说明:
  *
@@ -14,4 +16,55 @@ public class BrokerageMsg {
     public static final String NON_MARKETER_BASE_SEQUENCE_REMARK = "非市场人员默认提成,此提成与项目暂不挂钩.若有项目结算将与固定提成抵扣.";
 
     public static final String BROKERAGE_SEQUENCE_EMBODY = "[year-month]薪资";
+
+    /**
+     * 客户经理预提比例
+     */
+    public static final BigDecimal MARKETER_AHEAD_SCALE = new BigDecimal("0.4");
+
+
+    /**
+     * 营销主管提成系数
+     */
+    public static final BigDecimal SUPERVISOR_BROKERAGE_SCALE = new BigDecimal("0.5");
+
+    /**
+     * 系统自定义一年月份数
+     */
+    public static final BigDecimal MONTH_OF_YEAR = BigDecimal.TEN;
+
+    /**
+     * 土规部参与项目整体提成比例
+     */
+    public static final BigDecimal PARTICIPANT_BROKERAGE_PERCENTAGE = new BigDecimal("0.5");
+
+    /**
+     * 土土规部非市场人员每月固定预提金额
+     */
+    public static final BigDecimal NON_MARKETER_MONTH_BROKERAGE = new BigDecimal("1000");
+
+    /**
+     * 营销主管培育人员数小于4人
+     */
+    public static final BigDecimal CULTIVATE_LOW_4 = new BigDecimal("0.015");
+
+    /**
+     * 营销主管培育人员数4到6人
+     */
+    public static final BigDecimal CULTIVATE_4_6 = new BigDecimal("0.0165");
+
+    /**
+     * 营销主管培育人员数大于6人
+     */
+    public static final BigDecimal CULTIVATE_HIGH_6 = new BigDecimal("0.018");
+
+    /**
+     * 市场部部门经理浮动提成系数
+     */
+    public static final BigDecimal MANAGER_FLOAT_RATIO_2 = new BigDecimal("0.2");
+
+    /**
+     * 市场部部门经理浮动提成系数
+     */
+    public static final BigDecimal MANAGER_FLOAT_RATIO_8 = new BigDecimal("0.8");
 }

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

@@ -1,5 +1,10 @@
 package com.dayou.brokerage.constants;
 
+import com.google.common.collect.Sets;
+
+import java.util.List;
+import java.util.Set;
+
 /**
  * 类说明:
  *
@@ -10,6 +15,9 @@ package com.dayou.brokerage.constants;
 public enum BrokerageRule {
 
     LAND_MARKETER_RULE("土地规划部市场人员规则","LAND_MARKETER_RULE"),
+    LAND_SUPERVISOR_RULE("土地规划部营销主管规则","LAND_SUPERVISOR_RULE" ),
+
+    LAND_MANAGER_RULE("土地规划部营销经理规则","LAND_MANAGER_RULE" ),
     LAND_OTHER_RULE("土地规划部参与人员规则","LAND_OTHER_RULE"),
     ;
 
@@ -17,6 +25,7 @@ public enum BrokerageRule {
 
     private String code;
 
+
     BrokerageRule(String name, String code) {
         this.name = name;
         this.code = code;
@@ -29,4 +38,8 @@ public enum BrokerageRule {
     public String getCode() {
         return code;
     }
+
+    public static BrokerageRule brokerageRule(String brokerageRule){
+        return BrokerageRule.valueOf(brokerageRule);
+    }
 }

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

@@ -8,20 +8,29 @@ 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.entity.UserTarget;
 import com.dayou.enums.GlobalConfigEnum;
 import com.dayou.exception.BusinessException;
+import com.dayou.service.IMarketStatService;
+import com.dayou.service.IPostCultivateService;
+import com.dayou.service.IUserService;
+import com.dayou.service.IUserTargetService;
 import com.google.common.cache.LoadingCache;
 import com.google.common.collect.Sets;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 
+import static com.dayou.brokerage.constants.BrokerageMsg.*;
+import static com.dayou.brokerage.constants.BrokerageRule.LAND_SUPERVISOR_RULE;
 import static com.dayou.common.Constants.HUNDRED;
+import static com.dayou.common.Constants.SUPERVISOR;
 
 /**
  * 类说明:土地规划部市场人员提成计算处理器
@@ -39,7 +48,16 @@ public class LandMarketerBrokerageHandler extends BrokerageCalculateSupport impl
     private LoadingCache<String,BigDecimal> marketerRatioCache;
 
     @Autowired
-    private LoadingCache<String,BigDecimal> globalConfigCache;
+    private IUserTargetService userTargetService;
+
+    @Autowired
+    private IMarketStatService marketStatService;
+
+    @Autowired
+    private IPostCultivateService postCultivateService;
+    
+    @Autowired
+    private IUserService userService;
 
     @Override
     public BrokerageDetailBO predictPersonalAmount(BrokerageDetailBO bo) {
@@ -70,14 +88,8 @@ public class LandMarketerBrokerageHandler extends BrokerageCalculateSupport impl
 
     @Override
     public BigDecimal aheadAmount(BigDecimal predictAmount){
-        try {
-            BigDecimal aheadAmount = predictAmount.multiply(globalConfigCache.get(GlobalConfigEnum.Finance.MARKETER_BROKERAGE_PERCENTAGE.getCode()).divide(HUNDRED));
-            return aheadAmount;
-        } catch (ExecutionException e) {
-            log.error("获取提成缓存数据失败");
-            return BigDecimal.ZERO;
-        }
-
+        BigDecimal aheadAmount = predictAmount.multiply(MARKETER_AHEAD_SCALE);
+        return aheadAmount;
     }
 
     @Override
@@ -90,14 +102,21 @@ public class LandMarketerBrokerageHandler extends BrokerageCalculateSupport impl
                 checkItemBrokerageStatus(bo);
                 itemBrokerageDetails = leaderRatioBOSet.stream().map(x -> {
                     ItemBrokerageDetail itemBrokerageDetail = new ItemBrokerageDetail();
-                    itemBrokerageDetail.setGeneralId(bo.getGeneralId());
-                    itemBrokerageDetail.setPredictAmount(bo.getAmount().multiply(ratio.divide(HUNDRED)).multiply(x.getRatio().divide(HUNDRED)));
                     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());
+                    itemBrokerageDetail.setBrokerageRule(x.getBrokerageRule());
+                    BrokerageRule brokerageRuleEnum = BrokerageRule.brokerageRule(x.getBrokerageRule());
+                    switch (brokerageRuleEnum){
+                        case LAND_SUPERVISOR_RULE:
+                            itemBrokerageDetail.setPredictAmount(supervisorAmount(bo, x, ratio));
+                            break;
+                        case LAND_MANAGER_RULE:
+                            itemBrokerageDetail.setPredictAmount(managerAmount(bo, x));
+                            break;
+                    }
+                    itemBrokerageDetail.setActualAmount(actualAmount(itemBrokerageDetail.getPredictAmount()));
                     return itemBrokerageDetail;
                 }).collect(Collectors.toSet());
 
@@ -111,6 +130,61 @@ public class LandMarketerBrokerageHandler extends BrokerageCalculateSupport impl
     }
 
     @Override
+    public BigDecimal supervisorAmount(BrokerageDetailBO bo, LeaderRatioBO leaderRatioBO,BigDecimal ratio) {
+        //营销主管的团队提成规则 : (合同额(团队签的)*项目类型提成系数 * 40% *0.5 )+ [合同额(团队签的)*项目类型提成系数*40%*0.5 * 实发系数(取决于团队回款目标是否完成)]
+        BigDecimal amount = bo.getAmount()
+                .multiply(ratio.divide(HUNDRED))
+                .multiply(leaderRatioBO.getRatio().divide(HUNDRED))
+                .multiply(SUPERVISOR_BROKERAGE_SCALE);
+
+        Long supervisorId = leaderRatioBO.getUserId();
+        //团队回款目标
+        BigDecimal teamPaymentTarget = BigDecimal.valueOf(userTargetService.getTeamTarget(supervisorId).getPaymentTarget());
+        BigDecimal teamCurrentYearPayment = marketStatService.currentYearTeamPayment(supervisorId);
+        if (checkTeamMonthlyPayment(teamCurrentYearPayment, teamPaymentTarget)){
+            return amount.multiply(BigDecimal.valueOf(2L));
+        }
+        return amount;
+    }
+
+    @Override
+    public BigDecimal managerAmount(BrokerageDetailBO bo, LeaderRatioBO leaderRatioBO) {
+        //部门经理的团队提成规则 :部门产值*3%+区域产值1.5%  +  (部门产值*浮动提成比例*0.2)+(部门产值*浮动提成比例*0.8*实发比例) 实发比例(取决于团队回款目标是否完成)
+        //部门产值
+        BigDecimal departmentAmount = bo.getAmount()
+                .multiply(leaderRatioBO.getRatio().divide(HUNDRED))
+                .multiply(new BigDecimal("2"));
+        BigDecimal areaAmount = BigDecimal.ZERO;
+        //开单人员的营销主管集合
+        Set<LeaderRatioBO> leaders = userService.getLeaderRatioBO(bo.getUserId()).stream().filter(x->x.getPostName().equals(SUPERVISOR)).collect(Collectors.toSet());
+
+        if (!CollectionUtils.isEmpty(leaders)){
+            //区域产值
+            areaAmount = bo.getAmount().multiply(leaderRatioBO.getRatio().divide(HUNDRED));
+        }
+
+        // 获取发展的营销主管个数
+        Integer cultivateNum = postCultivateService.countCultivate(SUPERVISOR, leaderRatioBO.getUserId());
+        BigDecimal cultivateRate ;
+        if (cultivateNum<4){
+            cultivateRate = CULTIVATE_LOW_4;
+        }else if(cultivateNum>=4 && cultivateNum<=6){
+            cultivateRate = CULTIVATE_4_6;
+        }else {
+            cultivateRate = CULTIVATE_HIGH_6;
+        }
+        BigDecimal floatAmount = bo.getAmount().multiply(cultivateRate).multiply(MANAGER_FLOAT_RATIO_2);
+
+        //团队回款目标
+        BigDecimal teamPaymentTarget = BigDecimal.valueOf(userTargetService.getTeamTarget(leaderRatioBO.getUserId()).getPaymentTarget());
+        BigDecimal teamCurrentYearPayment = marketStatService.currentYearTeamPayment(leaderRatioBO.getUserId());
+        if (checkTeamMonthlyPayment(teamCurrentYearPayment, teamPaymentTarget)){
+            floatAmount = floatAmount.add(bo.getAmount().multiply(cultivateRate).multiply(MANAGER_FLOAT_RATIO_8));
+        }
+        return departmentAmount.add(areaAmount).add(floatAmount);
+    }
+
+    @Override
     public BigDecimal actualAmount(BigDecimal predictAmount) {
         //客户经理的提成不存在考核,即 预计提成金额 == 实际提成金额
         return predictAmount;

+ 19 - 26
service/src/main/java/com/dayou/brokerage/handler/LandNonMarketerBrokerageHandler.java

@@ -24,6 +24,8 @@ import java.util.Map;
 import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 
+import static com.dayou.brokerage.constants.BrokerageMsg.NON_MARKETER_MONTH_BROKERAGE;
+import static com.dayou.brokerage.constants.BrokerageMsg.PARTICIPANT_BROKERAGE_PERCENTAGE;
 import static com.dayou.common.Constants.HUNDRED;
 
 /**
@@ -42,40 +44,31 @@ public class LandNonMarketerBrokerageHandler extends BrokerageCalculateSupport i
     private IItemBrokerageDetailService brokerageDetailService;
 
     @Autowired
-    private LoadingCache<String,BigDecimal> globalConfigCache;
-
-    @Autowired
     private LoadingCache<Long,BigDecimal> baseAmountsCache;
     @Override
     public ItemBrokerageDetail predictAmount(BrokerageDetailBO brokerageDetailBO) {
-        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())).divide(HUNDRED)
-                        //阶段权重
-                        .multiply(brokerageDetailBO.getStageWeight()).divide(HUNDRED)
-                        //参与人权重
-                        .multiply(brokerageDetailBO.getParticipantWeight()).divide(HUNDRED);
-                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;
-        }
+        checkItemBrokerageStatus(brokerageDetailBO);
+        ItemBrokerageDetail itemBrokerageDetail = new ItemBrokerageDetail();
+            //合同金额
+        BigDecimal predictAmount = brokerageDetailBO.getAmount()
+                //参与项目提成总比例
+                .multiply(PARTICIPANT_BROKERAGE_PERCENTAGE)
+                //阶段权重
+                .multiply(brokerageDetailBO.getStageWeight()).divide(HUNDRED)
+                //参与人权重
+                .multiply(brokerageDetailBO.getParticipantWeight()).divide(HUNDRED);
+        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(Long userId){
         try {
-            BigDecimal baseAheadAmount = baseAmountsCache.get(userId)==null?
-                    globalConfigCache.getIfPresent(GlobalConfigEnum.Finance.NON_MARKETER_MONTH_BROKERAGE.getCode()):baseAmountsCache.get(userId);
+            BigDecimal baseAheadAmount = baseAmountsCache.get(userId)==null
+                    ?NON_MARKETER_MONTH_BROKERAGE
+                    :baseAmountsCache.get(userId);
             return baseAheadAmount;
         } catch (ExecutionException e) {
             log.error("获取提成缓存数据失败");

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

@@ -26,7 +26,7 @@ import java.math.BigDecimal;
 @Slf4j
 public class BrokerageValidator {
 
-    //校验客户经理对此单是否可以预提
+    //校验当月回款是否完成
     public Boolean checkMarketerPredictBrokerage(BigDecimal brokerageCurrent, BigDecimal brokerageTarget){
         if (brokerageCurrent.compareTo(brokerageTarget)== -1){
             log.info(ErrorCode.BROKERAGE_ITEM_STATE_ERROR2.getErrorMsg());

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

@@ -140,7 +140,6 @@ public class AppBootProcessor implements BeanPostProcessor, CommandLineRunner {
     private void loadBrokerageData(){
         brokerageMarketerRatioService.cacheMarketerRatio();
         brokerageBaseAmountService.cacheBaseAmount();
-        globalConfigService.cacheBrokerageGlobalConfigData();
     }
 
 }

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

@@ -34,8 +34,6 @@ public interface IGlobalConfigService extends IService<GlobalConfig> {
 
         BigDecimal getMathValue(String key, String field);
 
-        void cacheBrokerageGlobalConfigData();
-
         BigDecimal getValueByFiled(String filed);
 
         BrokerageConfigVO getConfigByKey(String key);

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

@@ -19,5 +19,5 @@ public interface IMarketStatService {
     BigDecimal currentMonthPayment(Long userId);
 
     BigDecimal currentYearPayment(Long userId);
-    BigDecimal currentYearTeamPayment(Set<Long> userIds);
+    BigDecimal currentYearTeamPayment(Long userId);
 }

+ 25 - 0
service/src/main/java/com/dayou/service/IPostCultivateService.java

@@ -0,0 +1,25 @@
+package com.dayou.service;
+import com.dayou.entity.PostCultivate;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.web.multipart.MultipartFile;
+/**
+ * <p>
+ * 岗位培育关系 服务类
+ * </p>
+ *
+ * @author wucl
+ * @since 2023-04-06
+ */
+public interface IPostCultivateService extends IService<PostCultivate> {
+
+
+        /**
+         * 计算某个用户培育某岗位人数
+         * @param postName
+         * @return
+         */
+        Integer countCultivate(String postName,Long userId);
+}

+ 35 - 36
service/src/main/java/com/dayou/service/impl/GlobalConfigServiceImpl.java

@@ -19,6 +19,7 @@ import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.util.CollectionUtils;
 
 
 import java.math.BigDecimal;
@@ -53,8 +54,6 @@ 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){
@@ -92,7 +91,6 @@ public class GlobalConfigServiceImpl extends ServiceImpl<GlobalConfigMapper, Glo
             }
         }
         boolean b = globalConfigMapper.updateBatchByKey(Lists.newArrayList(globalConfig));
-        this.cacheBrokerageGlobalConfigData();
         return  b;
     }
 
@@ -137,28 +135,30 @@ public class GlobalConfigServiceImpl extends ServiceImpl<GlobalConfigMapper, Glo
             }
             list.addAll(fieldList);
         }
-        baseMapper.insertOrUpdateBatch(list);
+        if (!CollectionUtils.isEmpty(list)){
+            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);
-    }
+//    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) {
@@ -175,24 +175,23 @@ public class GlobalConfigServiceImpl extends ServiceImpl<GlobalConfigMapper, Glo
         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);
-            }
+//            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;
     }

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

@@ -123,6 +123,7 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
         bo.setCurrentPayment(currentYearPayment);
         bo.setPaymentTarget(paymentTarget);
         Set<LeaderRatioBO> leaderRatioBO = userService.getLeaderRatioBO(userId).stream().filter(x->x.getRatio()!=null).collect(Collectors.toSet());
+        //创建下单人(客户经理)提成记录
         bo = calculator.predictPersonalAmount(bo);
         //创建下单人领导提成记录
         Set<ItemBrokerageDetail> brokerageLeaderDetailBOS = calculator.predictTeamShareAmount(bo, leaderRatioBO);

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

@@ -138,7 +138,10 @@ public class ItemBrokerageSequenceServiceImpl extends ServiceImpl<ItemBrokerageS
                         x.setAdvanceAmount(x.getAheadAmount());
                         toUpdateItemBrokerageDetails.add(x);
                         return sequenceDetail;
-                    }else if (general.getMarketerStatus().equals(BrokerageState.NOT_SETTLE.getCode()) && x.getBrokerageRule().equals(BrokerageRule.LAND_MARKETER_RULE.getCode())) {
+                    }else if (general.getMarketerStatus().equals(BrokerageState.NOT_SETTLE.getCode())
+                            && (x.getBrokerageRule().equals(BrokerageRule.LAND_MARKETER_RULE.getCode())
+                            || x.getBrokerageRule().equals(BrokerageRule.LAND_MANAGER_RULE.getCode())
+                            || x.getBrokerageRule().equals(BrokerageRule.LAND_SUPERVISOR_RULE.getCode()))) {
                         //减去已预提金额
                         BigDecimal actualAmount = x.getActualAmount();
                         if (general.getMarketerAdvanceBrokerageDone()) {

+ 7 - 2
service/src/main/java/com/dayou/service/impl/MarketStatServiceImpl.java

@@ -3,6 +3,7 @@ package com.dayou.service.impl;
 import com.dayou.dto.MarketStatDTO;
 import com.dayou.mapper.MarketStatMapper;
 import com.dayou.service.IMarketStatService;
+import com.dayou.service.IUserService;
 import com.dayou.utils.DateUtils;
 import com.dayou.vo.MarketStatVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -26,6 +27,9 @@ public class MarketStatServiceImpl implements IMarketStatService {
     @Autowired
     private MarketStatMapper marketStatMapper;
 
+    @Autowired
+    private IUserService userService;
+
     @Override
     public MarketStatVO marketStat(MarketStatDTO dto) {
 
@@ -52,8 +56,9 @@ public class MarketStatServiceImpl implements IMarketStatService {
     }
 
     @Override
-    public BigDecimal currentYearTeamPayment(Set<Long> userIds) {
-        BigDecimal currentYearTeamPayment = marketStatMapper.currentYearTeamPayment(userIds);
+    public BigDecimal currentYearTeamPayment(Long userId) {
+        Set<Long> juniorUserId = userService.getJuniorUserId(userId);
+        BigDecimal currentYearTeamPayment = marketStatMapper.currentYearTeamPayment(juniorUserId);
         return currentYearTeamPayment;
     }
 

+ 55 - 0
service/src/main/java/com/dayou/service/impl/PostCultivateServiceImpl.java

@@ -0,0 +1,55 @@
+package com.dayou.service.impl;
+
+import com.dayou.entity.Post;
+import com.dayou.entity.PostCultivate;
+import com.dayou.mapper.PostCultivateMapper;
+import com.dayou.service.IPostCultivateService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.dayou.service.IPostService;
+import com.dayou.utils.LoginContext;
+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.util.List;
+import java.util.ArrayList;
+import java.util.Optional;
+
+import org.springframework.transaction.annotation.Transactional;
+import com.dayou.enums.BatchTaskTypeEnum;
+
+import static com.dayou.common.Constants.SUPERVISOR;
+
+/**
+ * <p>
+ * 岗位培育关系 服务实现类
+ * </p>
+ *
+ * @author wucl
+ * @since 2023-04-06
+ */
+@Service
+public class PostCultivateServiceImpl extends ServiceImpl<PostCultivateMapper, PostCultivate> implements IPostCultivateService {
+
+
+    @Autowired
+    private IPostService postService;
+
+    @Override
+    public Integer countCultivate(String postName,Long userId) {
+        Post post = postService.getOne(new LambdaQueryWrapper<Post>().eq(Post::getName, postName));
+        return  this.count(new LambdaQueryWrapper<PostCultivate>().eq(PostCultivate::getParentUserId, userId).eq(PostCultivate::getUserPostId, post.getId()));
+    }
+}

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

@@ -405,7 +405,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
     /**
      * 获取登录人下属员工集合
      * @param userId
-     * @return
+     * @return培育
      */
     @Override
     public Set<Long> getJuniorUserId(Long userId) {