Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

zhaoxian 2 gadi atpakaļ
vecāks
revīzija
2bbcfc141e
22 mainītis faili ar 758 papildinājumiem un 29 dzēšanām
  1. 40 2
      ruixuan-live/src/main/java/com/ruixuan/isc/controller/KuaishouPromoterController.java
  2. 23 4
      ruixuan-live/src/main/java/com/ruixuan/isc/controller/KuaishouRuleSettlementDataController.java
  3. 41 11
      ruixuan-live/src/main/java/com/ruixuan/isc/controller/KuaishouSettlementRulesController.java
  4. 201 0
      ruixuan-live/src/main/java/com/ruixuan/isc/controller/SupplyChainController.java
  5. 7 0
      ruixuan-live/src/main/java/com/ruixuan/isc/entity/KuaishouPromoter.java
  6. 4 0
      ruixuan-live/src/main/java/com/ruixuan/isc/mapper/KuaishouPromoterMapper.java
  7. 5 0
      ruixuan-live/src/main/java/com/ruixuan/isc/mapper/KuaishouRuleDetailMapper.java
  8. 6 0
      ruixuan-live/src/main/java/com/ruixuan/isc/mapper/KuaishouRuleSettlementDataMapper.java
  9. 6 0
      ruixuan-live/src/main/java/com/ruixuan/isc/mapper/SupplyChainMapper.java
  10. 4 0
      ruixuan-live/src/main/java/com/ruixuan/isc/service/IKuaishouPromoterService.java
  11. 4 0
      ruixuan-live/src/main/java/com/ruixuan/isc/service/IKuaishouRuleSettlementDataService.java
  12. 4 0
      ruixuan-live/src/main/java/com/ruixuan/isc/service/IKuaishouSettlementRulesService.java
  13. 6 0
      ruixuan-live/src/main/java/com/ruixuan/isc/service/ISupplyChainService.java
  14. 10 0
      ruixuan-live/src/main/java/com/ruixuan/isc/service/impl/KuaishouPromoterServiceImpl.java
  15. 134 1
      ruixuan-live/src/main/java/com/ruixuan/isc/service/impl/KuaishouRuleSettlementDataServiceImpl.java
  16. 10 0
      ruixuan-live/src/main/java/com/ruixuan/isc/service/impl/KuaishouSettlementRulesServiceImpl.java
  17. 15 0
      ruixuan-live/src/main/java/com/ruixuan/isc/service/impl/SupplyChainServiceImpl.java
  18. 16 4
      ruixuan-live/src/main/resources/mapper/isc/KuaishouPromoterMapper.xml
  19. 52 1
      ruixuan-live/src/main/resources/mapper/isc/KuaishouRuleDetailMapper.xml
  20. 32 3
      ruixuan-live/src/main/resources/mapper/isc/KuaishouRuleSettlementDataMapper.xml
  21. 5 0
      ruixuan-live/src/main/resources/mapper/isc/KuaishouSettlementRulesMapper.xml
  22. 133 3
      ruixuan-live/src/main/resources/mapper/isc/SupplyChainMapper.xml

+ 40 - 2
ruixuan-live/src/main/java/com/ruixuan/isc/controller/KuaishouPromoterController.java

@@ -6,6 +6,7 @@ import com.ruixuan.common.core.domain.AjaxResult;
 import com.ruixuan.common.core.page.TableDataInfo;
 import com.ruixuan.common.utils.Check;
 import com.ruixuan.common.utils.Result;
+import com.ruixuan.common.utils.spring.SpringUtils;
 import com.ruixuan.isc.entity.KuaishouPromoter;
 import com.ruixuan.isc.service.IKuaishouPromoterService;
 import com.ruixuan.isc.utils.Tess4jClient;
@@ -41,6 +42,43 @@ public class KuaishouPromoterController extends BaseController {
     @Value("${tessdata.path}")
     private String path;
 
+
+    /**
+     * 查询快手达人 信息列表
+     */
+    @GetMapping("/addRule")
+    @ApiOperation(value = "查询快手达人")
+    public JSONObject addRule(String promoterId, Long ruleId) {
+
+        JSONObject returnJson = new JSONObject();
+        try {
+            if (Check.isNull(promoterId)) {
+                throw new Exception("请选择需要绑定的达人");
+            }
+            if (Check.isNotNull(promoterId)) {
+                promoterId = promoterId.trim();
+            }
+            if (Check.isNull(ruleId)) {
+                throw new Exception("请选择需要绑定的规则");
+            }
+
+            String ruleName = kuaishouPromoterService.getRuleName(ruleId);
+
+            int i = kuaishouPromoterService.addRule(promoterId,ruleId,ruleName);
+            if(i > 0 ){
+                returnJson.put("code", 0);
+                returnJson.put("message", "修改成功");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            returnJson.put("code", -1);
+            returnJson.put("message", e.getMessage());
+        }
+        return returnJson;
+
+    }
+
+
     /**
      * 查询快手达人 信息列表
      */
@@ -143,9 +181,9 @@ public class KuaishouPromoterController extends BaseController {
      */
     @GetMapping(value = "/addPromotersCount")
     @ApiOperation(value = "新增设置渠道绑定达人数")
-    public JSONObject addPromotersCount(Long userId, Long promotersCount,String mediaId) {
+    public JSONObject addPromotersCount(Long userId, Long promotersCount, String mediaId) {
         try {
-            return kuaishouPromoterService.addPromotersCount(userId, promotersCount,mediaId);
+            return kuaishouPromoterService.addPromotersCount(userId, promotersCount, mediaId);
         } catch (Exception e) {
             e.printStackTrace();
             JSONObject result = new JSONObject();

+ 23 - 4
ruixuan-live/src/main/java/com/ruixuan/isc/controller/KuaishouRuleSettlementDataController.java

@@ -40,6 +40,7 @@ public class KuaishouRuleSettlementDataController extends BaseController {
     @Autowired
     private IKuaishouRuleSettlementDataService kuaishouRuleSettlementDataService;
     static ExecutorService executorService = Executors.newFixedThreadPool(2);
+    static ExecutorService executorPromoterService = Executors.newFixedThreadPool(2);
 
 
     @PostMapping("/data")
@@ -56,17 +57,35 @@ public class KuaishouRuleSettlementDataController extends BaseController {
                 kuaishouRuleSettlementDataService.data(statDate, data);
             }
         });
+    }
 
 
+    @PostMapping("/promoterData")
+    @ApiOperation(value = "查询快手达人")
+    public void promoterData(@RequestBody JSONObject requestJson) {
+        Long statDate = requestJson.getLong("statDate");
+        JSONArray data = requestJson.getJSONArray("data");
+        if (Check.isNull(data)) {
+            return;
+        }
+        executorPromoterService.submit(new Runnable() {
+            @Override
+            public void run() {
+                kuaishouRuleSettlementDataService.promoterData(statDate, data);
+            }
+        });
     }
 
+
+
     @GetMapping("/testData")
     public JSONObject testData(Long relateId, Long promoterId, Long ruleId, Long validOrderNum) {
-        JSONObject data = kuaishouRuleSettlementDataService.getData();
+       /* JSONObject data = kuaishouRuleSettlementDataService.getData();
         JSONArray array = new JSONArray();
-        array.add(data);
-        kuaishouRuleSettlementDataService.data(20230911L, array);
-        return  null;
+        array.add(data);*/
+
+
+        return  kuaishouRuleSettlementDataService.getPromoterRuleData(null, promoterId,ruleId,validOrderNum);
        //  return kuaishouRuleSettlementDataService.getOrderRuleData(relateId, promoterId, ruleId, validOrderNum);
 
     }

+ 41 - 11
ruixuan-live/src/main/java/com/ruixuan/isc/controller/KuaishouSettlementRulesController.java

@@ -29,10 +29,21 @@ public class KuaishouSettlementRulesController extends BaseController {
     /**
      * 查询【请填写功能名称】列表
      */
+    @GetMapping("/getAllRuleList")
+    public TableDataInfo getAllRuleList(Long userId, String ruleName) {
+        startPage();
+        if (userId == 1) {
+            userId = null;
+        }
+        List<JSONObject> list = kuaishouSettlementRulesService.getAllRuleList(userId, ruleName);
+        return getDataTable(list);
+    }
+
+
     @GetMapping("/getRuleList")
     public TableDataInfo list(Long userId, String ruleName) {
         startPage();
-        if(userId == 1){
+        if (userId == 1) {
             userId = null;
         }
         List<JSONObject> list = kuaishouSettlementRulesService.getRuleList(userId, ruleName);
@@ -42,7 +53,7 @@ public class KuaishouSettlementRulesController extends BaseController {
     @GetMapping("/getRuleListNoPage")
     public JSONObject getRuleListNoPage(Long userId, String ruleNam) {
         JSONObject returnJson = new JSONObject();
-        if(userId == 1){
+        if (userId == 1) {
             userId = null;
         }
         List<JSONObject> data = kuaishouSettlementRulesService.getRuleList(userId, ruleNam);
@@ -53,6 +64,19 @@ public class KuaishouSettlementRulesController extends BaseController {
     }
 
 
+    @GetMapping("/getPromoterRuleList")
+    public JSONObject getPromoterRuleList(Long userId, String ruleName) {
+        JSONObject returnJson = new JSONObject();
+        if (userId == 1) {
+            userId = null;
+        }
+        List<JSONObject> data = kuaishouSettlementRulesService.getPromoterRuleList(userId, ruleName);
+        returnJson.put("code", 0);
+        returnJson.put("message", "true");
+        returnJson.put("data", data);
+        return returnJson;
+    }
+
     @PostMapping("/addRule")
     public JSONObject addRule(@RequestBody JSONObject requestJson) {
         JSONObject returnJson = new JSONObject();
@@ -60,16 +84,22 @@ public class KuaishouSettlementRulesController extends BaseController {
             if (Check.isNull(requestJson)) {
                 throw new Exception("入参不能为空");
             }
-                JSONArray ruleDetails = requestJson.getJSONArray("ruleDetails");
-                if (Check.isNull(ruleDetails)) {
-                    throw new Exception("请输入规则详情");
-                }
+            JSONArray ruleDetails = requestJson.getJSONArray("ruleDetails");
+            if (Check.isNull(ruleDetails)) {
+                throw new Exception("请输入规则详情");
+            }
 
-                if(requestJson.getInteger("ruleType") == 2){
-                    if(ruleDetails.size() > 1){
-                        throw new Exception("按单数结算只能设置一条规则");
-                    }
+            if (requestJson.getInteger("ruleType") == 2) {
+                if (ruleDetails.size() > 1) {
+                    throw new Exception("按单数结算只能设置一条规则");
+                }
+            }
+            if (requestJson.getInteger("ruleType") == 3) {
+                if (ruleDetails.size() > 1) {
+                    throw new Exception("按达人结算只能设置一条规则");
                 }
+            }
+
             kuaishouSettlementRulesService.addRules(requestJson);
             returnJson.put("code", 0);
             returnJson.put("message", "新增成功");
@@ -89,7 +119,7 @@ public class KuaishouSettlementRulesController extends BaseController {
 
 
     @DeleteMapping("/remove")
-    public AjaxResult remove( Long id) {
+    public AjaxResult remove(Long id) {
         return toAjax(kuaishouSettlementRulesService.deleteKuaishouSettlementRulesById(id));
     }
 

+ 201 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/controller/SupplyChainController.java

@@ -1537,4 +1537,205 @@ public class SupplyChainController extends BaseController {
     }
 
 
+
+
+
+    @GetMapping("/bdReportListV2")
+    @ApiOperation(value = "供应链管理员统计列表")
+    public TableDataInfo bdReportListV2(
+            @ApiParam("开始时间") @RequestParam(value = "orderStartDate", required = false) String orderStartDate,
+            @ApiParam("结束时间") @RequestParam(value = "orderEndDate", required = false) String orderEndDate,
+            @ApiParam("用户ID") @RequestParam(value = "collectSampleId", required = false) Long collectSampleId) {
+        Map<String, Object> requestMap = new HashMap<>();
+        if (!Check.isNull(orderStartDate)) {
+            Integer start = DateUtils.getIntegerTime(orderStartDate);
+            requestMap.put("start", start);
+        }
+        if (!Check.isNull(orderEndDate)) {
+            Integer end = DateUtils.getIntegerTime(orderEndDate);
+            requestMap.put("end", end);
+        }
+        if (!Check.isNull(collectSampleId)) {
+            requestMap.put("collectSampleId", collectSampleId);
+        }
+        TableDataInfo dataInfo = new TableDataInfo();
+        if (Check.isNullMap(requestMap)) {
+            dataInfo.setCode(500);
+            dataInfo.setMsg("入参不能为空");
+            return dataInfo;
+        }
+        startPage();
+        List<JSONObject> list = supplyChainService.bdReportListV2(requestMap);
+        return getDataTable(list);
+    }
+
+
+    @PostMapping("/exportBdReportListV2")
+    @ApiOperation(value = "供应链管理员统计列表")
+    @ResponseBody
+    public void exportBdReportListV2(HttpServletRequest request, HttpServletResponse response, @RequestBody JSONObject requestJson) throws IOException {
+        Map<String, Object> requestMap = new HashMap<>();
+        if (!Check.isNull(requestJson.getString("orderStartDate"))) {
+            Integer start = DateUtils.getIntegerTime(requestJson.getString("orderStartDate"));
+            requestMap.put("start", start);
+        }
+        if (!Check.isNull(requestJson.getString("orderEndDate"))) {
+            Integer end = DateUtils.getIntegerTime(requestJson.getString("orderEndDate"));
+            requestMap.put("end", end);
+        }
+        if (!Check.isNull(requestJson.getLong("collectSampleId"))) {
+            requestMap.put("collectSampleId", requestJson.getLong("collectSampleId"));
+        }
+
+        List<JSONObject> list = supplyChainService.bdReportListV2(requestMap);
+        List<List<Object>> exportList = new ArrayList<>();
+        if (!Check.isNull(list)) {
+            for (int i = 0; i < list.size(); i++) {
+                JSONObject date = list.get(i);
+                List<Object> export = new ArrayList();
+                export.add(date.getString("collectSampleId"));
+                export.add(date.getString("collectSampleName"));
+                export.add(date.getString("promoterCount"));
+                export.add(date.getString("sampleCount"));
+                export.add(date.getString("sampleRate"));
+                export.add(date.getString("notSampleCount"));
+                export.add(date.getString("sendTotalCount"));
+                export.add(date.getString("sendPromoterCount"));
+                export.add(date.getString("sendItemCount"));
+                export.add(date.getString("orderNum"));
+                export.add(date.getString("validOrderNum"));
+                export.add(date.getString("validOrderRate"));
+                export.add(date.getString("orderAmount"));
+                export.add(date.getString("regimentalPromotionAmount"));
+                export.add(date.getString("totalRegimentalSettleAmount"));
+                exportList.add(export);
+            }
+        }
+        String[] headers = {"渠道ID", "渠道姓名", "(总)达人数", "(总)领样达人数", "(总)领样率", "(总)未领样数", "发样数", "发样达人数", "发样商品数", "订单数",  "有效订单数",  "有效订单率", "订单金额",  "预估服务费", "结算服务费"};
+        OutputStream os = response.getOutputStream();
+        ExportExcelUtils eeu = new ExportExcelUtils();
+        XSSFWorkbook workbook = new XSSFWorkbook();
+        eeu.exportExcel(workbook, 0, "bd业绩汇总V2", headers, exportList);
+        this.setResponseHeader(response, "bd业绩汇总V2.xls");
+        workbook.write(os);
+        os.flush();
+        os.close();
+
+
+    }
+
+
+
+    @GetMapping("/bdTotalV2")
+    @ApiOperation(value = "供应链管理员统计列表")
+    public TableDataInfo bdTotalV2(
+            @ApiParam("开始时间") @RequestParam(value = "orderStartDate", required = false) String orderStartDate,
+            @ApiParam("结束时间") @RequestParam(value = "orderEndDate", required = false) String orderEndDate,
+            @ApiParam("用户ID") @RequestParam(value = "collectSampleId", required = false) Long collectSampleId) {
+        Map<String, Object> requestMap = new HashMap<>();
+        if (!Check.isNull(orderStartDate)) {
+            Integer start = DateUtils.getIntegerTime(orderStartDate);
+            requestMap.put("start", start);
+        }
+        if (!Check.isNull(orderEndDate)) {
+            Integer end = DateUtils.getIntegerTime(orderEndDate);
+            requestMap.put("end", end);
+        }
+        if (!Check.isNull(collectSampleId)) {
+            requestMap.put("collectSampleId", collectSampleId);
+        }
+
+        TableDataInfo dataInfo = new TableDataInfo();
+        if (Check.isNullMap(requestMap)) {
+            dataInfo.setCode(500);
+            dataInfo.setMsg("入参不能为空");
+            return dataInfo;
+        }
+        startPage();
+        List<JSONObject> list = supplyChainService.bdTotalV2(requestMap);
+        return getDataTable(list);
+    }
+
+
+    @GetMapping("/bdDetailListV2")
+    @ApiOperation(value = "供应链管理员统计列表")
+    public TableDataInfo bdDetailListV2(
+            @ApiParam("开始时间") @RequestParam(value = "orderStartDate", required = false) String orderStartDate,
+            @ApiParam("结束时间") @RequestParam(value = "orderEndDate", required = false) String orderEndDate,
+            @ApiParam("用户ID") @RequestParam(value = "collectSampleId", required = false) Long collectSampleId,
+            @ApiParam("排序字段") @RequestParam(value = "fieId", required = false) String fieId,
+            @ApiParam("排序放肆") @RequestParam(value = "sort", required = false) String sort) {
+        Map<String, Object> requestMap = new HashMap<>();
+        if (!Check.isNull(orderStartDate)) {
+            Integer start = DateUtils.getIntegerTime(orderStartDate);
+            requestMap.put("start", start);
+        }
+        if (!Check.isNull(orderEndDate)) {
+            Integer end = DateUtils.getIntegerTime(orderEndDate);
+            requestMap.put("end", end);
+        }
+        if (!Check.isNull(collectSampleId)) {
+            requestMap.put("collectSampleId", collectSampleId);
+        }
+        requestMap.put("fieId", fieId);
+        requestMap.put("sort", sort);
+        TableDataInfo dataInfo = new TableDataInfo();
+        if (Check.isNullMap(requestMap)) {
+            dataInfo.setCode(500);
+            dataInfo.setMsg("入参不能为空");
+            return dataInfo;
+        }
+        startPage();
+        List<JSONObject> list = supplyChainService.bdDetailListV2(requestMap);
+        return getDataTable(list);
+    }
+
+    @PostMapping("/exportBdDetailV2")
+    @ApiOperation(value = "认领商品列表")
+    @ResponseBody
+    public void exportBdDetailV2(HttpServletRequest request, HttpServletResponse response, @RequestBody JSONObject requestJson) throws IOException {
+        Map<String, Object> requestMap = new HashMap<>();
+        if (!Check.isNull(requestJson.getString("orderStartDate"))) {
+            Integer start = DateUtils.getIntegerTime(requestJson.getString("orderStartDate"));
+            requestMap.put("start", start);
+        }
+        if (!Check.isNull(requestJson.getString("orderEndDate"))) {
+            Integer end = DateUtils.getIntegerTime(requestJson.getString("orderEndDate"));
+            requestMap.put("end", end);
+        }
+        if (!Check.isNull(requestJson.getLong("collectSampleId"))) {
+            requestMap.put("collectSampleId", requestJson.getLong("collectSampleId"));
+        }
+        requestMap.put("fieId","orderNum");
+        requestMap.put("sort","desc");
+        List<JSONObject> list = supplyChainService.bdDetailListV2(requestMap);
+        List<List<Object>> exportList = new ArrayList<>();
+        if (!Check.isNull(list)) {
+            for (int i = 0; i < list.size(); i++) {
+                JSONObject date = list.get(i);
+                List<Object> export = new ArrayList();
+                export.add(date.getString("promoterId"));
+                export.add(date.getString("promoterName"));
+                export.add(date.getString("sampleCount"));
+                export.add(date.getString("orderNum"));
+                export.add(date.getString("validOrderNum"));
+                export.add(date.getString("validOrderRate"));
+                export.add(date.getString("regimentalPromotionAmount"));
+                export.add(date.getString("totalRegimentalSettleAmount"));
+                export.add(date.getString("promoterUrl"));
+                exportList.add(export);
+            }
+        }
+        String[] headers = {"达人ID", "达人名称", "领样数", "订单数", "有效订单数", "有效率", "预估服务费收入", "结算服务费收入", "达人头像"};
+        OutputStream os = response.getOutputStream();
+        ExportExcelUtils eeu = new ExportExcelUtils();
+        XSSFWorkbook workbook = new XSSFWorkbook();
+        eeu.exportExcel(workbook, 0, "bd业绩", headers, exportList);
+        this.setResponseHeader(response, "bd业绩.xls");
+        workbook.write(os);
+        os.flush();
+        os.close();
+    }
+
+
 }

+ 7 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/entity/KuaishouPromoter.java

@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.data.annotation.Transient;
 
 import java.util.Date;
 import java.util.List;
@@ -188,6 +189,12 @@ public class KuaishouPromoter {
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
+
+    @Transient
+    private Long ruleId;
+    @Transient
+    private String ruleName;
+
     public KuaishouPromoter() {
     }
 

+ 4 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/mapper/KuaishouPromoterMapper.java

@@ -98,4 +98,8 @@ public interface KuaishouPromoterMapper {
     Integer getBoundCount(@Param("userId") Long userId);
 
     Integer addPromotersCount(@Param("userId") Long userId, @Param("promotersCount") Long promotersCount, @Param("mediaId") String mediaId);
+
+    String getRuleName(@Param("ruleId") Long ruleId);
+
+    int addRule(@Param("promoterId") String promoterId, @Param("ruleId") Long ruleId, @Param("ruleName") String ruleName);
 }

+ 5 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/mapper/KuaishouRuleDetailMapper.java

@@ -1,5 +1,6 @@
 package com.ruixuan.isc.mapper;
 
+import com.alibaba.fastjson.JSONObject;
 import com.ruixuan.isc.entity.KuaishouRuleDetail;
 import org.apache.ibatis.annotations.Param;
 
@@ -67,5 +68,9 @@ public interface KuaishouRuleDetailMapper
     void deleteKuaishouRuleDetailByRuleId(@Param("id") Long id);
 
     List<KuaishouRuleDetail> getRuleDetailByRuleId(@Param("ruleId") Long ruleId);
+
+    List<JSONObject> getPromoterRuleList(@Param("userId") Long userId,@Param("ruleName") String ruleName);
+
+    List<JSONObject> getAllRuleList(@Param("userId") Long userId, @Param("ruleName") String ruleName);
 }
 

+ 6 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/mapper/KuaishouRuleSettlementDataMapper.java

@@ -1,5 +1,6 @@
 package com.ruixuan.isc.mapper;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.ruixuan.isc.entity.KuaishouRuleSettlementData;
 import org.apache.ibatis.annotations.Param;
@@ -88,4 +89,9 @@ public interface KuaishouRuleSettlementDataMapper {
     JSONObject getRuleJson(Long ruleId);
 
     JSONObject getData();
+
+
+    Integer selectPromoterIncentiveLog(Long promoterId);
+
+    void replacePromoterIncentiveLog(@Param("promoterId") Long promoterId, @Param("ruleId") Long ruleId, @Param("incentivizedCount") Integer incentivizedCount, @Param("lastIncentivizedCount") Integer lastIncentivizedCount);
 }

+ 6 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/mapper/SupplyChainMapper.java

@@ -108,4 +108,10 @@ public interface SupplyChainMapper {
     List<JSONObject> adminReportListByBind(Map<String, Object> requestMap);
 
     List<JSONObject> exportAdminReportListByBind(Map<String, Object> requestMap);
+
+    List<JSONObject> bdReportListV2(Map<String, Object> requestMap);
+
+    List<JSONObject> bdTotalV2(Map<String, Object> requestMap);
+
+    List<JSONObject> bdDetailListV2(Map<String, Object> requestMap);
 }

+ 4 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/service/IKuaishouPromoterService.java

@@ -77,4 +77,8 @@ public interface IKuaishouPromoterService {
     KuaishouPromoter getOnlyPromoterInfoByUserId(String promoterId, Long userId);
 
     JSONObject addPromotersCount(Long userId, Long promotersCount, String mediaId);
+
+    String getRuleName(Long ruleId);
+
+    int addRule(String promoterId, Long ruleId, String ruleName);
 }

+ 4 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/service/IKuaishouRuleSettlementDataService.java

@@ -67,6 +67,8 @@ public interface IKuaishouRuleSettlementDataService {
 
     JSONObject getOrderRuleData(Long relateId, Long promoterId, Long ruleId, Long validOrderNum);
 
+    JSONObject getPromoterRuleData(Long relateId, Long promoterId, Long ruleId, Long validOrderNum);
+
     List<JSONObject> getSettlementDate(Long statDate, Long promoterId, String promoterName);
 
     void updatePromoterStatus(Long statDate, Long promoterId, Integer status);
@@ -74,5 +76,7 @@ public interface IKuaishouRuleSettlementDataService {
     List<JSONObject> getPromoterSettlementDetail(Long date, Long promoterId,Integer settlementStatus);
 
     JSONObject getData();
+
+    void promoterData(Long statDate, JSONArray data);
 }
 

+ 4 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/service/IKuaishouSettlementRulesService.java

@@ -67,5 +67,9 @@ public interface IKuaishouSettlementRulesService
     void addRules(JSONObject requestJson);
 
     List<KuaishouRuleDetail> getRuleDetailByRuleId(Long ruleId);
+
+    List<JSONObject> getPromoterRuleList(Long userId, String ruleName);
+
+    List<JSONObject> getAllRuleList(Long userId, String ruleName);
 }
 

+ 6 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/service/ISupplyChainService.java

@@ -130,4 +130,10 @@ public interface ISupplyChainService {
     List<JSONObject> adminReportListByBind(Map<String, Object> requestMap);
     // 招商管理 绑定时间下载
     List<JSONObject> exportAdminReportListByBind(Map<String, Object> requestMap);
+
+    List<JSONObject> bdReportListV2(Map<String, Object> requestMap);
+
+    List<JSONObject> bdTotalV2(Map<String, Object> requestMap);
+
+    List<JSONObject> bdDetailListV2(Map<String, Object> requestMap);
 }

+ 10 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/service/impl/KuaishouPromoterServiceImpl.java

@@ -373,6 +373,16 @@ public class KuaishouPromoterServiceImpl implements IKuaishouPromoterService {
     }
 
     @Override
+    public String getRuleName(Long ruleId) {
+        return kuaishouPromoterMapper.getRuleName(ruleId);
+    }
+
+    @Override
+    public int addRule(String promoterId, Long ruleId, String ruleName) {
+        return kuaishouPromoterMapper.addRule(promoterId,ruleId,ruleName);
+    }
+
+    @Override
     public Result updatePromoterLabel(JSONObject result) {
         String promoterId = result.getString("promoterId");
         Long userId = result.getLong("userId");

+ 134 - 1
ruixuan-live/src/main/java/com/ruixuan/isc/service/impl/KuaishouRuleSettlementDataServiceImpl.java

@@ -163,6 +163,60 @@ public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettl
     }
 
 
+    @Override
+    public void promoterData(Long statDate, JSONArray dataArr) {
+        if (!Check.isNull(dataArr)) {
+            List<KuaishouRuleSettlementData> adds = new ArrayList<>();
+            for (int i = 0; i < dataArr.size(); i++) {
+                JSONObject dataJson = dataArr.getJSONObject(i);
+                KuaishouRuleSettlementData settlementData = new KuaishouRuleSettlementData();
+                Long relateId = dataJson.getLong("relateId");
+                Long ruleId = dataJson.getLong("ruleId");
+                Long promoterId = dataJson.getLong("promoterId");
+                String promoterName = dataJson.getString("promoterName");
+                Long orderNum = dataJson.getLong("orderNum");
+                Long validOrderNum = dataJson.getLong("validOrderNum");
+                if (validOrderNum == 0 || Check.isNull(validOrderNum)) {
+                    continue;
+                }
+                Long yesterdayOrderNum = dataJson.getLong("yesterdayOrderNum");
+                Long yesterdayValidOrderNum = dataJson.getLong("yesterdayValidOrderNum");
+                Integer rule_type = dataJson.getInteger("rule_type");
+                JSONObject ruleData = new JSONObject();
+                if (rule_type == 3) {
+                    ruleData = getPromoterRuleData(relateId, promoterId, ruleId,  validOrderNum);
+
+                } else  {
+                    continue;
+                }
+                settlementData.setRuleId(ruleId);
+                settlementData.setRuleName(ruleData.getString("ruleName"));
+                settlementData.setSonRuleId(ruleData.getLong("sonRuleId"));
+                settlementData.setPromoterId(promoterId);
+                settlementData.setPromoterName(promoterName);
+                settlementData.setOrderNum(orderNum);
+                settlementData.setValidOrderNum(validOrderNum);
+                settlementData.setYesterdayOrderNum(yesterdayOrderNum);
+                settlementData.setYesterdayValidOrderNum(yesterdayValidOrderNum);
+                settlementData.setStatDate(statDate);
+                settlementData.setAnchorAmount(ruleData.getBigDecimal("anchorAmount"));
+                settlementData.setReferenceAmount(ruleData.getBigDecimal("referenceAmount"));
+                settlementData.setSettlementStatus(ruleData.getInteger("settlementStatus"));
+                settlementData.setLastSettlementOrderNum(ruleData.getLong("lastSettlementOrderNum"));
+                settlementData.setRuleType(rule_type);
+                adds.add(settlementData);
+            }
+            if (!Check.isNull(adds)) {
+                kuaishouRuleSettlementDataMapper.replaceDatas(adds);
+                log.info("结算信息入库完成,时间:{},数据量:{}", statDate, adds.size());
+            }
+
+        }
+    }
+
+
+
+
     // 按区间结算
     @Override
     public JSONObject getRuleData(Long relateId, Long promoterId, Long ruleId, Long validOrderNum) {
@@ -428,7 +482,7 @@ public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettl
         BigDecimal anchorAmount = new BigDecimal(0); // 达人激励
         BigDecimal referenceAmount = new BigDecimal(0); // 推荐人激励
         KuaishouSettlementRules kuaishouSettlementRules = settlementRulesService.selectKuaishouSettlementRulesById(ruleId);
-
+        returnJson.put("ruleId", ruleId);
         JSONObject lastRule = kuaishouRuleSettlementDataMapper.lastRule(relateId, promoterId, ruleId); //上次结算命中的规则
         Long lastValidOrderNum = 0L;
         if (!Check.isNull(lastRule)) {
@@ -497,6 +551,83 @@ public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettl
     }
 
 
+    // 按达人结算
+
+    @Override
+    public JSONObject getPromoterRuleData(Long relateId, Long promoterId, Long ruleId, Long validOrderNum) {
+        JSONObject returnJson = new JSONObject();
+        BigDecimal anchorAmount = new BigDecimal(0); // 达人激励
+        BigDecimal referenceAmount = new BigDecimal(0); // 推荐人激励
+        KuaishouSettlementRules kuaishouSettlementRules = settlementRulesService.selectKuaishouSettlementRulesById(ruleId);
+        returnJson.put("ruleId", ruleId);
+        JSONObject lastRule = kuaishouRuleSettlementDataMapper.lastRule(null, promoterId, ruleId); //上次结算命中的规则
+        Long lastValidOrderNum = 0L;
+        if (!Check.isNull(lastRule)) {
+            lastValidOrderNum += lastRule.getLong("validOrderNum");
+        }
+        JSONObject ruleJson = kuaishouRuleSettlementDataMapper.getRuleJson(ruleId);
+        if (Check.isNull(ruleJson)) {
+            returnJson.put("sonRuleId", 0);
+            returnJson.put("ruleName", "未命中结算规则");
+            returnJson.put("anchorAmount", anchorAmount);
+            returnJson.put("referenceAmount", referenceAmount);
+            returnJson.put("settlementStatus", 1);
+            returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
+            return returnJson;
+        }
+        Integer itemCount = ruleJson.getInteger("startItemCount"); // 规则单数
+        BigDecimal ruleAnchorAmount = ruleJson.getBigDecimal("anchorAmount"); // 规则达人激励金额
+        if(Check.isNull(ruleAnchorAmount)){
+            ruleAnchorAmount = new BigDecimal(0);
+        }
+        BigDecimal ruleReferenceAmount = ruleJson.getBigDecimal("referenceAmount"); // 规则达人激励金额
+        if(Check.isNull(ruleReferenceAmount)){
+            ruleReferenceAmount = new BigDecimal(0);
+        }
+
+        if (validOrderNum < itemCount) {
+            returnJson.put("sonRuleId", 0);
+            returnJson.put("ruleName", "未命中结算规则");
+            returnJson.put("anchorAmount", anchorAmount);
+            returnJson.put("referenceAmount", referenceAmount);
+            returnJson.put("settlementStatus", 1);
+            returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
+            return returnJson;
+        }
+
+
+        Integer incentivizedCount = (int) Math.floor(validOrderNum / itemCount); // 需要结算的次数
+        Integer lastIncentivizedCount = kuaishouRuleSettlementDataMapper.selectPromoterIncentiveLog(promoterId); // 已结算次数
+        if (Check.isNull(lastIncentivizedCount)) {
+            lastIncentivizedCount = 0;
+        }
+        if (incentivizedCount > lastIncentivizedCount) {
+            BigDecimal count = new BigDecimal(incentivizedCount - lastIncentivizedCount);
+            BigDecimal promoterIncentiveAmount = count.multiply(ruleAnchorAmount); // 达人奖励
+            BigDecimal referenceIncentiveAmount = count.multiply(ruleReferenceAmount); // 推荐人奖励
+            anchorAmount = anchorAmount.add(promoterIncentiveAmount);
+            referenceAmount = referenceAmount.add(referenceIncentiveAmount);
+            kuaishouRuleSettlementDataMapper.replacePromoterIncentiveLog( promoterId, ruleId, incentivizedCount, lastIncentivizedCount);
+            returnJson.put("sonRuleId", ruleJson.getLong("id"));
+            returnJson.put("ruleName", kuaishouSettlementRules.getRuleName());
+            returnJson.put("anchorAmount", anchorAmount);
+            returnJson.put("referenceAmount", referenceAmount);
+            returnJson.put("settlementStatus", 2);
+            returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
+            return returnJson;
+
+        } else {
+            returnJson.put("sonRuleId", 0);
+            returnJson.put("ruleName", "未命中结算规则");
+            returnJson.put("anchorAmount", anchorAmount);
+            returnJson.put("referenceAmount", referenceAmount);
+            returnJson.put("settlementStatus", 1);
+            returnJson.put("lastSettlementOrderNum", lastValidOrderNum);
+            return returnJson;
+        }
+    }
+
+
     @Override
     public List<JSONObject> getSettlementDate(Long statDate, Long promoterId, String promoterName) {
         return kuaishouRuleSettlementDataMapper.getSettlementDate(statDate, promoterId, promoterName);
@@ -516,5 +647,7 @@ public class KuaishouRuleSettlementDataServiceImpl implements IKuaishouRuleSettl
     public JSONObject getData() {
         return kuaishouRuleSettlementDataMapper.getData();
     }
+
+
 }
 

+ 10 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/service/impl/KuaishouSettlementRulesServiceImpl.java

@@ -148,5 +148,15 @@ public class KuaishouSettlementRulesServiceImpl implements IKuaishouSettlementRu
     public List<KuaishouRuleDetail> getRuleDetailByRuleId(Long ruleId) {
         return kuaishouRuleDetailMapper.getRuleDetailByRuleId(ruleId);
     }
+
+    @Override
+    public List<JSONObject> getPromoterRuleList(Long userId, String ruleName) {
+        return kuaishouRuleDetailMapper.getPromoterRuleList(userId,ruleName);
+    }
+
+    @Override
+    public List<JSONObject> getAllRuleList(Long userId, String ruleName) {
+        return kuaishouRuleDetailMapper.getAllRuleList(userId,ruleName);
+    }
 }
 

+ 15 - 0
ruixuan-live/src/main/java/com/ruixuan/isc/service/impl/SupplyChainServiceImpl.java

@@ -289,4 +289,19 @@ public class SupplyChainServiceImpl implements ISupplyChainService {
     public List<JSONObject> exportAdminReportListByBind(Map<String, Object> requestMap) {
         return supplyChainMapper.exportAdminReportListByBind(requestMap);
     }
+
+    @Override
+    public List<JSONObject> bdReportListV2(Map<String, Object> requestMap) {
+        return supplyChainMapper.bdReportListV2(requestMap);
+    }
+
+    @Override
+    public List<JSONObject> bdTotalV2(Map<String, Object> requestMap) {
+        return supplyChainMapper.bdTotalV2(requestMap);
+    }
+
+    @Override
+    public List<JSONObject> bdDetailListV2(Map<String, Object> requestMap) {
+        return supplyChainMapper.bdDetailListV2(requestMap);
+    }
 }

+ 16 - 4
ruixuan-live/src/main/resources/mapper/isc/KuaishouPromoterMapper.xml

@@ -61,7 +61,6 @@
     </sql>
 
     <select id="selectKuaishouPromoterList" resultMap="KuaishouPromoterResult">
-        SELECT * from (
         SELECT
         t1.id,
         t1.user_id,
@@ -100,11 +99,14 @@
         case
         WHEN t3.avg_video_sales like '%万%'
         then SUBSTRING_INDEX(t3.avg_video_sales,'-',-1)+0
-        else SUBSTRING_INDEX(t3.avg_video_sales,'-',-1)/10000 end as 'avgVideoSalesOrder'
+        else SUBSTRING_INDEX(t3.avg_video_sales,'-',-1)/10000 end as 'avgVideoSalesOrder',
+        t4.rule_id,
+        t4.rule_name
         FROM
         kuaishou_promoter t1
         LEFT JOIN promoter_oerder_amount t2 on t1.promoter_id = t2.promoter_id
         LEFT JOIN promoter_sales_info t3 ON t1.promoter_id = t3.promoter_id
+        left join promoter_bind_rule t4 on t1.promoter_id = t4.promoter_id
         <where>
             <if test="userList != null and userList.size() > 0  ">
                 and t1.user_id in
@@ -122,7 +124,6 @@
                 and t1.media_id = #{mediaId}
             </if>
         </where>
-        ) t
         order by ${parameter} ${orderBy}
     </select>
 
@@ -506,6 +507,10 @@
         FROM `kuaishou_promoter`
         WHERE user_id = #{userId}
     </select>
+    <select id="getRuleName" resultType="java.lang.String" parameterType="java.lang.Long">
+        select rule_name  from  kuaishou_settlement_rules where id = #{ruleId}
+
+    </select>
 
 
     <insert id="addPromotersCount">
@@ -516,7 +521,14 @@
         (
         #{userId},
         #{promotersCount},
-        #{mediaId},
+        #{mediaId}
         )
     </insert>
+    <insert id="addRule">
+        replace into
+         promoter_bind_rule(promoter_id,rule_id,rule_name,create_time,update_time)
+          values
+        (#{promoterId},#{ruleId},#{ruleName},now(),now())
+
+    </insert>
 </mapper>

+ 52 - 1
ruixuan-live/src/main/resources/mapper/isc/KuaishouRuleDetailMapper.xml

@@ -43,7 +43,6 @@
         where rule_id = #{ruleId}
         order by sort_count asc
     </select>
-
     <insert id="insertKuaishouRuleDetail" parameterType="com.ruixuan.isc.entity.KuaishouRuleDetail">
         insert into kuaishou_rule_detail
         <trim prefix="(" suffix=")" suffixOverrides=",">
@@ -120,4 +119,56 @@
     <delete id="deleteKuaishouRuleDetailByRuleId" parameterType="java.lang.Long">
         delete  from kuaishou_rule_detail where rule_id = #{id}
     </delete>
+
+    <select id="getPromoterRuleList" resultType="com.alibaba.fastjson.JSONObject">
+        select id as 'id',
+        rule_name as 'ruleName',
+        rule_type as 'ruleType',
+        user_id as 'userId',
+        user_name as 'userName',
+        create_time as 'createTime'
+        from kuaishou_settlement_rules
+        where 1= 1
+        <if test="userId != null and userId != ''">
+            and user_id = #{userId}
+        </if>
+        <if test="ruleName != null and ruleName != ''">
+            and rule_name like concat('%',#{ruleName}, '%')
+        </if>
+        and rule_type = 3
+        order by create_time desc
+    </select>
+    <select id="getAllRuleList" resultType="com.alibaba.fastjson.JSONObject" parameterType="java.lang.Long">
+
+        select * from (
+        select id as 'id',
+        rule_name as 'ruleName',
+        rule_type as 'ruleType',
+        user_id as 'userId',
+        user_name as 'userName',
+        create_time as 'createTime'
+        from kuaishou_settlement_rules
+        where id = 1
+        <if test="ruleName != null and ruleName != ''">
+            and rule_name like concat('%',#{ruleName}, '%')
+        </if>
+        union all
+        select id as 'id',
+        rule_name as 'ruleName',
+        rule_type as 'ruleType',
+        user_id as 'userId',
+        user_name as 'userName',
+        create_time as 'createTime'
+        from kuaishou_settlement_rules
+        where 1= 1
+        <if test="userId != null and userId != ''">
+            and user_id = #{userId}
+        </if>
+        <if test="ruleName != null and ruleName != ''">
+            and rule_name like concat('%',#{ruleName}, '%')
+        </if>
+        order by createTime desc
+        )
+        t group by t.id
+    </select>
 </mapper>

+ 32 - 3
ruixuan-live/src/main/resources/mapper/isc/KuaishouRuleSettlementDataMapper.xml

@@ -215,7 +215,10 @@
         (select  sort_count  from kuaishou_rule_detail where  id = t1.son_rule_id) as 'sortCount',
          IFNULL(valid_order_num,0)  as 'validOrderNum'
         from  kuaishou_rule_settlement_data t1
-        where  relate_id = #{relateId}
+        where 1 = 1
+        <if test="relateId != null and relateId != ''">
+         and   relate_id = #{relateId}
+        </if>
         and  promoter_id = #{promoterId}
         and  rule_id = #{ruleId}
         and settlement_status != 1
@@ -235,6 +238,13 @@
         and promoter_id = #{promoterId} order by create_time desc limit 1
     </select>
 
+    <select id="selectPromoterIncentiveLog" resultType="java.lang.Integer" parameterType="java.lang.Long">
+
+  select  ifnull(incentive_count,0)  from kuaishou_protomer_rule_incentive_log where  promoter_id = #{promoterId} order by create_time desc limit 1
+    </select>
+
+
+
     <insert id="replaceIncentiveLog">
         replace into kuaishou_rule_incentive_log (
         relate_id,
@@ -253,6 +263,23 @@
     </insert>
 
 
+    <insert id="replacePromoterIncentiveLog">
+        replace into kuaishou_protomer_rule_incentive_log (
+        promoter_id,
+        rule_id,
+        incentive_count,
+        last_incentive_count
+        ) values (
+        #{promoterId},
+        #{ruleId},
+        #{incentivizedCount},
+        #{lastIncentivizedCount}
+        )
+
+    </insert>
+
+
+
     <select id="getTotalByCountAndRuleId" resultType="com.alibaba.fastjson.JSONObject">
         select
         ifnull(round(sum(anchor_amount) * #{incentivizedCount}, 2),0)    as 'anchorAmount',
@@ -389,8 +416,8 @@
                    round(t2.item_price / 100, 2)                as 'itemPrice'
             from ruixuan.kuaishou_rule_order_data t1
                      left join ruixuan.kuaishou_item_list t2 on t1.item_id = t2.item_id
-            where t1.item_id  = 21112531910237
-            and t1.promoter_id = 3469906734
+            where t1.item_id  = 20789864366937
+            and t1.promoter_id = 3495457926
             and t1.stat_date = 20230911
               and t1.relate_id is not null
             group by t1.relate_id, t1.promoter_id) t
@@ -400,6 +427,7 @@
                    on t.ruleId = tt.id
     </select>
 
+
     <insert id="replaceDatas">
         replace into kuaishou_rule_settlement_data(
         rule_id,
@@ -454,4 +482,5 @@
     </insert>
 
 
+
 </mapper>

+ 5 - 0
ruixuan-live/src/main/resources/mapper/isc/KuaishouSettlementRulesMapper.xml

@@ -34,6 +34,10 @@
         <include refid="selectKuaishouSettlementRulesVo"/>
         where id = #{id}
     </select>
+
+
+
+
     <select id="getRuleList" resultType="com.alibaba.fastjson.JSONObject" parameterType="java.lang.Long">
 
         select * from (
@@ -63,6 +67,7 @@
         <if test="ruleName != null and ruleName != ''">
             and rule_name like concat('%',#{ruleName}, '%')
         </if>
+        and rule_type in(1,2)
         order by createTime desc
         ) t group by t.id
 

+ 133 - 3
ruixuan-live/src/main/resources/mapper/isc/SupplyChainMapper.xml

@@ -198,7 +198,7 @@
     </select>
 
     <select id="itemDetail" resultType="com.alibaba.fastjson.JSONObject">
-        select *
+        select t.*,tt.userName
         from (
         select
         promoter_nick_name as 'promoterNickName',
@@ -229,7 +229,8 @@
         <if test="promoterNickName != null and promoterNickName != ''">
             and promoter_nick_name like concat(concat('%',#{promoterNickName}),'%')
         </if>
-        group by promoter_id) t
+        group by promoter_id) t left join (select promoter_id,group_concat(user_name) as 'userName' from kuaishou_promoter group by promoter_id)  tt
+        on t.promoterId = tt.promoter_id
         order by t.orderNum desc
     </select>
     <select id="itemServiceCharge" resultType="com.alibaba.fastjson.JSONObject">
@@ -1702,7 +1703,7 @@
         <if test="userId != null and userId != ''">
             and t1.userId = #{userId}
         </if>
-        group by t1.user_id )  t left join (
+        group by t1.user_id ) t left join (
         select t1.user_id,count(distinct courier_number) as 'sendSampleCount' from kuaishou_item_list t1 left join
         kuaishou_item_collect_samples t2
         on t1.item_id = t2.item_id
@@ -1761,4 +1762,133 @@
         ) t2 on t.userId = t2.user_id order by t.orderNum desc;
 
     </select>
+    <select id="bdReportListV2" resultType="com.alibaba.fastjson.JSONObject">
+        select t.*,
+        tt.promoterCount,
+        ttt.sampleCount,
+        tttt.sendTotalCount,
+        tttt.sendPromoterCount,
+        tttt.sendItemCount,
+        IFNULL( ttttt.promoters_count,'-') as 'promotersCount',
+        concat(round(ttt.sampleCount / tt.promoterCount * 100, 2), '%') as 'sampleRate',
+        tt.promoterCount - ttt.sampleCount as 'notSampleCount'
+        from (
+        select t1.user_id as 'collectSampleId',
+        t1.user_name as 'collectSampleName',
+        sum(t2.order_num) as 'orderNum',
+        sum(t2.valid_order_num) as 'validOrderNum',
+        concat(round(sum(t2.valid_order_num) / sum(t2.order_num) * 100, 2), '%') as 'validOrderRate',
+        round(sum(t2.order_amount) / 100, 2) as 'orderAmount',
+        round(sum(t2.regimental_promotion_amount) / 100, 2) as 'regimentalPromotionAmount',
+        round(sum(t2.total_regimental_settle_amount) / 100, 2) as 'totalRegimentalSettleAmount'
+        from promoter_bind_channel_date t1
+        left join canal_management t2
+        on t1.promoter_id = t2.promoter_id and t1.stat_date = t2.stat_date
+        where 1 = 1
+        <if test="start != null and start != ''">
+            and t1.stat_date &gt;= #{start}
+        </if>
+        <if test="end != null and end != ''">
+            and t1.stat_date &lt;= #{end}
+        </if>
+        <if test="collectSampleId != null and collectSampleId != ''">
+            and t1.user_id = #{collectSampleId}
+        </if>
+        group by t1.user_id) t
+        left join (select user_id,
+        count(distinct promoter_id) as 'promoterCount'
+        from kuaishou_promoter
+        group by user_id) tt on t.collectSampleId = tt.user_id
+        left join (select collect_sample_id as 'user_id',
+        count(distinct promoter_id) as 'sampleCount'
+        from kuaishou_item_collect_samples
+        where collect_sample_status > 2
+        group by collect_sample_id) ttt on t.collectSampleId = ttt.user_id
+        left join (select collect_sample_id as 'user_id',
+        count(1) as 'sendTotalCount',
+        count(distinct promoter_id) as 'sendPromoterCount',
+        count(distinct item_id) as 'sendItemCount'
+        from kuaishou_item_collect_samples
+        where collect_sample_status > 2
+        <if test="collectSampleId != null and collectSampleId != ''">
+            and collect_sample_id = #{collectSampleId}
+        </if>
+        <if test="start != null and start != ''">
+            and create_time &gt;= str_to_date(concat(date_format(#{start}, '%Y-%m-%d'), '00:00:01'), '%Y-%m-%d
+            %H:%i:%s')
+        </if>
+        <if test="end != null and end != ''">
+            and create_time &lt;= str_to_date(concat(date_format(#{end}, '%Y-%m-%d'), '23:59:59'), '%Y-%m-%d %H:%i:%s')
+        </if>
+        group by collect_sample_id) tttt on t.collectSampleId = tttt.user_id
+        left join (select user_id, promoters_count
+        from user_promoters_count
+        where media_id = 2) ttttt
+        on t.collectSampleId = ttttt.user_id
+        order by t.orderNum desc
+    </select>
+    <select id="bdTotalV2" resultType="com.alibaba.fastjson.JSONObject">
+        select t.*,tt.sampleCount
+        from (select t1.user_id as 'collectSampleId',
+        t1.user_name as 'collectSampleName',
+        sum(t2.order_num) as 'orderNum',
+        sum(t2.valid_order_num) as 'validOrderNum',
+        concat(round(sum(t2.valid_order_num) / sum(t2.order_num) * 100, 2), '%') as 'validOrderRate',
+        round(sum(t2.order_amount) / 100, 2) as 'orderAmount',
+        round(sum(t2.regimental_promotion_amount) / 100, 2) as 'regimentalPromotionAmount',
+        round(sum(t2.total_regimental_settle_amount) / 100, 2) as 'totalRegimentalSettleAmount'
+        from promoter_bind_channel_date t1
+        left join canal_management t2
+        on t1.promoter_id = t2.promoter_id and t1.stat_date = t2.stat_date
+        where 1 = 1
+        <if test="start != null and start != '' ">
+            and t1.stat_date &gt;= #{start}
+        </if>
+        <if test="end != null and end != ''">
+            and t1.stat_date &lt;= #{end}
+        </if>
+        <if test="collectSampleId != null and collectSampleId != ''">
+            and t1.user_id = #{collectSampleId}
+        </if>
+        group by t1.user_id) t
+        join (select count(distinct item_id) as 'sampleCount'
+        from kuaishou_item_collect_samples
+        where collect_sample_status > 2
+        and collect_sample_id = #{collectSampleId} ) tt
+
+    </select>
+    <select id="bdDetailListV2" resultType="com.alibaba.fastjson.JSONObject">
+        select t.*, tt.sampleCount
+        from (select t1.promoter_id as 'promoterId',
+        t1.promoter_name as 'promoterName',
+        t1.promoter_url as 'promoterUrl',
+        sum(t2.order_num) as 'orderNum',
+        sum(t2.valid_order_num) as 'validOrderNum',
+        concat(round(sum(t2.valid_order_num) / sum(t2.order_num) * 100, 2), '%') as 'validOrderRate',
+        round(sum(t2.order_amount) / 100, 2) as 'orderAmount',
+        round(sum(t2.regimental_promotion_amount) / 100, 2) as 'regimentalPromotionAmount',
+        round(sum(t2.total_regimental_settle_amount) / 100, 2) as 'totalRegimentalSettleAmount'
+        from promoter_bind_channel_date t1
+        left join canal_management t2
+        on t1.promoter_id = t2.promoter_id and t1.stat_date = t2.stat_date
+        where 1 = 1
+        <if test="start != null and start != '' ">
+            and t1.stat_date &gt;= #{start}
+        </if>
+        <if test="end != null and end != ''">
+            and t1.stat_date &lt;= #{end}
+        </if>
+        <if test="collectSampleId != null and collectSampleId != ''">
+            and t1.user_id = #{collectSampleId}
+        </if>
+        group by t1.promoter_id) t
+        left join (select promoter_id,
+        count(distinct item_id) as 'sampleCount'
+        from kuaishou_item_collect_samples
+        where collect_sample_status > 2
+        and collect_sample_id = #{collectSampleId}
+        group by promoter_id) tt on t.promoterId = tt.promoter_id
+        where t.orderNum > 0
+        order by ${fieId} ${sort}
+    </select>
 </mapper>