zhaoxian vor 3 Jahren
Ursprung
Commit
f12105f75e

+ 50 - 31
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java

@@ -5,13 +5,19 @@ import org.slf4j.LoggerFactory;
 import org.springframework.util.StringUtils;
 
 import java.beans.PropertyEditorSupport;
-import java.math.BigDecimal;
-import java.sql.SQLOutput;
 import java.sql.Timestamp;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.TimeZone;
 
 /**
  * 类描述:时间操作定义类
@@ -1718,6 +1724,18 @@ public class DateUtils extends PropertyEditorSupport {
     }
 
     /**
+     * 获取上个月第一天时间
+     */
+    public static String lastMonthFirstDay(String fmt) {
+        SimpleDateFormat sdf = new SimpleDateFormat(fmt);
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.MONTH, -1);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
+        return sdf.format(calendar.getTime());
+    }
+
+
+    /**
      * 根据数字查询本周对应的日期
      * 1-7对应周一~周天
      *
@@ -1806,6 +1824,7 @@ public class DateUtils extends PropertyEditorSupport {
     /**
      * 日期转int
      * 2022-01-18 ====>>>> 20220118
+     *
      * @param date
      * @return
      */
@@ -1820,6 +1839,7 @@ public class DateUtils extends PropertyEditorSupport {
 
     /**
      * 获取当前月份第一天
+     *
      * @return 返回格式:20220119
      * zian Y
      */
@@ -1827,7 +1847,7 @@ public class DateUtils extends PropertyEditorSupport {
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         Calendar c = Calendar.getInstance();
         c.add(Calendar.MONTH, 0);
-        c.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
+        c.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
         String first = format.format(c.getTime());
         return getDateInteger(first);
     }
@@ -1836,6 +1856,7 @@ public class DateUtils extends PropertyEditorSupport {
     /**
      * 整形 年月日 转 String 月-日
      * 20220120 时间格式 转换为 01-20
+     *
      * @param dateString
      * @return
      */
@@ -1847,14 +1868,13 @@ public class DateUtils extends PropertyEditorSupport {
             Date date = df.parse(dateString);
             SimpleDateFormat dfStr = new SimpleDateFormat("MM-dd");
             newDate = dfStr.format(date);
-        }catch (Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
         }
         return newDate;
     }
 
 
-
     /**
      * 获取 两个日期之间的所有 日期
      *
@@ -1886,6 +1906,7 @@ public class DateUtils extends PropertyEditorSupport {
 
     /**
      * 时间 去重 排序
+     *
      * @param list
      * @return
      */
@@ -1927,58 +1948,56 @@ public class DateUtils extends PropertyEditorSupport {
     }
 
 
-
     /**
      * 根据本阶段日期 获取上阶段 开始 和 截至 日期
+     *
      * @param startTime 本阶段开始时间
-     * @param endTime 本阶段截至时间
+     * @param endTime   本阶段截至时间
      * @return
      * @throws ParseException
      */
-    public static Map<String,String> getStartEndTime(String startTime,String endTime) throws ParseException {
-        Map<String,String> timeMap = new HashMap();
+    public static Map<String, String> getStartEndTime(String startTime, String endTime) throws ParseException {
+        Map<String, String> timeMap = new HashMap();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         Date start = sdf.parse(startTime);
         Date end = sdf.parse(endTime);
         //相差天数
-        Long daysBetween = (end.getTime()-start.getTime())/(60*60*24*1000);
+        Long daysBetween = (end.getTime() - start.getTime()) / (60 * 60 * 24 * 1000);
         String lastTimeStart = getSubtractTime(start, daysBetween.intValue());
         String lastTimeEnd = getSubtractTime(end, daysBetween.intValue());
-        timeMap.put("lastTimeStart",lastTimeStart);
-        timeMap.put("lastTimeEnd",lastTimeEnd);
-        timeMap.put("daysBetween",daysBetween.toString());
+        timeMap.put("lastTimeStart", lastTimeStart);
+        timeMap.put("lastTimeEnd", lastTimeEnd);
+        timeMap.put("daysBetween", daysBetween.toString());
         return timeMap;
     }
 
     /**
      * 返回 日期 - 天数 的string 日期
-     * @param time 时间
+     *
+     * @param time        时间
      * @param daysBetween 天数
      * @return
      */
-    public static String getSubtractTime(Date time,Integer daysBetween){
+    public static String getSubtractTime(Date time, Integer daysBetween) {
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-        Calendar rightNow  = Calendar.getInstance();
-        rightNow .setTime(time);
-        if (daysBetween.intValue() > 0){
-            rightNow .add(Calendar.DAY_OF_YEAR,-daysBetween.intValue()-1);//日期加 相差的 天数 再 -1
-        }else {
-            rightNow .add(Calendar.DAY_OF_YEAR,-1);//日期 -1
-        }
-        Date rightNowTime = rightNow .getTime();
+        Calendar rightNow = Calendar.getInstance();
+        rightNow.setTime(time);
+        if (daysBetween.intValue() > 0) {
+            rightNow.add(Calendar.DAY_OF_YEAR, -daysBetween.intValue() - 1);//日期加 相差的 天数 再 -1
+        } else {
+            rightNow.add(Calendar.DAY_OF_YEAR, -1);//日期 -1
+        }
+        Date rightNowTime = rightNow.getTime();
         String nowTime = sdf.format(rightNowTime);
         return nowTime;
     }
 
 
-
-
-
-    public static void main(String[] args) throws Exception{
+    public static void main(String[] args) throws Exception {
         //System.out.println(DateUtils.getFirstDayByMonth());
         //System.out.println(intDateToString("20210101"));
 
-       // SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
+        // SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
         //System.out.println(sdf1.parse("20220115"));
 
        /* Double  a = 3.268890;
@@ -1992,10 +2011,10 @@ public class DateUtils extends PropertyEditorSupport {
         //BigDecimal unitRatio = BigDecimal.valueOf((groupNum - yesNum) / yesNum).multiply(new BigDecimal(100));
         //System.out.println(unitRatio);
 
-        System.out.println(getFirstDayByMonth());;
+        System.out.println(getFirstDayByMonth());
+        ;
 
     }
 
 
-
 }

+ 171 - 0
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/controller/ManagerSaleValueController.java

@@ -0,0 +1,171 @@
+package org.jeecg.ctop.material.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.ctop.material.constants.Check;
+import org.jeecg.ctop.material.constants.ExportExcelUtils;
+import org.jeecg.ctop.material.entity.ManagerSaleValue;
+import org.jeecg.ctop.material.service.IManagerSaleValueService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 分公司总经理&销售总监阶段性目标值
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2022-04-14
+ */
+@Slf4j
+@Api(tags = "分公司总经理&销售总监阶段性目标值")
+@RestController
+@RequestMapping("/manager/sale")
+public class ManagerSaleValueController {
+    @Autowired
+    private IManagerSaleValueService managerSaleValueService;
+
+    /**
+     * 查询人员权限和公司
+     */
+    @GetMapping(value = "/getCompany")
+    public Result<Object> getCompany(String userId) {
+        if (Check.isNull(userId)) {
+            return Result.error("缺少参数");
+        }
+        try {
+            return managerSaleValueService.getCompany(userId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询失败");
+        }
+    }
+
+
+    /**
+     * 查询当日消耗 + 月度消耗
+     */
+    @GetMapping(value = "/getDayAndMonthlyCharges")
+    public Result<Object> getDayAndMonthlyCharges(String userId, String mediaId, String companyId) {
+        if (Check.isNull(userId) || Check.isNull(mediaId) || Check.isNull(companyId)) {
+            return Result.error("缺少参数");
+        }
+        try {
+            return managerSaleValueService.getDayAndMonthlyCharges(userId, mediaId, companyId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询失败");
+        }
+    }
+
+    /**
+     * 设置本月消耗完成度
+     */
+    @PostMapping(value = "/setUpManagerSaleValue")
+    public Result<Object> setUpManagerSaleValue(@RequestBody ManagerSaleValue sale) {
+        if (Check.isNull(sale.getCompanyId()) || Check.isNull(sale.getMediaId()) || Check.isNull(sale.getUserId()) || (Check.isNull(sale.getWeeklyGoalValue()) && Check.isNull(sale.getMonthlyGoalValue()))) {
+            return Result.error("缺少参数");
+        }
+        try {
+            managerSaleValueService.setUpManagerSaleValue(sale);
+            return Result.ok("success");
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("修改失败");
+        }
+    }
+
+    /**
+     * 查询home页消耗+平台消耗
+     */
+    @GetMapping(value = "/getHomeCharges")
+    public Result<Object> getHomeCharges(String userId, String mediaId, String companyId, String startTime, String endTime) {
+        if (Check.isNull(userId) || Check.isNull(mediaId) || Check.isNull(companyId) || Check.isNull(startTime) || Check.isNull(endTime)) {
+            return Result.error("缺少参数");
+        }
+        try {
+            return managerSaleValueService.getHomeCharges(userId, mediaId, companyId, startTime, endTime);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询失败");
+        }
+    }
+
+    /**
+     * 项目消耗排行列表
+     */
+    @GetMapping(value = "/getProjectChargeTop")
+    public Result<Object> getProjectChargeTop(String userId, String mediaId, String companyId, String startTime, String endTime, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                              @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        if (Check.isNull(userId) || Check.isNull(mediaId) || Check.isNull(companyId) || Check.isNull(startTime) || Check.isNull(endTime)) {
+            return Result.error("缺少参数");
+        }
+        try {
+            PageInfo page = managerSaleValueService.getProjectChargeTop(userId, mediaId, companyId, startTime, endTime, pageNo, pageSize);
+            return Result.ok(page);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询失败", e.getMessage());
+        }
+    }
+
+    /**
+     * 项目消耗排行列表
+     */
+    @GetMapping(value = "/getProjectChargeExcel")
+    public void getProjectChargeExcel(HttpServletResponse response, String userId, String mediaId, String companyId, String startTime, String endTime, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                      @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        try {
+
+            PageInfo page = managerSaleValueService.getProjectChargeTop(userId, mediaId, companyId, startTime, endTime, pageNo, 9999999);
+            List<JSONObject> list = page.getList();
+            List<List<Object>> excelList = new ArrayList<>();
+            if (!list.isEmpty()) {
+                list.forEach(data -> {
+                    List<Object> temp = new ArrayList<>();
+                    temp.add(data.getLong("projectId"));
+                    temp.add(data.getString("projectName"));
+                    temp.add(data.getString("saleName"));
+                    temp.add(data.getString("chargeRoi"));
+                    temp.add(data.getString("realCharge"));
+                    temp.add(data.getString("jlCharge"));
+                    excelList.add(temp);
+                });
+            }
+            List<String> titles = new ArrayList<>();
+            titles.add(0, "项目名称");
+            titles.add(1, "销售");
+            titles.add(2, "消耗");
+            titles.add(3, "消耗环比");
+            titles.add(4, "现金消耗");
+            titles.add(5, "激励消耗");
+
+            OutputStream os = response.getOutputStream();
+            ExportExcelUtils eeu = new ExportExcelUtils();
+            XSSFWorkbook workbook = new XSSFWorkbook();
+            String[] headers = titles.toArray(new String[titles.size()]);
+            eeu.exportExcelForAttendance(workbook, 0, "项目消耗", headers, excelList);
+            workbook.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("查询失败", e.getMessage());
+        }
+    }
+
+
+}

+ 55 - 0
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/entity/ManagerSaleValue.java

@@ -0,0 +1,55 @@
+package org.jeecg.ctop.material.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * 分公司总经理&销售总监阶段性目标值
+ * @author jeecg-boot
+ * @date   2022-04-14
+ * @version V1.0
+ */
+@Data
+@TableName("sys_manager_sale_value")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="sys_manager_sale_value对象", description="分公司总经理&销售总监阶段性目标值")
+public class ManagerSaleValue {
+    
+	/**id*/
+	@TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id")
+	private String id;
+	/**经理id*/
+	@Excel(name = "经理id", width = 15)
+    @ApiModelProperty(value = "经理id")
+	private String userId;
+	/**公司id*/
+	@Excel(name = "公司id", width = 15)
+    @ApiModelProperty(value = "公司id")
+	private String companyId;
+	/**媒体,1头条,2快手*/
+	@Excel(name = "媒体,1头条,2快手", width = 15)
+    @ApiModelProperty(value = "媒体,1头条,2快手")
+	private Integer mediaId;
+	/**快手消耗目标值*/
+	@Excel(name = "快手消耗目标值", width = 15)
+    @ApiModelProperty(value = "快手消耗目标值")
+	private String weeklyGoalValue;
+	/**快手消耗目标值*/
+	@Excel(name = "快手消耗目标值", width = 15)
+    @ApiModelProperty(value = "快手消耗目标值")
+	private String monthlyGoalValue;
+}

+ 80 - 0
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/mapper/ManagerSaleValueMapper.java

@@ -0,0 +1,80 @@
+package org.jeecg.ctop.material.mapper;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.ctop.material.entity.ManagerSaleValue;
+
+import java.util.List;
+
+/**
+ * 分公司总经理&销售总监阶段性目标值
+ *
+ * @author jeecg-boot
+ * 2022-04-14
+ * @version V1.0
+ */
+public interface ManagerSaleValueMapper extends BaseMapper<ManagerSaleValue> {
+
+
+    /**
+     * =----------------------------------------------------------------------------------------------------------------=
+     */
+    String getRoleCodeByUserId(@Param("userId") String userId);
+
+    List<JSONObject> queryUserCompany(@Param("userId") String userId);
+
+    String getUserNameById(@Param("userId") String userId);
+
+    List<JSONObject> queryList();
+
+    List<String> querySaleDirctorItsTeamMember(@Param("userId") String userId);
+
+    List<Long> getCompanyAccountIds(@Param("companyId") String companyId, @Param("mediaId") String mediaId);
+
+    /**
+     * -----------------------------------------------------
+     */
+
+    JSONObject queryTtTodayCharge(@Param("statDay") String statDay, @Param("hour") Integer hour, @Param("accountIds") List<Long> accountIds);
+
+    String queryTtManydaysTotalCharge(@Param("startDay") String startDay, @Param("endDay") String endDay, @Param("accountIds") List<Long> accountIds);
+
+    JSONObject queryTtRealCharged(@Param("lastMonthFirstday") String lastMonthFirstday, @Param("monthFirstday") String monthFirstday, @Param("statDay") String statDay, @Param("accountIds") List<Long> accountIds);
+
+
+    JSONObject queryKsTodayCharge(@Param("statDay") String statDay, @Param("hour") Integer hour, @Param("accountIds") List<Long> accountIds);
+
+    String queryKsManydaysTotalCharge(@Param("startDay") String startDay, @Param("endDay") String endDay, @Param("accountIds") List<Long> accountIds);
+
+    JSONObject queryKsRealCharged(@Param("lastMonthFirstday") String lastMonthFirstday, @Param("monthFirstday") String monthFirstday, @Param("statDay") String statDay, @Param("accountIds") List<Long> accountIds);
+
+    Long getWeekly(@Param("userId") String userId, @Param("companyId") String companyId, @Param("mediaId") String mediaId);
+
+    Long getMonthly(@Param("userId") String userId, @Param("companyId") String companyId, @Param("mediaId") String mediaId);
+
+    List<Long> querySalesDirectorAccountIds(@Param("companyId") String companyId, @Param("mediaId") String mediaId, @Param("userIds") List<String> saleTeaMber);
+
+    List<JSONObject> queryKsHourList(@Param("statDay") String statDay, @Param("accountIds") List<Long> accountIds);
+
+    List<JSONObject> queryTtHourList(@Param("statDay") String statDay, @Param("accountIds") List<Long> accountIds);
+
+    JSONObject queryTtManydaysChargeAndRoi(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("lastTimeStart") String lastTimeStart, @Param("lastTimeEnd") String lastTimeEnd, @Param("accountIds") List<Long> accountIds);
+
+    List<JSONObject> queryTtManydaysCharge(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("accountIds") List<Long> accountIds);
+
+    JSONObject queryKsManydaysChargeAndRoi(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("lastTimeStart") String lastTimeStart, @Param("lastTimeEnd") String lastTimeEnd, @Param("accountIds") List<Long> accountIds);
+
+    List<JSONObject> queryKsManydaysCharge(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("accountIds") List<Long> accountIds);
+
+    List<Long> querySalesDirectorProjectIds(@Param("companyId") String companyId, @Param("mediaId") String mediaId, @Param("userIds") List<String> saleTeaMber);
+
+    Long queryKsHourProjectTopTotal(@Param("projectIds") List<Long> projectIds, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+    List<JSONObject> queryKsHourProjectTop(@Param("projectIds") List<Long> projectIds, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("days") Long days);
+
+    Long queryTtHourProjectTopTotal(@Param("projectIds") List<Long> projectIds, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+    List<JSONObject> queryTtHourProjectTop(@Param("projectIds") List<Long> projectIds, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("days") Long days);
+
+}

+ 556 - 0
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/mapper/xml/ManagerSaleValueMapper.xml

@@ -0,0 +1,556 @@
+<?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="org.jeecg.ctop.material.mapper.ManagerSaleValueMapper">
+
+    <select id="getRoleCodeByUserId" resultType="java.lang.String">
+        select c.role_code
+        from `jeecg-boot`.sys_user a
+                 left join `jeecg-boot`.sys_user_role b on a.id = b.user_id
+                 left join `jeecg-boot`.sys_role c on b.role_id = c.id
+        where a.id = #{userId} LIMIT 1
+    </select>
+
+
+    <select id="queryUserCompany" resultType="com.alibaba.fastjson.JSONObject">
+        select company_id as 'companyId',company_name as 'companyName'
+        from `jeecg-boot`.user_company
+        where user_id = #{userId}
+    </select>
+
+    <select id="getUserNameById" resultType="String">
+        select realname
+        from `jeecg-boot`.sys_user
+        where id = #{userId}
+    </select>
+
+    <select id="queryList" resultType="com.alibaba.fastjson.JSONObject">
+        select company_id as 'companyId',company_name as 'companyName'
+        from `jeecg-boot`.sys_manager_company
+    </select>
+
+    <select id="querySaleDirctorItsTeamMember" resultType="String">
+        select user_id as 'userId'
+        from `application`.app_user_manage
+        where manage_id = #{userId}
+    </select>
+
+
+    <select id="getCompanyAccountIds" resultType="Long">
+        SELECT t1.account_id
+        FROM `jeecg-boot`.ctop_user_allocation t1
+        LEFT JOIN `jeecg-boot`.user_company t2 ON t1.user_id = t2.user_id
+        WHERE t2.company_id = #{companyId}
+        <if test='mediaId ==2'>
+            AND (media_id = 2 or media_id = 4)
+        </if>
+        <if test='mediaId ==1'>
+            AND (media_id = 1 or media_id = 3)
+        </if>
+        and t1.account_status = 0
+        GROUP BY t1.account_id
+    </select>
+
+
+    <select id="queryKsTodayCharge" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT IFNULL(t.charge, 0.00) as 'totalCharge', CONCAT(
+        CAST(IFNULL(ROUND((t.charge - y.charge) / y.charge * 100, 2), 0) as CHAR), '%') as 'chargeRoi'
+        FROM (
+        SELECT sum(charge) as 'charge'
+        FROM application.kuaishou_account_report_hourly_dw
+        WHERE account_id in
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        and stat_date = DATE_FORMAT(#{statDay}, '%Y%m%d')
+        <if test="hour !=null">
+            AND hour &lt;= #{hour}
+        </if>
+        ) t
+        LEFT JOIN
+        (
+        SELECT sum(charge) as 'charge'
+        FROM application.kuaishou_account_report_hourly_dw
+        WHERE account_id in
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        and stat_date = DATE_FORMAT(DATE_ADD(#{statDay},INTERVAL -1 day), '%Y%m%d')
+        <if test="hour !=null">
+            AND hour &lt;= #{hour}
+        </if>
+        ) y on 1 = 1
+    </select>
+
+    <select id="queryTtTodayCharge" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT IFNULL(t.charge, 0.00) as 'totalCharge', CONCAT(
+        CAST(IFNULL(ROUND((t.charge - tt.charge) / tt.charge * 100, 2), 0) as CHAR), '%') as 'chargeRoi'
+        FROM (
+        SELECT sum(cost) as 'charge'
+        FROM application.bytedance_advertiser_report_hourly_dw
+        WHERE account_id in
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        and stat_datetime = DATE_FORMAT(#{statDay}, '%Y%m%d')
+        <if test="hour !=null">
+            AND hour &lt;= #{hour}
+        </if>
+        ) t
+        LEFT JOIN
+        (
+        SELECT sum(cost) as 'charge'
+        FROM application.bytedance_advertiser_report_hourly_dw
+        WHERE account_id in
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        and stat_datetime = DATE_FORMAT(DATE_ADD(#{statDay},INTERVAL -1 day), '%Y%m%d')
+        <if test="hour !=null">
+            AND hour &lt;= #{hour}
+        </if>
+        ) tt on 1 = 1
+    </select>
+
+    <select id="queryTtManydaysTotalCharge" resultType="String">
+        SELECT IFNULL(sum(cost), 0.00)
+        FROM application.bytedance_advertiser_report_daily_dw
+        WHERE account_id in
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        and stat_datetime >= DATE_FORMAT(#{startDay}, '%Y%m%d')
+        and stat_datetime &lt; DATE_FORMAT(#{endDay}, '%Y%m%d')
+    </select>
+
+    <select id="queryTtManydaysCharge" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT DATE_FORMAT(stat_datetime,'%Y-%m-%d') as 'statDate', IFNULL(sum(cost), 0.00) as 'charge'
+        FROM application.bytedance_advertiser_report_daily_dw
+        WHERE account_id in
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        and stat_datetime >= DATE_FORMAT(#{startTime}, '%Y%m%d')
+        and stat_datetime &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d')
+        GROUP BY stat_datetime
+        order by stat_datetime
+    </select>
+
+    <select id="queryKsManydaysCharge" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT DATE_FORMAT(stat_date,'%Y-%m-%d') as 'statDate', IFNULL(sum(charge), 0.00) as 'charge'
+        FROM application.kuaishou_account_report_daily_dw
+        WHERE account_id in
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        and stat_date >= DATE_FORMAT(#{startTime}, '%Y%m%d')
+        and stat_date &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d')
+        GROUP BY stat_date
+        order by stat_date
+    </select>
+
+    <select id="queryKsManydaysTotalCharge" resultType="String">
+        SELECT IFNULL(sum(charge), 0.00)
+        FROM application.kuaishou_account_report_daily_dw
+        WHERE account_id in
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        and stat_date >= DATE_FORMAT(#{startDay}, '%Y%m%d')
+        and stat_date &lt; DATE_FORMAT(#{endDay}, '%Y%m%d')
+    </select>
+
+    <select id="queryKsRealCharged" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        IFNULL( thisMonth.realCharged, 0.00) AS 'realCharged',
+        CONCAT( CAST( IFNULL( ROUND(( thisMonth.realCharged - lastMonth.realCharged ) / lastMonth.realCharged *
+        100,2),0) AS CHAR),'%') AS 'realChargedRoi'
+        FROM
+        (
+        SELECT
+        IFNULL( sum( real_charged_in_yuan ), 0.00 ) AS 'realCharged'
+        FROM
+        application.app_kuaishou_agent_report_d
+        WHERE
+        account_id IN
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND stat_date >= DATE_FORMAT( #{monthFirstday}, '%Y%m%d' )
+        AND stat_date &lt;= DATE_FORMAT( #{statDay}, '%Y%m%d' )
+        ) thisMonth
+        LEFT JOIN (
+        SELECT
+        IFNULL( sum( real_charged_in_yuan ), 0.00 ) AS 'realCharged'
+        FROM
+        application.app_kuaishou_agent_report_d
+        WHERE
+        account_id IN
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND stat_date >= DATE_FORMAT(#{lastMonthFirstday}, '%Y%m%d' )
+        AND stat_date &lt; DATE_FORMAT(#{monthFirstday}, '%Y%m%d' )
+        ) lastMonth ON 1=1
+    </select>
+
+    <select id="queryTtRealCharged" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        IFNULL( thisMonth.realCharged, 0.00) AS 'realCharged',
+        CONCAT( CAST( IFNULL( ROUND(( thisMonth.realCharged - lastMonth.realCharged ) / lastMonth.realCharged *
+        100,2),0) AS CHAR),'%') AS 'realChargedRoi'
+        FROM
+        (
+        SELECT
+        IFNULL( sum( cash_cost ), 0.00 ) AS 'realCharged'
+        FROM
+        application.app_bytedance_agent_report_d
+        WHERE
+        account_id IN
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND stat_datetime >= DATE_FORMAT( #{monthFirstday}, '%Y%m%d' )
+        AND stat_datetime &lt;= DATE_FORMAT( #{statDay}, '%Y%m%d' )
+        ) thisMonth
+        LEFT JOIN (
+        SELECT
+        IFNULL( sum( cash_cost ), 0.00 ) AS 'realCharged'
+        FROM
+        application.app_bytedance_agent_report_d
+        WHERE
+        account_id IN
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND stat_datetime >= DATE_FORMAT(#{lastMonthFirstday}, '%Y%m%d' )
+        AND stat_datetime &lt; DATE_FORMAT(#{monthFirstday}, '%Y%m%d' )
+        ) lastMonth ON 1=1
+    </select>
+
+
+    <select id="getWeekly" resultType="Long">
+        SELECT IFNULL(weekly_goal_value, 0)
+        FROM `jeecg-boot`.sys_manager_sale_value
+        WHERE manage_id = #{userId}
+          AND media_id = #{mediaId}
+          AND company_id = #{companyId}
+    </select>
+    <select id="getMonthly" resultType="Long">
+        SELECT IFNULL(monthly_goal_value, 0)
+        FROM `jeecg-boot`.sys_manager_sale_value
+        WHERE manage_id = #{userId}
+          AND media_id = #{mediaId}
+          AND company_id = #{companyId}
+    </select>
+
+    <select id="querySalesDirectorAccountIds" resultType="Long">
+        SELECT
+        t1.account_id
+        FROM
+        `jeecg-boot`.ctop_user_allocation t1
+        LEFT JOIN `jeecg-boot`.user_company t2 ON t1.user_id = t2.user_id
+        WHERE
+        t1.account_status = 0
+        AND t2.company_id = #{companyId}
+        AND project_id IN (
+        SELECT DISTINCT
+        t1.project_id AS projectId
+        FROM
+        `jeecg-boot`.ctop_project_member t1
+        LEFT JOIN `jeecg-boot`.ctop_project t2 ON t1.project_id = t2.id
+        WHERE t1.user_id IN
+        <foreach collection="userIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        <if test='mediaId ==2'>
+            AND (t2.media_id = 2 or t2.media_id = 4)
+        </if>
+        <if test='mediaId ==1'>
+            AND (t2.media_id = 1 or t2.media_id = 3)
+        </if>
+        AND t1.project_name IS NOT NULL
+        AND t1.project_name != ''
+        )
+        GROUP BY
+        t1.account_id
+    </select>
+
+    <select id="querySalesDirectorProjectIds" resultType="Long">
+        SELECT DISTINCT
+        t1.project_id
+        FROM
+        `jeecg-boot`.ctop_project_member t1
+        LEFT JOIN `jeecg-boot`.ctop_project t2 ON t1.project_id = t2.id
+        WHERE t2.company_id =#{companyId}
+        <if test='userIds !=null and userIds.size() > 0'>
+            AND t1.user_id IN
+            <foreach collection="userIds" item="id" separator=","
+                     open="(" close=")">
+                #{id}
+            </foreach>
+        </if>
+        <if test='mediaId ==2'>
+            AND (t2.media_id = 2 or t2.media_id = 4)
+        </if>
+        <if test='mediaId ==1'>
+            AND (t2.media_id = 1 or t2.media_id = 3)
+        </if>
+        AND t1.project_name IS NOT NULL
+        AND t1.project_name != ''
+    </select>
+
+
+    <select id="queryKsHourList" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT hour,sum(charge) as 'charge'
+        FROM application.kuaishou_account_report_hourly_dw
+        WHERE account_id in
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        and stat_date = DATE_FORMAT(#{statDay}, '%Y%m%d' )
+        GROUP BY hour
+        ORDER BY hour
+    </select>
+
+    <select id="queryTtHourList" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT hour,sum(cost) as 'charge'
+        FROM application.bytedance_advertiser_report_hourly_dw
+        WHERE account_id in
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        and stat_datetime = DATE_FORMAT(#{statDay}, '%Y%m%d' )
+        GROUP BY hour
+        ORDER BY hour
+    </select>
+
+
+    <select id="queryTtManydaysChargeAndRoi" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        IFNULL( this.charge, 0.00) AS 'charge',
+        CONCAT( CAST( IFNULL( ROUND(( this.charge - last.charge ) / last.charge* 100,2),0) AS CHAR),'%') AS
+        'chargeRoi'
+        FROM
+        (
+        SELECT
+        IFNULL( sum(cost), 0.00 ) AS 'charge'
+        FROM
+        application.bytedance_advertiser_report_daily_dw
+        WHERE
+        account_id IN
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND stat_datetime >= DATE_FORMAT(#{startTime}, '%Y%m%d' )
+        AND stat_datetime &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d' )
+        ) this
+        LEFT JOIN (
+        SELECT
+        IFNULL( sum(cost), 0.00 ) AS 'charge'
+        FROM
+        application.bytedance_advertiser_report_daily_dw
+        WHERE
+        account_id IN
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND stat_datetime >= DATE_FORMAT( #{lastTimeStart}, '%Y%m%d' )
+        AND stat_datetime &lt;= DATE_FORMAT( #{lastTimeEnd}, '%Y%m%d' )
+        ) last ON 1=1
+    </select>
+
+
+    <select id="queryKsManydaysChargeAndRoi" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        IFNULL( this.charge, 0.00) AS 'charge',
+        CONCAT( CAST( IFNULL( ROUND(( this.charge - last.charge ) / last.charge* 100,2),0) AS CHAR),'%') AS
+        'chargeRoi'
+        FROM
+        (
+        SELECT
+        IFNULL( sum(charge), 0.00 ) AS 'charge'
+        FROM
+        application.kuaishou_account_report_daily_dw
+        WHERE
+        account_id IN
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND stat_date >= DATE_FORMAT(#{startTime}, '%Y%m%d' )
+        AND stat_date &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d' )
+        ) this
+        LEFT JOIN (
+        SELECT
+        IFNULL( sum(charge), 0.00 ) AS 'charge'
+        FROM
+        application.kuaishou_account_report_daily_dw
+        WHERE
+        account_id IN
+        <foreach collection="accountIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND stat_date >= DATE_FORMAT( #{lastTimeStart}, '%Y%m%d' )
+        AND stat_date &lt;= DATE_FORMAT( #{lastTimeEnd}, '%Y%m%d' )
+        ) last ON 1=1
+    </select>
+
+
+    <select id="queryKsHourProjectTopTotal" resultType="Long">
+        SELECT count(1)
+        FROM
+        (select 1 from application.kuaishou_account_report_hourly_dw t1
+        where t1.project_id in
+        <foreach collection="projectIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        and t1.stat_date >= DATE_FORMAT(#{startTime}, '%Y%m%d')
+        and t1.stat_date &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d')
+        GROUP BY project_id
+        ) t
+    </select>
+
+    <select id="queryTtHourProjectTopTotal" resultType="Long">
+        SELECT count(1)
+        FROM
+        (select 1 from application.bytedance_advertiser_report_hourly_dw t1
+        where t1.project_id in
+        <foreach collection="projectIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        and t1.stat_datetime >= DATE_FORMAT(#{startTime}, '%Y%m%d')
+        and t1.stat_datetime &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d')
+        GROUP BY project_id
+        ) t
+    </select>
+
+    <select id="queryKsHourProjectTop" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        t1.project_id as 'projectId',
+        t1.project_name as 'projectName',
+        ( SELECT realname FROM `jeecg-boot`.sys_user us WHERE us.id = t1.sale_id ) AS 'saleName',
+        SUM( t1.charge ) AS 'charge',
+        CONCAT( CAST( IFNULL( ROUND(( t1.charge - t3.charge ) / t3.charge * 100, 2 ), 0.00 ) AS CHAR ), '%' ) AS
+        'chargeRoi',
+        IFNULL(t2.realCharge,0.00) AS 'realCharge',
+        IFNULL(t2.jlCharge,0.00) AS 'jlCharge'
+        FROM
+        application.kuaishou_account_report_hourly_dw t1
+        LEFT JOIN(
+        SELECT project_id,
+        SUM(real_charged_in_yuan) as 'realCharge',
+        SUM(direct_rebate_real_charged_in_yuan) as 'jlCharge'
+        FROM application.app_kuaishou_agent_report_d
+        WHERE
+        project_id IN
+        <foreach collection="projectIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND stat_date >= DATE_FORMAT(#{startTime}, '%Y%m%d' )
+        AND stat_date &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d' )
+        GROUP BY project_id
+        )t2 ON t1.project_id = t2.project_id
+        LEFT JOIN (
+        SELECT project_id, SUM( charge ) AS 'charge' FROM application.kuaishou_account_report_hourly_dw WHERE project_id
+        IN
+        <foreach collection="projectIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND stat_date >= DATE_FORMAT(DATE_ADD(#{startTime}, INTERVAL - ${days} DAY ), '%Y%m%d' )
+        AND stat_date &lt;= DATE_FORMAT(DATE_ADD(#{endTime}, INTERVAL - ${days} DAY ), '%Y%m%d' )
+        GROUP BY project_id ) t3 ON
+        t1.project_id = t3.project_id
+        WHERE
+        t1.project_id IN
+        <foreach collection="projectIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND stat_date >= DATE_FORMAT(#{startTime}, '%Y%m%d' )
+        AND stat_date &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d' )
+        GROUP BY
+        t1.project_id
+        ORDER BY
+        SUM( t1.charge ) DESC
+
+    </select>
+
+
+    <select id="queryTtHourProjectTop" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+        t1.project_id as 'projectId',
+        t1.project_name as 'projectName',
+        ( SELECT realname FROM `jeecg-boot`.sys_user us WHERE us.id = t1.sale_id ) AS 'saleName',
+        SUM( t1.cost ) AS 'charge',
+        CONCAT( CAST( IFNULL( ROUND(( t1.cost - t3.charge ) / t3.charge * 100, 2 ), 0 ) AS CHAR ), '%' ) AS
+        'chargeRoi',
+        IFNULL(t2.realCharge,0.00) AS 'realCharge',
+        IFNULL(t2.jlCharge,0.00) AS 'jlCharge'
+        FROM
+        application.bytedance_advertiser_report_hourly_dw t1
+        LEFT JOIN(
+        SELECT project_id,
+        SUM(cash_cost) as 'realCharge',
+        SUM(grants_cost) AS 'jlCharge'
+        FROM application.app_bytedance_agent_report_d
+        WHERE
+        project_id IN
+        <foreach collection="projectIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND stat_datetime >= DATE_FORMAT(#{startTime}, '%Y%m%d' )
+        AND stat_datetime &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d' )
+        GROUP BY project_id
+        )t2 ON t1.project_id = t2.project_id
+        LEFT JOIN (
+        SELECT project_id, SUM( cost ) AS 'charge' FROM application.bytedance_advertiser_report_hourly_dw WHERE
+        project_id
+        IN
+        <foreach collection="projectIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND stat_datetime >= DATE_FORMAT(DATE_ADD(#{startTime}, INTERVAL - ${days} DAY ), '%Y%m%d' )
+        AND stat_datetime &lt;= DATE_FORMAT(DATE_ADD(#{endTime}, INTERVAL - ${days} DAY ), '%Y%m%d' )
+        GROUP BY project_id ) t3 ON
+        t1.project_id = t3.project_id
+        WHERE
+        t1.project_id IN
+        <foreach collection="projectIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        AND t1.stat_datetime >= DATE_FORMAT(#{startTime}, '%Y%m%d' )
+        AND t1.stat_datetime &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d' )
+        GROUP BY
+        t1.project_id
+        ORDER BY
+        SUM( t1.cost ) DESC
+
+    </select>
+
+
+</mapper>

+ 28 - 0
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/service/IManagerSaleValueService.java

@@ -0,0 +1,28 @@
+package org.jeecg.ctop.material.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.pagehelper.PageInfo;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.ctop.material.entity.ManagerSaleValue;
+
+import java.text.ParseException;
+
+/**
+ * 分公司总经理&销售总监阶段性目标值
+ *
+ * @author jeecg-boot
+ * 2022-04-14
+ * @version V1.0
+ */
+public interface IManagerSaleValueService extends IService<ManagerSaleValue> {
+
+    Result<Object> getCompany(String userId);
+
+    Result<Object> getDayAndMonthlyCharges(String userId, String mediaId, String companyId) throws ParseException;
+
+    void setUpManagerSaleValue(ManagerSaleValue sale) throws Exception;
+
+    Result<Object> getHomeCharges(String userId, String mediaId, String companyId,String startTime,String endTime) throws ParseException;
+
+    PageInfo getProjectChargeTop(String userId, String mediaId, String companyId, String startTime, String endTime, Integer pageNo, Integer pageSize) throws Exception;
+}

+ 381 - 0
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/service/impl/ManagerSaleValueServiceImpl.java

@@ -0,0 +1,381 @@
+package org.jeecg.ctop.material.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.ctop.material.constants.Check;
+import org.jeecg.ctop.material.entity.ManagerSaleValue;
+import org.jeecg.ctop.material.mapper.ManagerSaleValueMapper;
+import org.jeecg.ctop.material.service.IManagerSaleValueService;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * 分公司总经理&销售总监阶段性目标值
+ *
+ * @author jeecg-boot
+ * 2022-04-14
+ * @version V1.0
+ */
+@Service
+public class ManagerSaleValueServiceImpl extends ServiceImpl<ManagerSaleValueMapper, ManagerSaleValue> implements IManagerSaleValueService {
+
+
+    @Override
+    public Result<Object> getCompany(String userId) {
+        String roleCode = baseMapper.getRoleCodeByUserId(userId);
+        List<JSONObject> companies = new ArrayList<>();
+        if ("admin".equals(roleCode)) {
+            return Result.ok(baseMapper.queryList());
+        } else if ("saleDirector".equals(roleCode) || "CompanyManager".equals(roleCode)) {
+            String name = baseMapper.getUserNameById(userId);
+            if ("丁兆明".equals(name)) {
+                companies = baseMapper.queryList();
+                List<JSONObject> companie = new ArrayList<>();
+                for (JSONObject company : companies) {
+                    String companyId = company.getString("companyId");
+                    //丁兆明可以查看 骄阳和华北的2个公司
+                    if ("5e46b5dea3d740eeb8ff1a2895015a4b".equals(companyId) || "d57fecdcf7a94d009736d9c850731582".equals(companyId)) {
+                        companie.add(company);
+                    }
+                }
+                return Result.ok(companie);
+            }
+            return Result.ok(baseMapper.queryUserCompany(userId));
+        } else {
+            return Result.error("角色权限不足");
+        }
+    }
+
+    @Override
+    public Result<Object> getDayAndMonthlyCharges(String userId, String mediaId, String companyId) throws ParseException {
+        Result<Object> result = new Result<>();
+        String roleCode = baseMapper.getRoleCodeByUserId(userId);
+        Long weekly = baseMapper.getWeekly(userId, companyId, mediaId);
+        Long monthly = baseMapper.getMonthly(userId, companyId, mediaId);
+        //销售总监
+        if ("saleDirector".equals(roleCode)) {
+            //丁兆明特殊处理
+            if ("b161b7d9793942f980dbfe8c931cd1b0".equals(userId) || "228c45f913924639bf20c79ce5dadb16".equals(userId)) {
+                //账户集合
+                List<Long> accountIds = baseMapper.getCompanyAccountIds(companyId, mediaId);
+                JSONObject data = getManagerData(accountIds, userId, mediaId, companyId);
+                data.put("weeklyGoalValue", weekly);
+                data.put("monthlyGoalValue", monthly);
+                return Result.ok(data);
+            }
+            //查询销售总监及旗下的人员 集
+            List<String> saleTeaMber = baseMapper.querySaleDirctorItsTeamMember(userId);
+            if (Check.isNull(saleTeaMber)) {
+                saleTeaMber = Arrays.asList(userId);
+                return Result.error("未查询到人员!");
+            }
+            //账户集合
+            List<Long> accountIds = baseMapper.querySalesDirectorAccountIds(companyId, mediaId, saleTeaMber);
+            if (Check.isNull(accountIds)) {
+                return Result.error("未查询到账户!");
+            }
+            JSONObject data = getManagerData(accountIds, userId, mediaId, companyId);
+            data.put("weeklyGoalValue", weekly);
+            data.put("monthlyGoalValue", monthly);
+            result = Result.ok(data);
+            //分公司总经理
+        } else if ("CompanyManager".equals(roleCode)) {
+            //账户集合
+            List<Long> accountIds = baseMapper.getCompanyAccountIds(companyId, mediaId);
+            JSONObject data = getManagerData(accountIds, userId, mediaId, companyId);
+            data.put("weeklyGoalValue", weekly);
+            data.put("monthlyGoalValue", monthly);
+            result = Result.ok(data);
+        } else {
+            result = Result.error("该用户角色权限不足!");
+        }
+
+        return result;
+    }
+
+    private JSONObject getManagerData(List<Long> accountIds, String userId, String mediaId, String companyId) throws ParseException {
+        //当天日期
+        String statDay = DateUtils.date2Str();
+        //当前小时数
+        Integer hour = DateUtils.getHour(DateUtils.formatDateTime());
+        //本周一
+        String weekFirstDay = DateUtils.getdateFromWeek(1);
+        //本月第一天
+        String monthFirstday = DateUtils.dateformat(DateUtils.initDateByMonth(), DateUtils.WEB_FORMAT);
+        //前月第一天
+        String lastMonthFirstday = DateUtils.lastMonthFirstDay(DateUtils.WEB_FORMAT);
+
+        JSONObject result = null;
+        String weekCharge = null;
+        //1 头条
+        if ("1".equals(mediaId)) {
+            //查询当日消耗 + 环比
+            result = baseMapper.queryTtTodayCharge(statDay, hour, accountIds);
+            //周消耗
+            weekCharge = baseMapper.queryTtManydaysTotalCharge(weekFirstDay, statDay, accountIds);
+            //月消耗
+            String monthCharge = baseMapper.queryTtManydaysTotalCharge(monthFirstday, statDay, accountIds);
+            result.put("weekCharge", getBigDecimalVal(weekCharge, result.getBigDecimal("totalCharge")));
+            result.put("monthCharge", getBigDecimalVal(weekCharge, result.getBigDecimal("totalCharge")));
+            //现金消耗 + 环比ROI
+            JSONObject realCharged = baseMapper.queryTtRealCharged(lastMonthFirstday, monthFirstday, statDay, accountIds);
+            result.put("realCharged", realCharged.getBigDecimal("realCharged"));
+            result.put("realChargedRoi", realCharged.getString("realChargedRoi"));
+        } else if ("2".equals(mediaId)) {
+            result = baseMapper.queryKsTodayCharge(statDay, hour, accountIds);
+            //周消耗
+            weekCharge = baseMapper.queryKsManydaysTotalCharge(weekFirstDay, statDay, accountIds);
+            //月消耗
+            String monthCharge = baseMapper.queryKsManydaysTotalCharge(monthFirstday, statDay, accountIds);
+            result.put("weekCharge", getBigDecimalVal(weekCharge, result.getBigDecimal("totalCharge")));
+            result.put("monthCharge", getBigDecimalVal(weekCharge, result.getBigDecimal("totalCharge")));
+            //现金消耗 + 环比ROI
+            JSONObject realCharged = baseMapper.queryKsRealCharged(lastMonthFirstday, monthFirstday, statDay, accountIds);
+            result.put("realCharged", realCharged.getBigDecimal("realCharged"));
+            result.put("realChargedRoi", realCharged.getString("realChargedRoi"));
+        }
+        result.put("weeklyGoalValue", baseMapper.getWeekly(userId, companyId, mediaId));
+        result.put("monthlyGoalValue", baseMapper.getMonthly(userId, companyId, mediaId));
+        return result;
+    }
+
+
+    private BigDecimal getBigDecimalVal(String afterCharge, BigDecimal todayCharge) {
+        BigDecimal charge = new BigDecimal(afterCharge);
+        return todayCharge.add(charge);
+    }
+
+
+    @Override
+    public void setUpManagerSaleValue(ManagerSaleValue sale) throws Exception {
+        QueryWrapper<ManagerSaleValue> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("company_id", sale.getCompanyId());
+        queryWrapper.eq("media_id", sale.getMediaId());
+        queryWrapper.eq("manage_id", sale.getUserId());
+        ManagerSaleValue one = this.getOne(queryWrapper);
+        if (Check.isNull(one)) {
+            sale.setId(UUID.randomUUID().toString().replace("-", ""));
+            this.save(sale);
+        } else {
+            if (!Check.isNull(sale.getWeeklyGoalValue())) {
+                one.setWeeklyGoalValue(sale.getWeeklyGoalValue());
+            }
+            if (!Check.isNull(sale.getMonthlyGoalValue())) {
+                one.setMonthlyGoalValue(sale.getMonthlyGoalValue());
+            }
+            this.updateById(one);
+        }
+    }
+
+    @Override
+    public Result<Object> getHomeCharges(String userId, String mediaId, String companyId, String startTime, String endTime) throws ParseException {
+        String roleCode = baseMapper.getRoleCodeByUserId(userId);
+
+        List<Long> compayAllAccountIds = baseMapper.getCompanyAccountIds(companyId, mediaId);
+        JSONObject data = null;
+        //销售总监
+        if ("saleDirector".equals(roleCode)) {
+            //丁兆明特殊处理
+            if ("b161b7d9793942f980dbfe8c931cd1b0".equals(userId) || "228c45f913924639bf20c79ce5dadb16".equals(userId)) {
+                if (startTime.equals(endTime)) {
+                    data = getDailyCharges(null, compayAllAccountIds, userId, mediaId, companyId, startTime);
+                } else {
+                    data = getManyDaysCharges(null, compayAllAccountIds, userId, mediaId, companyId, startTime, endTime);
+                }
+                return Result.ok(data);
+            }
+            //查询销售总监及旗下的人员 集
+            List<String> saleTeaMber = baseMapper.querySaleDirctorItsTeamMember(userId);
+            if (Check.isNull(saleTeaMber)) {
+                saleTeaMber = Arrays.asList(userId);
+            }
+            //账户集合
+            List<Long> accountIds = baseMapper.querySalesDirectorAccountIds(companyId, mediaId, saleTeaMber);
+            if (Check.isNull(accountIds)) {
+                return Result.error("未查询到账户!");
+            }
+            if (startTime.equals(endTime)) {
+                //消耗数据
+                data = getDailyCharges(compayAllAccountIds, accountIds, userId, mediaId, companyId, startTime);
+
+            } else {
+                data = getManyDaysCharges(compayAllAccountIds, accountIds, userId, mediaId, companyId, startTime, endTime);
+
+            }
+            //分公司总经理
+        } else if ("CompanyManager".equals(roleCode)) {
+            if (startTime.equals(endTime)) {
+                data = getDailyCharges(null, compayAllAccountIds, userId, mediaId, companyId, startTime);
+            } else {
+                data = getManyDaysCharges(null, compayAllAccountIds, userId, mediaId, companyId, startTime, endTime);
+            }
+        } else {
+            return Result.error("该用户角色权限不足!");
+        }
+        return Result.ok(data);
+    }
+
+    private JSONObject getManyDaysCharges(List<Long> compayAllAccountIds, List<Long> accountIds, String userId, String mediaId, String companyId, String startTime, String endTime) throws ParseException {
+        Map<String, String> map = DateUtils.getStartEndTime(startTime, endTime);
+
+        //下个周期的开始时间
+        String lastTimeStart = map.get("lastTimeStart");
+        //下个周期的结束时间
+        String lastTimeEnd = map.get("lastTimeEnd");
+
+        JSONObject result = null;
+        //1 头条
+        if ("1".equals(mediaId)) {
+            //查询 消耗 + 环比
+            result = baseMapper.queryTtManydaysChargeAndRoi(startTime, endTime, lastTimeStart, lastTimeEnd, accountIds);
+            List<JSONObject> list = baseMapper.queryTtManydaysCharge(startTime, endTime, accountIds);
+            result.put("list", list);
+            //平台消耗
+            if (compayAllAccountIds == null) {
+                result.put("platformCharge", result.getString("charge"));
+                result.put("platformChargeRoi", result.getString("chargeRoi"));
+            } else {
+                JSONObject ptdata = baseMapper.queryTtManydaysChargeAndRoi(startTime, endTime, lastTimeStart, lastTimeEnd, compayAllAccountIds);
+                result.put("platformCharge", ptdata.getString("charge"));
+                result.put("platformChargeRoi", ptdata.getString("chargeRoi"));
+            }
+        } else if ("2".equals(mediaId)) {
+            result = baseMapper.queryKsManydaysChargeAndRoi(startTime, endTime, lastTimeStart, lastTimeEnd, accountIds);
+            List<JSONObject> list = baseMapper.queryKsManydaysCharge(startTime, endTime, accountIds);
+            result.put("list", list);
+            //平台消耗
+            if (compayAllAccountIds == null) {
+                result.put("platformCharge", result.getString("charge"));
+                result.put("platformChargeRoi", result.getString("chargeRoi"));
+            } else {
+                JSONObject ptdata = baseMapper.queryKsManydaysChargeAndRoi(startTime, endTime, lastTimeStart, lastTimeEnd, compayAllAccountIds);
+                result.put("platformCharge", ptdata.getString("charge"));
+                result.put("platformChargeRoi", ptdata.getString("chargeRoi"));
+            }
+        }
+        return result;
+    }
+
+
+    private JSONObject getDailyCharges(List<Long> compayAllAccountIds, List<Long> accountIds, String userId, String mediaId, String companyId, String date) throws ParseException {
+        //当前小时数
+        Integer hour = DateUtils.getHour(DateUtils.formatDateTime());
+        if (!date.equals(DateUtils.date2Str())) {
+            hour = null;
+        }
+        JSONObject result = null;
+        //1 头条
+        if ("1".equals(mediaId)) {
+            //查询当日消耗 + 环比
+            result = baseMapper.queryTtTodayCharge(date, hour, accountIds);
+            List<JSONObject> list = baseMapper.queryTtHourList(date, accountIds);
+            result.put("list", list);
+            //平台消耗
+            if (compayAllAccountIds == null) {
+                result.put("platformCharge", result.getString("totalCharge"));
+                result.put("platformChargeRoi", result.getString("chargeRoi"));
+            } else {
+                JSONObject ptdata = baseMapper.queryTtTodayCharge(date, hour, compayAllAccountIds);
+                result.put("platformCharge", ptdata.getString("totalCharge"));
+                result.put("platformChargeRoi", ptdata.getString("chargeRoi"));
+            }
+        } else if ("2".equals(mediaId)) {
+            result = baseMapper.queryKsTodayCharge(date, hour, accountIds);
+            List<JSONObject> list = baseMapper.queryKsHourList(date, accountIds);
+            result.put("list", list);
+            //平台消耗
+            if (compayAllAccountIds == null) {
+                result.put("platformCharge", result.getString("totalCharge"));
+                result.put("platformChargeRoi", result.getString("chargeRoi"));
+            } else {
+                JSONObject ptdata = baseMapper.queryKsTodayCharge(date, hour, compayAllAccountIds);
+                result.put("platformCharge", ptdata.getString("totalCharge"));
+                result.put("platformChargeRoi", ptdata.getString("chargeRoi"));
+            }
+        }
+        return result;
+    }
+
+    @Override
+    public PageInfo getProjectChargeTop(String userId, String mediaId, String companyId, String startTime, String endTime, Integer pageNo, Integer pageSize) throws Exception {
+        String roleCode = baseMapper.getRoleCodeByUserId(userId);
+        List<Long> compayAllAccountIds = baseMapper.getCompanyAccountIds(companyId, mediaId);
+        JSONObject data = null;
+        //销售总监
+        if ("saleDirector".equals(roleCode)) {
+            //丁兆明特殊处理
+            if ("b161b7d9793942f980dbfe8c931cd1b0".equals(userId) || "228c45f913924639bf20c79ce5dadb16".equals(userId)) {
+                List<Long> projectIds = baseMapper.querySalesDirectorProjectIds(companyId, mediaId, null);
+                if (startTime.equals(endTime)) {
+                    return getProjectDailyCharges(projectIds, mediaId, startTime, null, pageNo, pageSize);
+                } else {
+                    return getProjectDailyCharges(projectIds, mediaId, startTime, endTime, pageNo, pageSize);
+                }
+            }
+            //查询销售总监及旗下的人员 集
+            List<String> saleTeaMber = baseMapper.querySaleDirctorItsTeamMember(userId);
+            if (Check.isNull(saleTeaMber)) {
+                saleTeaMber = Arrays.asList(userId);
+            }
+            //账户集合
+            List<Long> projectIds = baseMapper.querySalesDirectorProjectIds(companyId, mediaId, saleTeaMber);
+            if (Check.isNull(projectIds)) {
+                throw new Exception("未查询到账户!");
+            }
+            if (startTime.equals(endTime)) {
+                return getProjectDailyCharges(projectIds, mediaId, startTime, null, pageNo, pageSize);
+            } else {
+                return getProjectDailyCharges(projectIds, mediaId, startTime, endTime, pageNo, pageSize);
+            }
+            //分公司总经理
+        } else if ("CompanyManager".equals(roleCode)) {
+            List<Long> projectIds = baseMapper.querySalesDirectorProjectIds(companyId, mediaId, null);
+            if (startTime.equals(endTime)) {
+                return getProjectDailyCharges(projectIds, mediaId, startTime, null, pageNo, pageSize);
+            } else {
+                return getProjectDailyCharges(projectIds, mediaId, startTime, endTime, pageNo, pageSize);
+            }
+        } else {
+            throw new Exception("该用户角色权限不足!");
+        }
+    }
+
+    private PageInfo getProjectDailyCharges(List<Long> projectIds, String mediaId, String startTime, String endTime, Integer pageNo, Integer pageSize) throws ParseException {
+        Long days = 1L;
+        if (endTime == null) {
+            endTime = startTime;
+        } else {
+            days = DateUtils.getDiscrepantDays(startTime, endTime) + 1;
+        }
+
+        //1 头条
+        if ("1".equals(mediaId)) {
+            Long total = baseMapper.queryTtHourProjectTopTotal(projectIds, startTime, endTime);
+            PageHelper.startPage(pageNo, pageSize, false);
+            List<JSONObject> list = baseMapper.queryTtHourProjectTop(projectIds, startTime, endTime, days);
+            PageInfo pageInfo = new PageInfo(list);
+            pageInfo.setTotal(total);
+            return pageInfo;
+        } else if ("2".equals(mediaId)) {
+            Long total = baseMapper.queryKsHourProjectTopTotal(projectIds, startTime, endTime);
+            PageHelper.startPage(pageNo, pageSize, false);
+            List<JSONObject> list = baseMapper.queryKsHourProjectTop(projectIds, startTime, endTime, days);
+            PageInfo pageInfo = new PageInfo(list);
+            pageInfo.setTotal(total);
+            return pageInfo;
+        }
+        return null;
+    }
+}