فهرست منبع

财务结算-快手 利润单

yangzian 4 سال پیش
والد
کامیت
a926d4d199

+ 9 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/controller/ExportReportController.java

@@ -54,4 +54,13 @@ public class ExportReportController {
     }
 
 
+    @ApiOperation(value = "财务结算-利润表导出-快手", notes = "财务结算-利润表导出-快手")
+    @GetMapping(value = "/porfitReportKuaiShou")
+    public Result porfitReportKuaiShou(SettlementFileParamsVo paramsVo, HttpServletResponse response) {
+
+        return reportSettlementService.porfitReportKuaiShou(paramsVo,response);
+
+    }
+
+
 }

+ 1 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/entity/vo/ProfitReportBytedanceVo.java

@@ -42,7 +42,7 @@ public class ProfitReportBytedanceVo implements Serializable {
     private String operateName;
 
     @Excel(name = "运营所属区域")
-    private String transferIn;
+    private String operateArea;
 
 
 

+ 53 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/entity/vo/ProfitReportKuaiShouVo.java

@@ -0,0 +1,53 @@
+package org.jeecg.ctop.finance.settlement.entity.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *
+ * @description: 快手 利润表
+ * @return:
+ * @author: zianY
+ */
+@Data
+public class ProfitReportKuaiShouVo implements Serializable {
+
+
+    @Excel(name = "账户ID")
+    private String accountId;
+
+    @Excel(name = "快手ID")
+    private String ksId;
+
+    @Excel(name = "广告主公司名称")
+    private String advertiserName;
+
+    @Excel(name = "产品名称")
+    private String productName;
+
+    @Excel(name = "总消耗")
+    private String cost;
+
+    @Excel(name = "充值花费")
+    private String cashCost;
+
+    @Excel(name = "返点类型")
+    private String rebateType;
+
+    @Excel(name = "返点比列")
+    private String rebateRate;
+
+    @Excel(name = "销售")
+    private String saleName;
+
+    @Excel(name = "运营")
+    private String operateName;
+
+    @Excel(name = "运营所属区域")
+    private String operateArea;
+
+
+
+}

+ 13 - 2
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/mapper/ReportSettlementMapper.java

@@ -54,14 +54,25 @@ public interface ReportSettlementMapper {
      * 查询 头条利润表 总花费
      * @return
      */
-    List<Map<String,String>> getProfitBytedanceCost(@Param("startTime") String startTime,@Param("endTime") String endTime);
+    List<Map<String,Object>> getProfitBytedanceCost(String uploadYears);
+
+    /**
+     * 查询 快手 利润表 总花费
+     * @param uploadYears
+     * @return
+     */
+    List<Map<String,Object>> getProfitKuaiShou(String uploadYears);
 
     /**
      * 查询 头条利润表  销售人员姓名 以及 返点类型和比列
      * @param productId
      * @return
      */
-    Map<String,String> getProfitBytedanceSale(String productId);
+    Map<String,Object> getProfitBytedanceSale(String productId);
+
+    Map<String,Object> getProfitBytedanceOperate(String accountId);
+
+    Map<String,Object> getProfitKuaiShouOperate(String accountId);
 
 
 

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

@@ -89,11 +89,8 @@
                 LEFT JOIN ctop_product p ON cwjs.product_id = p.id
         WHERE
             cwjs.del_flag = 0
-        <if test="startTime !=null and startTime != ''">
-            AND d.date &gt;= #{startTime}
-        </if>
-        <if test="endTime !=null and endTime != ''">
-            AND d.date &lt;= #{endTime}
+        <if test="uploadYears !=null and uploadYears != ''">
+            AND DATE_FORMAT(d.date,'%Y-%m') = #{uploadYears}
         </if>
         GROUP BY
             d.advertiser_id;
@@ -105,20 +102,22 @@
     <!-- 查询 头条利润表  销售人员姓名 以及 返点类型和比列-->
     <select id="getProfitBytedanceSale" resultType="java.util.LinkedHashMap">
         SELECT
-            pp.create_user_id,
-            su.realname AS saleName,
-            cp.rebate_type AS rebateType,
-            cp.rebate_rate AS rebateRate,
-            cp.approved_status AS approvedStatus
+        pp.create_user_id,
+        su.realname AS saleName,
+        cp.rebate_type AS rebateType,
+        cp.rebate_rate AS rebateRate,
+        cp.approved_status AS approvedStatus,
+        cp.policy_start_date as policyStartDate,
+        DATE_FORMAT(cp.policy_start_date,'%Y-%m') as policyStart,
+        cp.policy_end_date as policyEndDate,
+        DATE_FORMAT(cp.policy_end_date,'%Y-%m') as policyEnd
         FROM
-            ctop_cwjs_policy_product pp,
-            sys_user su,
-            ctop_cwjs_policy_info cp
+        ctop_cwjs_policy_product pp
+        LEFT JOIN sys_user su ON pp.create_user_id = su.id
+        LEFT JOIN ctop_cwjs_policy_info cp ON cp.id = pp.policy_id
         WHERE
-            pp.del_flag = 0
-          AND cp.del_flag = 0
-          AND pp.create_user_id = su.id
-          AND cp.id = pp.policy_id
+        pp.del_flag = 0
+        AND cp.del_flag = 0
         <if test="productId !=null and productId != ''">
             AND pp.id = #{productId}
         </if>
@@ -128,6 +127,73 @@
 
 
 
+    <!-- 查询 头条利润表  广告主和运营和运营所属区域-->
+    <select id="getProfitBytedanceOperate" resultType="java.util.LinkedHashMap">
+        select
+        u.advertiser_id,
+        u.advertiser_name as advertiserName,
+        u.user_id,
+        u.user_name as operateName,
+        u.auth_name,
+        IFNULL(p.nick_name,'') as operateArea
+        from
+        ctop_user_allocation u
+        LEFT JOIN user_company p on p.user_id = u.user_id
+          <where>
+              <if test="accountId !=null and accountId != ''">
+                  AND u.account_id = #{accountId}
+              </if>
+          </where>
+    </select>
+
+
+<!-- 查询 快手 利润表 总花费-->
+    <select id="getProfitKuaiShou" 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
+        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
+        <if test="uploadYears !=null and uploadYears != ''">
+          and DATE_FORMAT(d.date,'%Y-%m') = #{uploadYears}
+        </if>
+        GROUP BY
+            d.account_id;
+    </select>
+
+
+
+
+    <!-- 查询 快手 利润表  广告主和运营和运营所属区域-->
+    <select id="getProfitKuaiShouOperate" resultType="java.util.LinkedHashMap">
+        select
+        u.advertiser_id,
+        u.account_id,
+        b.user_id as ksId,
+        u.advertiser_name as advertiserName,
+        u.user_id,
+        u.user_name as operateName,
+        u.auth_name,
+        IFNULL(p.nick_name,'') as operateArea
+        from
+        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
+    <where>
+        <if test="accountId !=null and accountId != ''">
+            AND u.account_id = #{accountId}
+        </if>
+    </where>
+    </select>
+
+
 
 
 

+ 2 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/service/IReportSettlementService.java

@@ -23,4 +23,6 @@ public interface IReportSettlementService {
 
     Result porfitReportBytedance(SettlementFileParamsVo paramsVo,HttpServletResponse response);
 
+    Result porfitReportKuaiShou(SettlementFileParamsVo paramsVo,HttpServletResponse response);
+
 }

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

@@ -11,12 +11,10 @@ import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.ctop.finance.policy.utils.Check;
-import org.jeecg.ctop.finance.settlement.entity.vo.ProfitReportBytedanceVo;
-import org.jeecg.ctop.finance.settlement.entity.vo.SettlementFileParamsVo;
-import org.jeecg.ctop.finance.settlement.entity.vo.SettlementReportBytedanceVo;
-import org.jeecg.ctop.finance.settlement.entity.vo.SettlementReportKuaiShouVo;
+import org.jeecg.ctop.finance.settlement.entity.vo.*;
 import org.jeecg.ctop.finance.settlement.mapper.ReportSettlementMapper;
 import org.jeecg.ctop.finance.settlement.service.IReportSettlementService;
+import org.jeecg.ctop.finance.utils.SettlementUtil;
 import org.jeecg.ctop.finance.utils.createExcelByTemplate;
 import org.springframework.stereotype.Service;
 
@@ -26,6 +24,7 @@ import javax.servlet.http.HttpServletResponse;
 import java.awt.image.BufferedImage;
 import java.io.*;
 import java.net.URLEncoder;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -427,44 +426,116 @@ public class ReportSettlementServiceImpl implements IReportSettlementService {
     public Result porfitReportBytedance(SettlementFileParamsVo paramsVo, HttpServletResponse response) {
 
         try {
-
             //查询 头条利润表 总花费
-            List<Map<String,String>> list = reportSettlementMapper.getProfitBytedanceCost(paramsVo.getStartTime(),paramsVo.getEndTime());
-            for (Map<String, String> map : list) {
+            List<Map<String,Object>> list = reportSettlementMapper.getProfitBytedanceCost(paramsVo.getUploadYears());
+            if (Check.isNull(list)){
+                return Result.errorMsg("暂无数据。");
+            }
+            List<ProfitReportBytedanceVo> resultList = new ArrayList<>(list.size());
+            for (Map<String, Object> map : list) {
                 ProfitReportBytedanceVo vo = new ProfitReportBytedanceVo();
-                vo.setCost(map.get("cost"));//总消耗
-                vo.setCashCost(map.get("cashCost"));//现金消耗
-                vo.setRewardCost(map.get("rewardCost"));//赠款消耗
-                vo.setProductName(map.get("productName"));//产品名称
+                vo.setCost(map.getOrDefault("cost","")+"");//总消耗
+                vo.setCashCost(map.getOrDefault("cashCost","")+"");//现金消耗
+                vo.setRewardCost(map.getOrDefault("rewardCost","")+"");//赠款消耗
+                vo.setProductName(map.getOrDefault("productName","")+"");//产品名称
                 //查询 头条利润表  销售人员姓名 以及 返点类型和比列
-                Map<String,String> slaeMap = reportSettlementMapper.getProfitBytedanceSale(map.get("productId"));
-
-                vo.setSaleName(slaeMap.get("saleName"));//销售
-
-                ////销售政策状态
-                if (StringUtils.equals(slaeMap.get("approvedStatus"),"3")){
-                    vo.setRebateType(slaeMap.get("rebateType"));//返点类型
-                    vo.setRebateRate(slaeMap.get("rebateRate"));//返点比列
-
+                Map<String,Object> slaeMap = reportSettlementMapper.getProfitBytedanceSale(map.get("productId")+"");
+                if (!Check.isNull(slaeMap)){
+                    vo.setSaleName(slaeMap.getOrDefault("saleName","")+"");//销售
+                    // 当前查询时间 与 销售政策 开始 截至时间 是否匹配
+                    if (SettlementUtil.isEffectiveDate(paramsVo.getUploadYears(),slaeMap.get("policyStart")+"",slaeMap.get("policyEnd")+"")){
+                        //销售政策状态 为 通过 显示 返点类型 和 返点比列
+                        if (StringUtils.equals(slaeMap.getOrDefault("approvedStatus","")+"","3")){
+                            vo.setRebateType(slaeMap.getOrDefault("rebateType","")+"");//返点类型
+                            vo.setRebateRate(slaeMap.getOrDefault("rebateRate","")+"");//返点比列
+                        }
+                    }
                 }
 
+                Map<String,Object> operateMap = reportSettlementMapper.getProfitBytedanceOperate(map.get("accountId")+"");
+                if (!Check.isNull(operateMap)){
+                    vo.setAdvertiserName(operateMap.getOrDefault("advertiserName","")+"");//广告主名称
+                    vo.setOperateName(operateMap.getOrDefault("operateName","")+"");//运营
+                    vo.setOperateArea(operateMap.getOrDefault("operateArea","")+"");//运营所属区域
+                }
+                resultList.add(vo);
+            }
 
+            Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("头条利润单", "头条利润单"), ProfitReportBytedanceVo.class, resultList);
 
-
+            try {
+                response.setCharacterEncoding("UTF-8");
+                response.setHeader("content-Type", "application/vnd.ms-excel");
+                response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("头条利润单.xls", "UTF-8"));
+                workbook.write(response.getOutputStream());
+            } catch (IOException e) {
+                throw new RuntimeException(e);
             }
 
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("====>>>>", e.getMessage());
+            return Result.errorMsg(e.getMessage());
+        }
+        return null;
+    }
 
 
 
+    /**
+     *
+     * @description: 财务结算 利润表导出 快手
+     * @param paramsVo
+     * @param response
+     * @return: org.jeecg.common.api.vo.Result
+     * @author: zianY
+     */
+    @Override
+    public Result porfitReportKuaiShou(SettlementFileParamsVo paramsVo, HttpServletResponse response) {
 
+        try {
+            //查询 快手利润表 总花费
+            List<Map<String,Object>> list = reportSettlementMapper.getProfitKuaiShou(paramsVo.getUploadYears());
+            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","")+"");//产品名称
+                //查询  销售人员姓名 以及 返点类型和比列
+                Map<String,Object> slaeMap = reportSettlementMapper.getProfitBytedanceSale(map.get("productId")+"");
+                if (!Check.isNull(slaeMap)){
+                    vo.setSaleName(slaeMap.getOrDefault("saleName","")+"");//销售
+                    // 当前查询时间 与 销售政策 开始 截至时间 是否匹配
+                    if (SettlementUtil.isEffectiveDate(paramsVo.getUploadYears(),slaeMap.get("policyStart")+"",slaeMap.get("policyEnd")+"")){
+                        //销售政策状态 为 通过 显示 返点类型 和 返点比列
+                        if (StringUtils.equals(slaeMap.getOrDefault("approvedStatus","")+"","3")){
+                            vo.setRebateType(slaeMap.getOrDefault("rebateType","")+"");//返点类型
+                            vo.setRebateRate(slaeMap.getOrDefault("rebateRate","")+"");//返点比列
+                        }
+                    }
+                }
 
-            Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("这是表头", "这是sheet名称"), SettlementReportBytedanceVo.class, list);
+                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","")+"");//运营所属区域
+                }
+                resultList.add(vo);
+            }
 
+            Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams("快手利润单", "快手利润单"), ProfitReportKuaiShouVo.class, resultList);
 
             try {
                 response.setCharacterEncoding("UTF-8");
                 response.setHeader("content-Type", "application/vnd.ms-excel");
-                response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("文件名称.xlsx", "UTF-8"));
+                response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("快手利润单.xls", "UTF-8"));
                 workbook.write(response.getOutputStream());
             } catch (IOException e) {
                 throw new RuntimeException(e);

+ 59 - 0
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/utils/SettlementUtil.java

@@ -7,6 +7,9 @@ import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
 import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -84,5 +87,61 @@ public class SettlementUtil {
         return outStream.toByteArray();
     }
 
+    /**
+     * 获取日期的年月
+     * @param strDate
+     * @return
+     */
+    public static int getYearMonth(String strDate)throws Exception{
+
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = simpleDateFormat.parse(strDate);
+
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);//设置时间
+        int year = cal.get(Calendar.YEAR);//获取年份
+        int month=cal.get(Calendar.MONTH);//获取月份
+        return year*100+month;//返回年份乘以100加上月份的值,因为月份最多2位数,所以年份乘以100可以获取一个唯一的年月数值
+    }
+
+
+
+    /**
+     * 判断当前时间是否在[startTime, endTime]区间
+     * 年-月   2021-08
+     * @param nowStrTime 当前时间
+     * @param startStrTime 开始时间
+     * @param endStrTime 结束时间
+     * @return
+     * @author zian Y
+     */
+    public static boolean isEffectiveDate(String nowStrTime, String startStrTime, String endStrTime) throws Exception {
+       // SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
+        Date nowTime = simpleDateFormat.parse(nowStrTime);
+        Date startTime = simpleDateFormat.parse(startStrTime);
+        Date endTime = simpleDateFormat.parse(endStrTime);
+
+        if (nowTime.getTime() == startTime.getTime()
+                || nowTime.getTime() == endTime.getTime()) {
+            return true;
+        }
+        Calendar date = Calendar.getInstance();
+        date.setTime(nowTime);
+        Calendar begin = Calendar.getInstance();
+        begin.setTime(startTime);
+        Calendar end = Calendar.getInstance();
+        end.setTime(endTime);
+        if (date.after(begin) && date.before(end)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+
+
+
+
 
 }

+ 1 - 1
jeecg-boot-finance/src/main/resources/application-dev.yml

@@ -126,7 +126,7 @@ spring:
     port: 6379
 #mybatis plus 设置
 mybatis-plus:
-  mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml
+  mapper-locations: classpath*:org/jeecg/modules/**/xml/*Mapper.xml,classpath*:org/jeecg/**/xml/*Mapper.xml,classpath*:cn/com/ctop/**/xml/*Mapper.xml
   global-config:
     # 关闭MP3.0自带的banner
     banner: false

+ 6 - 6
jeecg-cloud-module/jeecg-cloud-system-start/src/main/resources/application-dev.yml

@@ -76,9 +76,9 @@ spring:
   autoconfigure:
     exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
   datasource:
-    url: jdbc:mysql://139.186.27.96:4000/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
-    username: data
-    password: hcst@2021
+    url: jdbc:mysql://139.186.165.84:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8
+    username: hcst
+    password: hcst@2020
     driver-class-name: com.mysql.jdbc.Driver
     druid:
       stat-view-servlet:
@@ -116,9 +116,9 @@ spring:
         connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
       datasource:
         master:
-          url: jdbc:mysql://139.186.27.96:4000/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
-          username: data
-          password: hcst@2021
+          url: jdbc:mysql://139.186.165.84:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+          username: hcst
+          password: hcst@2020
           driver-class-name: com.mysql.jdbc.Driver
   #redis 配置
   redis: