浏览代码

项目提成业务代码

wucl 2 年之前
父节点
当前提交
eba13b751e
共有 33 个文件被更改,包括 770 次插入80 次删除
  1. 83 0
      biz-base/src/main/java/com/dayou/controller/BrokerageBaseAmountController.java
  2. 83 0
      biz-base/src/main/java/com/dayou/controller/BrokeragePostRatioController.java
  3. 14 4
      biz-base/src/test/java/BrokerageTest.java
  4. 16 0
      dao/src/main/java/com/dayou/mapper/BrokerageBaseAmountMapper.java
  5. 21 0
      dao/src/main/java/com/dayou/mapper/BrokeragePostRatioMapper.java
  6. 2 0
      dao/src/main/java/com/dayou/mapper/UserMapper.java
  7. 24 0
      dao/src/main/resources/mapper/BrokerageBaseAmountMapper.xml
  8. 45 0
      dao/src/main/resources/mapper/BrokeragePostRatioMapper.xml
  9. 4 0
      dao/src/main/resources/mapper/UserMapper.xml
  10. 39 0
      domain/src/main/java/com/dayou/bo/LeaderRatioBO.java
  11. 3 1
      domain/src/main/java/com/dayou/common/Constants.java
  12. 1 0
      domain/src/main/java/com/dayou/dto/SimplePostModel.java
  13. 37 0
      domain/src/main/java/com/dayou/entity/BrokerageBaseAmount.java
  14. 37 0
      domain/src/main/java/com/dayou/entity/BrokeragePostRatio.java
  15. 1 0
      domain/src/main/java/com/dayou/entity/ItemBrokerageDetail.java
  16. 1 1
      domain/src/main/java/com/dayou/enums/GlobalConfigEnum.java
  17. 3 0
      service/src/main/java/com/dayou/bo/BrokerageDetailBO.java
  18. 5 4
      service/src/main/java/com/dayou/brokerage/BrokerageCalculateSupport.java
  19. 1 1
      service/src/main/java/com/dayou/brokerage/BrokerageCalculator.java
  20. 4 1
      service/src/main/java/com/dayou/brokerage/MarketerBrokerageCalculator.java
  21. 3 3
      service/src/main/java/com/dayou/brokerage/config/BrokerageConfig.java
  22. 12 16
      service/src/main/java/com/dayou/brokerage/config/LandBrokerageDataConfiguration.java
  23. 35 10
      service/src/main/java/com/dayou/brokerage/handler/LandMarketerBrokerageHandler.java
  24. 3 7
      service/src/main/java/com/dayou/brokerage/handler/LandNonMarketerBrokerageHandler.java
  25. 28 0
      service/src/main/java/com/dayou/service/IBrokerageBaseAmountService.java
  26. 28 0
      service/src/main/java/com/dayou/service/IBrokeragePostRatioService.java
  27. 4 0
      service/src/main/java/com/dayou/service/IGlobalConfigService.java
  28. 7 0
      service/src/main/java/com/dayou/service/IUserService.java
  29. 66 0
      service/src/main/java/com/dayou/service/impl/BrokerageBaseAmountServiceImpl.java
  30. 66 0
      service/src/main/java/com/dayou/service/impl/BrokeragePostRatioServiceImpl.java
  31. 18 14
      service/src/main/java/com/dayou/service/impl/GlobalConfigServiceImpl.java
  32. 37 14
      service/src/main/java/com/dayou/service/impl/ItemBrokerageGeneralServiceImpl.java
  33. 39 4
      service/src/main/java/com/dayou/service/impl/UserServiceImpl.java

+ 83 - 0
biz-base/src/main/java/com/dayou/controller/BrokerageBaseAmountController.java

