Bläddra i källkod

利润单-快手

yangzian 3 år sedan
förälder
incheckning
4e914fd647

+ 5 - 3
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/mapper/ReportSettlementMapper.java

@@ -56,11 +56,13 @@ public interface ReportSettlementMapper {
     List<Map<String,Object>> getProfitBytedanceCost(@Param("accountId") String accountId,@Param("startTime") String startTime,@Param("endTime") String endTime);
 
     /**
-     * 查询 快手 利润表 总花费
-     * @param uploadYears
+     * 查询 快手 利润表 所有账户
+     * @param
      * @return
      */
-    List<Map<String,Object>> getProfitKuaiShou(String uploadYears);
+    List<Map<String,Object>> getProfitKuaiShouAccountCost(@Param("accountId")String accountId,@Param("startTime")String startTime ,@Param("endTime")String endTime);
+    //快手 利润表 账户 时间段内的数据信息
+    List<Map<String,Object>> getProfitKuaiShouCost(@Param("accountId")String accountId,@Param("startTime")String startTime ,@Param("endTime")String endTime);
 
     /**
      * 查询 头条利润表  返点类型和比列

+ 2 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/mapper/SettlementFileInfoMapper.java

@@ -1,6 +1,7 @@
 package org.jeecg.ctop.finance.settlement.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import io.lettuce.core.dynamic.annotation.Param;
 import org.jeecg.ctop.finance.settlement.entity.pojo.CtopCwjsSettlementFileInfo;
 import org.jeecg.ctop.finance.settlement.entity.vo.SettlementFileParamsVo;
 
@@ -47,5 +48,5 @@ public interface SettlementFileInfoMapper extends BaseMapper<CtopCwjsSettlementF
      * @param accountId
      * @return
      */
-    Map<String,String> getSettlementAccount(String accountId);
+    Map<String,String> getSettlementAccount(@Param("accountId")String accountId,@Param("mediaId") String mediaId);
 }

+ 38 - 16
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/mapper/xml/ReportSettlementMapper.xml

@@ -89,8 +89,7 @@
         LEFT JOIN ctop_user_allocation u ON d.advertiser_id = u.account_id
         LEFT JOIN ctop_project p ON u.project_id = p.id
         LEFT JOIN ctop_product pd on pd.id = p.product_id
-
-        <where>
+        where (u.media_id = 1 or u.media_id = 3)
             <if test="accountId !=null and accountId != ''">
                 AND d.advertiser_id = #{accountId}
             </if>
@@ -100,8 +99,6 @@
             <if test="endTime !=null and endTime != ''">
                 AND d.date &lt;= #{endTime}
             </if>
-            AND u.media_id = 1 or u.media_id = 3
-        </where>
         GROUP BY
             d.advertiser_id;
 
@@ -132,9 +129,6 @@
             <if test="endTime !=null and endTime != ''">
                 AND d.date &lt;= #{endTime}
             </if>
-
-
-
     </select>
 
 
@@ -241,31 +235,58 @@
 
 
 <!-- 查询 快手 利润表 总花费-->
-    <select id="getProfitKuaiShou" resultType="java.util.LinkedHashMap">
+    <select id="getProfitKuaiShouAccountCost" resultType="java.util.LinkedHashMap">
         SELECT
             d.account_id AS accountId,
             SUM( d.daily_charge ) AS cost,
             SUM( d.real_charged ) AS cashCost,
-            cwjs.product_id as productId,
-            p.product_name AS productName
+            pd.id as productId,
+            pd.product_name AS productName
         FROM
             ctop_kuaishou_daily_flows d
-                LEFT JOIN ctop_cwjs_settlement_info cwjs ON d.account_id = cwjs.account_id
-                LEFT JOIN ctop_product p ON cwjs.product_id = p.id
-        WHERE
-            cwjs.del_flag = 0
+        LEFT JOIN ctop_user_allocation u ON d.account_id = u.account_id
+        LEFT JOIN ctop_project p ON u.project_id = p.id
+        LEFT JOIN ctop_product pd on pd.id = p.product_id
+        where (u.media_id = 2 or u.media_id = 4)
+        <if test="accountId !=null and accountId != ''">
+            AND d.account_id = #{accountId}
+        </if>
         <if test="startTime !=null and startTime != ''">
             AND d.date &gt;= #{startTime}
         </if>
         <if test="endTime !=null and endTime != ''">
             AND d.date &lt;= #{endTime}
         </if>
-
         GROUP BY
             d.account_id;
     </select>
 
 
+<!-- 查询 快手 利润表 总花费-->
+    <select id="getProfitKuaiShouCost" resultType="java.util.LinkedHashMap">
+        SELECT
+        d.account_id AS accountId,
+        SUM( d.daily_charge ) AS cost,
+        SUM( d.real_charged ) AS cashCost,
+        pd.id as productId,
+        pd.product_name AS productName
+        FROM
+        ctop_kuaishou_daily_flows d
+        LEFT JOIN ctop_user_allocation u ON d.account_id = u.account_id
+        LEFT JOIN ctop_project p ON u.project_id = p.id
+        LEFT JOIN ctop_product pd on pd.id = p.product_id
+        where (u.media_id = 2 or u.media_id = 4)
+        <if test="accountId !=null and accountId != ''">
+            AND d.account_id = #{accountId}
+        </if>
+        <if test="startTime !=null and startTime != ''">
+            AND d.date &gt;= #{startTime}
+        </if>
+        <if test="endTime !=null and endTime != ''">
+            AND d.date &lt;= #{endTime}
+        </if>
+    </select>
+
 
 
     <!-- 查询 快手 利润表  广告主和运营和运营所属区域-->
@@ -274,7 +295,7 @@
         u.advertiser_id,
         u.account_id,
         b.user_id as ksId,
-        u.advertiser_name as advertiserName,
+        d.name as advertiserName,
         u.user_id,
         u.user_name as operateName,
         u.auth_name,
@@ -283,6 +304,7 @@
         ctop_user_allocation u
         LEFT JOIN ctop_kuaishou_advertiser_base_info b on u.account_id = b.account_id
         LEFT JOIN user_company p on p.user_id = u.user_id
+        LEFT JOIN ctop_advertiser d on u.advertiser_id = d.id
     <where>
         <if test="accountId !=null and accountId != ''">
             AND u.account_id = #{accountId}

+ 10 - 8
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/mapper/xml/SettlementFileInfoMapper.xml

@@ -177,19 +177,20 @@
     <select id="getAccountNumAndImgNum" resultType="java.util.Map">
         SELECT * from
                      (
-                         SELECT
-                                COUNT(account_id) as accountNum
-                         FROM
-                             ctop_cwjs_settlement_info
-                            where del_flag = 0
+                    SELECT
+                    COUNT(c.account_id) as accountNum
+                    FROM
+                    ctop_cwjs_settlement_info c
+                    LEFT JOIN ctop_user_allocation u on c.account_id = u.account_id
+                    where del_flag = 0
                         <if test="advertiserId !=null and advertiserId != ''">
-                            AND advertiser_id = #{advertiserId}
+                            AND c.advertiser_id = #{advertiserId}
                         </if>
                         <if test="productId !=null and productId != ''">
-                            AND product_id = #{productId}
+                            AND c.product_id = #{productId}
                         </if>
                         <if test="mediaId !=null and mediaId != ''">
-                            AND media_id = #{mediaId}
+                            AND c.media_id = #{mediaId}
                         </if>
                          ) t1,
                      (
@@ -228,6 +229,7 @@
             f.account_id = u.account_id
           AND u.account_status = 0
           AND u.account_id = #{accountId}
+          and f.media_id = #{mediaId}
             LIMIT 1
 
     </select>

+ 90 - 27
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/service/serviceImpl/ReportSettlementServiceImpl.java

@@ -581,45 +581,108 @@ public class ReportSettlementServiceImpl implements IReportSettlementService {
     public Result porfitReportKuaiShou(SettlementFileParamsVo paramsVo, HttpServletResponse response) {
 
         try {
-            //查询 快手利润表 总花费
-            List<Map<String,Object>> list = reportSettlementMapper.getProfitKuaiShou(paramsVo.getUploadYears());
+            //查询 快手利润表  时间段内的 所有账户
+            List<Map<String,Object>> list = reportSettlementMapper.getProfitKuaiShouAccountCost(null,paramsVo.getStartTime(),paramsVo.getEndTime());
             if (Check.isNull(list)){
                 return Result.errorMsg("暂无数据。");
             }
             List<ProfitReportKuaiShouVo> resultList = new ArrayList<>(list.size());
             for (Map<String, Object> map : list) {
-                ProfitReportKuaiShouVo vo = new ProfitReportKuaiShouVo();
-                vo.setAccountId(map.getOrDefault("accountId","")+"");//账户id
-                vo.setCost(map.getOrDefault("cost","")+"");//总消耗
-                vo.setCashCost(map.getOrDefault("cashCost","")+"");//现金消耗
-                vo.setProductName(map.getOrDefault("productName","")+"");//产品名称
+                //查看该账户 状态信息
+                QueryWrapper<CtopCwjsSettlementInfo> settlementAccountQw = new QueryWrapper<>();
+                settlementAccountQw.eq("account_id",map.get("accountId"));
+                //账户状态 0-开 1-关
+                settlementAccountQw.eq("status",0);
+                //(0,正常,1已删除)
+                settlementAccountQw.eq("del_flag",0);
+                List<CtopCwjsSettlementInfo> settlementAccountList =  settlementInfoMapper.selectList(settlementAccountQw);
+                if (Check.isNull(settlementAccountList)){
+                    continue;
+                }
+
+                ProfitReportKuaiShouVo voSource = new ProfitReportKuaiShouVo();
 
                 //查询销售
                 Map<String,Object> slaeMap = reportSettlementMapper.getProfitBytedanceSale(map.get("accountId")+"");
-                vo.setSaleName(Check.isNull(slaeMap) ? "" : slaeMap.getOrDefault("saleName","")+"");//销售
-
-                //查询  销售人员姓名 以及 返点类型和比列
-                List<Map<String,Object>> rateMap = reportSettlementMapper.getProfitBytedance(map.get("productId")+"","2",paramsVo.getStartTime(),paramsVo.getEndTime());
-               /* if (!Check.isNull(slaeMap)){
-
-                    // 当前查询时间 与 销售政策 开始 截至时间 是否匹配
-                    if (SettlementUtil.isEffectiveDate(paramsVo.getUploadYears(),rateMap.get("policyStart")+"",rateMap.get("policyEnd")+"")){
-                        //销售政策状态 为 通过 显示 返点类型 和 返点比列
-                        if (StringUtils.equals(rateMap.getOrDefault("approvedStatus","")+"","3")){
-                            vo.setRebateType(rateMap.getOrDefault("rebateType","")+"");//返点类型
-                            vo.setRebateRate(rateMap.getOrDefault("rebateRate","")+"");//返点比列
-                        }
-                    }
-                }*/
+                voSource.setSaleName(Check.isNull(slaeMap) ? "" : slaeMap.getOrDefault("saleName","")+"");//销售
+
+
+
+                voSource.setAccountId(map.getOrDefault("accountId","")+"");//账户id
+
+                voSource.setProductName(map.getOrDefault("productName","")+"");//产品名称
+
 
                 Map<String,Object> operateMap = reportSettlementMapper.getProfitKuaiShouOperate(map.get("accountId")+"");
                 if (!Check.isNull(operateMap)){
-                    vo.setKsId(operateMap.getOrDefault("ksId","")+"");//快手id
-                    vo.setAdvertiserName(operateMap.getOrDefault("advertiserName","")+"");//广告主名称
-                    vo.setOperateName(operateMap.getOrDefault("operateName","")+"");//运营
-                    vo.setOperateArea(operateMap.getOrDefault("operateArea","")+"");//运营所属区域
+                    voSource.setKsId(operateMap.getOrDefault("ksId","")+"");//快手id
+                    voSource.setAdvertiserName(operateMap.getOrDefault("advertiserName","")+"");//广告主名称
+                    voSource.setOperateName(operateMap.getOrDefault("operateName","")+"");//运营
+                    voSource.setOperateArea(operateMap.getOrDefault("operateArea","")+"");//运营所属区域
+                }
+
+                //查询 快手利润表  返点类型和比列
+                List<Map<String,Object>> rateMap = reportSettlementMapper.getProfitBytedance(map.get("productName")+"","2",paramsVo.getStartTime(),paramsVo.getEndTime());
+                List listPolicyTIme = new ArrayList();
+                for (Map<String, Object> rate : rateMap) {
+                    listPolicyTIme.add(rate.get("policyStartDate"));
+                    listPolicyTIme.add(rate.get("policyEndDate"));
                 }
-                resultList.add(vo);
+
+                //政策时间 去重 排序
+                List<Object> times = SettlementUtil.sortlistTest(listPolicyTIme);
+                // 使用政策的时间段 拼接 开始 和 截至 时间
+                List<Map<String, String>> arrayList = new ArrayList<>();
+                for ( int i = 0; i < times.size(); i++) {
+                    HashMap<String, String> mapTime = new HashMap<>();
+                    mapTime.put("startDate", times.get(i).toString());
+                    mapTime.put("endDate",  times.get(i+1).toString());
+                    i += 1;
+                    arrayList.add(mapTime);
+                }
+
+                //政策所有时间点
+                List<String> policyDaysList = new ArrayList<>();
+                for (Map<String, String> stringMap : arrayList) {
+                    ProfitReportKuaiShouVo vo = new ProfitReportKuaiShouVo();
+                    //使用政策 返点类型和比例
+                    Map<String,Object>  policyRateMap = reportSettlementMapper.getProfitRebate(map.get("productName")+"",stringMap.get("startDate"),stringMap.get("endDate"));
+                    vo.setRebateType(policyRateMap.getOrDefault("rebateType","")+"");//返点类型
+                    vo.setRebateRate(policyRateMap.getOrDefault("rebateRate","")+"");//返点比列
+                    // 时间段内 账户流水 信息
+                    List<Map<String,Object>> listAccount = reportSettlementMapper.getProfitKuaiShouCost(map.get("accountId")+"",stringMap.get("startDate"),stringMap.get("endDate"));
+                    listAccount.removeAll(Collections.singleton(null));
+                    vo.setCost(Check.isNull(listAccount) ? "0" : listAccount.get(0).getOrDefault("cost","")+"");//总消耗
+                    vo.setCashCost(Check.isNull(listAccount) ? "0" : listAccount.get(0).getOrDefault("cashCost","")+"");//现金消耗
+                    BeanUtils.copyProperties(voSource,vo,SettlementUtil.getNullPropertyNames(voSource));
+                    resultList.add(vo);
+                    policyDaysList.addAll(SettlementUtil.getAllDatesOfTwoTimes(stringMap.get("startDate"),stringMap.get("endDate")));
+                }
+
+                //不使用政策 的时间段
+                // 获取两个日期之间 所有的 时间 年-月-日
+                List<String> betweenDaysList = SettlementUtil.getAllDatesOfTwoTimes(paramsVo.getStartTime(),paramsVo.getEndTime());
+                // 时间差集(所有时间段 - 使用政策的时间段)
+                List<String>  reduceList = betweenDaysList.stream().filter(item -> !policyDaysList.contains(item)).collect(Collectors.toList());
+                //差集拼接  开始 和 结束时间
+                List<Map<String, String>> stringList = SettlementUtil.getTime(reduceList);
+                for (Map<String, String> stringMap : stringList) {
+                    ProfitReportKuaiShouVo vo = new ProfitReportKuaiShouVo();
+                    // 不使用 政策 则 返点为空
+                    //政策 返点类型和比例
+                    /* Map<String,Object>  policyRateMap = reportSettlementMapper.getProfitRebate(map.get("productName")+"",stringMap.get("startDate"),stringMap.get("endDate"));
+                     */
+                    vo.setRebateType("");//返点类型
+                    vo.setRebateRate("");//返点比列
+                    //账户流水 信息
+                    List<Map<String,Object>> listAccount = reportSettlementMapper.getProfitKuaiShouCost(map.get("accountId")+"",stringMap.get("startDate"),stringMap.get("endDate"));
+                    listAccount.removeAll(Collections.singleton(null));
+                    vo.setCost(Check.isNull(listAccount) ? "0" : listAccount.get(0).getOrDefault("cost","")+"");//总消耗
+                    vo.setCashCost(Check.isNull(listAccount) ? "0" : listAccount.get(0).getOrDefault("cashCost","")+"");//现金消耗
+                    BeanUtils.copyProperties(voSource,vo,SettlementUtil.getNullPropertyNames(voSource));
+                    resultList.add(vo);
+                }
+
             }
 
             Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("快手利润单", "快手利润单"), ProfitReportKuaiShouVo.class, resultList);

+ 2 - 2
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/service/serviceImpl/SettlementFileInfoServiceImpl.java

@@ -168,10 +168,10 @@ public class SettlementFileInfoServiceImpl extends ServiceImpl<SettlementFileInf
 
             settlement.setAccountId(SettlementUtil.subAccountName(settlement.getFileName()));
 
-            Map<String,String> map = settlementFileInfoMapper.getSettlementAccount(settlement.getFileName());
+            Map<String,String> map = settlementFileInfoMapper.getSettlementAccount(settlement.getAccountId(),String.valueOf(settlementFileInfo.getMediaId()));
             if (Check.isNull(map)){
                 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-                return Result.errorMsg("无法查询到账户【"+settlement.getAccountId()+"】开户信息,请联系销售绑定账户。");
+                return Result.errorMsg("无法查询到账户【"+settlement.getAccountId()+"】信息,请到账户列表上传正确的账户信息。");
             }
             BeanUtils.copyProperties(settlementFileInfo,settlement,SettlementUtil.getNullPropertyNames(settlementFileInfo));
             settlementFileInfoMapper.insert(settlement);

+ 20 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectMemberController.java

@@ -29,6 +29,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 项目成员
@@ -281,6 +282,25 @@ public class ProjectMemberController {
     }
 
 
+    @GetMapping(value = "/participateListV3")
+    public Result participateListV3(ProjectMember projectMember,
+                                                          @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                          @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                          HttpServletRequest req) {
+
+        Result<IPage<ProjectMember>> result = this.participateListV2(projectMember,pageNo,pageSize,req);
+        List<ProjectMember> resultList = new ArrayList<>();
+        if (result.isSuccess()){
+            List<ProjectMember> listProject = result.getResult().getRecords();
+            Map<String, List<ProjectMember>> groupByMedia = listProject.stream().filter(p-> (!Check.isNull(p.getMediaId()))).collect(Collectors.groupingBy(ProjectMember::getMediaId));
+             resultList = groupByMedia.get(projectMember.getMediaId());
+             resultList.stream().filter(p -> (!Check.isNull(p.getAdvertiserName()))).collect(Collectors.toList());
+            resultList = resultList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(ProjectMember :: getAdvertiserId))), ArrayList::new));
+        }
+        return Result.successMsg("成功。",resultList);
+    }
+
+
     /**
      * 分页列表查询
      *