瀏覽代碼

总经理看板数据

zhaoxian 3 年之前
父節點
當前提交
917e8c10ba

+ 148 - 0
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/controller/SysManagerCompanyController.java

@@ -0,0 +1,148 @@
+package org.jeecg.ctop.material.controller;
+
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.ctop.material.constants.Check;
+import org.jeecg.ctop.material.service.ISysManagerCompanyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 总经理&公司记录表
+ */
+@Slf4j
+@Api(tags = "总经理&公司记录表")
+@RestController
+@RequestMapping("/manager/company")
+public class SysManagerCompanyController {
+    @Autowired
+    private ISysManagerCompanyService sysManagerCompanyService;
+
+    /**
+     * 列表查询
+     */
+    @GetMapping(value = "/getCompanyList")
+    public Result<Object> queryPageList() {
+        return Result.ok(sysManagerCompanyService.list());
+    }
+
+
+    /**
+     * 素材产出
+     */
+    @GetMapping(value = "/getMaterialProduce")
+    public Result<Object> getMaterialProduce(String startTime, String endTime, String companyId, int mediaId) {
+        if (Check.isNull(companyId) || Check.isNull(mediaId)) {
+            return Result.error("缺少参数");
+        }
+        return sysManagerCompanyService.getMaterialProduce(startTime, endTime, companyId, mediaId);
+    }
+
+    /**
+     * 素材产出消耗
+     */
+    @GetMapping(value = "/getMaterialProduceConsume")
+    public Result<Object> getMaterialProduceConsume(String startTime, String endTime, String companyId, int mediaId) {
+        if (Check.isNull(companyId) || Check.isNull(mediaId)) {
+            return Result.error("缺少参数");
+        }
+        return sysManagerCompanyService.getMaterialProduceConsume(startTime, endTime, companyId, mediaId);
+    }
+
+    /**
+     * 运营消耗情况
+     */
+    @GetMapping(value = "/getOperaterConsume")
+    public Result<Object> getOperaterConsume(String startTime, String endTime, String companyId, int mediaId) {
+        if (Check.isNull(companyId) || Check.isNull(mediaId)) {
+            return Result.error("缺少参数");
+        }
+        return sysManagerCompanyService.getOperaterConsume(startTime, endTime, companyId, mediaId);
+    }
+
+    /**
+     * 设置本月消耗完成度
+     */
+    @GetMapping(value = "/setConsumeValue")
+    public Result<Object> setConsumeValue(String companyId, String targetValue, int mediaId) {
+        if (Check.isNull(companyId) || Check.isNull(mediaId) || Check.isNull(targetValue)) {
+            return Result.error("缺少参数");
+        }
+        try {
+            sysManagerCompanyService.setConsumeValue(companyId, targetValue, mediaId);
+            return Result.ok("success");
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("修改失败");
+        }
+    }
+
+    /**
+     * 项目消耗Top10
+     */
+    @GetMapping(value = "/getProjectConsumeTop")
+    public Result<Object> getProjectConsumeTop(String startTime, String endTime, String companyId, int mediaId) {
+        if (Check.isNull(companyId) || Check.isNull(mediaId)) {
+            return Result.error("缺少参数");
+        }
+        try {
+            return sysManagerCompanyService.getProjectConsumeTop(startTime, endTime, companyId, mediaId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询失败");
+        }
+    }
+
+
+    /**
+     * 分媒体投放数据
+     */
+    @GetMapping(value = "/getMediaData")
+    public Result<Object> getMediaData(String companyId) {
+        if (Check.isNull(companyId)) {
+            return Result.error("缺少参数");
+        }
+        try {
+            return sysManagerCompanyService.getMediaData(companyId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询失败");
+        }
+    }
+
+    /**
+     * 当日实时整体数据概览
+     */
+    @GetMapping(value = "/getRealTimeData")
+    public Result<Object> getRealTimeData(String companyId,int mediaId) {
+        if (Check.isNull(companyId)||Check.isNull(mediaId)) {
+            return Result.error("缺少参数");
+        }
+        try {
+            return sysManagerCompanyService.getRealTimeData(companyId,mediaId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询失败");
+        }
+    }
+
+    /**
+     * 查询本月总消耗
+     */
+    @GetMapping(value = "/getTotalConsume")
+    public Result<Object> getTotalConsume(String companyId,int mediaId) {
+        if (Check.isNull(companyId)||Check.isNull(mediaId)) {
+            return Result.error("缺少参数");
+        }
+        try {
+            return sysManagerCompanyService.getTotalConsume(companyId,mediaId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return Result.error("查询失败");
+        }
+    }
+
+}

+ 87 - 0
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/entity/SysManagerCompany.java

@@ -0,0 +1,87 @@
+package org.jeecg.ctop.material.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * 总经理&公司记录表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2022-02-22
+ */
+@Data
+@TableName("sys_manager_company")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "sys_manager_company对象", description = "总经理&公司记录表")
+public class SysManagerCompany {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id")
+    private String id;
+    /**
+     * 经理id
+     */
+    @Excel(name = "经理id", width = 15)
+    @ApiModelProperty(value = "经理id")
+    private String manageId;
+    /**
+     * 部门id
+     */
+    @Excel(name = "部门id", width = 15)
+    @ApiModelProperty(value = "部门id")
+    private String companyId;
+    /**
+     * 公司名称
+     */
+    @Excel(name = "公司名称", width = 15)
+    @ApiModelProperty(value = "公司名称")
+    private String companyName;
+    /**
+     * 快手运营部ID
+     */
+    @Excel(name = "快手运营部ID", width = 15)
+    @ApiModelProperty(value = "快手运营部ID")
+    private String ksOperateId;
+    /**
+     * 快手设计部ID
+     */
+    @Excel(name = "快手设计部ID", width = 15)
+    @ApiModelProperty(value = "快手设计部ID")
+    private String ksDesignId;
+    /**
+     * 快手消耗目标值
+     */
+    @Excel(name = "快手消耗目标值", width = 15)
+    @ApiModelProperty(value = "快手消耗目标值")
+    private String ksTargetValue;
+    /**
+     * 头条运营部ID
+     */
+    @Excel(name = "头条运营部ID", width = 15)
+    @ApiModelProperty(value = "头条运营部ID")
+    private String ttOperateId;
+    /**
+     * 头条设计部ID
+     */
+    @Excel(name = "头条设计部ID", width = 15)
+    @ApiModelProperty(value = "头条设计部ID")
+    private String ttDesignId;
+    /**
+     * 头条消耗目标值
+     */
+    @Excel(name = "头条消耗目标值", width = 15)
+    @ApiModelProperty(value = "头条消耗目标值")
+    private String ttTargetValue;
+}

+ 55 - 0
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/mapper/SysManagerCompanyMapper.java

@@ -0,0 +1,55 @@
+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.SysManagerCompany;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 总经理&公司记录表
+ *
+ * @author jeecg-boot
+ * 2022-02-22
+ * @version V1.0
+ */
+public interface SysManagerCompanyMapper extends BaseMapper<SysManagerCompany> {
+
+    List<JSONObject> queryDepartByParentId(@Param("designId") String designId);
+
+    List<String> queryAllPersonnel(@Param("list") List<JSONObject> list);
+
+    Long queryMaterialNumber(@Param("allPersonnel") List<String> allPersonnel, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+    List<String> queryPersonnels(@Param("id") String id);
+
+    double queryKsMaterialCharge(@Param("clipIds") List<String> clipIds, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("userIds") List<String> userIds);
+
+    Double queryTtMaterialCharge(@Param("clipIds") List<String> clipIds, @Param("startTime") String startTime, @Param("endTime") String endTime, @Param("userIds") List<String> userIds);
+
+    List<JSONObject> queryTtProjectConsumeTop(@Param("companyId") String companyId, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+    List<JSONObject> queryKsProjectConsumeTop(@Param("companyId") String companyId, @Param("startTime") String startTime, @Param("endTime") String endTime);
+
+    List<Map<String, String>> getKsMonthlyData(@Param("companyId") String companyId, @Param("startTime") Integer startTime, @Param("endTime") String endTime);
+
+    List<Map<String, String>> getTtMonthlyData(@Param("companyId") String companyId, @Param("startTime") Integer startTime, @Param("endTime") String endTime);
+
+    JSONObject queryKsRealTimeCost(@Param("companyId") String companyId, @Param("today") String today, @Param("lastDay") String lastDay, @Param("hour") Integer hour);
+
+    JSONObject queryKsRealTimeGroupNum(@Param("companyId") String companyId, @Param("today") String today, @Param("lastDay") String lastDay);
+
+    JSONObject queryTtRealTimeMaterialNum(@Param("companyId") String companyId,@Param("userIds") List<String> userIds, @Param("today") String today, @Param("lastDay") String lastDay);
+
+    JSONObject queryTtRealTimeCost(@Param("companyId") String companyId, @Param("today") String today, @Param("lastDay") String lastDay, @Param("hour") Integer hour);
+
+    JSONObject queryTtRealTimeGroupNum(@Param("companyId") String companyId, @Param("today") String today, @Param("lastDay") String lastDay);
+
+    JSONObject queryKsRealTimeMaterialNum(@Param("companyId") String companyId,@Param("userIds") List<String> userIds, @Param("today") String today, @Param("lastDay") String lastDay);
+
+    String getKsTotalConsume(@Param("companyId") String companyId, @Param("startTime") Integer startTime, @Param("endTime") String endTime);
+
+    String getTtTotalConsume(@Param("companyId") String companyId, @Param("startTime") Integer startTime, @Param("endTime") String endTime);
+}

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

@@ -0,0 +1,324 @@
+<?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.SysManagerCompanyMapper">
+
+    <select id="queryDepartByParentId" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT id, depart_name
+        FROM `jeecg-boot`.sys_depart
+        WHERE parent_id = #{designId}
+    </select>
+
+    <select id="queryAllPersonnel" resultType="string">
+        SELECT DISTINCT lvl FROM application.app_user_lvl_info
+        <if test='list!=null and list.size>0'>
+            where dep_id in
+            <foreach collection="list" item="obj" separator=","
+                     open="(" close=")">
+                #{obj.id}
+            </foreach>
+        </if>
+    </select>
+
+    <select id="queryPersonnels" resultType="string">
+        SELECT DISTINCT lvl
+        FROM application.app_user_lvl_info
+        where dep_id = #{id}
+    </select>
+
+    <select id="queryMaterialNumber" resultType="long">
+        SELECT COUNT(1) FROM `jeecg-boot`.ctop_material_info t1
+        INNER JOIN `jeecg-boot`.ctop_material_ascription t2 ON t1.code = t2.material_id
+        WHERE t1.create_time &gt;= #{startTime}
+        AND t1.create_time &lt;= concat(#{endTime},' 23:59:59')
+        AND t1.status != 2
+        <if test='allPersonnel!=null and allPersonnel.size>0'>
+            AND t2.clip_id in
+            <foreach collection="allPersonnel" item="id" separator=","
+                     open="(" close=")">
+                #{id}
+            </foreach>
+        </if>
+    </select>
+
+    <select id="queryKsMaterialCharge" resultType="double">
+        SELECT IFNULL(SUM(charge),0) FROM application.kuaishou_material_video_report_daily_dw
+        WHERE stat_date &gt;= DATE_FORMAT(#{startTime}, '%Y%m%d')
+        AND stat_date &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d')
+        <if test='clipIds!=null and clipIds.size>0'>
+            AND clip_id in
+            <foreach collection="clipIds" item="id" separator=","
+                     open="(" close=")">
+                #{id}
+            </foreach>
+        </if>
+        <if test='userIds!=null and userIds.size>0'>
+            AND user_id in
+            <foreach collection="userIds" item="id" separator=","
+                     open="(" close=")">
+                #{id}
+            </foreach>
+        </if>
+    </select>
+
+
+    <select id="queryTtMaterialCharge" resultType="double">
+        SELECT IFNULL(SUM(cost),0) FROM application.bytedance_material_video_report_daily_dw
+        WHERE stat_datetime &gt;= DATE_FORMAT(#{startTime}, '%Y%m%d')
+        AND stat_datetime &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d')
+        <if test='clipIds!=null and clipIds.size>0'>
+            AND clip_id in
+            <foreach collection="clipIds" item="id" separator=","
+                     open="(" close=")">
+                #{id}
+            </foreach>
+        </if>
+        <if test='userIds!=null and userIds.size>0'>
+            AND user_id in
+            <foreach collection="userIds" item="id" separator=","
+                     open="(" close=")">
+                #{id}
+            </foreach>
+        </if>
+    </select>
+
+
+    <select id="queryTtProjectConsumeTop" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT t1.project_name as 'projectName', t1.project_id as 'projectId', IFNULL(sum(cost), 0) as 'allCost',IFNULL(adNum, 0) as 'adNum'
+        FROM application.bytedance_advertiser_report_hourly_dw t1
+                 LEFT JOIN
+             (SELECT project_id, IFNULL(SUM(new_ad_num), 0) as 'adNum'
+              FROM application.app_bytedance_account_base_info_d
+              WHERE project_id IN (
+                  SELECT id
+                  FROM `jeecg-boot`.ctop_project
+                  WHERE media_id = 1
+                    and company_id = #{companyId}
+              )
+                AND stat_date &gt;= 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
+        WHERE t1.project_id IN (
+            SELECT id
+            FROM `jeecg-boot`.ctop_project
+            WHERE media_id = 1
+              and company_id = #{companyId}
+        )
+          AND t1.stat_datetime &gt;= DATE_FORMAT(#{startTime}, '%Y%m%d')
+          AND t1.stat_datetime &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d')
+        GROUP BY t1.project_id
+        ORDER BY allCost Desc LIMIT 10
+    </select>
+
+    <select id="queryKsProjectConsumeTop" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT t1.project_name as 'projectName', t1.project_id as 'projectId', IFNULL(sum(charge), 0) as 'allCost',IFNULL(adNum, 0) as 'adNum'
+        FROM application.kuaishou_account_report_hourly_dw t1
+                 LEFT JOIN
+             (SELECT project_id, SUM(new_unit_num) as 'adNum'
+              FROM application.app_kuaishou_account_base_info_d
+              WHERE project_id IN (
+                  SELECT id FROM `jeecg-boot`.ctop_project WHERE media_id = 2 and company_id = #{companyId}
+              )
+                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
+        WHERE t1.project_id IN (
+            SELECT id FROM `jeecg-boot`.ctop_project WHERE media_id = 2 and company_id = #{companyId}
+        )
+          AND t1.stat_date >= DATE_FORMAT(#{startTime}, '%Y%m%d')
+          AND t1.stat_date &lt;= DATE_FORMAT(#{endTime}, '%Y%m%d')
+        GROUP BY t1.project_id
+        ORDER BY allCost Desc LIMIT 10
+    </select>
+
+    <select id="getKsMonthlyData" resultType="Map">
+        SELECT DATE_FORMAT(stat_date, '%Y-%m-%d') as 'statDate', sum(charge) as 'allCost'
+        FROM application.kuaishou_material_video_report_daily_dw
+        WHERE project_id IN (
+            SELECT id FROM `jeecg-boot`.ctop_project WHERE media_id = 2 and company_id = #{companyId}
+        )
+          AND stat_date >= #{startTime}
+          AND stat_date &lt;= #{endTime}
+        GROUP BY stat_date
+        ORDER BY stat_date
+    </select>
+
+    <select id="getTtMonthlyData" resultType="Map">
+        SELECT DATE_FORMAT(stat_datetime, '%Y-%m-%d') as 'statDate', sum(cost) as 'allCost'
+        FROM application.bytedance_material_video_report_daily_dw
+        WHERE project_id IN (
+            SELECT id FROM `jeecg-boot`.ctop_project WHERE media_id = 1 and company_id = #{companyId}
+        )
+          AND stat_datetime >= #{startTime}
+          AND stat_datetime &lt;= #{endTime}
+        GROUP BY stat_datetime
+        ORDER BY stat_datetime
+    </select>
+
+
+    <select id="queryKsRealTimeCost" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT t1.allCost as 'todayCost',t2.allCost as 'yesCost'
+        FROM (SELECT SUM(charge) as 'allCost'
+              FROM application.kuaishou_account_report_hourly_dw
+              WHERE project_id IN
+                    (SELECT id FROM `jeecg-boot`.ctop_project WHERE media_id = 2 and company_id = #{companyId})
+                AND stat_date = DATE_FORMAT(#{today}, '%Y%m%d')
+                AND `hour` &lt;= #{hour}) t1
+                 LEFT JOIN
+             (SELECT SUM(charge) as 'allCost'
+              FROM application.kuaishou_account_report_hourly_dw
+              WHERE project_id IN
+                    (SELECT id FROM `jeecg-boot`.ctop_project WHERE media_id = 2 and company_id = #{companyId})
+                AND stat_date = DATE_FORMAT(#{lastDay}, '%Y%m%d')
+                AND `hour` &lt;= #{hour}) t2 ON 1 = 1
+    </select>
+
+
+    <select id="queryTtRealTimeCost" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT *
+        FROM (SELECT SUM(cost) as 'todayCost'
+              FROM application.bytedance_advertiser_report_hourly_dw
+              WHERE project_id IN
+                    (SELECT id FROM `jeecg-boot`.ctop_project WHERE media_id = 1 and company_id = #{companyId})
+                AND stat_datetime = DATE_FORMAT(#{today}, '%Y%m%d')
+                AND `hour` &lt;= #{hour}) t1
+                 LEFT JOIN
+             (SELECT SUM(cost) as 'yesCost'
+              FROM application.bytedance_advertiser_report_hourly_dw
+              WHERE project_id IN
+                    (SELECT id FROM `jeecg-boot`.ctop_project WHERE media_id = 1 and company_id = #{companyId})
+                AND stat_datetime = DATE_FORMAT(#{lastDay}, '%Y%m%d')
+                AND `hour` &lt;= #{hour}) t2 ON 1 = 1
+    </select>
+
+    <select id="queryKsRealTimeGroupNum" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT *
+        FROM (
+                 SELECT COUNT(1) as 'todayNum'
+                 FROM media_api.kuaishou_ad_unit_list
+                 WHERE advertiser_id IN (
+                     SELECT account_id
+                     FROM `jeecg-boot`.ctop_user_allocation t1
+                              left JOIN `jeecg-boot`.ctop_project t2 ON t2.id = t1.project_id
+                     WHERE t2.media_id = 2
+                       and company_id = #{companyId}
+                 )
+                   AND create_time >= #{today}
+             ) t1
+                 LEFT JOIN
+             (
+                 SELECT SUM(new_unit_num) as 'yesNum'
+                 FROM application.app_kuaishou_account_base_info_d
+                 WHERE project_id IN (
+                     SELECT id
+                     FROM `jeecg-boot`.ctop_project
+                     WHERE media_id = 2
+                       and company_id = #{companyId}
+                 )
+                   AND stat_date = DATE_FORMAT(#{lastDay}, '%Y%m%d')
+             ) t2 on 1 = 1
+    </select>
+
+
+    <select id="queryTtRealTimeGroupNum" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT *
+        FROM (
+                 SELECT COUNT(1) as 'todayNum'
+                 FROM media_api.bytedance_ad_get
+                 WHERE account_id IN (
+                     SELECT account_id
+                     FROM `jeecg-boot`.ctop_user_allocation t1
+                              left JOIN `jeecg-boot`.ctop_project t2 ON t2.id = t1.project_id
+                     WHERE t2.media_id = 1
+                       and company_id = #{companyId}
+                 )
+                   AND create_time >= #{today}
+             ) t1
+                 LEFT JOIN
+             (
+                 SELECT SUM(new_ad_num) as 'yesNum'
+                 FROM application.app_bytedance_account_base_info_d
+                 WHERE project_id IN (
+                     SELECT id
+                     FROM `jeecg-boot`.ctop_project
+                     WHERE media_id = 1
+                       and company_id = #{companyId}
+                 )
+                   AND stat_date = DATE_FORMAT(#{lastDay}, '%Y%m%d')
+             ) t2 on 1 = 1
+    </select>
+
+
+    <select id="queryKsRealTimeMaterialNum" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT *
+        FROM (SELECT COUNT(1) as 'todayCount'
+        FROM `jeecg-boot`.ctop_material_info
+        WHERE create_time >= #{today}
+        AND user_id in
+        <foreach collection="userIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+
+        ) t1
+        LEFT JOIN
+        (
+        SELECT SUM(new_video_num) as 'yesCount'
+        FROM application.app_kuaishou_account_base_info_d
+        WHERE project_id IN (
+        SELECT id
+        FROM `jeecg-boot`.ctop_project
+        WHERE media_id = 2
+        and company_id = #{companyId}
+        )
+        AND stat_date = DATE_FORMAT(#{lastDay}, '%Y%m%d')
+        ) t2 ON 1 = 1
+    </select>
+
+
+    <select id="queryTtRealTimeMaterialNum" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT *
+        FROM (SELECT COUNT(1) as 'todayCount'
+        FROM `jeecg-boot`.ctop_material_info
+        WHERE create_time >= #{today}
+        AND user_id in
+        <foreach collection="userIds" item="id" separator=","
+                 open="(" close=")">
+            #{id}
+        </foreach>
+        ) t1
+        LEFT JOIN
+        (
+        SELECT SUM(new_video_num) as 'yesCount'
+        FROM application.app_bytedance_account_base_info_d
+        WHERE project_id IN (
+        SELECT id
+        FROM `jeecg-boot`.ctop_project
+        WHERE media_id = 1
+        and company_id = #{companyId}
+        )
+        AND stat_date = DATE_FORMAT(#{lastDay}, '%Y%m%d')
+        ) t2 ON 1 = 1
+    </select>
+
+
+    <select id="getKsTotalConsume" resultType="String">
+        SELECT IFNULL(sum(charge), 0)
+        FROM application.kuaishou_material_video_report_daily_dw
+        WHERE project_id IN (
+            SELECT id FROM `jeecg-boot`.ctop_project WHERE media_id = 2 and company_id = #{companyId}
+        )
+          AND stat_date >= #{startTime}
+          AND stat_date &lt;= #{endTime}
+    </select>
+
+
+    <select id="getTtTotalConsume" resultType="String">
+        SELECT IFNULL(sum(cost), 0)
+        FROM application.bytedance_material_video_report_daily_dw
+        WHERE project_id IN (
+            SELECT id FROM `jeecg-boot`.ctop_project WHERE media_id = 1 and company_id = #{companyId}
+        )
+          AND stat_datetime >= #{startTime}
+          AND stat_datetime &lt;= #{endTime}
+    </select>
+</mapper>

+ 33 - 0
jeecg-boot-material-view/src/main/java/org/jeecg/ctop/material/service/ISysManagerCompanyService.java

@@ -0,0 +1,33 @@
+package org.jeecg.ctop.material.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.ctop.material.entity.SysManagerCompany;
+
+import java.text.ParseException;
+
+/**
+ * 总经理&公司记录表
+ *
+ * @author jeecg-boot
+ * 2022-02-22
+ * @version V1.0
+ */
+public interface ISysManagerCompanyService extends IService<SysManagerCompany> {
+
+    Result<Object> getMaterialProduce(String startTime, String endTime, String companyId, int mediaId);
+
+    Result<Object> getMaterialProduceConsume(String startTime, String endTime, String companyId, int mediaId);
+
+    Result<Object> getOperaterConsume(String startTime, String endTime, String companyId, int mediaId);
+
+    void setConsumeValue(String companyId, String targetValue, int mediaId) throws Exception;
+
+    Result<Object> getProjectConsumeTop(String startTime, String endTime, String companyId, int mediaId);
+
+    Result<Object> getMediaData(String companyId);
+
+    Result<Object> getRealTimeData(String companyId,int mediaId) throws ParseException;
+
+    Result<Object> getTotalConsume(String companyId, int mediaId);
+}

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

@@ -0,0 +1,460 @@
+package org.jeecg.ctop.material.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.SysManagerCompany;
+import org.jeecg.ctop.material.mapper.SysManagerCompanyMapper;
+import org.jeecg.ctop.material.service.ISysManagerCompanyService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.ParseException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 总经理&公司记录表
+ *
+ * @author jeecg-boot
+ * 2022-02-22
+ * @version V1.0
+ */
+@Service
+public class SysManagerCompanyServiceImpl extends ServiceImpl<SysManagerCompanyMapper, SysManagerCompany> implements ISysManagerCompanyService {
+
+    @Autowired
+    private SysManagerCompanyMapper mapper;
+
+
+    @Override
+    public Result<Object> getMaterialProduce(String startTime, String endTime, String companyId, int mediaId) {
+
+        if (Check.isNull(startTime) && Check.isNull(endTime)) {
+            startTime = DateUtils.getDate(DateUtils.WEB_FORMAT);
+            endTime = startTime;
+        }
+        SysManagerCompany company = this.getById(companyId);
+        if (Check.isNull(company)) {
+            return Result.ok("未查到公司:" + companyId);
+        }
+
+        //查询子集部门
+        List<JSONObject> list = null;
+        if (mediaId == 1) {
+            list = mapper.queryDepartByParentId(company.getTtDesignId());
+        } else if (mediaId == 2) {
+            list = mapper.queryDepartByParentId(company.getKsDesignId());
+        }
+        if (Check.isNull(list) || list.isEmpty()) {
+            return Result.ok("未查询到设计组");
+        }
+        //查询部门所有人员
+        List<String> allPersonnel = mapper.queryAllPersonnel(list);
+        if (Check.isNull(allPersonnel) || allPersonnel.isEmpty()) {
+            return Result.ok("未查询到人员");
+        }
+        //查询数量
+        Long total = mapper.queryMaterialNumber(allPersonnel, startTime, endTime);
+
+        BigDecimal hundred = new BigDecimal(100 + "");
+        for (JSONObject obj : list) {
+            List<String> personnels = mapper.queryPersonnels(obj.getString("id"));
+            if (Check.isNull(personnels)) {
+                obj.put("count", 0);
+                obj.put("ratio", 0.00);
+                continue;
+            }
+            Long count = mapper.queryMaterialNumber(personnels, startTime, endTime);
+            if (Check.isNull(count)) {
+                obj.put("count", 0);
+                obj.put("ratio", 0.00);
+                continue;
+            }
+            obj.put("count", count);
+            if (total != 0) {
+                BigDecimal ratio = BigDecimal.valueOf(Double.valueOf(count) / total).multiply(hundred);
+                String ratioStr = ratio.setScale(2, RoundingMode.HALF_UP).toString();
+                obj.put("ratio", ratioStr);
+            }
+        }
+        JSONObject result = new JSONObject();
+        result.put("total", total);
+        result.put("list", list);
+        return Result.ok(result);
+    }
+
+    @Override
+    public Result<Object> getMaterialProduceConsume(String startTime, String endTime, String companyId, int mediaId) {
+        if (Check.isNull(startTime) && Check.isNull(endTime)) {
+            startTime = DateUtils.getDate(DateUtils.WEB_FORMAT);
+            endTime = startTime;
+        }
+        SysManagerCompany company = this.getById(companyId);
+        if (Check.isNull(company)) {
+            return Result.ok("未查到公司:" + companyId);
+        }
+        //查询子集部门
+        List<JSONObject> list = null;
+        //总消耗
+        Double totalCharge = null;
+        if (mediaId == 1) {
+            list = mapper.queryDepartByParentId(company.getTtDesignId());
+            if (Check.isNull(list) || list.isEmpty()) {
+                return Result.ok("未查询到设计组");
+            }
+            //查询部门所有人员
+            List<String> clipIds = mapper.queryAllPersonnel(list);
+            if (Check.isNull(clipIds)) {
+                return Result.ok("未查询到人员");
+            }
+            //总消耗
+            totalCharge = mapper.queryTtMaterialCharge(clipIds, startTime, endTime, null);
+            BigDecimal hundred = new BigDecimal(100 + "");
+            for (JSONObject obj : list) {
+                if (Check.isNull(totalCharge) || totalCharge == 0.0) {
+                    obj.put("charge", 0);
+                    obj.put("ratio", 0.0);
+                    continue;
+                } else {
+                    List<String> clipids = mapper.queryPersonnels(obj.getString("id"));
+                    if (Check.isNull(clipids)) {
+                        obj.put("charge", 0);
+                        obj.put("ratio", 0.0);
+                        continue;
+                    }
+                    Double charge = mapper.queryTtMaterialCharge(clipids, startTime, endTime, null);
+                    if (Check.isNull(charge)) {
+                        obj.put("charge", 0);
+                        obj.put("ratio", 0.0);
+                        continue;
+                    }
+                    BigDecimal ratio = BigDecimal.valueOf(Double.valueOf(charge) / totalCharge).multiply(hundred);
+                    String ratioStr = ratio.setScale(2, RoundingMode.HALF_UP).toString();
+                    obj.put("ratio", ratioStr);
+                    obj.put("charge", charge);
+                }
+            }
+        } else if (mediaId == 2) {
+            list = mapper.queryDepartByParentId(company.getKsDesignId());
+            if (Check.isNull(list) || list.isEmpty()) {
+                return Result.ok("未查询到设计组");
+            }
+            //查询部门所有人员
+            List<String> clipIds = mapper.queryAllPersonnel(list);
+            if (Check.isNull(clipIds)) {
+                return Result.ok("未查询到人员");
+            }
+            //总消耗
+            totalCharge = mapper.queryKsMaterialCharge(clipIds, startTime, endTime, null);
+            BigDecimal hundred = new BigDecimal(100 + "");
+            for (JSONObject obj : list) {
+                if (Check.isNull(totalCharge) || totalCharge == 0.0) {
+                    obj.put("charge", 0);
+                    obj.put("ratio", 0.0);
+                    continue;
+                } else {
+                    List<String> clipids = mapper.queryPersonnels(obj.getString("id"));
+                    if (Check.isNull(clipids)) {
+                        obj.put("charge", 0);
+                        obj.put("ratio", 0.0);
+                        continue;
+                    }
+                    Double charge = mapper.queryKsMaterialCharge(clipids, startTime, endTime, null);
+                    if (Check.isNull(charge)) {
+                        obj.put("charge", 0);
+                        obj.put("ratio", 0.0);
+                        continue;
+                    }
+                    BigDecimal ratio = BigDecimal.valueOf(Double.valueOf(charge) / totalCharge).multiply(hundred);
+                    String ratioStr = ratio.setScale(2, RoundingMode.HALF_UP).toString();
+                    obj.put("ratio", ratioStr);
+                    obj.put("charge", charge);
+                }
+            }
+        }
+        JSONObject result = new JSONObject();
+        result.put("totalCharge", totalCharge);
+        result.put("list", list);
+        return Result.ok(result);
+    }
+
+    @Override
+    public Result<Object> getOperaterConsume(String startTime, String endTime, String companyId, int mediaId) {
+        if (Check.isNull(startTime) && Check.isNull(endTime)) {
+            startTime = DateUtils.getDate(DateUtils.WEB_FORMAT);
+            endTime = startTime;
+        }
+        SysManagerCompany company = this.getById(companyId);
+        if (Check.isNull(company)) {
+            return Result.ok("未查到公司:" + companyId);
+        }
+        //查询子集部门
+        List<JSONObject> list = null;
+        //总消耗
+        Double totalCharge = null;
+        if (mediaId == 1) {
+            list = mapper.queryDepartByParentId(company.getTtOperateId());
+            if (Check.isNull(list) || list.isEmpty()) {
+                return Result.ok("未查询到销售组");
+            }
+            //查询部门所有人员
+            List<String> userIds = mapper.queryAllPersonnel(list);
+            if (Check.isNull(userIds)) {
+                return Result.ok("未查询到人员");
+            }
+            //总消耗
+            totalCharge = mapper.queryTtMaterialCharge(null, startTime, endTime, userIds);
+            BigDecimal hundred = new BigDecimal(100 + "");
+            for (JSONObject obj : list) {
+                if (Check.isNull(totalCharge) || totalCharge == 0.0) {
+                    obj.put("charge", 0);
+                    obj.put("ratio", 0.0);
+                    continue;
+                } else {
+                    List<String> userids = mapper.queryPersonnels(obj.getString("id"));
+                    if (Check.isNull(userids)) {
+                        obj.put("charge", 0);
+                        obj.put("ratio", 0.0);
+                        continue;
+                    }
+                    Double charge = mapper.queryTtMaterialCharge(null, startTime, endTime, userids);
+                    if (Check.isNull(charge)) {
+                        obj.put("charge", 0);
+                        obj.put("ratio", 0.0);
+                        continue;
+                    }
+                    BigDecimal ratio = BigDecimal.valueOf(Double.valueOf(charge) / totalCharge).multiply(hundred);
+                    String ratioStr = ratio.setScale(2, RoundingMode.HALF_UP).toString();
+                    obj.put("ratio", ratioStr);
+                    obj.put("charge", charge);
+                }
+            }
+        } else if (mediaId == 2) {
+            list = mapper.queryDepartByParentId(company.getKsOperateId());
+            if (Check.isNull(list) || list.isEmpty()) {
+                return Result.ok("未查询到销售组");
+            }
+            //查询部门所有人员
+            List<String> userIds = mapper.queryAllPersonnel(list);
+            if (Check.isNull(userIds)) {
+                return Result.ok("未查询到人员");
+            }
+            //总消耗
+            totalCharge = mapper.queryKsMaterialCharge(null, startTime, endTime, userIds);
+            BigDecimal hundred = new BigDecimal(100 + "");
+            for (JSONObject obj : list) {
+                if (Check.isNull(totalCharge) || totalCharge == 0.0) {
+                    obj.put("charge", 0);
+                    obj.put("ratio", 0.0);
+                    continue;
+                } else {
+                    List<String> userids = mapper.queryPersonnels(obj.getString("id"));
+                    if (Check.isNull(userids)) {
+                        obj.put("charge", 0);
+                        obj.put("ratio", 0.0);
+                        continue;
+                    }
+                    Double charge = mapper.queryKsMaterialCharge(null, startTime, endTime, userids);
+                    if (Check.isNull(charge)) {
+                        obj.put("charge", 0);
+                        obj.put("ratio", 0.0);
+                        continue;
+                    }
+                    BigDecimal ratio = BigDecimal.valueOf(Double.valueOf(charge) / totalCharge).multiply(hundred);
+                    String ratioStr = ratio.setScale(2, RoundingMode.HALF_UP).toString();
+                    obj.put("ratio", ratioStr);
+                    obj.put("charge", charge);
+                }
+            }
+        }
+
+        JSONObject result = new JSONObject();
+        result.put("totalCharge", totalCharge);
+        result.put("list", list);
+        return Result.ok(result);
+    }
+
+    @Override
+    public void setConsumeValue(String companyId, String targetValue, int mediaId) throws Exception {
+        SysManagerCompany company = this.getById(companyId);
+        if (Check.isNull(company)) {
+            throw new Exception("未查询到公司");
+        }
+        if (mediaId == 1) {
+            company.setTtTargetValue(targetValue);
+        } else if (mediaId == 2) {
+            company.setKsTargetValue(targetValue);
+        }
+        this.updateById(company);
+    }
+
+    @Override
+    public Result<Object> getProjectConsumeTop(String startTime, String endTime, String companyId, int mediaId) {
+        if (Check.isNull(startTime) && Check.isNull(endTime)) {
+            startTime = DateUtils.getDate(DateUtils.WEB_FORMAT);
+            endTime = startTime;
+        }
+        List<JSONObject> list = null;
+        if (mediaId == 1) {
+            list = mapper.queryTtProjectConsumeTop(companyId, startTime, endTime);
+        } else if (mediaId == 2) {
+            list = mapper.queryKsProjectConsumeTop(companyId, startTime, endTime);
+        }
+        return Result.ok(list);
+    }
+
+    @Override
+    public Result<Object> getMediaData(String companyId) {
+        Integer startTime = DateUtils.getFirstDayByMonth();
+        String endTime = DateUtils.getDate(DateUtils.SHORT_FORMAT);
+        List<Map<String, String>> ksdata = mapper.getKsMonthlyData(companyId, startTime, endTime);
+        List<Map<String, String>> ttdate = mapper.getTtMonthlyData(companyId, startTime, endTime);
+        JSONObject obj = new JSONObject();
+        obj.put("ksdata", ksdata);
+        obj.put("ttdate", ttdate);
+        return Result.ok(obj);
+    }
+
+    @Override
+    public Result<Object> getRealTimeData(String companyId, int mediaId) throws ParseException {
+        String today = DateUtils.getDate(DateUtils.WEB_FORMAT);
+        String lastDay = DateUtils.getLastDay(today, 1);
+        Integer hour = DateUtils.getNowHour();
+        SysManagerCompany company = this.getById(companyId);
+        JSONObject result = new JSONObject();
+        if (Check.isNull(company)) {
+            return Result.ok("未查到公司:" + companyId);
+        }
+        BigDecimal hundred = new BigDecimal(100 + "");
+        if (mediaId == 1) {
+            List<JSONObject> list = mapper.queryDepartByParentId(company.getTtDesignId());
+            if (Check.isNull(list) || list.isEmpty()) {
+                return Result.ok("未查询到销售组");
+            }
+            //查询部门所有人员
+            List<String> userIds = mapper.queryAllPersonnel(list);
+            if (Check.isNull(userIds)) {
+                return Result.ok("未查询到人员");
+            }
+
+            //查询消耗
+            JSONObject cost = mapper.queryTtRealTimeCost(companyId, today, lastDay, hour);
+            Double todayCost = cost.getDouble("todayCost");
+            Double yesCost = cost.getDouble("yesCost");
+            BigDecimal costRatio = BigDecimal.valueOf((todayCost - yesCost) / yesCost).multiply(hundred);
+            String costRatioStr = costRatio.setScale(2, RoundingMode.HALF_UP).toString();
+            //查询广告组数
+            JSONObject group = mapper.queryTtRealTimeGroupNum(companyId, today, lastDay);
+            Long groupNum = group.getLong("todayNum");
+            Double yesNum = group.getDouble("yesNum");
+            BigDecimal unitRatio = BigDecimal.valueOf((groupNum - yesNum) / yesNum).multiply(hundred);
+            String unitRatioStr = unitRatio.setScale(2, RoundingMode.HALF_UP).toString();
+
+            //查询素材数
+            JSONObject material = mapper.queryTtRealTimeMaterialNum(companyId, userIds, today, lastDay);
+            Long materialNum = material.getLong("todayCount");
+            Double yesCount = material.getDouble("yesCount");
+            BigDecimal materialRatio = BigDecimal.valueOf((materialNum - yesCount) / yesCount).multiply(hundred);
+            String materialRatioStr = unitRatio.setScale(2, RoundingMode.HALF_UP).toString();
+
+            List<JSONObject> operateList = mapper.queryDepartByParentId(company.getTtOperateId());
+            if (Check.isNull(list) || list.isEmpty()) {
+                return Result.ok("未查询到技术组");
+            }
+            //查询运营部门所有人员
+            List<String> operateUserIds = mapper.queryAllPersonnel(operateList);
+            //人效比:公式=该分公司今日消耗/该分公司运营人数
+            if (Check.isNull(operateUserIds)) {
+                result.put("renXiao", 0);
+            } else {
+                BigDecimal renXiaoRatio = BigDecimal.valueOf(todayCost / operateUserIds.size());
+                String renXiaoRatioStr = renXiaoRatio.setScale(2, RoundingMode.HALF_UP).toString();
+                result.put("renXiao", renXiaoRatioStr);
+            }
+            result.put("cost", todayCost);
+            result.put("costRatio", costRatioStr);
+            result.put("groupNum", groupNum);
+            result.put("unitRatio", unitRatioStr);
+            result.put("materialNum", materialNum);
+            result.put("materialRatio", materialRatioStr);
+        } else if (mediaId == 2) {
+            List<JSONObject> list = mapper.queryDepartByParentId(company.getKsDesignId());
+            if (Check.isNull(list) || list.isEmpty()) {
+                return Result.ok("未查询到技术组");
+            }
+            //查询技术部门所有人员
+            List<String> userIds = mapper.queryAllPersonnel(list);
+            if (Check.isNull(userIds)) {
+                return Result.ok("未查询到人员");
+            }
+
+            //查询消耗
+            JSONObject cost = mapper.queryKsRealTimeCost(companyId, today, lastDay, hour);
+            Double todayCost = cost.getDouble("todayCost");
+            Double yesCost = cost.getDouble("yesCost");
+            BigDecimal costRatio = BigDecimal.valueOf((todayCost - yesCost) / yesCost).multiply(hundred);
+            String costRatioStr = costRatio.setScale(2, RoundingMode.HALF_UP).toString();
+            //查询广告组数
+            JSONObject group = mapper.queryKsRealTimeGroupNum(companyId, today, lastDay);
+            Long groupNum = group.getLong("todayNum");
+            Double yesNum = group.getDouble("yesNum");
+            BigDecimal unitRatio = BigDecimal.valueOf((groupNum - yesNum) / yesNum).multiply(hundred);
+            String unitRatioStr = unitRatio.setScale(2, RoundingMode.HALF_UP).toString();
+
+            //查询素材数
+            JSONObject material = mapper.queryKsRealTimeMaterialNum(companyId, userIds, today, lastDay);
+            Long materialNum = material.getLong("todayCount");
+            Double yesCount = material.getDouble("yesCount");
+            BigDecimal materialRatio = BigDecimal.valueOf((materialNum - yesCount) / yesCount).multiply(hundred);
+            String materialRatioStr = unitRatio.setScale(2, RoundingMode.HALF_UP).toString();
+
+            List<JSONObject> operateList = mapper.queryDepartByParentId(company.getKsOperateId());
+            if (Check.isNull(list) || list.isEmpty()) {
+                return Result.ok("未查询到技术组");
+            }
+            //查询运营部门所有人员
+            List<String> operateUserIds = mapper.queryAllPersonnel(operateList);
+            //人效比:公式=该分公司今日消耗/该分公司运营人数
+            if (Check.isNull(operateUserIds)) {
+                result.put("renXiao", 0);
+            } else {
+                BigDecimal renXiaoRatio = BigDecimal.valueOf(todayCost / operateUserIds.size());
+                String renXiaoRatioStr = renXiaoRatio.setScale(2, RoundingMode.HALF_UP).toString();
+                result.put("renXiao", renXiaoRatioStr);
+            }
+            result.put("cost", todayCost);
+            result.put("costRatio", costRatioStr);
+            result.put("groupNum", groupNum);
+            result.put("unitRatio", unitRatioStr);
+            result.put("materialNum", materialNum);
+            result.put("materialRatio", materialRatioStr);
+        }
+        return Result.ok(result);
+    }
+
+    @Override
+    public Result<Object> getTotalConsume(String companyId, int mediaId) {
+        Integer startTime = DateUtils.getFirstDayByMonth();
+        String endTime = DateUtils.getDate(DateUtils.SHORT_FORMAT);
+        JSONObject obj = new JSONObject();
+        SysManagerCompany company = this.getById(companyId);
+        if (Check.isNull(company)) {
+            return Result.error("未查询到公司");
+        }
+        String totalConsume = null;
+        if (mediaId == 1) {
+            totalConsume = mapper.getTtTotalConsume(companyId, startTime, endTime);
+            obj.put("targetValue", company.getTtTargetValue());
+        } else if (mediaId == 2) {
+            totalConsume = mapper.getKsTotalConsume(companyId, startTime, endTime);
+            obj.put("targetValue", company.getKsTargetValue());
+        }
+        obj.put("totalConsume", totalConsume);
+        return Result.ok(obj);
+    }
+}

+ 37 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/UserCompanyController.java

@@ -6,6 +6,7 @@ import cn.com.ctop.common.module.mapper.UserCompanyMapper;
 import cn.com.ctop.common.module.service.IUserCompanyService;
 import cn.com.ctop.common.module.utils.Check;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -16,13 +17,22 @@ import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.entity.SysUser;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.system.service.ISysRoleService;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.entity.ExportParams;
 import org.jeecgframework.poi.excel.entity.ImportParams;
 import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
@@ -55,7 +65,8 @@ public class UserCompanyController {
     private SysUserMapper sysUserMapper;
     @Resource
     private UserCompanyMapper userCompanyMapper;
-
+    @Autowired
+    private ISysRoleService sysRoleService;
 
     @GetMapping(value = "/companyUser")
     public void companyUser() {
@@ -296,4 +307,28 @@ public class UserCompanyController {
         return Result.ok("文件导入失败!");
     }
 
+    /**
+     * 通过id查询
+     */
+    @GetMapping(value = "/queryCompanyByUserId")
+    public Result<Object> queryCompanyByUserId(@RequestParam(name = "userId", required = true) String userId) {
+        Result<Object> result = new Result<Object>();
+        if (Check.isNull(userId)) {
+            return Result.error("缺少参数");
+        }
+        String roleCode = sysRoleService.getRoleCodeByUserId(userId);
+        if ("CompanyManager".equals(roleCode) || "admin".equals(roleCode)) {
+            JSONObject obj = userCompanyService.getCompanyInfoByUserId(userId);
+            String companyId = obj.getString("companyId");
+            if (Check.isNull(companyId)) {
+                return Result.error("用户未指派公司,请优先分配公司");
+            }
+            result.setResult(companyId);
+            result.setSuccess(true);
+            return result;
+        } else {
+            return Result.error("权限不足");
+        }
+    }
+
 }