@@ -0,0 +1,83 @@
+package com.dayou.controller;
+
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.web.bind.annotation.RestController;
+import com.dayou.controller.BaseController;
+import com.dayou.service.IBrokerageBaseAmountService;
+import com.dayou.entity.BrokerageBaseAmount;
+import com.dayou.common.RestResponse;
+import org.springframework.web.bind.annotation.*;
+import com.dayou.utils.ConvertUtil;
+import com.dayou.utils.HttpKit;
+import com.dayou.exception.ErrorCode;
+import java.util.Date;
+import java.util.List;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.http.MediaType;
+import org.springframework.web.multipart.MultipartFile;
+/**
+ * 自定义提成基数
+ *
+ * @author wucl
+ * @since 2023-03-10
+ */
+@RestController
+@RequestMapping("brokerageBaseAmount")
+@Slf4j
+public class BrokerageBaseAmountController extends BaseController {
+    @Autowired
+    private IBrokerageBaseAmountService brokerageBaseAmountService;
+
+    /**
+    * 自定义提成基数列表
+    */
+    @GetMapping("")
+    public RestResponse<Page<BrokerageBaseAmount>> page(BrokerageBaseAmount brokerageBaseAmount, Page page){
+        Page<BrokerageBaseAmount> pages=brokerageBaseAmountService.selectPage(page,brokerageBaseAmount);
+        return RestResponse.data(pages);
+    }
+
+    /**
+     * 自定义提成基数详情
+     */
+    @GetMapping("/{id}")
+    public RestResponse<BrokerageBaseAmount> detail(@PathVariable Long id){
+        BrokerageBaseAmount xBrokerageBaseAmount =brokerageBaseAmountService.detail(id);
+        return RestResponse.data(xBrokerageBaseAmount);
+     }
+
+    /**
+     * 自定义提成基数新增
+     */
+    @PostMapping("")
+    public RestResponse<Boolean> save(@RequestBody BrokerageBaseAmount brokerageBaseAmount) {
+        Boolean ret = brokerageBaseAmountService.add(brokerageBaseAmount);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 自定义提成基数更新
+     */
+    @PutMapping("")
+    public RestResponse<Boolean> update(@RequestBody BrokerageBaseAmount brokerageBaseAmount) {
+        Boolean ret = brokerageBaseAmountService.update(brokerageBaseAmount);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 自定义提成基数删除
+     */
+    @DeleteMapping("/{id}")
+    public RestResponse<Boolean> delete(@PathVariable Long id) {
+        Boolean ret = brokerageBaseAmountService.delete(id);
+        return RestResponse.data(ret);
+    }
+
+
+}
+

+ 83 - 0
biz-base/src/main/java/com/dayou/controller/BrokeragePostRatioController.java

@@ -0,0 +1,83 @@
+package com.dayou.controller;
+
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.web.bind.annotation.RestController;
+import com.dayou.controller.BaseController;
+import com.dayou.service.IBrokeragePostRatioService;
+import com.dayou.entity.BrokeragePostRatio;
+import com.dayou.common.RestResponse;
+import org.springframework.web.bind.annotation.*;
+import com.dayou.utils.ConvertUtil;
+import com.dayou.utils.HttpKit;
+import com.dayou.exception.ErrorCode;
+import java.util.Date;
+import java.util.List;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import org.springframework.http.MediaType;
+import org.springframework.web.multipart.MultipartFile;
+/**
+ * 领导岗位抽成率
+ *
+ * @author wucl
+ * @since 2023-03-10
+ */
+@RestController
+@RequestMapping("brokeragePostRatio")
+@Slf4j
+public class BrokeragePostRatioController extends BaseController {
+    @Autowired
+    private IBrokeragePostRatioService brokeragePostRatioService;
+
+    /**
+    * 领导岗位抽成率列表
+    */
+    @GetMapping("")
+    public RestResponse<Page<BrokeragePostRatio>> page(BrokeragePostRatio brokeragePostRatio, Page page){
+        Page<BrokeragePostRatio> pages=brokeragePostRatioService.selectPage(page,brokeragePostRatio);
+        return RestResponse.data(pages);
+    }
+
+    /**
+     * 领导岗位抽成率详情
+     */
+    @GetMapping("/{id}")
+    public RestResponse<BrokeragePostRatio> detail(@PathVariable Long id){
+        BrokeragePostRatio xBrokeragePostRatio =brokeragePostRatioService.detail(id);
+        return RestResponse.data(xBrokeragePostRatio);
+     }
+
+    /**
+     * 领导岗位抽成率新增
+     */
+    @PostMapping("")
+    public RestResponse<Boolean> save(@RequestBody BrokeragePostRatio brokeragePostRatio) {
+        Boolean ret = brokeragePostRatioService.add(brokeragePostRatio);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 领导岗位抽成率更新
+     */
+    @PutMapping("")
+    public RestResponse<Boolean> update(@RequestBody BrokeragePostRatio brokeragePostRatio) {
+        Boolean ret = brokeragePostRatioService.update(brokeragePostRatio);
+        return RestResponse.data(ret);
+    }
+
+    /**
+     * 领导岗位抽成率删除
+     */
+    @DeleteMapping("/{id}")
+    public RestResponse<Boolean> delete(@PathVariable Long id) {
+        Boolean ret = brokeragePostRatioService.delete(id);
+        return RestResponse.data(ret);
+    }
+
+
+}
+

+ 14 - 4
biz-base/src/test/java/BrokerageTest.java

@@ -2,6 +2,7 @@ import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.dayou.BaseApplication;
 import com.dayou.BaseApplication;
+import com.dayou.bo.LeaderRatioBO;
 import com.dayou.brokerage.config.LandBrokerageDataConfiguration;
 import com.dayou.brokerage.config.LandBrokerageDataConfiguration;
 import com.dayou.brokerage.validator.BrokerageValidator;
 import com.dayou.brokerage.validator.BrokerageValidator;
 import com.dayou.common.BaseEntity;
 import com.dayou.common.BaseEntity;
@@ -9,10 +10,8 @@ import com.dayou.dto.ItemDTO;
 import com.dayou.entity.GlobalConfig;
 import com.dayou.entity.GlobalConfig;
 import com.dayou.entity.ItemBrokerageDetail;
 import com.dayou.entity.ItemBrokerageDetail;
 import com.dayou.entity.ItemBrokerageGeneral;
 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 com.dayou.service.*;
+import com.google.common.collect.Sets;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.checkerframework.checker.units.qual.A;
 import org.checkerframework.checker.units.qual.A;
 import org.junit.Test;
 import org.junit.Test;
@@ -24,6 +23,8 @@ import org.springframework.context.ApplicationContext;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.util.HashSet;
+import java.util.Set;
 
 
 /**
 /**
  * 类说明:
  * 类说明:
@@ -55,6 +56,9 @@ public class BrokerageTest {
     @Autowired
     @Autowired
     private LandBrokerageDataConfiguration brokerageMarketerRatioSet;
     private LandBrokerageDataConfiguration brokerageMarketerRatioSet;
 
 
+    @Autowired
+    private IUserService userService;
+
     @Test
     @Test
     public void testBrokerageValidator(){
     public void testBrokerageValidator(){
         DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
         DefaultListableBeanFactory defaultListableBeanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
@@ -100,4 +104,10 @@ public class BrokerageTest {
                 .getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, 365));
                 .getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, 365));
         System.out.println(general.toString());
         System.out.println(general.toString());
     }
     }
+
+    @Test
+    public void testLeaderPost(){
+        Set<LeaderRatioBO> leaderRatioBO = userService.getLeaderRatioBO(129L);
+        System.out.println(leaderRatioBO);
+    }
 }
 }

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

@@ -0,0 +1,16 @@
+package com.dayou.mapper;
+
+import com.dayou.entity.BrokerageBaseAmount;
+import com.dayou.dao.CustomBaseMapper;
+
+/**
+ * <p>
+ * 自定义提成基数 Mapper 接口
+ * </p>
+ *
+ * @author wucl
+ * @since 2023-03-10
+ */
+public interface BrokerageBaseAmountMapper extends CustomBaseMapper<BrokerageBaseAmount> {
+
+}

+ 21 - 0
dao/src/main/java/com/dayou/mapper/BrokeragePostRatioMapper.java

@@ -0,0 +1,21 @@
+package com.dayou.mapper;
+
+import com.dayou.bo.LeaderRatioBO;
+import com.dayou.entity.BrokeragePostRatio;
+import com.dayou.dao.CustomBaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Set;
+
+/**
+ * <p>
+ * 领导岗位抽成率 Mapper 接口
+ * </p>
+ *
+ * @author wucl
+ * @since 2023-03-10
+ */
+public interface BrokeragePostRatioMapper extends CustomBaseMapper<BrokeragePostRatio> {
+
+    Set<LeaderRatioBO> getLeadersRatio(@Param("parentPostIds") Set<Long> parentPostIds,@Param("userId") Long userId);
+}

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

@@ -21,4 +21,6 @@ public interface UserMapper extends CustomBaseMapper<User> {
     Page<UserVO> xPage(Page page, @Param("userVO") UserVO userVO);
     Page<UserVO> xPage(Page page, @Param("userVO") UserVO userVO);
 
 
     UserVO detail(@Param("id") Long id);
     UserVO detail(@Param("id") Long id);
+
+    Long getDepartmentIdByUserId(@Param("userId") Long userId);
 }
 }

+ 24 - 0
dao/src/main/resources/mapper/BrokerageBaseAmountMapper.xml

@@ -0,0 +1,24 @@
+<?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.BrokerageBaseAmountMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.dayou.entity.BrokerageBaseAmount">
+        <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="base_amount" property="baseAmount" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id,
+        deleted,
+        created,
+        modified,
+        user_id, base_amount
+    </sql>
+
+</mapper>

+ 45 - 0
dao/src/main/resources/mapper/BrokeragePostRatioMapper.xml

@@ -0,0 +1,45 @@
+<?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.BrokeragePostRatioMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.dayou.entity.BrokeragePostRatio">
+        <result column="id" property="id" />
+        <result column="deleted" property="deleted" />
+        <result column="created" property="created" />
+        <result column="modified" property="modified" />
+        <result column="post_id" property="postId" />
+        <result column="brokerage_ratio" property="brokerageRatio" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id,
+        deleted,
+        created,
+        modified,
+        post_id, brokerage_ratio
+    </sql>
+
+    <select id="getLeadersRatio" parameterType="java.util.Set" resultType="com.dayou.bo.LeaderRatioBO">
+        SELECT
+            up.user_id,
+            up.post_id,
+            p.NAME AS postName,
+            bpr.brokerage_ratio AS ratio
+        FROM
+            user_post up
+                LEFT JOIN brokerage_post_ratio bpr ON bpr.post_id = up.post_id
+                LEFT JOIN post p ON p.id = up.post_id
+        WHERE
+            up.deleted = 0
+          AND bpr.deleted = 0
+          AND p.deleted = 0
+          and up.user_id != #{userId}
+            and up.post_id in
+         <foreach collection="parentPostIds" index="index" item="item" open="(" close=")" separator=",">
+                #{item}
+         </foreach>
+    </select>
+
+</mapper>

+ 4 - 0
dao/src/main/resources/mapper/UserMapper.xml

@@ -99,4 +99,8 @@
           AND d.deleted =0
           AND d.deleted =0
         AND up.deleted = 0
         AND up.deleted = 0
     </select>
     </select>
+
+    <select id="getDepartmentIdByUserId" parameterType="java.lang.Long" resultType="java.lang.Long">
+        select d.id from department d
+    </select>
 </mapper>
 </mapper>

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

@@ -0,0 +1,39 @@
+package com.dayou.bo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Objects;
+import java.util.Set;
+
+/**
+ * 类说明:
+ *
+ * @author: wucl
+ * @since: 2023/3/10
+ * created with IntelliJ IDEA.
+ */
+@Data
+public class LeaderRatioBO {
+
+    private Long userId;
+
+    private Long postId;
+
+    private String postName;
+
+    private BigDecimal ratio;
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        LeaderRatioBO that = (LeaderRatioBO) o;
+        return userId.equals(that.userId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(userId);
+    }
+}

+ 3 - 1
domain/src/main/java/com/dayou/common/Constants.java

@@ -68,5 +68,7 @@ public interface Constants {
 
 
     String ADMIN_PASSWORD = "admin123";
     String ADMIN_PASSWORD = "admin123";
 
 
-    static final String MERGE_SYMBOL = "&";
+    String MERGE_SYMBOL = "&";
+
+    String MATH_REGULAR = "^[0-9]+(.[0-9]+)?$";
 }
 }

+ 1 - 0
domain/src/main/java/com/dayou/dto/SimplePostModel.java

@@ -16,4 +16,5 @@ public class SimplePostModel extends SimpleListModel {
     private Long departmentId;
     private Long departmentId;
 
 
     private Long parentId;
     private Long parentId;
+
 }
 }

+ 37 - 0
domain/src/main/java/com/dayou/entity/BrokerageBaseAmount.java

@@ -0,0 +1,37 @@
+package com.dayou.entity;
+import java.math.BigDecimal;
+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-03-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ExcelSheet(sheetName = "自定义提成基数")
+public class BrokerageBaseAmount extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 自定义提成基数金额
+     */
+    @ImportCell
+    @ExportCell(columnName = "自定义提成基数金额")
+    private BigDecimal baseAmount;
+
+
+}

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

@@ -0,0 +1,37 @@
+package com.dayou.entity;
+import java.math.BigDecimal;
+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-03-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ExcelSheet(sheetName = "领导岗位抽成率")
+public class BrokeragePostRatio extends BaseEntity {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 岗位id
+     */
+    private Long postId;
+
+    /**
+     * 岗位抽成率
+     */
+    @ImportCell
+    @ExportCell(columnName = "岗位抽成率")
+    private BigDecimal brokerageRatio;
+
+
+}

+ 1 - 0
domain/src/main/java/com/dayou/entity/ItemBrokerageDetail.java

@@ -67,4 +67,5 @@ public class ItemBrokerageDetail extends BaseEntity {
     private Long brokerageStageId;
     private Long brokerageStageId;
 
 
 
 
+
 }
 }

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

@@ -73,7 +73,7 @@ public enum GlobalConfigEnum implements CodeMsgEnumInterface<String,CodeMsgEnumI
 
 
         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,"土规部市场人员提成比例"),
+        MARKETER_BROKERAGE_PERCENTAGE("MARKETER_BROKERAGE_PERCENTAGE",null,"土规部市场人员提成比例"),
 
 
         PARTICIPANT_BROKERAGE_PERCENTAGE("PARTICIPANT_BROKERAGE_PERCENTAGE",null,"土规部参与项目整体提成比例")
         PARTICIPANT_BROKERAGE_PERCENTAGE("PARTICIPANT_BROKERAGE_PERCENTAGE",null,"土规部参与项目整体提成比例")
         ;
         ;

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

@@ -6,6 +6,7 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.Data;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.util.List;
 
 
 import static com.dayou.common.Constants.MERGE_SYMBOL;
 import static com.dayou.common.Constants.MERGE_SYMBOL;
 
 
@@ -79,4 +80,6 @@ public class BrokerageDetailBO extends ItemBrokerageDetail implements MergeKeyIn
     public String mergeKey() {
     public String mergeKey() {
         return this.cate +MERGE_SYMBOL+ this.businessSource;
         return this.cate +MERGE_SYMBOL+ this.businessSource;
     }
     }
+
+
 }
 }

+ 5 - 4
service/src/main/java/com/dayou/brokerage/BrokerageCalculateSupport.java

@@ -78,6 +78,11 @@ public class BrokerageCalculateSupport implements BrokerageCalculateFactory,Brok
     }
     }
 
 
     @Override
     @Override
+    public BigDecimal residueAmount(BigDecimal predictAmount,BigDecimal aheadAmount) {
+        return predictAmount.subtract(aheadAmount);
+    }
+
+    @Override
     public BigDecimal actualAmount(ItemDTO itemDTO) {
     public BigDecimal actualAmount(ItemDTO itemDTO) {
         return null;
         return null;
     }
     }
@@ -92,8 +97,4 @@ public class BrokerageCalculateSupport implements BrokerageCalculateFactory,Brok
         return null;
         return null;
     }
     }
 
 
-    @Override
-    public BigDecimal residueAmount() {
-        return null;
-    }
 }
 }

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

@@ -36,5 +36,5 @@ public interface BrokerageCalculator extends BrokerageCalculateFactory {
     /**
     /**
      * 剩余未提金额
      * 剩余未提金额
      */
      */
-    BigDecimal residueAmount();
+    BigDecimal residueAmount(BigDecimal predictAmount,BigDecimal aheadAmount);
 }
 }

+ 4 - 1
service/src/main/java/com/dayou/brokerage/MarketerBrokerageCalculator.java

@@ -1,10 +1,13 @@
 package com.dayou.brokerage;
 package com.dayou.brokerage;
 
 
 import com.dayou.bo.BrokerageDetailBO;
 import com.dayou.bo.BrokerageDetailBO;
+import com.dayou.bo.LeaderRatioBO;
 import com.dayou.brokerage.factory.BrokerageCalculateFactory;
 import com.dayou.brokerage.factory.BrokerageCalculateFactory;
 import com.dayou.dto.ItemDTO;
 import com.dayou.dto.ItemDTO;
+import com.dayou.entity.ItemBrokerageDetail;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.util.Set;
 
 
 /**
 /**
  * 类说明:市场人员提成计算器接口
  * 类说明:市场人员提成计算器接口
@@ -23,7 +26,7 @@ public interface MarketerBrokerageCalculator extends BrokerageCalculator {
     /**
     /**
      * 预估提成金额(团队抽成计算)
      * 预估提成金额(团队抽成计算)
      */
      */
-    BrokerageDetailBO predictTeamShareAmount(BrokerageDetailBO bo);
+    Set<ItemBrokerageDetail> predictTeamShareAmount(BrokerageDetailBO bo, Set<LeaderRatioBO> leaderRatioBOSet);
 
 
 
 
 
 

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

@@ -31,9 +31,9 @@ public class BrokerageConfig {
     }
     }
 
 
     @Bean(initMethod = "loadRatioList")
     @Bean(initMethod = "loadRatioList")
-    public LandBrokerageDataConfiguration brokerageMarketerRatioSet(){
-        LandBrokerageDataConfiguration brokerageMarketerRatioSet = new LandBrokerageDataConfiguration();
-        return brokerageMarketerRatioSet;
+    public LandBrokerageDataConfiguration landBrokerageDataConfiguration(){
+        LandBrokerageDataConfiguration landBrokerageDataConfiguration = new LandBrokerageDataConfiguration();
+        return landBrokerageDataConfiguration;
     }
     }
 
 
     @Bean
     @Bean

+ 12 - 16
service/src/main/java/com/dayou/brokerage/config/LandBrokerageDataConfiguration.java

@@ -7,7 +7,6 @@ import com.dayou.enums.GlobalConfigEnum;
 import com.dayou.enums.MergeKeyInterface;
 import com.dayou.enums.MergeKeyInterface;
 import com.dayou.service.IBrokerageMarketerRatioService;
 import com.dayou.service.IBrokerageMarketerRatioService;
 import com.dayou.service.IGlobalConfigService;
 import com.dayou.service.IGlobalConfigService;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 
 
 import javax.annotation.Nullable;
 import javax.annotation.Nullable;
@@ -15,7 +14,6 @@ import java.math.BigDecimal;
 import java.util.List;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentHashMap;
 
 
-import static com.dayou.common.Constants.MERGE_SYMBOL;
 
 
 /**
 /**
  * 类说明:市场人员提成系数表
  * 类说明:市场人员提成系数表
@@ -36,12 +34,12 @@ public class LandBrokerageDataConfiguration extends BrokerageMarketerRatio imple
     /**
     /**
      * 由项目类型和项目来源决定的提成系数集合
      * 由项目类型和项目来源决定的提成系数集合
      */
      */
-    private ConcurrentHashMap<String, BigDecimal> ratioList = new ConcurrentHashMap<String,BigDecimal>(256);
+    public  ConcurrentHashMap<String, BigDecimal> ratioList = new ConcurrentHashMap<String,BigDecimal>(256);
 
 
     /**
     /**
-     * 每个人基础提成金额
+     * 参与人基础提成金额
      */
      */
-    private ConcurrentHashMap<Long,BigDecimal> userBaseBrokerageAmounts = new ConcurrentHashMap<>(256);
+    public ConcurrentHashMap<Long,BigDecimal> userBaseBrokerageAmounts = new ConcurrentHashMap<>(256);
 
 
     @Nullable
     @Nullable
     public BigDecimal marketerBrokeragePercentage ;
     public BigDecimal marketerBrokeragePercentage ;
@@ -63,20 +61,18 @@ public class LandBrokerageDataConfiguration extends BrokerageMarketerRatio imple
             ratioList.put(x.mergeKey(),new BigDecimal(x.getRatio().toString()));
             ratioList.put(x.mergeKey(),new BigDecimal(x.getRatio().toString()));
         });
         });
 
 
-        nonMarketerMonthBrokerage = new BigDecimal(globalConfigService.getValue(GlobalConfigEnum.FINANCE.getCode(),
-                GlobalConfigEnum.Finance.NON_MARKETER_MONTH_BROKERAGE.getCode()));
+        nonMarketerMonthBrokerage = globalConfigService.getMathValue(GlobalConfigEnum.FINANCE.getCode(),
+                GlobalConfigEnum.Finance.NON_MARKETER_MONTH_BROKERAGE.getCode());
 
 
-        monthOfYear = new BigDecimal(globalConfigService.getValue(GlobalConfigEnum.SYS.getCode(),
-                GlobalConfigEnum.Sys.MONTH_OF_YEAR.getCode()));
+        BigDecimal month = globalConfigService.getMathValue(GlobalConfigEnum.SYS.getCode(),
+                GlobalConfigEnum.Sys.MONTH_OF_YEAR.getCode());
 
 
-        marketerBrokeragePercentage = new BigDecimal(globalConfigService.getValue(GlobalConfigEnum.FINANCE.getCode(),
-                GlobalConfigEnum.Finance.MARKETER_BROKERAGE_PERCENTAGE.getCode()));
+        monthOfYear = month.intValue()==0?new BigDecimal("10"):month;
 
 
-        participantBrokeragePercentage = new BigDecimal(globalConfigService.getValue(GlobalConfigEnum.FINANCE.getCode(),
-                GlobalConfigEnum.Finance.PARTICIPANT_BROKERAGE_PERCENTAGE.getCode()));
-    }
+        marketerBrokeragePercentage = globalConfigService.getMathValue(GlobalConfigEnum.FINANCE.getCode(),
+                GlobalConfigEnum.Finance.MARKETER_BROKERAGE_PERCENTAGE.getCode());
 
 
-    public ConcurrentHashMap<String, BigDecimal> getRatioList() {
-        return ratioList;
+        participantBrokeragePercentage = globalConfigService.getMathValue(GlobalConfigEnum.FINANCE.getCode(),
+                GlobalConfigEnum.Finance.PARTICIPANT_BROKERAGE_PERCENTAGE.getCode());
     }
     }
 }
 }

+ 35 - 10
service/src/main/java/com/dayou/brokerage/handler/LandMarketerBrokerageHandler.java

@@ -1,16 +1,24 @@
 package com.dayou.brokerage.handler;
 package com.dayou.brokerage.handler;
 
 
+import cn.hutool.core.bean.BeanUtil;
 import com.dayou.bo.BrokerageDetailBO;
 import com.dayou.bo.BrokerageDetailBO;
+import com.dayou.bo.LeaderRatioBO;
 import com.dayou.brokerage.BrokerageCalculateSupport;
 import com.dayou.brokerage.BrokerageCalculateSupport;
 import com.dayou.brokerage.MarketerBrokerageCalculator;
 import com.dayou.brokerage.MarketerBrokerageCalculator;
 import com.dayou.brokerage.config.LandBrokerageDataConfiguration;
 import com.dayou.brokerage.config.LandBrokerageDataConfiguration;
+import com.dayou.brokerage.constants.BrokerageMode;
+import com.dayou.brokerage.constants.BrokerageRule;
 import com.dayou.dto.ItemDTO;
 import com.dayou.dto.ItemDTO;
+import com.dayou.entity.ItemBrokerageDetail;
 import com.dayou.exception.BusinessException;
 import com.dayou.exception.BusinessException;
+import com.google.common.collect.Sets;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * 类说明:土地规划部市场人员提成计算处理器
  * 类说明:土地规划部市场人员提成计算处理器
@@ -29,7 +37,7 @@ public class LandMarketerBrokerageHandler extends BrokerageCalculateSupport impl
     @Override
     @Override
     public BrokerageDetailBO predictPersonalAmount(BrokerageDetailBO bo) {
     public BrokerageDetailBO predictPersonalAmount(BrokerageDetailBO bo) {
         String mergeKey = bo.mergeKey();
         String mergeKey = bo.mergeKey();
-        BigDecimal ratio = landBrokerageDataConfiguration.getRatioList().get(mergeKey);
+        BigDecimal ratio = landBrokerageDataConfiguration.ratioList.get(mergeKey);
         bo.setRate(ratio);
         bo.setRate(ratio);
         if (ratio !=null){
         if (ratio !=null){
             checkItemBrokerageStatus(bo);
             checkItemBrokerageStatus(bo);
@@ -38,6 +46,7 @@ public class LandMarketerBrokerageHandler extends BrokerageCalculateSupport impl
                 bo.setPredictAmount(bo.getAmount().multiply(ratio));
                 bo.setPredictAmount(bo.getAmount().multiply(ratio));
                 bo.setAheadAmount(aheadAmount(bo.getPredictAmount()));
                 bo.setAheadAmount(aheadAmount(bo.getPredictAmount()));
                 bo.setMarketerAdvanceBrokerageAble(Boolean.TRUE);
                 bo.setMarketerAdvanceBrokerageAble(Boolean.TRUE);
+                bo.setBrokerageMode(BrokerageMode.PERSONAL.getCode());
             } catch (BusinessException e) {
             } catch (BusinessException e) {
                 log.info("项目id:[{}],客户经理id:[{}],[{}]",bo.getId(),bo.getUserId(),e.getMessage());
                 log.info("项目id:[{}],客户经理id:[{}],[{}]",bo.getId(),bo.getUserId(),e.getMessage());
             }
             }
@@ -53,12 +62,34 @@ public class LandMarketerBrokerageHandler extends BrokerageCalculateSupport impl
         BigDecimal aheadAmount = predictAmount.multiply(landBrokerageDataConfiguration.marketerBrokeragePercentage);
         BigDecimal aheadAmount = predictAmount.multiply(landBrokerageDataConfiguration.marketerBrokeragePercentage);
         return aheadAmount;
         return aheadAmount;
     }
     }
+
     @Override
     @Override
-    public BigDecimal advanceAmount() {
-        return null;
+    public Set<ItemBrokerageDetail> predictTeamShareAmount(BrokerageDetailBO bo, Set<LeaderRatioBO> leaderRatioBOSet) {
+        String mergeKey = bo.mergeKey();
+        BigDecimal ratio = landBrokerageDataConfiguration.ratioList.get(mergeKey);
+        Set<ItemBrokerageDetail> itemBrokerageDetails = Sets.newHashSet();
+        if (ratio!=null){
+            checkItemBrokerageStatus(bo);
+            itemBrokerageDetails = leaderRatioBOSet.stream().map(x -> {
+                ItemBrokerageDetail itemBrokerageDetail = new ItemBrokerageDetail();
+                itemBrokerageDetail.setGeneralId(bo.getGeneralId());
+                itemBrokerageDetail.setPredictAmount(bo.getAmount().multiply(ratio).multiply(x.getRatio()));
+                itemBrokerageDetail.setUserId(x.getUserId());
+                itemBrokerageDetail.setAheadAmount(BigDecimal.ZERO);
+                itemBrokerageDetail.setActualAmount(BigDecimal.ZERO);
+                itemBrokerageDetail.setAdvanceAmount(BigDecimal.ZERO);
+                itemBrokerageDetail.setBrokerageMode(BrokerageMode.TEAM_SHARE.getCode());
+                itemBrokerageDetail.setBrokerageRule(BrokerageRule.LAND_MARKETER_RULE.getCode());
+                return itemBrokerageDetail;
+            }).collect(Collectors.toSet());
+
+        }else {
+            log.info("项目id:[{}],合同金额:[{}],提成系数:[null],[未设置提成系数,无法计算客户经理领导提成]",bo.getId(),bo.getAmount());
+        }
+        return itemBrokerageDetails;
     }
     }
     @Override
     @Override
-    public BrokerageDetailBO predictTeamShareAmount(BrokerageDetailBO bo) {
+    public BigDecimal advanceAmount() {
         return null;
         return null;
     }
     }
     @Override
     @Override
@@ -66,10 +97,4 @@ public class LandMarketerBrokerageHandler extends BrokerageCalculateSupport impl
         return null;
         return null;
     }
     }
 
 
-    @Override
-    public BigDecimal residueAmount() {
-        return null;
-    }
-
-
 }
 }

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

@@ -53,8 +53,9 @@ public class LandNonMarketerBrokerageHandler extends BrokerageCalculateSupport i
 
 
     @Override
     @Override
     public BigDecimal aheadAmount(BigDecimal predictAmount){
     public BigDecimal aheadAmount(BigDecimal predictAmount){
-        //todo
-        return null;
+        //todo 配置基础预提金额
+        BigDecimal baseAheadAmount = landBrokerageDataConfiguration.userBaseBrokerageAmounts.get(null);
+        return baseAheadAmount;
     }
     }
     @Override
     @Override
     public BigDecimal actualAmount(ItemDTO itemDTO) {
     public BigDecimal actualAmount(ItemDTO itemDTO) {
@@ -67,11 +68,6 @@ public class LandNonMarketerBrokerageHandler extends BrokerageCalculateSupport i
     }
     }
 
 
     @Override
     @Override
-    public BigDecimal residueAmount() {
-        return null;
-    }
-
-    @Override
     public BigDecimal advanceTotalAmount() {
     public BigDecimal advanceTotalAmount() {
         return null;
         return null;
     }
     }

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

@@ -0,0 +1,28 @@
+package com.dayou.service;
+import com.dayou.entity.BrokerageBaseAmount;
+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-03-10
+ */
+public interface IBrokerageBaseAmountService extends IService<BrokerageBaseAmount> {
+
+        Page<BrokerageBaseAmount> selectPage(Page page,BrokerageBaseAmount brokerageBaseAmount);
+
+        BrokerageBaseAmount detail(Long id);
+
+        Boolean add(BrokerageBaseAmount brokerageBaseAmount);
+
+        Boolean update(BrokerageBaseAmount brokerageBaseAmount);
+
+        Boolean delete(Long id);
+
+}

+ 28 - 0
service/src/main/java/com/dayou/service/IBrokeragePostRatioService.java

@@ -0,0 +1,28 @@
+package com.dayou.service;
+import com.dayou.entity.BrokeragePostRatio;
+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-03-10
+ */
+public interface IBrokeragePostRatioService extends IService<BrokeragePostRatio> {
+
+        Page<BrokeragePostRatio> selectPage(Page page,BrokeragePostRatio brokeragePostRatio);
+
+        BrokeragePostRatio detail(Long id);
+
+        Boolean add(BrokeragePostRatio brokeragePostRatio);
+
+        Boolean update(BrokeragePostRatio brokeragePostRatio);
+
+        Boolean delete(Long id);
+
+}

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

