浏览代码

Merge branch 'master' into test

# Conflicts:
#	jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
yumeng 3 年之前
父节点
当前提交
62f68833f7
共有 18 个文件被更改,包括 311 次插入51 次删除
  1. 3 1
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
  2. 1 1
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/controller/ExportReportController.java
  3. 1 1
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/controller/SettlementFileController.java
  4. 0 5
      jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/service/serviceImpl/ReportSettlementServiceImpl.java
  5. 59 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/entity/OauthDetail.java
  6. 15 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/OauthDetailMapper.java
  7. 5 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/OauthDetailMapper.xml
  8. 15 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/IOauthDetailService.java
  9. 10 1
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/BindAccountAuthServiceImpl.java
  10. 19 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/OauthDetailServiceImpl.java
  11. 1 1
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/ai/mapper/AiKuaishouUnitLevelOperationRecordMapper.java
  12. 26 5
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/ai/mapper/xml/AiKuaishouUnitLevelOperationRecordMapper.xml
  13. 95 0
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/controller/KuaishouAudienceReportDailyController.java
  14. 4 4
      jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/EtlKuaishouReportAccountHourlyServiceImpl.java
  15. 3 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/AdvertiserController.java
  16. 23 11
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CallbackController.java
  17. 10 8
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProductController.java
  18. 21 12
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectController.java

+ 3 - 1
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java

@@ -239,7 +239,9 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/cwjsSaleAssistantInfo/**", "anon");
         filterChainDefinitionMap.put("/cwjsSaleAssistantInfo/**", "anon");
         filterChainDefinitionMap.put("/overView/**", "anon");
         filterChainDefinitionMap.put("/overView/**", "anon");
         filterChainDefinitionMap.put("/agent/**", "anon");
         filterChainDefinitionMap.put("/agent/**", "anon");
-        filterChainDefinitionMap.put("/stare/**", "anon");
+        filterChainDefinitionMap.put("/task/kuaishouHostingTask/**", "anon");
+        filterChainDefinitionMap.put("/audienceReport/**", "anon");
+
         // 添加自己的过滤器并且取名为jwt
         // 添加自己的过滤器并且取名为jwt
         Map<String, Filter> filterMap = new HashMap<>(1);
         Map<String, Filter> filterMap = new HashMap<>(1);
         filterMap.put("jwt", new JwtFilter());
         filterMap.put("jwt", new JwtFilter());

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

@@ -33,6 +33,7 @@ public class ExportReportController {
     @Autowired
     @Autowired
     private ISysUserService userService;
     private ISysUserService userService;
 
 
+    //结算单-日期修改-master
     @ApiOperation(value = "财务结算-结算单导出-头条", notes = "财务结算-结算单导出-头条")
     @ApiOperation(value = "财务结算-结算单导出-头条", notes = "财务结算-结算单导出-头条")
     @GetMapping(value = "/settlementReportBytedance")
     @GetMapping(value = "/settlementReportBytedance")
     public Result settlementReportBytedance(SettlementFileParamsVo paramsVo, HttpServletResponse response) throws Exception{
     public Result settlementReportBytedance(SettlementFileParamsVo paramsVo, HttpServletResponse response) throws Exception{
@@ -53,7 +54,6 @@ public class ExportReportController {
         if(null == date||date.equals("")){
         if(null == date||date.equals("")){
             paramsVo.setUploadYears(DateUtils.formatDate(new Date(),"yyyy-MM"));
             paramsVo.setUploadYears(DateUtils.formatDate(new Date(),"yyyy-MM"));
         }
         }
-        log.info("快手结算单----------{}",paramsVo);
         return reportSettlementService.settlementReportKuaiShou(paramsVo,response,user);
         return reportSettlementService.settlementReportKuaiShou(paramsVo,response,user);
     }
     }
 
 

+ 1 - 1
jeecg-boot-finance/src/main/java/org/jeecg/ctop/finance/settlement/controller/SettlementFileController.java

@@ -47,7 +47,7 @@ public class SettlementFileController {
     public Result<PageInfo<Map<String,String>>> getSettlementSheetList(SettlementFileParamsVo paramsVo,
     public Result<PageInfo<Map<String,String>>> getSettlementSheetList(SettlementFileParamsVo paramsVo,
                                                                        @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                                                        @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                                                        @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
                                                                        @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) {
-        //查询用户角色
+        //查询用户角色 -master
         String roleCode = sysRoleService.getRoleCodeByUserId(paramsVo.getCreateUserId());
         String roleCode = sysRoleService.getRoleCodeByUserId(paramsVo.getCreateUserId());
         List<String> userIds = new ArrayList<>();
         List<String> userIds = new ArrayList<>();
         //管理员 || 财务
         //管理员 || 财务

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

@@ -314,11 +314,8 @@ public class ReportSettlementServiceImpl implements IReportSettlementService {
         }
         }
         //查询财务模块中已上传的账户
         //查询财务模块中已上传的账户
         List<String> settlementAccountList = reportSettlementMapper.getAccountIdBytedance(sales,String.valueOf(mediaId),paramsVo.getAdvertiserId(),paramsVo.getProductId(),paramsVo.getProjectId());
         List<String> settlementAccountList = reportSettlementMapper.getAccountIdBytedance(sales,String.valueOf(mediaId),paramsVo.getAdvertiserId(),paramsVo.getProductId(),paramsVo.getProjectId());
-        log.info("快手结算单----已上传的账户------{}",settlementAccountList);
-
         //查询已绑定账户
         //查询已绑定账户
         allocations = userAllocationMapper.getAccountInfoBySalesId(sales,String.valueOf(mediaId),paramsVo.getAdvertiserId(),paramsVo.getProductId(),paramsVo.getProjectId());
         allocations = userAllocationMapper.getAccountInfoBySalesId(sales,String.valueOf(mediaId),paramsVo.getAdvertiserId(),paramsVo.getProductId(),paramsVo.getProjectId());
-        log.info("快手结算单------已绑定账户----{},{}",allocations.size(),allocations);
         return mergeAccountId(settlementAccountList,allocations,uploadYears);
         return mergeAccountId(settlementAccountList,allocations,uploadYears);
     }
     }
 
 
@@ -365,8 +362,6 @@ public class ReportSettlementServiceImpl implements IReportSettlementService {
             //查询 需要导出的数据的账户id
             //查询 需要导出的数据的账户id
             List<String> accountIdList = this.getAccountId(paramsVo,user);
             List<String> accountIdList = this.getAccountId(paramsVo,user);
 
 
-            log.info("最终的账户{}==={}",accountIdList.size(),accountIdList);
-
 
 
             if (Check.isNull(accountIdList)){
             if (Check.isNull(accountIdList)){
                 return Result.errorMsg("该广告主和产品下无法查询到绑定的快手账户信息");
                 return Result.errorMsg("该广告主和产品下无法查询到绑定的快手账户信息");

+ 59 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/entity/OauthDetail.java

@@ -0,0 +1,59 @@
+package cn.com.ctop.common.module.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+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;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 授权详情信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2021-12-01
+ */
+@Data
+@TableName("ctop_oauth_detail")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_oauth_detail对象", description = "授权详情信息")
+public class OauthDetail {
+
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "主键ID")
+    private Long id;
+    /**
+     * 授权信息
+     */
+    @Excel(name = "授权信息", width = 15)
+    @ApiModelProperty(value = "授权信息")
+    private String detailText;
+    /**
+     * 创建时间
+     */
+    @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "创建时间")
+    private Date createTime;
+    /**
+     * 修改时间
+     */
+    @Excel(name = "修改时间", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+}

+ 15 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/OauthDetailMapper.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.common.module.mapper;
+
+import cn.com.ctop.common.module.entity.OauthDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 授权详情信息
+ *
+ * @author jeecg-boot
+ * 2021-12-01
+ * @version V1.0
+ */
+public interface OauthDetailMapper extends BaseMapper<OauthDetail> {
+
+}

+ 5 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/mapper/xml/OauthDetailMapper.xml

@@ -0,0 +1,5 @@
+<?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="cn.com.ctop.common.module.mapper.OauthDetailMapper">
+
+</mapper>

+ 15 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/IOauthDetailService.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.common.module.service;
+
+import cn.com.ctop.common.module.entity.OauthDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 授权详情信息
+ *
+ * @author jeecg-boot
+ * 2021-12-01
+ * @version V1.0
+ */
+public interface IOauthDetailService extends IService<OauthDetail> {
+
+}

+ 10 - 1
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/BindAccountAuthServiceImpl.java

@@ -2,9 +2,11 @@ package cn.com.ctop.common.module.service.impl;
 
 
 import cn.com.ctop.common.module.entity.BindAccountAuth;
 import cn.com.ctop.common.module.entity.BindAccountAuth;
 import cn.com.ctop.common.module.entity.OauthConfig;
 import cn.com.ctop.common.module.entity.OauthConfig;
+import cn.com.ctop.common.module.entity.OauthDetail;
 import cn.com.ctop.common.module.mapper.BindAccountAuthMapper;
 import cn.com.ctop.common.module.mapper.BindAccountAuthMapper;
 import cn.com.ctop.common.module.service.IBindAccountAuthService;
 import cn.com.ctop.common.module.service.IBindAccountAuthService;
 import cn.com.ctop.common.module.service.IOauthConfigService;
 import cn.com.ctop.common.module.service.IOauthConfigService;
+import cn.com.ctop.common.module.service.IOauthDetailService;
 import cn.com.ctop.common.module.utils.BytedanceInterfaceConstant;
 import cn.com.ctop.common.module.utils.BytedanceInterfaceConstant;
 import cn.com.ctop.common.module.utils.KuaishouInterfaceConstant;
 import cn.com.ctop.common.module.utils.KuaishouInterfaceConstant;
 import cn.com.ctop.common.module.utils.PropertiesUtils;
 import cn.com.ctop.common.module.utils.PropertiesUtils;
@@ -69,6 +71,8 @@ public class BindAccountAuthServiceImpl extends ServiceImpl<BindAccountAuthMappe
 
 
     @Autowired
     @Autowired
     private IOauthConfigService oauthConfigService;
     private IOauthConfigService oauthConfigService;
+    @Autowired
+    private IOauthDetailService detailService;
 
 
     @Override
     @Override
     public String getKuaishouCodeUrl(JSONObject state) throws UnsupportedEncodingException {
     public String getKuaishouCodeUrl(JSONObject state) throws UnsupportedEncodingException {
@@ -78,10 +82,15 @@ public class BindAccountAuthServiceImpl extends ServiceImpl<BindAccountAuthMappe
         OauthConfig config = oauthConfigService.getById(id);
         OauthConfig config = oauthConfigService.getById(id);
         state.put("appId", config.getAppId());
         state.put("appId", config.getAppId());
         state.put("callbackUrl", config.getCallbackUrl());
         state.put("callbackUrl", config.getCallbackUrl());
+        OauthDetail detail = new OauthDetail();
+        detail.setDetailText(state.toJSONString());
+        detailService.save(detail);
+
+
         sb.append(PropertiesUtils.getValue("kuaishou_config", "kuaishou_auth_url"))
         sb.append(PropertiesUtils.getValue("kuaishou_config", "kuaishou_auth_url"))
                 .append(KuaishouInterfaceConstant.AUTH_PATH)
                 .append(KuaishouInterfaceConstant.AUTH_PATH)
                 .append("?app_id=" + config.getAppId())
                 .append("?app_id=" + config.getAppId())
-                .append("&state=" + URLEncoder.encode(URLEncoder.encode(URLEncoder.encode(state.toJSONString()))))
+                .append("&state=" + detail.getId())
                 .append("&redirect_uri=" + URLEncoder.encode(config.getRedirectUri(), "UTF-8"));
                 .append("&redirect_uri=" + URLEncoder.encode(config.getRedirectUri(), "UTF-8"));
         if (config.getOauthType() != 1) {
         if (config.getOauthType() != 1) {
             sb.append("&scope=%5B%22report_service%22%2C%22ad_query%22%2C%22account_service%22%2C%22ad_manage%22%5D");
             sb.append("&scope=%5B%22report_service%22%2C%22ad_query%22%2C%22account_service%22%2C%22ad_manage%22%5D");

+ 19 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/common/module/service/impl/OauthDetailServiceImpl.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.common.module.service.impl;
+
+import cn.com.ctop.common.module.entity.OauthDetail;
+import cn.com.ctop.common.module.mapper.OauthDetailMapper;
+import cn.com.ctop.common.module.service.IOauthDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 授权详情信息
+ *
+ * @author jeecg-boot
+ * 2021-12-01
+ * @version V1.0
+ */
+@Service
+public class OauthDetailServiceImpl extends ServiceImpl<OauthDetailMapper, OauthDetail> implements IOauthDetailService {
+
+}

+ 1 - 1
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/ai/mapper/AiKuaishouUnitLevelOperationRecordMapper.java

@@ -16,5 +16,5 @@ import java.util.List;
 public interface AiKuaishouUnitLevelOperationRecordMapper extends BaseMapper<AiKuaishouUnitLevelOperationRecord> {
 public interface AiKuaishouUnitLevelOperationRecordMapper extends BaseMapper<AiKuaishouUnitLevelOperationRecord> {
     List<AiKuaishouUnitLevelOperationRecord> selectAllByAccountId(Date startDate, Date endDate);
     List<AiKuaishouUnitLevelOperationRecord> selectAllByAccountId(Date startDate, Date endDate);
     List<Long> selectAllAccountIds(Date startDate, Date endDate);
     List<Long> selectAllAccountIds(Date startDate, Date endDate);
-    List<AiKuaishouUnitLevelOperationRecord> selectAllByAccountIdAndDate(@Param("accountId") Long accountId, @Param("startDate")Date startDate, @Param("endDate")Date endDate);
+    List<AiKuaishouUnitLevelOperationRecord> selectAllByAccountIdAndDate(@Param("accountId") Long accountId, @Param("startDate") Date startDate,@Param("endDate") Date endDate);
 }
 }

+ 26 - 5
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/ai/mapper/xml/AiKuaishouUnitLevelOperationRecordMapper.xml

@@ -1,14 +1,35 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?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">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.com.ctop.kuaishou.modules.ai.mapper.AiKuaishouUnitLevelOperationRecordMapper">
 <mapper namespace="cn.com.ctop.kuaishou.modules.ai.mapper.AiKuaishouUnitLevelOperationRecordMapper">
-    <select id="selectAllByAccountId" resultType="cn.com.ctop.kuaishou.modules.ai.entity.AiKuaishouUnitLevelOperationRecord">
-        select distinct account_id,campaign_id,unit_id from ctop_ai_kuaishou_unit_level_operation_record where unit_id is not null and  create_time &gt;= #{startDate} and create_time &lt;= #{endDate} and account_id in (select account_id from ctop_user_allocation where project_id = 458) group by account_id,campaign_id,unit_id
+    <select id="selectAllByAccountId"
+            resultType="cn.com.ctop.kuaishou.modules.ai.entity.AiKuaishouUnitLevelOperationRecord">
+        select distinct account_id, campaign_id, unit_id
+        from ctop_ai_kuaishou_unit_level_operation_record
+        where unit_id is not null
+          and create_time &gt;= #{startDate}
+          and create_time &lt;= #{endDate}
+          and account_id in (select account_id from ctop_user_allocation where project_id = 458)
+        group by account_id, campaign_id, unit_id
     </select>
     </select>
-    <select id="selectAllByAccountIdAndDate" resultType="cn.com.ctop.kuaishou.modules.ai.entity.AiKuaishouUnitLevelOperationRecord">
-        select distinct account_id,campaign_id,unit_id from ctop_ai_kuaishou_unit_level_operation_record where unit_id is not null and unit_type = 4 and create_time &gt;= #{startDate} and create_time &lt;= #{endDate} and account_id = #{accountId} group by account_id,campaign_id,unit_id
+    <select id="selectAllByAccountIdAndDate"
+            resultType="cn.com.ctop.kuaishou.modules.ai.entity.AiKuaishouUnitLevelOperationRecord">
+        select distinct account_id, campaign_id, unit_id
+        from ctop_ai_kuaishou_unit_level_operation_record
+        where unit_id is not null
+          and unit_type = 4
+          and create_time &gt;= #{startDate}
+          and create_time &lt;= #{endDate}
+          and account_id = #{accountId}
+        group by unit_id
     </select>
     </select>
 
 
     <select id="selectAllAccountIds" resultType="long">
     <select id="selectAllAccountIds" resultType="long">
-        select distinct account_id from ctop_ai_kuaishou_unit_level_operation_record where unit_id is not null and  create_time &gt;= #{startDate} and create_time &lt;= #{endDate} and account_id in (select account_id from ctop_user_allocation where project_id = 458) group by account_id
+        select distinct account_id
+        from ctop_ai_kuaishou_unit_level_operation_record
+        where unit_id is not null
+          and create_time &gt;= #{startDate}
+          and create_time &lt;= #{endDate}
+          and account_id in (select account_id from ctop_user_allocation where project_id = 458)
+        group by account_id
     </select>
     </select>
 </mapper>
 </mapper>

+ 95 - 0
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/controller/KuaishouAudienceReportDailyController.java

@@ -1,5 +1,10 @@
 package cn.com.ctop.kuaishou.modules.report.controller;
 package cn.com.ctop.kuaishou.modules.report.controller;
 
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.kuaishou.modules.ai.entity.AiKuaishouUnitLevelOperationRecord;
+import cn.com.ctop.kuaishou.modules.ai.mapper.AiKuaishouUnitLevelOperationRecordMapper;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDaily;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDaily;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyAccount;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouAudienceReportDailyAccount;
 import cn.com.ctop.kuaishou.modules.report.service.IKuaishouAudienceReportDailyAccountService;
 import cn.com.ctop.kuaishou.modules.report.service.IKuaishouAudienceReportDailyAccountService;
@@ -16,6 +21,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.DateUtils;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
@@ -28,14 +34,20 @@ import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
 import org.springframework.web.servlet.ModelAndView;
 
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
 import java.net.URLDecoder;
+import java.text.SimpleDateFormat;
 import java.util.Arrays;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 
 /**
 /**
  * 人群分析报表
  * 人群分析报表
@@ -287,4 +299,87 @@ public class KuaishouAudienceReportDailyController {
         return Result.ok("文件导入失败!");
         return Result.ok("文件导入失败!");
     }
     }
 
 
+    static ExecutorService executorService = Executors.newFixedThreadPool(10);
+    @Autowired
+    private ICtopOauthTokenService tokenService;
+    static CountDownLatch countDownLatch = null;
+    @Resource
+    AiKuaishouUnitLevelOperationRecordMapper kuaishouUnitLevelOperationRecordMapper;
+
+    @GetMapping(value = "/getAudienceDataNew")
+    public void getAudienceData(@RequestParam(required = false, defaultValue = "2019-01-01") String date) throws Exception {
+        int page = 1;
+        int pageSize = 2000;
+        if (date.equals("2019-01-01")) {
+            date = DateUtils.formatDate(DateUtils.addDay(DateUtils.getNowDate(), -1), "yyyy-MM-dd");
+        }
+        int count = 0;
+        List<CtopOauthToken> tokens = tokenService.getByProjectId(458L);    //淘特项目
+        SimpleDateFormat dsdf = new SimpleDateFormat("yyyy-MM-dd");
+        for (CtopOauthToken token : tokens) {
+            Date enDate = DateUtils.addDay(DateUtils.getNowDate(), -1);
+            if (enDate.after(token.getAccessTokenExpiresIn())) {   //过期跳过
+                continue;
+            }
+            Date startDate = DateUtils.addDay(enDate, -30);
+            log.info("accountId=" + token.getAccountId() + "开始:" + DateUtils.getLastDay(date, 30) + "结束:" + DateUtils.getLastDay(date, 1));
+            List<AiKuaishouUnitLevelOperationRecord> planIdsAndUnitIds = kuaishouUnitLevelOperationRecordMapper.selectAllByAccountIdAndDate(token.getAccountId(), startDate, enDate);
+            if (Check.isNull(planIdsAndUnitIds)) {
+                continue;
+            }
+            log.info("账户总数:" + tokens.size() + "当前:" + ++count);
+            countDownLatch = new CountDownLatch(planIdsAndUnitIds.size());
+            String finalDate = date;
+            planIdsAndUnitIds.forEach(planIdAndUnitId -> executorService.submit(() -> {
+                try {
+                    // province: 省级地域分布, city: 地级地域分布,gender: 性别分布,ageSegment: 年龄分布clientId: 系统分布 businessInterestTags: 商业兴趣分布
+                    kuaishouAudienceReportDailyService.crowdAnalysisReport2(token, finalDate, "province", planIdAndUnitId.getCampaignId(), planIdAndUnitId.getUnitId(), page, pageSize);
+                    kuaishouAudienceReportDailyService.crowdAnalysisReport2(token, finalDate, "city", planIdAndUnitId.getCampaignId(), planIdAndUnitId.getUnitId(), page, pageSize);
+                    kuaishouAudienceReportDailyService.crowdAnalysisReport2(token, finalDate, "gender", planIdAndUnitId.getCampaignId(), planIdAndUnitId.getUnitId(), page, pageSize);
+                    kuaishouAudienceReportDailyService.crowdAnalysisReport2(token, finalDate, "clientId", planIdAndUnitId.getCampaignId(), planIdAndUnitId.getUnitId(), page, pageSize);
+                    kuaishouAudienceReportDailyService.crowdAnalysisReport2(token, finalDate, "ageSegment", planIdAndUnitId.getCampaignId(), planIdAndUnitId.getUnitId(), page, pageSize);
+                    kuaishouAudienceReportDailyService.crowdAnalysisReport2(token, finalDate, "businessInterestTags", planIdAndUnitId.getCampaignId(), planIdAndUnitId.getUnitId(), page, pageSize);
+                } catch (Exception e) {
+                } finally {
+                    countDownLatch.countDown();
+                }
+            }));
+            countDownLatch.await();
+        }
+    }
+
+
+    @GetMapping(value = "/getOneAudienceDataNew")
+    public void getOneAudienceDataNew(Long accountId) throws Exception {
+        int page = 1;
+        int pageSize = 2000;
+        int count = 0;
+        CtopOauthToken token = tokenService.getTokenByAccountId(accountId);
+        Date enDate = DateUtils.addDay(DateUtils.getNowDate(), -1);
+        if (enDate.after(token.getAccessTokenExpiresIn())) {   //过期跳过
+            return;
+        }
+        Date startDate = DateUtils.addDay(enDate, -30);
+        List<AiKuaishouUnitLevelOperationRecord> planIdsAndUnitIds = kuaishouUnitLevelOperationRecordMapper.selectAllByAccountIdAndDate(token.getAccountId(), startDate, enDate);
+        if (Check.isNull(planIdsAndUnitIds)) {
+            return;
+        }
+        countDownLatch = new CountDownLatch(planIdsAndUnitIds.size());
+        String finalDate = DateUtils.formatDate(enDate, "yyyy-MM-dd");;
+        planIdsAndUnitIds.forEach(planIdAndUnitId -> executorService.submit(() -> {
+            try {
+                // province: 省级地域分布, city: 地级地域分布,gender: 性别分布,ageSegment: 年龄分布clientId: 系统分布 businessInterestTags: 商业兴趣分布
+                kuaishouAudienceReportDailyService.crowdAnalysisReport2(token, finalDate, "province", planIdAndUnitId.getCampaignId(), planIdAndUnitId.getUnitId(), page, pageSize);
+                kuaishouAudienceReportDailyService.crowdAnalysisReport2(token, finalDate, "city", planIdAndUnitId.getCampaignId(), planIdAndUnitId.getUnitId(), page, pageSize);
+                kuaishouAudienceReportDailyService.crowdAnalysisReport2(token, finalDate, "gender", planIdAndUnitId.getCampaignId(), planIdAndUnitId.getUnitId(), page, pageSize);
+                kuaishouAudienceReportDailyService.crowdAnalysisReport2(token, finalDate, "clientId", planIdAndUnitId.getCampaignId(), planIdAndUnitId.getUnitId(), page, pageSize);
+                kuaishouAudienceReportDailyService.crowdAnalysisReport2(token, finalDate, "ageSegment", planIdAndUnitId.getCampaignId(), planIdAndUnitId.getUnitId(), page, pageSize);
+//                kuaishouAudienceReportDailyService.crowdAnalysisReport2(token, finalDate, "businessInterestTags", planIdAndUnitId.getCampaignId(), planIdAndUnitId.getUnitId(), page, pageSize);
+            } catch (Exception e) {
+            } finally {
+                countDownLatch.countDown();
+            }
+        }));
+    }
+
 }
 }

+ 4 - 4
jeecg-boot-module-system/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/EtlKuaishouReportAccountHourlyServiceImpl.java

@@ -470,7 +470,7 @@ public class EtlKuaishouReportAccountHourlyServiceImpl extends ServiceImpl<EtlKu
         List<String> ids = new ArrayList<>();
         List<String> ids = new ArrayList<>();
         List<JSONObject> departIds = new ArrayList<>();
         List<JSONObject> departIds = new ArrayList<>();
         //管理员和运营总经理 可以查看所有快手的运营信息
         //管理员和运营总经理 可以查看所有快手的运营信息
-        if ("genera_manager_of_operations".equals(roleCode) || "admin".equals(roleCode)) {
+        if ("genera_manager_of_operations".equals(roleCode) || "admin".equals(roleCode) || "salesSupportManager".equals(roleCode)) {
             JSONObject obj = new JSONObject();
             JSONObject obj = new JSONObject();
             //快手运营部 峰级部门 ID
             //快手运营部 峰级部门 ID
             obj.put("id", "024b0dc0840045afb048022a8c61253f");
             obj.put("id", "024b0dc0840045afb048022a8c61253f");
@@ -498,7 +498,7 @@ public class EtlKuaishouReportAccountHourlyServiceImpl extends ServiceImpl<EtlKu
         String userId = request.getString("userId");
         String userId = request.getString("userId");
         String startTime = request.getString("startTime");
         String startTime = request.getString("startTime");
         String endTime = request.getString("endTime");
         String endTime = request.getString("endTime");
-        if (Check.isNull(userId)||Check.isNull(startTime)||Check.isNull(endTime)) {
+        if (Check.isNull(userId) || Check.isNull(startTime) || Check.isNull(endTime)) {
             return Result.error("缺少账户入参");
             return Result.error("缺少账户入参");
         }
         }
         String sortCode = request.getString("sortCode");
         String sortCode = request.getString("sortCode");
@@ -541,13 +541,13 @@ public class EtlKuaishouReportAccountHourlyServiceImpl extends ServiceImpl<EtlKu
         int total = 0;
         int total = 0;
         //单日数据
         //单日数据
         if (endTime.equals(startTime)) {
         if (endTime.equals(startTime)) {
-            if(!today.equals(startTime)){
+            if (!today.equals(startTime)) {
                 request.put("yesterday", startTime);
                 request.put("yesterday", startTime);
             }
             }
             total = etlHourlyAccountMapper.operatingStaffDataListTotal(request);
             total = etlHourlyAccountMapper.operatingStaffDataListTotal(request);
             PageHelper.startPage(pageNo, pageSize, false);
             PageHelper.startPage(pageNo, pageSize, false);
             list = etlHourlyAccountMapper.operatingStaffDataList(request);
             list = etlHourlyAccountMapper.operatingStaffDataList(request);
-        }else {
+        } else {
             total = etlDailyAccountMapper.operatingStaffDataListTotal(request);
             total = etlDailyAccountMapper.operatingStaffDataListTotal(request);
             PageHelper.startPage(pageNo, pageSize, false);
             PageHelper.startPage(pageNo, pageSize, false);
             list = etlDailyAccountMapper.operatingStaffDataList(request);
             list = etlDailyAccountMapper.operatingStaffDataList(request);

+ 3 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/AdvertiserController.java

@@ -132,7 +132,9 @@ public class AdvertiserController {
             userCompanyQueryWrapper.orderByDesc("create_time");
             userCompanyQueryWrapper.orderByDesc("create_time");
             userCompanyQueryWrapper.last("limit 1");
             userCompanyQueryWrapper.last("limit 1");
             UserCompany userCompany = userCompanyMapper.selectOne(userCompanyQueryWrapper);
             UserCompany userCompany = userCompanyMapper.selectOne(userCompanyQueryWrapper);
-            queryWrapper.eq("company_id", userCompany.getCompanyId());
+            if (!Check.isNull(userCompany)) {
+                queryWrapper.eq("company_id", userCompany.getCompanyId());
+            }
         }
         }
 
 
         Page<Advertiser> page = new Page<>(pageNo, pageSize);
         Page<Advertiser> page = new Page<>(pageNo, pageSize);

+ 23 - 11
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CallbackController.java

@@ -1,17 +1,11 @@
 package org.jeecg.modules.ctop.controller;
 package org.jeecg.modules.ctop.controller;
 
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.entity.OauthDetail;
 import cn.com.ctop.common.module.entity.UserAllocation;
 import cn.com.ctop.common.module.entity.UserAllocation;
 import cn.com.ctop.common.module.mapper.UserAllocationMapper;
 import cn.com.ctop.common.module.mapper.UserAllocationMapper;
-import cn.com.ctop.common.module.service.IBindAccountAuthService;
-import cn.com.ctop.common.module.service.ICtopOauthTokenService;
-import cn.com.ctop.common.module.service.ISysDepartService;
-import cn.com.ctop.common.module.service.ISysUserService;
-import cn.com.ctop.common.module.utils.BytedanceInterfaceConstant;
-import cn.com.ctop.common.module.utils.Check;
-import cn.com.ctop.common.module.utils.HttpUtils;
-import cn.com.ctop.common.module.utils.KuaishouInterfaceConstant;
-import cn.com.ctop.common.module.utils.PropertiesUtils;
+import cn.com.ctop.common.module.service.*;
+import cn.com.ctop.common.module.utils.*;
 import cn.com.ctop.kuaishou.modules.ai.service.IKuaishouAppPackageService;
 import cn.com.ctop.kuaishou.modules.ai.service.IKuaishouAppPackageService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
 import cn.com.ctop.kuaishou.modules.material.entity.KuaishouAccessToken;
 import cn.com.ctop.kuaishou.modules.material.entity.KuaishouAccessToken;
@@ -69,6 +63,8 @@ public class CallbackController {
     private IReportService reportService;
     private IReportService reportService;
     @Autowired
     @Autowired
     private IKuaishouAppPackageService kuaishouAppPackageService;
     private IKuaishouAppPackageService kuaishouAppPackageService;
+    @Autowired
+    private IOauthDetailService detailService;
 
 
     @GetMapping("/qywexin")
     @GetMapping("/qywexin")
     public void qywexin(HttpServletRequest request,
     public void qywexin(HttpServletRequest request,
@@ -120,13 +116,27 @@ public class CallbackController {
      * @param state
      * @param state
      * @return
      * @return
      */
      */
+
+
     @GetMapping("/kuaishou")
     @GetMapping("/kuaishou")
     public String kuaishouCallback(HttpServletRequest request, HttpServletResponse response, @RequestParam("auth_code") String authCode, @RequestParam("state") String state) {
     public String kuaishouCallback(HttpServletRequest request, HttpServletResponse response, @RequestParam("auth_code") String authCode, @RequestParam("state") String state) {
+        Long id = Long.valueOf(state);
         try {
         try {
-            JSONObject json = JSONObject.parseObject(state);
-            if (Check.isNull(json)) {
+            //    JSONObject json = JSONObject.parseObject(state);
+
+            OauthDetail byId = detailService.getById(id);
+            if (Check.isNull(byId)) {
                 throw new Exception("回调信息为空");
                 throw new Exception("回调信息为空");
             }
             }
+            String detailText = byId.getDetailText();
+            if (Check.isNull(detailText)) {
+                throw new Exception("用户授权信息为空");
+            }
+            JSONObject json = JSONObject.parseObject(detailText);
+            if (Check.isNull(json)) {
+                throw new Exception("数据转化异常");
+            }
+
             log.info("快手授权返回信息:{}", json);
             log.info("快手授权返回信息:{}", json);
             log.info("快手授权返回oauthCode:{}", authCode);
             log.info("快手授权返回oauthCode:{}", authCode);
             Integer agentType = json.getInteger("agentType");
             Integer agentType = json.getInteger("agentType");
@@ -244,11 +254,13 @@ public class CallbackController {
                     };
                     };
                     t.start();
                     t.start();
                 }
                 }
+                detailService.removeById(id);
                 return "授权绑定成功";
                 return "授权绑定成功";
             }
             }
         } catch (Exception e) {
         } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
         }
         }
+        detailService.removeById(id);
         return "授权绑定失败!";
         return "授权绑定失败!";
     }
     }
 
 

+ 10 - 8
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProductController.java

@@ -86,14 +86,16 @@ public class ProductController {
             queryWrapper.like("product_name", productName);
             queryWrapper.like("product_name", productName);
         }
         }
 
 
-        String roleCode = sysRoleService.getRoleCodeByUserId(userId);
-        if (!"admin".equals(roleCode)) {
-            QueryWrapper<UserCompany> userCompanyQueryWrapper = new QueryWrapper<>();
-            userCompanyQueryWrapper.eq("user_id", userId);
-            userCompanyQueryWrapper.orderByDesc("create_time");
-            userCompanyQueryWrapper.last("limit 1");
-            UserCompany userCompany = userCompanyMapper.selectOne(userCompanyQueryWrapper);
-            queryWrapper.eq("company_id", userCompany.getCompanyId());
+        if (!Check.isNull(userId)) {
+            String roleCode = sysRoleService.getRoleCodeByUserId(userId);
+            if (!"admin".equals(roleCode)) {
+                QueryWrapper<UserCompany> userCompanyQueryWrapper = new QueryWrapper<>();
+                userCompanyQueryWrapper.eq("user_id", userId);
+                userCompanyQueryWrapper.orderByDesc("create_time");
+                userCompanyQueryWrapper.last("limit 1");
+                UserCompany userCompany = userCompanyMapper.selectOne(userCompanyQueryWrapper);
+                queryWrapper.eq("company_id", userCompany.getCompanyId());
+            }
         }
         }
         Page<Product> page = new Page<>(pageNo, pageSize);
         Page<Product> page = new Page<>(pageNo, pageSize);
         IPage<Product> pageList = productService.page(page, queryWrapper);
         IPage<Product> pageList = productService.page(page, queryWrapper);

+ 21 - 12
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectController.java

@@ -15,11 +15,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.entity.SysUser;
 import org.jeecg.common.system.entity.SysUser;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.ctop.entity.ProjectMember;
 import org.jeecg.modules.ctop.entity.ProjectMember;
 import org.jeecg.modules.ctop.entity.TransferAccount;
 import org.jeecg.modules.ctop.entity.TransferAccount;
 import org.jeecg.modules.ctop.mapper.ProjectMemberMapper;
 import org.jeecg.modules.ctop.mapper.ProjectMemberMapper;
@@ -256,22 +254,28 @@ public class ProjectController {
         Result<IPage<Project>> result = new Result<>();
         Result<IPage<Project>> result = new Result<>();
         String projectName = project.getProjectName();
         String projectName = project.getProjectName();
         project.setProjectName(null);
         project.setProjectName(null);
+        String userId = project.getUserId();
+        project.setUserId(null);
+
         QueryWrapper<Project> queryWrapper = QueryGenerator.initQueryWrapper(project, req.getParameterMap());
         QueryWrapper<Project> queryWrapper = QueryGenerator.initQueryWrapper(project, req.getParameterMap());
         Page<Project> page = new Page<>(pageNo, pageSize);
         Page<Project> page = new Page<>(pageNo, pageSize);
-        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        String roleCode = sysRoleService.getRoleCodeByUserId(sysUser.getId());
+
+
+        String roleCode = sysRoleService.getRoleCodeByUserId(userId);
         if ("operator".equals(roleCode) || "kuaishouOperationManager".equals(roleCode) || "touTiaoOperationManager".equals(roleCode)) {
         if ("operator".equals(roleCode) || "kuaishouOperationManager".equals(roleCode) || "touTiaoOperationManager".equals(roleCode)) {
-            queryWrapper.eq("responsible_id", sysUser.getId());
+            queryWrapper.eq("responsible_id", userId);
 
 
         } else if ("plane".equals(roleCode) || "plan".equals(roleCode) || "shot".equals(roleCode) || "clip".equals(roleCode) || "designTeamLeader".equals(roleCode) || "planeLeader".equals(roleCode)) {
         } else if ("plane".equals(roleCode) || "plan".equals(roleCode) || "shot".equals(roleCode) || "clip".equals(roleCode) || "designTeamLeader".equals(roleCode) || "planeLeader".equals(roleCode)) {
-            queryWrapper.eq("design_responsible_id", sysUser.getId());
+            queryWrapper.eq("design_responsible_id", userId);
         } else if (roleCode.contains("sale")) {
         } else if (roleCode.contains("sale")) {
             QueryWrapper<UserCompany> userCompanyQueryWrapper = new QueryWrapper<>();
             QueryWrapper<UserCompany> userCompanyQueryWrapper = new QueryWrapper<>();
-            userCompanyQueryWrapper.eq("user_id", sysUser.getId());
+            userCompanyQueryWrapper.eq("user_id", userId);
             userCompanyQueryWrapper.orderByDesc("create_time");
             userCompanyQueryWrapper.orderByDesc("create_time");
             userCompanyQueryWrapper.last("limit 1");
             userCompanyQueryWrapper.last("limit 1");
             UserCompany userCompany = userCompanyMapper.selectOne(userCompanyQueryWrapper);
             UserCompany userCompany = userCompanyMapper.selectOne(userCompanyQueryWrapper);
-            queryWrapper.eq("company_id", userCompany.getCompanyId());
+            if (!Check.isNull(userCompany)) {
+                queryWrapper.eq("company_id", userCompany.getCompanyId());
+            }
         }
         }
         if (!Check.isNull(projectName)) {
         if (!Check.isNull(projectName)) {
             queryWrapper.like("project_name", projectName);
             queryWrapper.like("project_name", projectName);
@@ -304,11 +308,16 @@ public class ProjectController {
     public Result<Project> add(@RequestBody Project project) {
     public Result<Project> add(@RequestBody Project project) {
         Result<Project> result = new Result<>();
         Result<Project> result = new Result<>();
         try {
         try {
-            String advertiserId = project.getAdvertiserId();
-            Advertiser advertiser = advertiserService.getById(advertiserId);
+         /*   String advertiserId = project.getAdvertiserId();
+            Advertiser advertiser = advertiserService.getById(advertiserId);*/
             Map<String, String> memberMap = new HashMap<>();
             Map<String, String> memberMap = new HashMap<>();
-            if (!Check.isNull(advertiser)) {
-                project.setCompanyId(advertiser.getCompanyId());
+            QueryWrapper<UserCompany> userCompanyQueryWrapper = new QueryWrapper<>();
+            userCompanyQueryWrapper.eq("user_id", project.getUserId());
+            userCompanyQueryWrapper.orderByDesc("create_time");
+            userCompanyQueryWrapper.last("limit 1");
+            UserCompany userCompany = userCompanyMapper.selectOne(userCompanyQueryWrapper);
+            if (!Check.isNull(userCompany)) {
+                project.setCompanyId(userCompany.getCompanyId());
             }
             }
             // 运营负责人
             // 运营负责人
             SysUser sysUser = sysUserService.getById(project.getResponsibleId());
             SysUser sysUser = sysUserService.getById(project.getResponsibleId());