@@ -5,6 +5,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
+
+import java.math.BigDecimal;
+
 /**
 /**
  * <p>
  * <p>
  * 全局配置 服务类
  * 全局配置 服务类
@@ -27,4 +30,5 @@ public interface IGlobalConfigService extends IService<GlobalConfig> {
 
 
         String getValue(String key,String field);
         String getValue(String key,String field);
 
 
+        BigDecimal getMathValue(String key, String field);
 }
 }

+ 7 - 0
service/src/main/java/com/dayou/service/IUserService.java

@@ -1,4 +1,5 @@
 package com.dayou.service;
 package com.dayou.service;
+import com.dayou.bo.LeaderRatioBO;
 import com.dayou.bo.PrivilegeTreeBO;
 import com.dayou.bo.PrivilegeTreeBO;
 import com.dayou.condition.LoginCondition;
 import com.dayou.condition.LoginCondition;
 import com.dayou.dto.LoginDTO;
 import com.dayou.dto.LoginDTO;
@@ -62,4 +63,10 @@ public interface IUserService extends IService<User> {
     Boolean updatePassword(UpdatePasswordDTO passwordDTO);
     Boolean updatePassword(UpdatePasswordDTO passwordDTO);
 
 
     Set<Long> getJuniorUserId(Long userId);
     Set<Long> getJuniorUserId(Long userId);
+
+    Set<LeaderRatioBO> getLeaderRatioBO(Long userId);
+
+    Set<Long> getLeaderPostInDepartment(Long postId,Long departmentId,Set<Long> parentPostIds);
+
+    Long getDepartmentIdByUserId(Long userId);
 }
 }

+ 66 - 0
service/src/main/java/com/dayou/service/impl/BrokerageBaseAmountServiceImpl.java

@@ -0,0 +1,66 @@
+package com.dayou.service.impl;
+
+import com.dayou.entity.BrokerageBaseAmount;
+import com.dayou.mapper.BrokerageBaseAmountMapper;
+import com.dayou.service.IBrokerageBaseAmountService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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 org.springframework.transaction.annotation.Transactional;
+import com.dayou.enums.BatchTaskTypeEnum;
+
+/**
+ * <p>
+ * 自定义提成基数 服务实现类
+ * </p>
+ *
+ * @author wucl
+ * @since 2023-03-10
+ */
+@Service
+public class BrokerageBaseAmountServiceImpl extends ServiceImpl<BrokerageBaseAmountMapper, BrokerageBaseAmount> implements IBrokerageBaseAmountService {
+
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Page<BrokerageBaseAmount> selectPage(Page page,BrokerageBaseAmount brokerageBaseAmount){
+        return this.page(page, new QueryWrapper<BrokerageBaseAmount>(brokerageBaseAmount));
+    }
+
+
+    @Override
+    public BrokerageBaseAmount detail(Long id){
+        return this.getById(id);
+    }
+
+    @Override
+    public Boolean add(BrokerageBaseAmount brokerageBaseAmount){
+        return  this.save(brokerageBaseAmount);
+    }
+
+    @Override
+    public Boolean update(BrokerageBaseAmount brokerageBaseAmount){
+        return  this.updateById(brokerageBaseAmount);
+    }
+
+    @Override
+    public Boolean delete(Long id){
+        //逻辑删除
+        return this.removeById(id);
+    }
+}

+ 66 - 0
service/src/main/java/com/dayou/service/impl/BrokeragePostRatioServiceImpl.java

@@ -0,0 +1,66 @@
+package com.dayou.service.impl;
+
+import com.dayou.entity.BrokeragePostRatio;
+import com.dayou.mapper.BrokeragePostRatioMapper;
+import com.dayou.service.IBrokeragePostRatioService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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 org.springframework.transaction.annotation.Transactional;
+import com.dayou.enums.BatchTaskTypeEnum;
+
+/**
+ * <p>
+ * 领导岗位抽成率 服务实现类
+ * </p>
+ *
+ * @author wucl
+ * @since 2023-03-10
+ */
+@Service
+public class BrokeragePostRatioServiceImpl extends ServiceImpl<BrokeragePostRatioMapper, BrokeragePostRatio> implements IBrokeragePostRatioService {
+
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Page<BrokeragePostRatio> selectPage(Page page,BrokeragePostRatio brokeragePostRatio){
+        return this.page(page, new QueryWrapper<BrokeragePostRatio>(brokeragePostRatio));
+    }
+
+
+    @Override
+    public BrokeragePostRatio detail(Long id){
+        return this.getById(id);
+    }
+
+    @Override
+    public Boolean add(BrokeragePostRatio brokeragePostRatio){
+        return  this.save(brokeragePostRatio);
+    }
+
+    @Override
+    public Boolean update(BrokeragePostRatio brokeragePostRatio){
+        return  this.updateById(brokeragePostRatio);
+    }
+
+    @Override
+    public Boolean delete(Long id){
+        //逻辑删除
+        return this.removeById(id);
+    }
+}

+ 18 - 14
service/src/main/java/com/dayou/service/impl/GlobalConfigServiceImpl.java

@@ -1,5 +1,6 @@
 package com.dayou.service.impl;
 package com.dayou.service.impl;
 
 
+import cn.hutool.core.util.StrUtil;
 import com.dayou.common.BaseEntity;
 import com.dayou.common.BaseEntity;
 import com.dayou.entity.GlobalConfig;
 import com.dayou.entity.GlobalConfig;
 import com.dayou.enums.CodeMsgEnumInterface;
 import com.dayou.enums.CodeMsgEnumInterface;
@@ -11,24 +12,17 @@ import com.google.common.collect.Lists;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 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.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.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.dayou.utils.ExcelUtil;
-import org.apache.poi.ss.usermodel.Cell;
-import org.apache.poi.ss.usermodel.CellStyle;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Sheet;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.web.multipart.MultipartFile;
+
+
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.ArrayList;
-import org.springframework.transaction.annotation.Transactional;
-import com.dayou.enums.BatchTaskTypeEnum;
+import java.util.regex.Pattern;
+
+import static com.dayou.common.Constants.MATH_REGULAR;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -92,7 +86,17 @@ public class GlobalConfigServiceImpl extends ServiceImpl<GlobalConfigMapper, Glo
 
 
     @Override
     @Override
     public String getValue(String key, String field) {
     public String getValue(String key, String field) {
-        return globalConfigMapper.getValueByKeyFiled(key,field);
+        return globalConfigMapper.getValueByKeyFiled(key, field);
+    }
+
+    @Override
+    public BigDecimal getMathValue(String key, String field){
+        String value = getValue(key, field);
+        if (StrUtil.isNotBlank(value)){
+            Pattern pattern = Pattern.compile(MATH_REGULAR);
+            return pattern.matcher(value).matches()? new BigDecimal(value) : BigDecimal.ZERO;
+        }
+        return BigDecimal.ZERO;
     }
     }
 
 
     @Override
     @Override

+ 37 - 14
service/src/main/java/com/dayou/service/impl/ItemBrokerageGeneralServiceImpl.java

@@ -1,16 +1,15 @@
 package com.dayou.service.impl;
 package com.dayou.service.impl;
 
 
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.dayou.bo.BrokerageDetailBO;
 import com.dayou.bo.BrokerageDetailBO;
+import com.dayou.bo.LeaderRatioBO;
 import com.dayou.brokerage.BrokerageCalculateSupport;
 import com.dayou.brokerage.BrokerageCalculateSupport;
-import com.dayou.brokerage.BrokerageCalculator;
 import com.dayou.brokerage.MarketerBrokerageCalculator;
 import com.dayou.brokerage.MarketerBrokerageCalculator;
 import com.dayou.brokerage.NonMarketerMarketerBrokerageCalculator;
 import com.dayou.brokerage.NonMarketerMarketerBrokerageCalculator;
 import com.dayou.brokerage.constants.BrokerageMode;
 import com.dayou.brokerage.constants.BrokerageMode;
 import com.dayou.brokerage.constants.BrokerageRule;
 import com.dayou.brokerage.constants.BrokerageRule;
 import com.dayou.brokerage.constants.BrokerageState;
 import com.dayou.brokerage.constants.BrokerageState;
-import com.dayou.brokerage.factory.BrokerageCalculateFactory;
 import com.dayou.common.BaseEntity;
 import com.dayou.common.BaseEntity;
 import com.dayou.dto.ItemDTO;
 import com.dayou.dto.ItemDTO;
 import com.dayou.entity.*;
 import com.dayou.entity.*;
@@ -20,8 +19,8 @@ import com.dayou.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.dayou.vo.ItemStageVO;
 import com.dayou.vo.ItemStageVO;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -62,6 +61,9 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
     @Autowired
     @Autowired
     private ItemMapper itemMapper;
     private ItemMapper itemMapper;
 
 
+    @Autowired
+    private IUserService userService;
+
     @Override
     @Override
     @SuppressWarnings("unchecked")
     @SuppressWarnings("unchecked")
     public Page<ItemBrokerageGeneral> selectPage(Page page,ItemBrokerageGeneral itemBrokerageGeneral){
     public Page<ItemBrokerageGeneral> selectPage(Page page,ItemBrokerageGeneral itemBrokerageGeneral){
@@ -94,32 +96,40 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
     @Override
     @Override
     public void doCreateBrokerageGeneralAndDetail(BrokerageDetailBO bo) {
     public void doCreateBrokerageGeneralAndDetail(BrokerageDetailBO bo) {
         MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_MARKETER_RULE);
         MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_MARKETER_RULE);
-        Long userId = bo.getUserId();
+            Long userId = bo.getUserId();
         UserTarget userTarget = getUserTarget(userId);
         UserTarget userTarget = getUserTarget(userId);
         BigDecimal currentMonthPayment = marketStatService.currentYearPayment(userId);
         BigDecimal currentMonthPayment = marketStatService.currentYearPayment(userId);
         BigDecimal paymentTarget = new BigDecimal(userTarget.getPaymentTarget());
         BigDecimal paymentTarget = new BigDecimal(userTarget.getPaymentTarget());
         bo.setCurrentPayment(currentMonthPayment);
         bo.setCurrentPayment(currentMonthPayment);
         bo.setPaymentTarget(paymentTarget);
         bo.setPaymentTarget(paymentTarget);
         bo.setItemBrokerageStatus(BrokerageState.NOT_START.getCode());
         bo.setItemBrokerageStatus(BrokerageState.NOT_START.getCode());
+        Set<LeaderRatioBO> leaderRatioBO = userService.getLeaderRatioBO(userId).stream().filter(x->x.getRatio()!=null).collect(Collectors.toSet());
         bo = calculator.predictPersonalAmount(bo);
         bo = calculator.predictPersonalAmount(bo);
+        //创建下单人领导提成记录
+        Set<ItemBrokerageDetail> brokerageLeaderDetailBOS = calculator.predictTeamShareAmount(bo, leaderRatioBO);
+        BigDecimal leaderPredictTotalAmount = brokerageLeaderDetailBOS.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        //构建提成总表对象
         ItemBrokerageGeneral general = ItemBrokerageGeneral.builder()
         ItemBrokerageGeneral general = ItemBrokerageGeneral.builder()
                 .itemId(bo.getItemId())
                 .itemId(bo.getItemId())
-                .marketerBrokerageAmount(bo.getPredictAmount())
+                .marketerBrokerageAmount(bo.getPredictAmount().add(leaderPredictTotalAmount))
                 .marketerAdvanceBrokerageAble(bo.getMarketerAdvanceBrokerageAble())
                 .marketerAdvanceBrokerageAble(bo.getMarketerAdvanceBrokerageAble())
-                .brokeragePredictAmount(bo.getPredictAmount())
+                .participantActualBrokerageAmount(BigDecimal.ZERO)
+                .participantPredictBrokerageAmount(BigDecimal.ZERO)
+                .brokeragePredictAmount(bo.getPredictAmount().add(leaderPredictTotalAmount))
                 .brokerageActualAmount(BigDecimal.ZERO)
                 .brokerageActualAmount(BigDecimal.ZERO)
                 .brokerageRate(bo.getRate()).build();
                 .brokerageRate(bo.getRate()).build();
         this.save(general);
         this.save(general);
-        bo.setGeneralId(general.getId());
-        iItemBrokerageDetailService.save(bo);
+        brokerageLeaderDetailBOS.add(bo);
+        brokerageLeaderDetailBOS.stream().forEach(x->{ x.setGeneralId(general.getId());});
+        iItemBrokerageDetailService.saveBatch(brokerageLeaderDetailBOS);
     }
     }
+
     @Override
     @Override
     public void addMarketerBrokerage(Long id) {
     public void addMarketerBrokerage(Long id) {
         Item item = itemMapper.selectById(id);
         Item item = itemMapper.selectById(id);
         if (item.getAmount()!=null){
         if (item.getAmount()!=null){
             BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().amount(item.getAmount()).cate(item.getCate()).businessSource(item.getBusinessSource()).itemId(id).build();
             BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().amount(item.getAmount()).cate(item.getCate()).businessSource(item.getBusinessSource()).itemId(id).build();
             brokerageDetailBO.setBrokerageRule(BrokerageRule.LAND_MARKETER_RULE.getCode());
             brokerageDetailBO.setBrokerageRule(BrokerageRule.LAND_MARKETER_RULE.getCode());
-            brokerageDetailBO.setBrokerageMode(BrokerageMode.PERSONAL.getCode());
             brokerageDetailBO.setAdvanceAmount(BigDecimal.ZERO);
             brokerageDetailBO.setAdvanceAmount(BigDecimal.ZERO);
             brokerageDetailBO.setPredictAmount(BigDecimal.ZERO);
             brokerageDetailBO.setPredictAmount(BigDecimal.ZERO);
             brokerageDetailBO.setActualAmount(BigDecimal.ZERO);
             brokerageDetailBO.setActualAmount(BigDecimal.ZERO);
@@ -136,25 +146,38 @@ public class ItemBrokerageGeneralServiceImpl extends ServiceImpl<ItemBrokerageGe
     @Override
     @Override
     public void editMarketerBrokerage(ItemDTO itemDTO) {
     public void editMarketerBrokerage(ItemDTO itemDTO) {
         ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemDTO.getId()).eq(BaseEntity::getDeleted,Boolean.FALSE));
         ItemBrokerageGeneral general = this.getOne(new LambdaQueryWrapper<ItemBrokerageGeneral>().eq(ItemBrokerageGeneral::getItemId, itemDTO.getId()).eq(BaseEntity::getDeleted,Boolean.FALSE));
-        if (general == null){
+        ItemBrokerageDetail marketerDetail = iItemBrokerageDetailService.getOne(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getGeneralId, general.getId()).eq(BaseEntity::getDeleted, Boolean.FALSE).eq(ItemBrokerageDetail::getBrokerageMode,BrokerageMode.PERSONAL.getCode()));
+        if (general == null || marketerDetail == null){
             addMarketerBrokerage(itemDTO.getId());
             addMarketerBrokerage(itemDTO.getId());
             log.info("非正常情况下,更新项目信息时创建了相关的提成记录");
             log.info("非正常情况下,更新项目信息时创建了相关的提成记录");
             return;
             return;
         }
         }
-        ItemBrokerageDetail marketerDetail = iItemBrokerageDetailService.getOne(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getGeneralId, general.getId()).eq(BaseEntity::getDeleted, Boolean.FALSE));
+
         MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_MARKETER_RULE);
         MarketerBrokerageCalculator calculator = (MarketerBrokerageCalculator) brokerageCalculateSupport.getCalculator(BrokerageRule.LAND_MARKETER_RULE);
+        //更新客户经理的提成记录
         UserTarget userTarget = getUserTarget(marketerDetail.getUserId());
         UserTarget userTarget = getUserTarget(marketerDetail.getUserId());
         BigDecimal currentMonthPayment = marketStatService.currentMonthPayment(marketerDetail.getUserId());
         BigDecimal currentMonthPayment = marketStatService.currentMonthPayment(marketerDetail.getUserId());
         BigDecimal paymentTarget = new BigDecimal(userTarget.getPaymentTarget());
         BigDecimal paymentTarget = new BigDecimal(userTarget.getPaymentTarget());
         BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().amount(itemDTO.getAmount()).cate(itemDTO.getCate()).businessSource(itemDTO.getBusinessSource()).itemId(itemDTO.getId()).paymentTarget(paymentTarget).currentPayment(currentMonthPayment).build();
         BrokerageDetailBO brokerageDetailBO = BrokerageDetailBO.builder().amount(itemDTO.getAmount()).cate(itemDTO.getCate()).businessSource(itemDTO.getBusinessSource()).itemId(itemDTO.getId()).paymentTarget(paymentTarget).currentPayment(currentMonthPayment).build();
         brokerageDetailBO.setUserId(marketerDetail.getUserId());
         brokerageDetailBO.setUserId(marketerDetail.getUserId());
         brokerageDetailBO.setId(marketerDetail.getId());
         brokerageDetailBO.setId(marketerDetail.getId());
+        brokerageDetailBO.setGeneralId(general.getId());
         brokerageDetailBO = calculator.predictPersonalAmount(brokerageDetailBO);
         brokerageDetailBO = calculator.predictPersonalAmount(brokerageDetailBO);
         iItemBrokerageDetailService.update(brokerageDetailBO);
         iItemBrokerageDetailService.update(brokerageDetailBO);
-        general.setMarketerBrokerageAmount(brokerageDetailBO.getPredictAmount());
+
+
+        //更新领导提成记录
+        Set<LeaderRatioBO> leaderRatioBO = userService.getLeaderRatioBO(marketerDetail.getUserId()).stream().filter(x->x.getRatio()!=null).collect(Collectors.toSet());
+        Set<ItemBrokerageDetail> itemBrokerageDetails = calculator.predictTeamShareAmount(brokerageDetailBO, leaderRatioBO);
+        iItemBrokerageDetailService.remove(new LambdaQueryWrapper<ItemBrokerageDetail>().eq(ItemBrokerageDetail::getGeneralId,general.getId()).eq(ItemBrokerageDetail::getBrokerageMode,BrokerageMode.TEAM_SHARE.getCode()));
+        iItemBrokerageDetailService.saveBatch(itemBrokerageDetails);
+
+        //更新总表
+        BigDecimal leaderPredictTotalAmount = itemBrokerageDetails.stream().map(ItemBrokerageDetail::getPredictAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
+        general.setMarketerBrokerageAmount(brokerageDetailBO.getPredictAmount().add(leaderPredictTotalAmount));
         general.setMarketerAdvanceBrokerageAble(brokerageDetailBO.getMarketerAdvanceBrokerageAble());
         general.setMarketerAdvanceBrokerageAble(brokerageDetailBO.getMarketerAdvanceBrokerageAble());
         general.setBrokerageRate(brokerageDetailBO.getRate());
         general.setBrokerageRate(brokerageDetailBO.getRate());
-        general.setBrokeragePredictAmount(brokerageDetailBO.getPredictAmount().add(general.getParticipantPredictBrokerageAmount()));
+        general.setBrokeragePredictAmount(brokerageDetailBO.getPredictAmount().add(general.getParticipantPredictBrokerageAmount()).add(leaderPredictTotalAmount));
         this.update(general);
         this.update(general);
     }
     }
 
 

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

@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.dayou.bo.LeaderRatioBO;
 import com.dayou.bo.LoginCacheUserBO;
 import com.dayou.bo.LoginCacheUserBO;
 import com.dayou.bo.PrivilegeTreeBO;
 import com.dayou.bo.PrivilegeTreeBO;
 import com.dayou.bo.SimpleParentModel;
 import com.dayou.bo.SimpleParentModel;
@@ -19,11 +20,9 @@ import com.dayou.dto.LoginDTO;
 import com.dayou.dto.SimplePostModel;
 import com.dayou.dto.SimplePostModel;
 import com.dayou.dto.UpdatePasswordDTO;
 import com.dayou.dto.UpdatePasswordDTO;
 import com.dayou.dto.UserBaseDetailDTO;
 import com.dayou.dto.UserBaseDetailDTO;
-import com.dayou.entity.Post;
-import com.dayou.entity.PostPrivilege;
-import com.dayou.entity.User;
-import com.dayou.entity.UserPost;
+import com.dayou.entity.*;
 import com.dayou.exception.ErrorCode;
 import com.dayou.exception.ErrorCode;
+import com.dayou.mapper.BrokeragePostRatioMapper;
 import com.dayou.mapper.UserMapper;
 import com.dayou.mapper.UserMapper;
 import com.dayou.service.*;
 import com.dayou.service.*;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -107,6 +106,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
 
 
     @Autowired
     @Autowired
     private IPostService postService;
     private IPostService postService;
+    
+    @Autowired
+    private BrokeragePostRatioMapper brokeragePostRatioMapper;
 
 
 
 
     @Override
     @Override
@@ -420,6 +422,39 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         return juniorUser;
         return juniorUser;
     }
     }
 
 
+    @Override
+    public Set<LeaderRatioBO> getLeaderRatioBO(Long userId) {
+        Set<Long> parentPostIds = new HashSet<>();
+        Set<LeaderRatioBO> leaderRatioBOS = new HashSet<>();
+        List<SimplePostModel> postList = userPostService.getPostList(userId);
+        for (SimplePostModel simplePostModel :postList){
+            parentPostIds.addAll(getLeaderPostInDepartment(simplePostModel.getId(), simplePostModel.getDepartmentId(), parentPostIds));
+        }
+        if (CollectionUtils.isNotEmpty(parentPostIds)){
+            //需要排除当前userId,因为领导有可能设置成自己
+            leaderRatioBOS = brokeragePostRatioMapper.getLeadersRatio(parentPostIds,userId);
+
+        }
+        return leaderRatioBOS;
+    }
+
+    public Set<Long> getLeaderPostInDepartment(Long postId,Long departmentId,Set<Long> parentPostIds){
+        Post post = postService.getById(postId);
+        if (post.getParentId()!=null){
+            Post postParent = postService.getById(post.getParentId());
+            if (postParent.getDepartmentId().equals(departmentId)){
+                parentPostIds.add(postParent.getId());
+                getLeaderPostInDepartment(postParent.getId(),departmentId,parentPostIds);
+            }
+        }
+        return parentPostIds;
+    }
+
+    @Override
+    public Long getDepartmentIdByUserId(Long userId) {
+        return userMapper.getDepartmentIdByUserId(userId);
+    }
+
     /**
     /**
      * 递归查询下级岗位
      * 递归查询下级岗位
      * @param postIds
      * @param postIds