ソースを参照

修改课程模板和投流

吴树波 1 週間 前
コミット
ddaa6a6377
86 ファイル変更3144 行追加298 行削除
  1. 16 2
      fs-ad-api/src/main/java/com/fs/app/controller/AdCallbackController.java
  2. 0 2
      fs-ad-api/src/main/java/com/fs/app/controller/CommonController.java
  3. 1 1
      fs-ad-api/src/main/java/com/fs/app/mq/RocketMQConsumerService.java
  4. 0 4
      fs-ad-api/src/main/java/com/fs/app/task/Task.java
  5. 3 11
      fs-admin/src/main/java/com/fs/ad/controller/AdAccountController.java
  6. 9 16
      fs-admin/src/main/java/com/fs/ad/controller/AdDomainController.java
  7. 103 0
      fs-admin/src/main/java/com/fs/ad/controller/AdDyAccountController.java
  8. 114 0
      fs-admin/src/main/java/com/fs/ad/controller/AdDyApiController.java
  9. 8 14
      fs-admin/src/main/java/com/fs/ad/controller/AdHtmlClickLogController.java
  10. 9 16
      fs-admin/src/main/java/com/fs/ad/controller/AdHtmlTemplateController.java
  11. 9 16
      fs-admin/src/main/java/com/fs/ad/controller/AdIqiyiAccountController.java
  12. 19 16
      fs-admin/src/main/java/com/fs/ad/controller/AdSiteController.java
  13. 97 0
      fs-admin/src/main/java/com/fs/ad/controller/AdUploadLogController.java
  14. 9 16
      fs-admin/src/main/java/com/fs/ad/controller/AdYoukuAccountController.java
  15. 8 18
      fs-admin/src/main/java/com/fs/ad/controller/BdAccountController.java
  16. 1 1
      fs-admin/src/main/java/com/fs/ad/controller/MockAppController.java
  17. 9 3
      fs-admin/src/main/java/com/fs/ad/controller/StatisticsController.java
  18. 1 0
      fs-framework/src/main/java/com/fs/framework/config/SecurityConfig.java
  19. 39 0
      fs-service/src/main/java/com/fs/ad/apis/DyApiUtil.java
  20. 4 1
      fs-service/src/main/java/com/fs/ad/apis/YouKuApiUtils.java
  21. 0 2
      fs-service/src/main/java/com/fs/ad/domain/AdAccount.java
  22. 1 2
      fs-service/src/main/java/com/fs/ad/domain/AdDomain.java
  23. 43 0
      fs-service/src/main/java/com/fs/ad/domain/AdDyAccount.java
  24. 51 0
      fs-service/src/main/java/com/fs/ad/domain/AdDyApi.java
  25. 0 1
      fs-service/src/main/java/com/fs/ad/domain/AdHtmlClickLog.java
  26. 0 3
      fs-service/src/main/java/com/fs/ad/domain/AdIqiyiAccount.java
  27. 8 3
      fs-service/src/main/java/com/fs/ad/domain/AdSite.java
  28. 74 0
      fs-service/src/main/java/com/fs/ad/domain/AdUploadLog.java
  29. 0 2
      fs-service/src/main/java/com/fs/ad/domain/AdYoukuAccount.java
  30. 99 0
      fs-service/src/main/java/com/fs/ad/domain/BdCreativeStatistics.java
  31. 110 0
      fs-service/src/main/java/com/fs/ad/domain/BdReportData.java
  32. 71 0
      fs-service/src/main/java/com/fs/ad/dy/vo/DyDataVo.java
  33. 4 4
      fs-service/src/main/java/com/fs/ad/enums/AdUploadType.java
  34. 2 1
      fs-service/src/main/java/com/fs/ad/mapper/AdAccountMapper.java
  35. 2 1
      fs-service/src/main/java/com/fs/ad/mapper/AdDomainMapper.java
  36. 61 0
      fs-service/src/main/java/com/fs/ad/mapper/AdDyAccountMapper.java
  37. 61 0
      fs-service/src/main/java/com/fs/ad/mapper/AdDyApiMapper.java
  38. 2 3
      fs-service/src/main/java/com/fs/ad/mapper/AdHtmlClickLogMapper.java
  39. 2 2
      fs-service/src/main/java/com/fs/ad/mapper/AdHtmlTemplateMapper.java
  40. 2 1
      fs-service/src/main/java/com/fs/ad/mapper/AdIqiyiAccountMapper.java
  41. 2 1
      fs-service/src/main/java/com/fs/ad/mapper/AdSiteMapper.java
  42. 62 0
      fs-service/src/main/java/com/fs/ad/mapper/AdUploadLogMapper.java
  43. 2 1
      fs-service/src/main/java/com/fs/ad/mapper/AdYoukuAccountMapper.java
  44. 62 0
      fs-service/src/main/java/com/fs/ad/mapper/BdCreativeStatisticsMapper.java
  45. 62 0
      fs-service/src/main/java/com/fs/ad/mapper/BdReportDataMapper.java
  46. 3 2
      fs-service/src/main/java/com/fs/ad/service/IAdAccountService.java
  47. 2 1
      fs-service/src/main/java/com/fs/ad/service/IAdDomainService.java
  48. 61 0
      fs-service/src/main/java/com/fs/ad/service/IAdDyAccountService.java
  49. 61 0
      fs-service/src/main/java/com/fs/ad/service/IAdDyApiService.java
  50. 6 5
      fs-service/src/main/java/com/fs/ad/service/IAdHtmlClickLogService.java
  51. 2 2
      fs-service/src/main/java/com/fs/ad/service/IAdHtmlTemplateService.java
  52. 2 1
      fs-service/src/main/java/com/fs/ad/service/IAdIqiyiAccountService.java
  53. 2 1
      fs-service/src/main/java/com/fs/ad/service/IAdSiteService.java
  54. 62 0
      fs-service/src/main/java/com/fs/ad/service/IAdUploadLogService.java
  55. 2 1
      fs-service/src/main/java/com/fs/ad/service/IAdYoukuAccountService.java
  56. 62 0
      fs-service/src/main/java/com/fs/ad/service/IBdCreativeStatisticsService.java
  57. 66 0
      fs-service/src/main/java/com/fs/ad/service/IBdReportDataService.java
  58. 8 10
      fs-service/src/main/java/com/fs/ad/service/impl/AdAccountServiceImpl.java
  59. 5 6
      fs-service/src/main/java/com/fs/ad/service/impl/AdDomainServiceImpl.java
  60. 111 0
      fs-service/src/main/java/com/fs/ad/service/impl/AdDyAccountServiceImpl.java
  61. 94 0
      fs-service/src/main/java/com/fs/ad/service/impl/AdDyApiServiceImpl.java
  62. 43 17
      fs-service/src/main/java/com/fs/ad/service/impl/AdHtmlClickLogServiceImpl.java
  63. 6 6
      fs-service/src/main/java/com/fs/ad/service/impl/AdHtmlTemplateServiceImpl.java
  64. 6 10
      fs-service/src/main/java/com/fs/ad/service/impl/AdIqiyiAccountServiceImpl.java
  65. 7 26
      fs-service/src/main/java/com/fs/ad/service/impl/AdSiteServiceImpl.java
  66. 90 0
      fs-service/src/main/java/com/fs/ad/service/impl/AdUploadLogServiceImpl.java
  67. 6 8
      fs-service/src/main/java/com/fs/ad/service/impl/AdYoukuAccountServiceImpl.java
  68. 91 0
      fs-service/src/main/java/com/fs/ad/service/impl/BdCreativeStatisticsServiceImpl.java
  69. 135 0
      fs-service/src/main/java/com/fs/ad/service/impl/BdReportDataServiceImpl.java
  70. 15 0
      fs-service/src/main/java/com/fs/ad/vo/DyAuthorizedVo.java
  71. 0 1
      fs-service/src/main/java/com/fs/ad/yk/vo/DataBackVo.java
  72. 151 19
      fs-service/src/main/java/com/fs/baidu/api/BaiduApis.java
  73. 12 8
      fs-service/src/main/java/com/fs/baidu/param/QueryReportDataParam.java
  74. 1 5
      fs-service/src/main/java/com/fs/baidu/service/impl/BdAccountServiceImpl.java
  75. 5 1
      fs-service/src/main/java/com/fs/baidu/utils/BdApiRequest.java
  76. 25 0
      fs-service/src/main/java/com/fs/baidu/vo/ReportDataVo.java
  77. 150 0
      fs-service/src/main/java/com/fs/baidu/vo/ReportVO.java
  78. 11 0
      fs-service/src/main/java/com/fs/baidu/vo/ad/AdDyClickCallbackVo.java
  79. 3 0
      fs-service/src/main/java/com/fs/sop/domain/QwSopTemp.java
  80. 5 3
      fs-service/src/main/java/com/fs/sop/service/impl/QwSopTempServiceImpl.java
  81. 96 0
      fs-service/src/main/resources/mapper/ad/AdDyAccountMapper.xml
  82. 106 0
      fs-service/src/main/resources/mapper/ad/AdDyApiMapper.xml
  83. 2 1
      fs-service/src/main/resources/mapper/ad/AdSiteMapper.xml
  84. 101 0
      fs-service/src/main/resources/mapper/ad/AdUploadLogMapper.xml
  85. 141 0
      fs-service/src/main/resources/mapper/ad/BdCreativeStatisticsMapper.xml
  86. 145 0
      fs-service/src/main/resources/mapper/ad/BdReportDataMapper.xml

+ 16 - 2
fs-ad-api/src/main/java/com/fs/app/controller/AdCallbackController.java

@@ -11,12 +11,13 @@ import com.fs.ad.service.IAdSiteService;
 import com.fs.baidu.api.BaiduApis;
 import com.fs.baidu.service.IBdAccountService;
 import com.fs.baidu.vo.ad.AdBaiduClickCallbackVo;
-import com.fs.baidu.vo.AdClickCallbackVo;
+import com.fs.baidu.vo.ad.AdDyClickCallbackVo;
 import com.fs.baidu.vo.ad.AdIqiyiClickCallbackVo;
 import com.fs.baidu.vo.ad.AdYouKuClickCallbackVo;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.R;
-import com.fs.common.utils.StringUtils;
+import com.fs.qw.domain.QwWorkLink;
+import com.fs.qw.service.IQwWorkLinkService;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -41,6 +42,7 @@ public class AdCallbackController extends BaseController {
     private final IBdAccountService bdAccountService;
     private final IAdSiteService adSiteService;
     private final IAdAccountService adAccountService;
+    private final IQwWorkLinkService qwWorkLinkService;
 
     //百度-页面点击接口
 //    @GetMapping("/callback")
@@ -69,6 +71,12 @@ public class AdCallbackController extends BaseController {
     @GetMapping("/getTemplateById")
     public R getTemplateById(Long id){
         AdSite site = adSiteService.getById(id);
+        if(site.getWorkId() != null){
+            QwWorkLink byId = qwWorkLinkService.getById(site.getWorkId());
+            if(byId != null){
+                site.setWorkUrl(byId.getUrl());
+            }
+        }
         AdHtmlTemplate htmlUrl = adHtmlTemplateMapper.selectById(site.getTemplateId());
         if(htmlUrl == null){
             return R.error("错误编号");
@@ -106,6 +114,12 @@ public class AdCallbackController extends BaseController {
         adHtmlClickLogService.setLogIqiyi(vo);
         return R.ok();
     }
+    @GetMapping("/dyClickCallback")
+    public R dyClickCallback(AdDyClickCallbackVo vo){
+        log.info("抖音监听地址返回数据:{}", JSON.toJSONString(vo));
+        adHtmlClickLogService.setLogDy(vo);
+        return R.ok();
+    }
 
 
 }

+ 0 - 2
fs-ad-api/src/main/java/com/fs/app/controller/CommonController.java

@@ -5,9 +5,7 @@ import com.alibaba.fastjson.JSON;
 import com.fs.ad.enums.AdUploadType;
 import com.fs.ad.service.IAdHtmlClickLogService;
 import com.fs.common.core.domain.R;
-import com.fs.company.service.ICompanyWxChatService;
 import com.fs.qw.vo.AdUploadVo;
-import com.fs.wxUser.service.ICompanyWxUserService;
 import io.swagger.annotations.Api;
 import jdk.nashorn.internal.ir.annotations.Ignore;
 import lombok.AllArgsConstructor;

+ 1 - 1
fs-ad-api/src/main/java/com/fs/app/mq/RocketMQConsumerService.java

@@ -14,7 +14,7 @@ import org.springframework.stereotype.Service;
 @Slf4j
 @Service
 @AllArgsConstructor
-@RocketMQMessageListener(topic = "${rocketmq.consumer.topic}", consumerGroup = "${rocketmq.consumer.group}")
+//@RocketMQMessageListener(topic = "${rocketmq.consumer.topic}", consumerGroup = "${rocketmq.consumer.group}")
 public class RocketMQConsumerService implements RocketMQListener<String> {
 
     private final IAdHtmlClickLogService  adHtmlClickLogService;

+ 0 - 4
fs-ad-api/src/main/java/com/fs/app/task/Task.java

@@ -4,15 +4,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fs.ad.domain.AdHtmlClickLog;
 import com.fs.ad.service.IAdHtmlClickLogService;
 import com.fs.ad.service.impl.AdHtmlClickLogServiceImpl;
-import com.fs.common.core.redis.RedisCache;
 import com.fs.common.core.redis.RedisCacheT;
-import com.fs.live.domain.Live;
-import com.fs.live.service.ILiveService;
 import lombok.AllArgsConstructor;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
 import java.util.List;

+ 3 - 11
fs-admin/src/main/java/com/fs/ad/controller/AdAccountController.java

@@ -1,20 +1,12 @@
 package com.fs.ad.controller;
 
-import com.fs.ad.domain.AdSite;
 import com.fs.ad.service.IAdAccountService;
-import com.fs.ad.service.IAdSiteService;
-import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
-import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
-import com.fs.common.core.page.TableDataInfo;
-import com.fs.common.enums.BusinessType;
-import com.fs.common.utils.poi.ExcelUtil;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * 站点管理Controller

+ 9 - 16
fs-admin/src/main/java/com/fs/ad/controller/AdDomainController.java

@@ -1,26 +1,19 @@
 package com.fs.ad.controller;
 
-import java.util.List;
-
-import com.fs.common.core.domain.R;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.fs.ad.domain.AdDomain;
+import com.fs.ad.service.IAdDomainService;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
-import com.fs.ad.domain.AdDomain;
-import com.fs.ad.service.IAdDomainService;
 import com.fs.common.utils.poi.ExcelUtil;
-import com.fs.common.core.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 广告域名Controller

+ 103 - 0
fs-admin/src/main/java/com/fs/ad/controller/AdDyAccountController.java

@@ -0,0 +1,103 @@
+package com.fs.ad.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.ad.domain.AdDyAccount;
+import com.fs.ad.service.IAdDyAccountService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 抖音账户Controller
+ * 
+ * @author 吴树波
+ * @date 2025-05-27
+ */
+@RestController
+@RequestMapping("/ad/AdDyAccount")
+public class AdDyAccountController extends BaseController
+{
+    @Autowired
+    private IAdDyAccountService adDyAccountService;
+
+    /**
+     * 查询抖音账户列表
+     */
+    @PreAuthorize("@ss.hasPermi('ad:AdDyAccount:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(AdDyAccount adDyAccount)
+    {
+        startPage();
+        List<AdDyAccount> list = adDyAccountService.selectAdDyAccountList(adDyAccount);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出抖音账户列表
+     */
+    @PreAuthorize("@ss.hasPermi('ad:AdDyAccount:export')")
+    @Log(title = "抖音账户", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(AdDyAccount adDyAccount)
+    {
+        List<AdDyAccount> list = adDyAccountService.selectAdDyAccountList(adDyAccount);
+        ExcelUtil<AdDyAccount> util = new ExcelUtil<AdDyAccount>(AdDyAccount.class);
+        return util.exportExcel(list, "抖音账户数据");
+    }
+
+    /**
+     * 获取抖音账户详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('ad:AdDyAccount:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(adDyAccountService.selectAdDyAccountById(id));
+    }
+
+    /**
+     * 新增抖音账户
+     */
+    @PreAuthorize("@ss.hasPermi('ad:AdDyAccount:add')")
+    @Log(title = "抖音账户", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody AdDyAccount adDyAccount)
+    {
+        return toAjax(adDyAccountService.insertAdDyAccount(adDyAccount));
+    }
+
+    /**
+     * 修改抖音账户
+     */
+    @PreAuthorize("@ss.hasPermi('ad:AdDyAccount:edit')")
+    @Log(title = "抖音账户", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody AdDyAccount adDyAccount)
+    {
+        return toAjax(adDyAccountService.updateAdDyAccount(adDyAccount));
+    }
+
+    /**
+     * 删除抖音账户
+     */
+    @PreAuthorize("@ss.hasPermi('ad:AdDyAccount:remove')")
+    @Log(title = "抖音账户", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(adDyAccountService.deleteAdDyAccountByIds(ids));
+    }
+}

+ 114 - 0
fs-admin/src/main/java/com/fs/ad/controller/AdDyApiController.java

@@ -0,0 +1,114 @@
+package com.fs.ad.controller;
+
+import java.util.List;
+
+import com.fs.ad.vo.DyAuthorizedVo;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.ad.domain.AdDyApi;
+import com.fs.ad.service.IAdDyApiService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 抖音投流API信息Controller
+ * 
+ * @author 吴树波
+ * @date 2025-05-27
+ */
+@RestController
+@RequestMapping("/ad/adDyApi")
+public class AdDyApiController extends BaseController
+{
+    @Autowired
+    private IAdDyApiService adDyApiService;
+
+    /**
+     * 查询抖音投流API信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('ad:adDyApi:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(AdDyApi adDyApi)
+    {
+        startPage();
+        List<AdDyApi> list = adDyApiService.selectAdDyApiList(adDyApi);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出抖音投流API信息列表
+     */
+    @PreAuthorize("@ss.hasPermi('ad:adDyApi:export')")
+    @Log(title = "抖音投流API信息", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(AdDyApi adDyApi)
+    {
+        List<AdDyApi> list = adDyApiService.selectAdDyApiList(adDyApi);
+        ExcelUtil<AdDyApi> util = new ExcelUtil<AdDyApi>(AdDyApi.class);
+        return util.exportExcel(list, "抖音投流API信息数据");
+    }
+
+    /**
+     * 获取抖音投流API信息详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('ad:adDyApi:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(adDyApiService.selectAdDyApiById(id));
+    }
+
+    /**
+     * 新增抖音投流API信息
+     */
+    @PreAuthorize("@ss.hasPermi('ad:adDyApi:add')")
+    @Log(title = "抖音投流API信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody AdDyApi adDyApi)
+    {
+        return toAjax(adDyApiService.insertAdDyApi(adDyApi));
+    }
+
+    /**
+     * 修改抖音投流API信息
+     */
+    @PreAuthorize("@ss.hasPermi('ad:adDyApi:edit')")
+    @Log(title = "抖音投流API信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody AdDyApi adDyApi)
+    {
+        return toAjax(adDyApiService.updateAdDyApi(adDyApi));
+    }
+
+    /**
+     * 删除抖音投流API信息
+     */
+    @PreAuthorize("@ss.hasPermi('ad:adDyApi:remove')")
+    @Log(title = "抖音投流API信息", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(adDyApiService.deleteAdDyApiByIds(ids));
+    }
+    /**
+     * 删除抖音投流API信息
+     */
+    @Log(title = "抖音API授权", businessType = BusinessType.UPDATE)
+	@GetMapping("/authorized")
+    public String authorized(DyAuthorizedVo vo){
+        System.out.println(vo);
+        return "授权成功";
+    }
+}

+ 8 - 14
fs-admin/src/main/java/com/fs/ad/controller/AdHtmlClickLogController.java

@@ -1,24 +1,18 @@
 package com.fs.ad.controller;
 
-import java.util.List;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.fs.ad.domain.AdHtmlClickLog;
+import com.fs.ad.service.IAdHtmlClickLogService;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
-import com.fs.ad.domain.AdHtmlClickLog;
-import com.fs.ad.service.IAdHtmlClickLogService;
 import com.fs.common.utils.poi.ExcelUtil;
-import com.fs.common.core.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 广告点击Controller

+ 9 - 16
fs-admin/src/main/java/com/fs/ad/controller/AdHtmlTemplateController.java

@@ -1,26 +1,19 @@
 package com.fs.ad.controller;
 
-import java.util.List;
-
-import com.fs.common.core.domain.R;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.fs.ad.domain.AdHtmlTemplate;
+import com.fs.ad.service.IAdHtmlTemplateService;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
-import com.fs.ad.domain.AdHtmlTemplate;
-import com.fs.ad.service.IAdHtmlTemplateService;
 import com.fs.common.utils.poi.ExcelUtil;
-import com.fs.common.core.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 广告信息流链接Controller

+ 9 - 16
fs-admin/src/main/java/com/fs/ad/controller/AdIqiyiAccountController.java

@@ -1,26 +1,19 @@
 package com.fs.ad.controller;
 
-import java.util.List;
-
-import com.fs.common.core.domain.R;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.fs.ad.domain.AdIqiyiAccount;
+import com.fs.ad.service.IAdIqiyiAccountService;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
-import com.fs.ad.domain.AdIqiyiAccount;
-import com.fs.ad.service.IAdIqiyiAccountService;
 import com.fs.common.utils.poi.ExcelUtil;
-import com.fs.common.core.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 爱奇艺广告账号Controller

+ 19 - 16
fs-admin/src/main/java/com/fs/ad/controller/AdSiteController.java

@@ -1,26 +1,19 @@
 package com.fs.ad.controller;
 
-import java.util.List;
-
-import com.fs.common.core.domain.R;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.fs.ad.domain.AdSite;
+import com.fs.ad.service.IAdSiteService;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
-import com.fs.ad.domain.AdSite;
-import com.fs.ad.service.IAdSiteService;
 import com.fs.common.utils.poi.ExcelUtil;
-import com.fs.common.core.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 站点管理Controller
@@ -47,6 +40,16 @@ public class AdSiteController extends BaseController
         return getDataTable(list);
     }
 
+    /**
+     * 查询站点管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('ad:adSite:list')")
+    @GetMapping("/listAll")
+    public R listAll(AdSite adSite){
+        List<AdSite> list = adSiteService.selectAdSiteList(adSite);
+        return R.ok().put("data", list);
+    }
+
     /**
      * 导出站点管理列表
      */

+ 97 - 0
fs-admin/src/main/java/com/fs/ad/controller/AdUploadLogController.java

@@ -0,0 +1,97 @@
+package com.fs.ad.controller;
+
+import com.fs.ad.domain.AdUploadLog;
+import com.fs.ad.service.IAdUploadLogService;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 百度回传日志Controller
+ * 
+ * @author fs
+ * @date 2025-03-14
+ */
+@RestController
+@RequestMapping("/ad/AdUploadLog")
+public class AdUploadLogController extends BaseController
+{
+    @Autowired
+    private IAdUploadLogService adUploadLogService;
+
+    /**
+     * 查询百度回传日志列表
+     */
+    @PreAuthorize("@ss.hasPermi('ad:AdUploadLog:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(AdUploadLog adUploadLog)
+    {
+        startPage();
+        List<AdUploadLog> list = adUploadLogService.selectAdUploadLogList(adUploadLog);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出百度回传日志列表
+     */
+    @PreAuthorize("@ss.hasPermi('ad:AdUploadLog:export')")
+    @Log(title = "百度回传日志", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(AdUploadLog adUploadLog)
+    {
+        List<AdUploadLog> list = adUploadLogService.selectAdUploadLogList(adUploadLog);
+        ExcelUtil<AdUploadLog> util = new ExcelUtil<AdUploadLog>(AdUploadLog.class);
+        return util.exportExcel(list, "百度回传日志数据");
+    }
+
+    /**
+     * 获取百度回传日志详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('ad:AdUploadLog:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(adUploadLogService.selectAdUploadLogById(id));
+    }
+
+    /**
+     * 新增百度回传日志
+     */
+    @PreAuthorize("@ss.hasPermi('ad:AdUploadLog:add')")
+    @Log(title = "百度回传日志", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody AdUploadLog adUploadLog)
+    {
+        return toAjax(adUploadLogService.insertAdUploadLog(adUploadLog));
+    }
+
+    /**
+     * 修改百度回传日志
+     */
+    @PreAuthorize("@ss.hasPermi('ad:AdUploadLog:edit')")
+    @Log(title = "百度回传日志", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody AdUploadLog adUploadLog)
+    {
+        return toAjax(adUploadLogService.updateAdUploadLog(adUploadLog));
+    }
+
+    /**
+     * 删除百度回传日志
+     */
+    @PreAuthorize("@ss.hasPermi('ad:AdUploadLog:remove')")
+    @Log(title = "百度回传日志", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(adUploadLogService.deleteAdUploadLogByIds(ids));
+    }
+}

+ 9 - 16
fs-admin/src/main/java/com/fs/ad/controller/AdYoukuAccountController.java

@@ -1,26 +1,19 @@
 package com.fs.ad.controller;
 
-import java.util.List;
-
-import com.fs.common.core.domain.R;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import com.fs.ad.domain.AdYoukuAccount;
+import com.fs.ad.service.IAdYoukuAccountService;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
-import com.fs.ad.domain.AdYoukuAccount;
-import com.fs.ad.service.IAdYoukuAccountService;
 import com.fs.common.utils.poi.ExcelUtil;
-import com.fs.common.core.page.TableDataInfo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 优酷广告账号Controller

+ 8 - 18
fs-admin/src/main/java/com/fs/ad/controller/BdAccountController.java

@@ -1,31 +1,21 @@
 package com.fs.ad.controller;
 
-import java.time.LocalDate;
-import java.util.List;
-import java.util.Optional;
-
 import com.fs.baidu.api.BaiduApis;
 import com.fs.baidu.domain.*;
-import com.fs.baidu.enums.BdTimeUnit;
-import com.fs.baidu.param.QueryReportDataParam;
 import com.fs.baidu.service.*;
-import com.fs.common.core.domain.R;
-import lombok.AllArgsConstructor;
-import org.springframework.security.access.prepost.PreAuthorize;
-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.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.poi.ExcelUtil;
-import com.fs.common.core.page.TableDataInfo;
+import lombok.AllArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Optional;
 
 /**
  * 百度账号Controller

+ 1 - 1
fs-admin/src/main/java/com/fs/ad/controller/MockAppController.java

@@ -1,8 +1,8 @@
 package com.fs.ad.controller;
 
-import com.fs.baidu.utils.SignService;
 import com.fs.baidu.domain.BdApi;
 import com.fs.baidu.service.IBdApiService;
+import com.fs.baidu.utils.SignService;
 import com.fs.huifuPay.sdk.opps.core.exception.BasePayException;
 import com.fs.huifuPay.sdk.opps.core.utils.HttpClientUtils;
 import lombok.extern.slf4j.Slf4j;

+ 9 - 3
fs-admin/src/main/java/com/fs/ad/controller/StatisticsController.java

@@ -1,7 +1,10 @@
 package com.fs.ad.controller;
 
 import com.fs.baidu.api.BaiduApis;
+import com.fs.baidu.domain.BdAccount;
+import com.fs.baidu.domain.BdApi;
 import com.fs.baidu.enums.BdTimeUnit;
+import com.fs.baidu.mapper.BdApiMapper;
 import com.fs.baidu.param.QueryReportDataParam;
 import com.fs.baidu.service.IBdAccountService;
 import com.fs.bdAdv.param.FsAdvSemStatisticsByDayParam;
@@ -14,7 +17,6 @@ import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.qw.param.ConversionStatisticsParam;
 import lombok.AllArgsConstructor;
-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;
@@ -30,6 +32,7 @@ public class StatisticsController extends BaseController {
     private final IFsAdvSemService fsAdvSemService;
     private final IBdAccountService bdAccountService;
     private final BaiduApis baiduApis;
+    private final BdApiMapper bdApiMapper;
 
     @GetMapping("/conversionStatistics")
     public R conversionStatistics(ConversionStatisticsParam param){
@@ -65,8 +68,11 @@ public class StatisticsController extends BaseController {
         param.setEndDate(endDate);
         param.setPage(page);
         param.setRowCount(rowCount);
-        param.setTimeUnit(BdTimeUnit.DAY);
-        return baiduApis.getReportData(bdAccountService.getById(id), param);
+        param.setTimeUnit(BdTimeUnit.SUMMARY);
+        BdAccount account = bdAccountService.getById(id);
+        BdApi byId = bdApiMapper.selectById(account.getApiId());
+        return baiduApis.getReportData(byId.getAccessToken(), account.getAccountName(), param);
+//        return R.ok();
     }
 
     @GetMapping("/bdDataStatic")

+ 1 - 0
fs-framework/src/main/java/com/fs/framework/config/SecurityConfig.java

@@ -99,6 +99,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
                 .antMatchers("/login", "/register", "/captchaImage").anonymous()
                 .antMatchers("/app/common/test").anonymous()
+                .antMatchers("/ad/adDyApi/authorized").anonymous()
                 .antMatchers(
                         HttpMethod.GET,
                         "/",

+ 39 - 0
fs-service/src/main/java/com/fs/ad/apis/DyApiUtil.java

@@ -0,0 +1,39 @@
+package com.fs.ad.apis;
+
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.fs.ad.dy.vo.DyDataVo;
+import com.fs.ad.iqiyi.vo.IyiqiDataVo;
+import lombok.extern.slf4j.Slf4j;
+
+import java.time.Instant;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+@Slf4j
+public class DyApiUtil {
+    private static final String URL = "https://analytics.oceanengine.com/api/v2/conversion";
+
+    public static void dataBack(String clickId, String vid){
+        DyDataVo vo = DyDataVo.builder().event_type("customer_effective").outer_event_id(vid).context(DyDataVo.DyContext.builder().ad(DyDataVo.DyContext.DyAd.builder().callback(clickId).build()).build()).build();
+        vo.setTimestamp(Instant.now().toEpochMilli());
+        HttpRequest request = HttpUtil.createPost(URL);
+        request.body(JSON.toJSONString(vo));
+        HttpResponse execute = request.execute();
+        JSONObject result = JSON.parseObject(execute.body());
+        if(result.getInteger("code") != 0){
+            log.error("抖音上传失败:{}", result.getString("message"));
+        }else{
+            log.info("抖音上传成功");
+        }
+    }
+    public static void main(String[] args) {
+        String clickId = "B.ezpH241vFUgYLNheuhOp1S12czUywa8aRoZynGsLpFn5fmOU9NdeGkWnPos0VzVGJSxjiCzO64Y3R9il5vt83OWRokMPUSIcxRC9mbcvh48uPR517ae5I5GMNfe5txXsBB";
+        String vid = "1833266361549963";
+        dataBack(clickId, vid);
+    }
+}

+ 4 - 1
fs-service/src/main/java/com/fs/ad/apis/YouKuApiUtils.java

@@ -9,7 +9,10 @@ import com.alibaba.fastjson.JSONObject;
 import com.fs.ad.yk.utils.MapStrUtil;
 import com.fs.ad.yk.vo.DataBackVo;
 
-import java.util.*;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import static com.fs.ad.yk.utils.SignUtils.sign;
 

+ 0 - 2
fs-service/src/main/java/com/fs/ad/domain/AdAccount.java

@@ -1,12 +1,10 @@
 package com.fs.ad.domain;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.fs.baidu.domain.BdAccount;
 import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntityTow;
 import lombok.Data;
-import com.fs.common.core.domain.BaseEntity;
 import lombok.EqualsAndHashCode;
 
 /**

+ 1 - 2
fs-service/src/main/java/com/fs/ad/domain/AdDomain.java

@@ -1,9 +1,8 @@
 package com.fs.ad.domain;
 
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.fs.common.annotation.Excel;
-import lombok.Data;
 import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 /**

+ 43 - 0
fs-service/src/main/java/com/fs/ad/domain/AdDyAccount.java

@@ -0,0 +1,43 @@
+package com.fs.ad.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 抖音账户对象 ad_dy_account
+ *
+ * @author 吴树波
+ * @date 2025-05-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AdDyAccount extends BaseEntity{
+
+    /** id */
+    private Long id;
+
+    /** 账户ID */
+    @Excel(name = "账户ID")
+    private Long advertiserId;
+
+    /** 账户ID 字符类型 */
+    @Excel(name = "账户ID 字符类型")
+    private String accountStringId;
+
+    /** 账户名称 */
+    @Excel(name = "账户名称")
+    private String advertiserName;
+
+    /** 授权有效性 */
+    @Excel(name = "授权有效性")
+    private Long isValid;
+
+    /** 新版账号角色 */
+    @Excel(name = "新版账号角色")
+    private String accountRole;
+
+
+}

+ 51 - 0
fs-service/src/main/java/com/fs/ad/domain/AdDyApi.java

@@ -0,0 +1,51 @@
+package com.fs.ad.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 抖音投流API信息对象 ad_dy_api
+ *
+ * @author 吴树波
+ * @date 2025-05-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AdDyApi extends BaseEntity{
+
+    /** id */
+    private Long id;
+
+    /** appid */
+    @Excel(name = "appid")
+    private String appId;
+
+    /** app秘钥 */
+    @Excel(name = "app秘钥")
+    private String appSecet;
+
+    /** 授权code */
+    @Excel(name = "授权code")
+    private String authCode;
+
+    /** token */
+    @Excel(name = "token")
+    private String accessToken;
+
+    /** 过期时间 */
+    @Excel(name = "过期时间")
+    private Long expiresIn;
+
+    /** 刷新token */
+    @Excel(name = "刷新token")
+    private String refreshToken;
+
+    /** 刷新token过期时间 */
+    @Excel(name = "刷新token过期时间")
+    private Long refreshTokenExpiresIn;
+
+
+}

+ 0 - 1
fs-service/src/main/java/com/fs/ad/domain/AdHtmlClickLog.java

@@ -1,7 +1,6 @@
 package com.fs.ad.domain;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntityTow;
 import lombok.Data;

+ 0 - 3
fs-service/src/main/java/com/fs/ad/domain/AdIqiyiAccount.java

@@ -1,11 +1,8 @@
 package com.fs.ad.domain;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntityTow;
 import lombok.Data;
-import com.fs.common.core.domain.BaseEntity;
 import lombok.EqualsAndHashCode;
 
 /**

+ 8 - 3
fs-service/src/main/java/com/fs/ad/domain/AdSite.java

@@ -1,11 +1,9 @@
 package com.fs.ad.domain;
 
 import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntityTow;
 import lombok.Data;
-import com.fs.common.core.domain.BaseEntity;
 import lombok.EqualsAndHashCode;
 
 /**
@@ -42,12 +40,19 @@ public class AdSite extends BaseEntityTow {
     private String url;
 
 
+    @Excel(name = "获客链接")
+    private Long workId;
+
+
     @TableField(exist = false)
     private String templateName;
     @TableField(exist = false)
     private String accountName;
     @TableField(exist = false)
     private String domain;
-
+    @TableField(exist = false)
+    private String workUrl;
+    @TableField(exist = false)
+    private String linkName;
 
 }

+ 74 - 0
fs-service/src/main/java/com/fs/ad/domain/AdUploadLog.java

@@ -0,0 +1,74 @@
+package com.fs.ad.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 百度回传日志对象 ad_upload_log
+ *
+ * @author fs
+ * @date 2025-03-14
+ */
+@Data
+public class AdUploadLog{
+
+    /** id */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 站点ID */
+    @Excel(name = "站点ID")
+    private Long siteId;
+
+    /** 媒体类型 */
+    @Excel(name = "媒体类型")
+    private Integer type;
+
+    /** 模板ID */
+    @Excel(name = "模板ID")
+    private Long templateId;
+
+    /** 账户ID */
+    @Excel(name = "账户ID")
+    private Long accountId;
+
+    /** 域名ID */
+    @Excel(name = "域名ID")
+    private Long domainId;
+
+    /** 点击URL */
+    @Excel(name = "点击URL")
+    private String url;
+
+    /** 上传类型 */
+    @Excel(name = "上传类型")
+    private String uploadType;
+
+    /** 广告唯一ID */
+    @Excel(name = "广告唯一ID")
+    private String vid;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @TableField(exist = false)
+    private String siteName;
+    @TableField(exist = false)
+    private String siteUrl;
+    @TableField(exist = false)
+    private String accountName;
+    @TableField(exist = false)
+    private LocalDate startDate;
+    @TableField(exist = false)
+    private LocalDate endDate;
+
+
+}

+ 0 - 2
fs-service/src/main/java/com/fs/ad/domain/AdYoukuAccount.java

@@ -1,10 +1,8 @@
 package com.fs.ad.domain;
 
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntityTow;
 import lombok.Data;
-import com.fs.common.core.domain.BaseEntity;
 import lombok.EqualsAndHashCode;
 
 /**

+ 99 - 0
fs-service/src/main/java/com/fs/ad/domain/BdCreativeStatistics.java

@@ -0,0 +1,99 @@
+package com.fs.ad.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * 百度创意统计对象 bd_creative_statistics
+ *
+ * @author fs
+ * @date 2025-03-14
+ */
+@Data
+public class BdCreativeStatistics{
+
+    /** id */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private LocalDate date;
+
+    /** 账户ID */
+    @Excel(name = "账户ID")
+    private Long userId;
+
+    /** 账户名称 */
+    @Excel(name = "账户名称")
+    private String userName;
+
+    /** 推广计划含已删除标记 */
+    @Excel(name = "推广计划含已删除标记")
+    private String campaignNameStatus;
+
+    /** 推广单元含已删除标记 */
+    @Excel(name = "推广单元含已删除标记")
+    private String adGroupNameStatus;
+
+    /** 创意组合信息 */
+    @Excel(name = "创意组合信息")
+    private String ideaInfo;
+
+    /** 创意名称含已删除标记 */
+    @Excel(name = "创意名称含已删除标记")
+    private String ideaNameStatus;
+
+    /** Feed主题类型,枚举:0-全部,1-网站链接,10-百家号推广 */
+    @Excel(name = "Feed主题类型,枚举:0-全部,1-网站链接,10-百家号推广")
+    private String feedSubjectEnum;
+
+    /** 展现次数 */
+    @Excel(name = "展现次数")
+    private Long impression;
+
+    /** 点击次数 */
+    @Excel(name = "点击次数")
+    private Long click;
+
+    /** 消费金额 */
+    @Excel(name = "消费金额")
+    private BigDecimal cost;
+
+    /** 点击率 */
+    @Excel(name = "点击率")
+    private BigDecimal ctr;
+
+    /** 平均点击价格 */
+    @Excel(name = "平均点击价格")
+    private BigDecimal cpc;
+
+    /** 千次展现消费 */
+    @Excel(name = "千次展现消费")
+    private BigDecimal cpm;
+
+    /** IAA广告变现LTV */
+    @Excel(name = "IAA广告变现LTV")
+    private BigDecimal iaaCost;
+
+    /** IAA广告变现ROI */
+    @Excel(name = "IAA广告变现ROI")
+    private BigDecimal iaaPayRoi;
+
+    /** 组件点击次数(创意按钮点击) */
+    @Excel(name = "组件点击次数", readConverterExp = "创=意按钮点击")
+    private Long phoneButtonClicks;
+
+    /** 互动次数(视频广告含播放互动) */
+    @Excel(name = "互动次数", readConverterExp = "视=频广告含播放互动")
+    private Long interaction;
+
+
+}

+ 110 - 0
fs-service/src/main/java/com/fs/ad/domain/BdReportData.java

@@ -0,0 +1,110 @@
+package com.fs.ad.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * 百度定向统计对象 bd_report_data
+ *
+ * @author fs
+ * @date 2025-03-13
+ */
+@Data
+public class BdReportData{
+
+    /** id */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /** 类型:0地区,1性别,2年龄,3意图词 */
+    @Excel(name = "类型:0地区,1性别,2年龄,3意图词")
+    private Integer type;
+
+    /** 日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private LocalDate date;
+
+    /** 账户 */
+    @Excel(name = "账户")
+    private String userName;
+
+    /** 账户ID */
+    @Excel(name = "账户ID")
+    private Long userId;
+
+    /** 推广计划ID;计划ID */
+    @Excel(name = "推广计划ID;计划ID")
+    private Long campaignId;
+
+    /** 推广计划;计划名称 */
+    @Excel(name = "推广计划;计划名称")
+    private String campaignName;
+
+    /** 推广计划状态;0:未删除,1:已删除 */
+    @Excel(name = "推广计划状态;0:未删除,1:已删除")
+    private Integer campaignStatus;
+
+    /** 推广计划;报告数据中包含了已删除物料(计划、单元等),已删除的物料,会在名称后面标记上"[已删除]",比如"推广计划[已删除]"。 未删除物料正常显示名称,没有额外标记。 */
+    @Excel(name = "推广计划;报告数据中包含了已删除物料(计划、单元等),已删除的物料,会在名称后面标记上[已删除],比如推广计划[已删除]。 未删除物料正常显示名称,没有额外标记。")
+    private Integer campaignNameStatus;
+
+    /** 推广单元ID */
+    @Excel(name = "推广单元ID")
+    private Long adGroupId;
+
+    /** 推广单元 */
+    @Excel(name = "推广单元")
+    private String adGroupName;
+
+    /** 推广单元状态;0:未删除,1:已删除 */
+    @Excel(name = "推广单元状态;0:未删除,1:已删除")
+    private Integer adGroupStatus;
+
+    /** 推广单元;报告数据中包含了已删除物料(计划、单元等),已删除的物料,会在名称后面标记上"[已删除]",比如"推广单元[已删除]"。 未删除物料正常显示名称,没有额外标记。 */
+    @Excel(name = "推广单元;报告数据中包含了已删除物料(计划、单元等),已删除的物料,会在名称后面标记上[已删除],比如推广单元[已删除。 未删除物料正常显示名称,没有额外标记。")
+    private String adGroupNameStatus;
+
+    /** 省ID */
+    @Excel(name = "省ID")
+    private Long provinceId;
+
+    /** 省名称 */
+    @Excel(name = "省名称")
+    private String provinceName;
+
+    /** 性别 */
+    @Excel(name = "性别")
+    private String genderName;
+
+    /** 年龄段 */
+    @Excel(name = "年龄段")
+    private String age;
+
+    /** 意图词 */
+    @Excel(name = "意图词")
+    private String showWord;
+
+    /** 意图词 */
+    @Excel(name = "意图词")
+    private String feedWord;
+    private Long impression;
+
+    private Long click;
+
+    private BigDecimal cost;
+
+    private BigDecimal ctr;
+
+    private BigDecimal cpc;
+
+    private BigDecimal cpm;
+
+
+}

+ 71 - 0
fs-service/src/main/java/com/fs/ad/dy/vo/DyDataVo.java

@@ -0,0 +1,71 @@
+package com.fs.ad.dy.vo;
+
+import lombok.*;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class DyDataVo {
+    // 回传的事件,例如”激活“、”付费“。详细列表见附录
+    @NonNull
+    private String event_type;
+    // 广告主可以针对每一次转化,回传一个这次转化的价值,单位是 RMB。
+    private Double event_weight;
+    // 包含一些关键的上下文信息
+    @NonNull
+    private DyContext context;
+    // 对于上报事件的附加属性,详情请见自定义属性的介绍。
+    private String properties;
+    // 时间戳
+    private long timestamp;
+    // 若上报有重复且需要去重,请填写该id,系统会根据该ID进行去重
+    private String outer_event_id;
+
+
+    @Data
+    @Builder
+    @AllArgsConstructor
+    @NoArgsConstructor
+    public static class DyContext{
+        @NonNull
+        private DyAd ad;
+        // 传递一些归因的设备信息
+        private DyDevice device;
+
+
+
+
+        @Data
+        @Builder
+        @AllArgsConstructor
+        @NoArgsConstructor
+        public static class DyAd{
+            // callback 字段有两个获取途径,对于监测链接归因的方式,
+            // 需要从监测链接的__CALLBACK_PARAM__这个宏获取这个字段值;
+            // 对于落地页或小程序归因的方式,需要从 url 中的 clickid 参数获取值。
+            @NonNull
+            private String callback;
+            //这个参数可以帮助广告主标识是通过哪种渠道进行的归因,如果不传,就会默认为点击归因。
+            //0:点击归因
+            //1:展示归因
+            //2:有效播放归因
+            private Integer match_type;
+        }
+
+        @Data
+        @Builder
+        @AllArgsConstructor
+        @NoArgsConstructor
+        public static class DyDevice{
+            private String platform;
+            private String imei;
+            private String idfa;
+            private String oaid;
+            @NonNull
+            private String android_id;
+            @NonNull
+            private String idfv;
+        }
+    }
+}

+ 4 - 4
fs-service/src/main/java/com/fs/ad/enums/AdUploadType.java

@@ -7,17 +7,17 @@ import lombok.Getter;
 @AllArgsConstructor
 public enum AdUploadType {
     // 添加微信
-    ADD_WX(0, 79, "wechat", 200, 386),
+    ADD_WX(0, 79, "wechat", 200, "work_wechat_added"),
     // 注册
-    REGISTERED(1, 25, "", 0, 19),
+    REGISTERED(1, 25, "", 0, ""),
     // 完课
-    FINISH_THE_CLASS(2, 27, "", 0, 0);
+    FINISH_THE_CLASS(2, 27, "", 0, "");
 
     private final int code;
     private final int bdType;
     private final String youkuType;
     private final Integer iqiyiType;
-    private final Integer dyType;
+    private final String dyType;
 
 
 

+ 2 - 1
fs-service/src/main/java/com/fs/ad/mapper/AdAccountMapper.java

@@ -1,9 +1,10 @@
 package com.fs.ad.mapper;
 
-import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.ad.domain.AdAccount;
 
+import java.util.List;
+
 /**
  * 推广账户Mapper接口
  * 

+ 2 - 1
fs-service/src/main/java/com/fs/ad/mapper/AdDomainMapper.java

@@ -1,9 +1,10 @@
 package com.fs.ad.mapper;
 
-import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.ad.domain.AdDomain;
 
+import java.util.List;
+
 /**
  * 广告域名Mapper接口
  * 

+ 61 - 0
fs-service/src/main/java/com/fs/ad/mapper/AdDyAccountMapper.java

@@ -0,0 +1,61 @@
+package com.fs.ad.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.ad.domain.AdDyAccount;
+
+/**
+ * 抖音账户Mapper接口
+ * 
+ * @author 吴树波
+ * @date 2025-05-27
+ */
+public interface AdDyAccountMapper extends BaseMapper<AdDyAccount>{
+    /**
+     * 查询抖音账户
+     * 
+     * @param id 抖音账户主键
+     * @return 抖音账户
+     */
+    AdDyAccount selectAdDyAccountById(Long id);
+
+    /**
+     * 查询抖音账户列表
+     * 
+     * @param adDyAccount 抖音账户
+     * @return 抖音账户集合
+     */
+    List<AdDyAccount> selectAdDyAccountList(AdDyAccount adDyAccount);
+
+    /**
+     * 新增抖音账户
+     * 
+     * @param adDyAccount 抖音账户
+     * @return 结果
+     */
+    int insertAdDyAccount(AdDyAccount adDyAccount);
+
+    /**
+     * 修改抖音账户
+     * 
+     * @param adDyAccount 抖音账户
+     * @return 结果
+     */
+    int updateAdDyAccount(AdDyAccount adDyAccount);
+
+    /**
+     * 删除抖音账户
+     * 
+     * @param id 抖音账户主键
+     * @return 结果
+     */
+    int deleteAdDyAccountById(Long id);
+
+    /**
+     * 批量删除抖音账户
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteAdDyAccountByIds(Long[] ids);
+}

+ 61 - 0
fs-service/src/main/java/com/fs/ad/mapper/AdDyApiMapper.java

@@ -0,0 +1,61 @@
+package com.fs.ad.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.ad.domain.AdDyApi;
+
+/**
+ * 抖音投流API信息Mapper接口
+ * 
+ * @author 吴树波
+ * @date 2025-05-27
+ */
+public interface AdDyApiMapper extends BaseMapper<AdDyApi>{
+    /**
+     * 查询抖音投流API信息
+     * 
+     * @param id 抖音投流API信息主键
+     * @return 抖音投流API信息
+     */
+    AdDyApi selectAdDyApiById(Long id);
+
+    /**
+     * 查询抖音投流API信息列表
+     * 
+     * @param adDyApi 抖音投流API信息
+     * @return 抖音投流API信息集合
+     */
+    List<AdDyApi> selectAdDyApiList(AdDyApi adDyApi);
+
+    /**
+     * 新增抖音投流API信息
+     * 
+     * @param adDyApi 抖音投流API信息
+     * @return 结果
+     */
+    int insertAdDyApi(AdDyApi adDyApi);
+
+    /**
+     * 修改抖音投流API信息
+     * 
+     * @param adDyApi 抖音投流API信息
+     * @return 结果
+     */
+    int updateAdDyApi(AdDyApi adDyApi);
+
+    /**
+     * 删除抖音投流API信息
+     * 
+     * @param id 抖音投流API信息主键
+     * @return 结果
+     */
+    int deleteAdDyApiById(Long id);
+
+    /**
+     * 批量删除抖音投流API信息
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteAdDyApiByIds(Long[] ids);
+}

+ 2 - 3
fs-service/src/main/java/com/fs/ad/mapper/AdHtmlClickLogMapper.java

@@ -1,11 +1,10 @@
 package com.fs.ad.mapper;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.ad.domain.AdHtmlClickLog;
 import org.apache.ibatis.annotations.Param;
-import org.springframework.data.repository.CrudRepository;
+
+import java.util.List;
 
 /**
  * 广告点击Mapper接口

+ 2 - 2
fs-service/src/main/java/com/fs/ad/mapper/AdHtmlTemplateMapper.java

@@ -1,10 +1,10 @@
 package com.fs.ad.mapper;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.ad.domain.AdHtmlTemplate;
 
+import java.util.List;
+
 /**
  * 广告信息流链接Mapper接口
  * 

+ 2 - 1
fs-service/src/main/java/com/fs/ad/mapper/AdIqiyiAccountMapper.java

@@ -1,9 +1,10 @@
 package com.fs.ad.mapper;
 
-import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.ad.domain.AdIqiyiAccount;
 
+import java.util.List;
+
 /**
  * 爱奇艺广告账号Mapper接口
  * 

+ 2 - 1
fs-service/src/main/java/com/fs/ad/mapper/AdSiteMapper.java

@@ -1,9 +1,10 @@
 package com.fs.ad.mapper;
 
-import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.ad.domain.AdSite;
 
+import java.util.List;
+
 /**
  * 站点管理Mapper接口
  * 

+ 62 - 0
fs-service/src/main/java/com/fs/ad/mapper/AdUploadLogMapper.java

@@ -0,0 +1,62 @@
+package com.fs.ad.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.ad.domain.AdUploadLog;
+
+import java.util.List;
+
+/**
+ * 百度回传日志Mapper接口
+ * 
+ * @author fs
+ * @date 2025-03-14
+ */
+public interface AdUploadLogMapper extends BaseMapper<AdUploadLog>{
+    /**
+     * 查询百度回传日志
+     * 
+     * @param id 百度回传日志主键
+     * @return 百度回传日志
+     */
+    AdUploadLog selectAdUploadLogById(Long id);
+
+    /**
+     * 查询百度回传日志列表
+     * 
+     * @param adUploadLog 百度回传日志
+     * @return 百度回传日志集合
+     */
+    List<AdUploadLog> selectAdUploadLogList(AdUploadLog adUploadLog);
+
+    /**
+     * 新增百度回传日志
+     * 
+     * @param adUploadLog 百度回传日志
+     * @return 结果
+     */
+    int insertAdUploadLog(AdUploadLog adUploadLog);
+
+    /**
+     * 修改百度回传日志
+     * 
+     * @param adUploadLog 百度回传日志
+     * @return 结果
+     */
+    int updateAdUploadLog(AdUploadLog adUploadLog);
+
+    /**
+     * 删除百度回传日志
+     * 
+     * @param id 百度回传日志主键
+     * @return 结果
+     */
+    int deleteAdUploadLogById(Long id);
+
+    /**
+     * 批量删除百度回传日志
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteAdUploadLogByIds(Long[] ids);
+}

+ 2 - 1
fs-service/src/main/java/com/fs/ad/mapper/AdYoukuAccountMapper.java

@@ -1,9 +1,10 @@
 package com.fs.ad.mapper;
 
-import java.util.List;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.ad.domain.AdYoukuAccount;
 
+import java.util.List;
+
 /**
  * 优酷广告账号Mapper接口
  * 

+ 62 - 0
fs-service/src/main/java/com/fs/ad/mapper/BdCreativeStatisticsMapper.java

@@ -0,0 +1,62 @@
+package com.fs.ad.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.ad.domain.BdCreativeStatistics;
+
+import java.util.List;
+
+/**
+ * 百度创意统计Mapper接口
+ * 
+ * @author fs
+ * @date 2025-03-14
+ */
+public interface BdCreativeStatisticsMapper extends BaseMapper<BdCreativeStatistics>{
+    /**
+     * 查询百度创意统计
+     * 
+     * @param id 百度创意统计主键
+     * @return 百度创意统计
+     */
+    BdCreativeStatistics selectBdCreativeStatisticsById(Long id);
+
+    /**
+     * 查询百度创意统计列表
+     * 
+     * @param bdCreativeStatistics 百度创意统计
+     * @return 百度创意统计集合
+     */
+    List<BdCreativeStatistics> selectBdCreativeStatisticsList(BdCreativeStatistics bdCreativeStatistics);
+
+    /**
+     * 新增百度创意统计
+     * 
+     * @param bdCreativeStatistics 百度创意统计
+     * @return 结果
+     */
+    int insertBdCreativeStatistics(BdCreativeStatistics bdCreativeStatistics);
+
+    /**
+     * 修改百度创意统计
+     * 
+     * @param bdCreativeStatistics 百度创意统计
+     * @return 结果
+     */
+    int updateBdCreativeStatistics(BdCreativeStatistics bdCreativeStatistics);
+
+    /**
+     * 删除百度创意统计
+     * 
+     * @param id 百度创意统计主键
+     * @return 结果
+     */
+    int deleteBdCreativeStatisticsById(Long id);
+
+    /**
+     * 批量删除百度创意统计
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteBdCreativeStatisticsByIds(Long[] ids);
+}

+ 62 - 0
fs-service/src/main/java/com/fs/ad/mapper/BdReportDataMapper.java

@@ -0,0 +1,62 @@
+package com.fs.ad.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.ad.domain.BdReportData;
+
+import java.util.List;
+
+/**
+ * 百度定向统计Mapper接口
+ * 
+ * @author fs
+ * @date 2025-03-13
+ */
+public interface BdReportDataMapper extends BaseMapper<BdReportData>{
+    /**
+     * 查询百度定向统计
+     * 
+     * @param id 百度定向统计主键
+     * @return 百度定向统计
+     */
+    BdReportData selectBdReportDataById(Long id);
+
+    /**
+     * 查询百度定向统计列表
+     * 
+     * @param bdReportData 百度定向统计
+     * @return 百度定向统计集合
+     */
+    List<BdReportData> selectBdReportDataList(BdReportData bdReportData);
+
+    /**
+     * 新增百度定向统计
+     * 
+     * @param bdReportData 百度定向统计
+     * @return 结果
+     */
+    int insertBdReportData(BdReportData bdReportData);
+
+    /**
+     * 修改百度定向统计
+     * 
+     * @param bdReportData 百度定向统计
+     * @return 结果
+     */
+    int updateBdReportData(BdReportData bdReportData);
+
+    /**
+     * 删除百度定向统计
+     * 
+     * @param id 百度定向统计主键
+     * @return 结果
+     */
+    int deleteBdReportDataById(Long id);
+
+    /**
+     * 批量删除百度定向统计
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteBdReportDataByIds(Long[] ids);
+}

+ 3 - 2
fs-service/src/main/java/com/fs/ad/service/IAdAccountService.java

@@ -1,9 +1,10 @@
 package com.fs.ad.service;
 
-import java.util.List;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.ad.domain.AdAccount;
 
+import java.util.List;
+
 /**
  * 推广账户Service接口
  * 
@@ -59,7 +60,7 @@ public interface IAdAccountService extends IService<AdAccount>{
      */
     int deleteAdAccountById(Long id);
 
-    AdAccount selectByLinkId(Long id);
+    AdAccount selectByLinkId(Integer type, Long id);
     void deleteByLinkId(Integer type, Long id);
     void deleteByLinkIds(Integer type, Long[] id);
 

+ 2 - 1
fs-service/src/main/java/com/fs/ad/service/IAdDomainService.java

@@ -1,9 +1,10 @@
 package com.fs.ad.service;
 
-import java.util.List;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.ad.domain.AdDomain;
 
+import java.util.List;
+
 /**
  * 广告域名Service接口
  * 

+ 61 - 0
fs-service/src/main/java/com/fs/ad/service/IAdDyAccountService.java

@@ -0,0 +1,61 @@
+package com.fs.ad.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.ad.domain.AdDyAccount;
+
+/**
+ * 抖音账户Service接口
+ * 
+ * @author 吴树波
+ * @date 2025-05-27
+ */
+public interface IAdDyAccountService extends IService<AdDyAccount>{
+    /**
+     * 查询抖音账户
+     * 
+     * @param id 抖音账户主键
+     * @return 抖音账户
+     */
+    AdDyAccount selectAdDyAccountById(Long id);
+
+    /**
+     * 查询抖音账户列表
+     * 
+     * @param adDyAccount 抖音账户
+     * @return 抖音账户集合
+     */
+    List<AdDyAccount> selectAdDyAccountList(AdDyAccount adDyAccount);
+
+    /**
+     * 新增抖音账户
+     * 
+     * @param adDyAccount 抖音账户
+     * @return 结果
+     */
+    int insertAdDyAccount(AdDyAccount adDyAccount);
+
+    /**
+     * 修改抖音账户
+     * 
+     * @param adDyAccount 抖音账户
+     * @return 结果
+     */
+    int updateAdDyAccount(AdDyAccount adDyAccount);
+
+    /**
+     * 批量删除抖音账户
+     * 
+     * @param ids 需要删除的抖音账户主键集合
+     * @return 结果
+     */
+    int deleteAdDyAccountByIds(Long[] ids);
+
+    /**
+     * 删除抖音账户信息
+     * 
+     * @param id 抖音账户主键
+     * @return 结果
+     */
+    int deleteAdDyAccountById(Long id);
+}

+ 61 - 0
fs-service/src/main/java/com/fs/ad/service/IAdDyApiService.java

@@ -0,0 +1,61 @@
+package com.fs.ad.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.ad.domain.AdDyApi;
+
+/**
+ * 抖音投流API信息Service接口
+ * 
+ * @author 吴树波
+ * @date 2025-05-27
+ */
+public interface IAdDyApiService extends IService<AdDyApi>{
+    /**
+     * 查询抖音投流API信息
+     * 
+     * @param id 抖音投流API信息主键
+     * @return 抖音投流API信息
+     */
+    AdDyApi selectAdDyApiById(Long id);
+
+    /**
+     * 查询抖音投流API信息列表
+     * 
+     * @param adDyApi 抖音投流API信息
+     * @return 抖音投流API信息集合
+     */
+    List<AdDyApi> selectAdDyApiList(AdDyApi adDyApi);
+
+    /**
+     * 新增抖音投流API信息
+     * 
+     * @param adDyApi 抖音投流API信息
+     * @return 结果
+     */
+    int insertAdDyApi(AdDyApi adDyApi);
+
+    /**
+     * 修改抖音投流API信息
+     * 
+     * @param adDyApi 抖音投流API信息
+     * @return 结果
+     */
+    int updateAdDyApi(AdDyApi adDyApi);
+
+    /**
+     * 批量删除抖音投流API信息
+     * 
+     * @param ids 需要删除的抖音投流API信息主键集合
+     * @return 结果
+     */
+    int deleteAdDyApiByIds(Long[] ids);
+
+    /**
+     * 删除抖音投流API信息信息
+     * 
+     * @param id 抖音投流API信息主键
+     * @return 结果
+     */
+    int deleteAdDyApiById(Long id);
+}

+ 6 - 5
fs-service/src/main/java/com/fs/ad/service/IAdHtmlClickLogService.java

@@ -1,16 +1,15 @@
 package com.fs.ad.service;
 
-import java.util.List;
-import java.util.function.Consumer;
-
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.fs.ad.enums.AdUploadType;
 import com.fs.ad.domain.AdHtmlClickLog;
+import com.fs.ad.enums.AdUploadType;
 import com.fs.baidu.vo.ad.AdBaiduClickCallbackVo;
-import com.fs.baidu.vo.AdClickCallbackVo;
+import com.fs.baidu.vo.ad.AdDyClickCallbackVo;
 import com.fs.baidu.vo.ad.AdIqiyiClickCallbackVo;
 import com.fs.baidu.vo.ad.AdYouKuClickCallbackVo;
 
+import java.util.List;
+
 /**
  * 广告点击Service接口
  * 
@@ -79,4 +78,6 @@ public interface IAdHtmlClickLogService extends IService<AdHtmlClickLog> {
     void setLogYouKu(AdYouKuClickCallbackVo vo);
 
     void setLogBaiDuApi(AdBaiduClickCallbackVo vo);
+
+    void setLogDy(AdDyClickCallbackVo vo);
 }

+ 2 - 2
fs-service/src/main/java/com/fs/ad/service/IAdHtmlTemplateService.java

@@ -1,10 +1,10 @@
 package com.fs.ad.service;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.ad.domain.AdHtmlTemplate;
 
+import java.util.List;
+
 /**
  * 广告信息流链接Service接口
  * 

+ 2 - 1
fs-service/src/main/java/com/fs/ad/service/IAdIqiyiAccountService.java

@@ -1,9 +1,10 @@
 package com.fs.ad.service;
 
-import java.util.List;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.ad.domain.AdIqiyiAccount;
 
+import java.util.List;
+
 /**
  * 爱奇艺广告账号Service接口
  * 

+ 2 - 1
fs-service/src/main/java/com/fs/ad/service/IAdSiteService.java

@@ -1,9 +1,10 @@
 package com.fs.ad.service;
 
-import java.util.List;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.ad.domain.AdSite;
 
+import java.util.List;
+
 /**
  * 站点管理Service接口
  * 

+ 62 - 0
fs-service/src/main/java/com/fs/ad/service/IAdUploadLogService.java

@@ -0,0 +1,62 @@
+package com.fs.ad.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.ad.domain.AdUploadLog;
+
+import java.util.List;
+
+/**
+ * 百度回传日志Service接口
+ * 
+ * @author fs
+ * @date 2025-03-14
+ */
+public interface IAdUploadLogService extends IService<AdUploadLog>{
+    /**
+     * 查询百度回传日志
+     * 
+     * @param id 百度回传日志主键
+     * @return 百度回传日志
+     */
+    AdUploadLog selectAdUploadLogById(Long id);
+
+    /**
+     * 查询百度回传日志列表
+     * 
+     * @param adUploadLog 百度回传日志
+     * @return 百度回传日志集合
+     */
+    List<AdUploadLog> selectAdUploadLogList(AdUploadLog adUploadLog);
+
+    /**
+     * 新增百度回传日志
+     * 
+     * @param adUploadLog 百度回传日志
+     * @return 结果
+     */
+    int insertAdUploadLog(AdUploadLog adUploadLog);
+
+    /**
+     * 修改百度回传日志
+     * 
+     * @param adUploadLog 百度回传日志
+     * @return 结果
+     */
+    int updateAdUploadLog(AdUploadLog adUploadLog);
+
+    /**
+     * 批量删除百度回传日志
+     * 
+     * @param ids 需要删除的百度回传日志主键集合
+     * @return 结果
+     */
+    int deleteAdUploadLogByIds(Long[] ids);
+
+    /**
+     * 删除百度回传日志信息
+     * 
+     * @param id 百度回传日志主键
+     * @return 结果
+     */
+    int deleteAdUploadLogById(Long id);
+}

+ 2 - 1
fs-service/src/main/java/com/fs/ad/service/IAdYoukuAccountService.java

@@ -1,9 +1,10 @@
 package com.fs.ad.service;
 
-import java.util.List;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.fs.ad.domain.AdYoukuAccount;
 
+import java.util.List;
+
 /**
  * 优酷广告账号Service接口
  * 

+ 62 - 0
fs-service/src/main/java/com/fs/ad/service/IBdCreativeStatisticsService.java

@@ -0,0 +1,62 @@
+package com.fs.ad.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.ad.domain.BdCreativeStatistics;
+
+import java.util.List;
+
+/**
+ * 百度创意统计Service接口
+ * 
+ * @author fs
+ * @date 2025-03-14
+ */
+public interface IBdCreativeStatisticsService extends IService<BdCreativeStatistics>{
+    /**
+     * 查询百度创意统计
+     * 
+     * @param id 百度创意统计主键
+     * @return 百度创意统计
+     */
+    BdCreativeStatistics selectBdCreativeStatisticsById(Long id);
+
+    /**
+     * 查询百度创意统计列表
+     * 
+     * @param bdCreativeStatistics 百度创意统计
+     * @return 百度创意统计集合
+     */
+    List<BdCreativeStatistics> selectBdCreativeStatisticsList(BdCreativeStatistics bdCreativeStatistics);
+
+    /**
+     * 新增百度创意统计
+     * 
+     * @param bdCreativeStatistics 百度创意统计
+     * @return 结果
+     */
+    int insertBdCreativeStatistics(BdCreativeStatistics bdCreativeStatistics);
+
+    /**
+     * 修改百度创意统计
+     * 
+     * @param bdCreativeStatistics 百度创意统计
+     * @return 结果
+     */
+    int updateBdCreativeStatistics(BdCreativeStatistics bdCreativeStatistics);
+
+    /**
+     * 批量删除百度创意统计
+     * 
+     * @param ids 需要删除的百度创意统计主键集合
+     * @return 结果
+     */
+    int deleteBdCreativeStatisticsByIds(Long[] ids);
+
+    /**
+     * 删除百度创意统计信息
+     * 
+     * @param id 百度创意统计主键
+     * @return 结果
+     */
+    int deleteBdCreativeStatisticsById(Long id);
+}

+ 66 - 0
fs-service/src/main/java/com/fs/ad/service/IBdReportDataService.java

@@ -0,0 +1,66 @@
+package com.fs.ad.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.ad.domain.BdReportData;
+
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * 百度定向统计Service接口
+ * 
+ * @author fs
+ * @date 2025-03-13
+ */
+public interface IBdReportDataService extends IService<BdReportData>{
+    /**
+     * 查询百度定向统计
+     * 
+     * @param id 百度定向统计主键
+     * @return 百度定向统计
+     */
+    BdReportData selectBdReportDataById(Long id);
+
+    /**
+     * 查询百度定向统计列表
+     * 
+     * @param bdReportData 百度定向统计
+     * @return 百度定向统计集合
+     */
+    List<BdReportData> selectBdReportDataList(BdReportData bdReportData);
+
+    /**
+     * 新增百度定向统计
+     * 
+     * @param bdReportData 百度定向统计
+     * @return 结果
+     */
+    int insertBdReportData(BdReportData bdReportData);
+
+    /**
+     * 修改百度定向统计
+     * 
+     * @param bdReportData 百度定向统计
+     * @return 结果
+     */
+    int updateBdReportData(BdReportData bdReportData);
+
+    /**
+     * 批量删除百度定向统计
+     * 
+     * @param ids 需要删除的百度定向统计主键集合
+     * @return 结果
+     */
+    int deleteBdReportDataByIds(Long[] ids);
+
+    /**
+     * 删除百度定向统计信息
+     * 
+     * @param id 百度定向统计主键
+     * @return 结果
+     */
+    int deleteBdReportDataById(Long id);
+
+    void syncReportData(LocalDate time);
+    void syncCreativeStatistics(LocalDate time);
+}

+ 8 - 10
fs-service/src/main/java/com/fs/ad/service/impl/AdAccountServiceImpl.java

@@ -1,17 +1,15 @@
 package com.fs.ad.service.impl;
 
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fs.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.fs.ad.mapper.AdAccountMapper;
 import com.fs.ad.domain.AdAccount;
+import com.fs.ad.mapper.AdAccountMapper;
 import com.fs.ad.service.IAdAccountService;
+import com.fs.common.utils.DateUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * 推广账户Service业务层处理
@@ -97,8 +95,8 @@ public class AdAccountServiceImpl extends ServiceImpl<AdAccountMapper, AdAccount
     }
 
     @Override
-    public AdAccount selectByLinkId(Long id) {
-        return getOne(new QueryWrapper<AdAccount>().eq("link_id",id));
+    public AdAccount selectByLinkId(Integer type, Long id) {
+        return getOne(new QueryWrapper<AdAccount>().eq("link_id",id).eq("type", type));
     }
 
     @Override

+ 5 - 6
fs-service/src/main/java/com/fs/ad/service/impl/AdDomainServiceImpl.java

@@ -1,14 +1,13 @@
 package com.fs.ad.service.impl;
 
-import java.util.List;
-
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fs.common.utils.DateUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.fs.ad.mapper.AdDomainMapper;
 import com.fs.ad.domain.AdDomain;
+import com.fs.ad.mapper.AdDomainMapper;
 import com.fs.ad.service.IAdDomainService;
+import com.fs.common.utils.DateUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
 
 /**
  * 广告域名Service业务层处理

+ 111 - 0
fs-service/src/main/java/com/fs/ad/service/impl/AdDyAccountServiceImpl.java

@@ -0,0 +1,111 @@
+package com.fs.ad.service.impl;
+
+import java.util.List;
+
+import com.fs.ad.domain.AdAccount;
+import com.fs.ad.service.IAdAccountService;
+import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.fs.ad.mapper.AdDyAccountMapper;
+import com.fs.ad.domain.AdDyAccount;
+import com.fs.ad.service.IAdDyAccountService;
+
+/**
+ * 抖音账户Service业务层处理
+ * 
+ * @author 吴树波
+ * @date 2025-05-27
+ */
+@Service
+@AllArgsConstructor
+public class AdDyAccountServiceImpl extends ServiceImpl<AdDyAccountMapper, AdDyAccount> implements IAdDyAccountService {
+
+    private final IAdAccountService adAccountService;
+
+    /**
+     * 查询抖音账户
+     * 
+     * @param id 抖音账户主键
+     * @return 抖音账户
+     */
+    @Override
+    public AdDyAccount selectAdDyAccountById(Long id)
+    {
+        return baseMapper.selectAdDyAccountById(id);
+    }
+
+    /**
+     * 查询抖音账户列表
+     * 
+     * @param adDyAccount 抖音账户
+     * @return 抖音账户
+     */
+    @Override
+    public List<AdDyAccount> selectAdDyAccountList(AdDyAccount adDyAccount)
+    {
+        return baseMapper.selectAdDyAccountList(adDyAccount);
+    }
+
+    /**
+     * 新增抖音账户
+     * 
+     * @param adDyAccount 抖音账户
+     * @return 结果
+     */
+    @Override
+    public int insertAdDyAccount(AdDyAccount adDyAccount)
+    {
+        adDyAccount.setCreateTime(DateUtils.getNowDate());
+        int i = baseMapper.insertAdDyAccount(adDyAccount);
+        AdAccount adAccount = new AdAccount();
+        adAccount.setName(adDyAccount.getAdvertiserName());
+        adAccount.setType(3);
+        adAccount.setLinkId(adDyAccount.getId());
+        adAccountService.save(adAccount);
+        return i;
+    }
+
+    /**
+     * 修改抖音账户
+     * 
+     * @param adDyAccount 抖音账户
+     * @return 结果
+     */
+    @Override
+    public int updateAdDyAccount(AdDyAccount adDyAccount)
+    {
+        adDyAccount.setUpdateTime(DateUtils.getNowDate());
+        int i = baseMapper.updateAdDyAccount(adDyAccount);
+        AdAccount adAccount = adAccountService.selectByLinkId(3, adDyAccount.getId());
+        adAccount.setName(adDyAccount.getAdvertiserName());
+        adAccountService.updateById(adAccount);
+        return i;
+    }
+
+    /**
+     * 批量删除抖音账户
+     * 
+     * @param ids 需要删除的抖音账户主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAdDyAccountByIds(Long[] ids)
+    {
+        return baseMapper.deleteAdDyAccountByIds(ids);
+    }
+
+    /**
+     * 删除抖音账户信息
+     * 
+     * @param id 抖音账户主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAdDyAccountById(Long id)
+    {
+        return baseMapper.deleteAdDyAccountById(id);
+    }
+}

+ 94 - 0
fs-service/src/main/java/com/fs/ad/service/impl/AdDyApiServiceImpl.java

@@ -0,0 +1,94 @@
+package com.fs.ad.service.impl;
+
+import java.util.List;
+import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.fs.ad.mapper.AdDyApiMapper;
+import com.fs.ad.domain.AdDyApi;
+import com.fs.ad.service.IAdDyApiService;
+
+/**
+ * 抖音投流API信息Service业务层处理
+ * 
+ * @author 吴树波
+ * @date 2025-05-27
+ */
+@Service
+public class AdDyApiServiceImpl extends ServiceImpl<AdDyApiMapper, AdDyApi> implements IAdDyApiService {
+
+    /**
+     * 查询抖音投流API信息
+     * 
+     * @param id 抖音投流API信息主键
+     * @return 抖音投流API信息
+     */
+    @Override
+    public AdDyApi selectAdDyApiById(Long id)
+    {
+        return baseMapper.selectAdDyApiById(id);
+    }
+
+    /**
+     * 查询抖音投流API信息列表
+     * 
+     * @param adDyApi 抖音投流API信息
+     * @return 抖音投流API信息
+     */
+    @Override
+    public List<AdDyApi> selectAdDyApiList(AdDyApi adDyApi)
+    {
+        return baseMapper.selectAdDyApiList(adDyApi);
+    }
+
+    /**
+     * 新增抖音投流API信息
+     * 
+     * @param adDyApi 抖音投流API信息
+     * @return 结果
+     */
+    @Override
+    public int insertAdDyApi(AdDyApi adDyApi)
+    {
+        adDyApi.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertAdDyApi(adDyApi);
+    }
+
+    /**
+     * 修改抖音投流API信息
+     * 
+     * @param adDyApi 抖音投流API信息
+     * @return 结果
+     */
+    @Override
+    public int updateAdDyApi(AdDyApi adDyApi)
+    {
+        adDyApi.setUpdateTime(DateUtils.getNowDate());
+        return baseMapper.updateAdDyApi(adDyApi);
+    }
+
+    /**
+     * 批量删除抖音投流API信息
+     * 
+     * @param ids 需要删除的抖音投流API信息主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAdDyApiByIds(Long[] ids)
+    {
+        return baseMapper.deleteAdDyApiByIds(ids);
+    }
+
+    /**
+     * 删除抖音投流API信息信息
+     * 
+     * @param id 抖音投流API信息主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAdDyApiById(Long id)
+    {
+        return baseMapper.deleteAdDyApiById(id);
+    }
+}

+ 43 - 17
fs-service/src/main/java/com/fs/ad/service/impl/AdHtmlClickLogServiceImpl.java

@@ -1,30 +1,23 @@
 package com.fs.ad.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.ad.apis.DyApiUtil;
 import com.fs.ad.apis.IqiyiApiUtil;
 import com.fs.ad.apis.YouKuApiUtils;
-import com.fs.ad.domain.AdAccount;
-import com.fs.ad.domain.AdHtmlClickLog;
-import com.fs.ad.domain.AdSite;
-import com.fs.ad.domain.AdYoukuAccount;
+import com.fs.ad.domain.*;
 import com.fs.ad.enums.AdUploadType;
 import com.fs.ad.iqiyi.vo.IyiqiDataVo;
-import com.fs.ad.mapper.AdAccountMapper;
-import com.fs.ad.mapper.AdHtmlClickLogMapper;
-import com.fs.ad.mapper.AdSiteMapper;
-import com.fs.ad.mapper.AdYoukuAccountMapper;
+import com.fs.ad.mapper.*;
 import com.fs.ad.service.IAdHtmlClickLogService;
 import com.fs.ad.yk.vo.DataBackVo;
 import com.fs.baidu.api.ConvertData;
 import com.fs.baidu.domain.BdAccount;
 import com.fs.baidu.mapper.BdAccountMapper;
 import com.fs.baidu.param.ConversionType;
-import com.fs.baidu.vo.ad.AdBaiduClickCallbackVo;
-import com.fs.baidu.vo.ad.AdBaseClickCallbackVo;
-import com.fs.baidu.vo.ad.AdIqiyiClickCallbackVo;
-import com.fs.baidu.vo.ad.AdYouKuClickCallbackVo;
+import com.fs.baidu.vo.ad.*;
 import com.fs.common.core.redis.RedisCacheT;
 import com.fs.common.exception.base.BaseException;
 import com.fs.common.utils.DateUtils;
@@ -57,6 +50,7 @@ public class AdHtmlClickLogServiceImpl extends ServiceImpl<AdHtmlClickLogMapper,
     private final BdAccountMapper bdAccountMapper;
     private final AdSiteMapper adSiteMapper;
     private final AdAccountMapper adAccountMapper;
+    private final AdUploadLogMapper adUploadLogMapper;
 
     public static  final String AD_LOG_KEY = "AD:";
     public static  final String AD_TYPE_LOG_KEY = "ADTYPE:";
@@ -159,6 +153,12 @@ public class AdHtmlClickLogServiceImpl extends ServiceImpl<AdHtmlClickLogMapper,
                 }
             }
             if(one != null){
+                String uploadType = clickType.name();
+                Integer i = adUploadLogMapper.selectCount(new QueryWrapper<AdUploadLog>().eq("vid", one.getVid()).like("upload_type", uploadType));
+                if(i > 0){
+                    log.info("vid:{}, {}已经上传次数{}", one.getVid(), uploadType, i);
+                    return;
+                }
                 switch (type){
                     case 0: // 百度
                         uploadBaiDu(one, clickType);
@@ -166,11 +166,28 @@ public class AdHtmlClickLogServiceImpl extends ServiceImpl<AdHtmlClickLogMapper,
                         uploadYouKu(one, clickType);
                     case 2:// 爱奇艺
                         uploadIqiyi(one, clickType);
+                    case 3:// 巨量(抖音)
+                        uploadDy(one, clickType);
                 }
-                String uploadType = clickType.name();
-                one.setUploadType((StringUtils.isEmpty(one.getUploadType()) ? "" : one.getUploadType()) + "," + uploadType);
+                one.setUploadType(uploadType);
                 saveLog(key, one, type);
+
+                AdUploadLog adUploadLog = new AdUploadLog();
+                if(one.getSiteId() != null){
+                    AdSite adSite = adSiteMapper.selectById(one.getSiteId());
+                    adUploadLog.setSiteId(one.getSiteId());
+                    adUploadLog.setTemplateId(adSite.getTemplateId());
+                    adUploadLog.setDomainId(adSite.getDomainId());
+                }
+                adUploadLog.setType(one.getType());
+                adUploadLog.setAccountId(one.getAccountId());
+                adUploadLog.setUrl(one.getUrl());
+                adUploadLog.setUploadType(uploadType);
+                adUploadLog.setVid(one.getVid());
+                adUploadLogMapper.insert(adUploadLog);
             }
+
+
         }catch (Throwable e){
             e.printStackTrace();
             log.error("上传信息错误:\r\n错误信息{}\r\n参数{};{}", e.getMessage(), state, clickType);
@@ -197,6 +214,11 @@ public class AdHtmlClickLogServiceImpl extends ServiceImpl<AdHtmlClickLogMapper,
         if(clickType != AdUploadType.ADD_WX) return;
         IqiyiApiUtil.dataBack(IyiqiDataVo.builder().impressId(one.getVid()).eventType(one.getClickType()).build());
     }
+    private void uploadDy(AdHtmlClickLog one, AdUploadType clickType){
+        if(clickType != AdUploadType.ADD_WX && StringUtils.isNotEmpty(one.getBackJson())) return;
+        JSONObject backJson = JSON.parseObject(one.getBackJson());
+        DyApiUtil.dataBack(backJson.getString("clickId"), one.getVid());
+    }
 
     @Override
     public void setLogIqiyi(AdIqiyiClickCallbackVo vo) {
@@ -261,6 +283,13 @@ public class AdHtmlClickLogServiceImpl extends ServiceImpl<AdHtmlClickLogMapper,
         saveLog(key, one, type);
     }
 
+    @Override
+    public void setLogDy(AdDyClickCallbackVo vo) {
+        vo.setClickType(AdUploadType.ADD_WX.getDyType().toString());
+        saveLog(vo, e -> {
+        });
+    }
+
     private <T extends AdBaseClickCallbackVo> void saveLog(T vo, Consumer<AdHtmlClickLog> fun){
         AdSite adSite = adSiteMapper.selectById(vo.getId());
         Integer type = 99;
@@ -322,9 +351,6 @@ public class AdHtmlClickLogServiceImpl extends ServiceImpl<AdHtmlClickLogMapper,
         if(type == 2){
             return AD_LOG_KEY + vid + ":" + type + ":" + clickType.getIqiyiType();
         }
-        if(type == 3){
-            return AD_LOG_KEY + vid + ":" + type + ":" + clickType.getDyType();
-        }
         throw new BaseException("错误类型");
     }
 

+ 6 - 6
fs-service/src/main/java/com/fs/ad/service/impl/AdHtmlTemplateServiceImpl.java

@@ -1,10 +1,10 @@
 package com.fs.ad.service.impl;
 
-import java.util.Arrays;
-import java.util.List;
-
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.ad.domain.AdConfig;
+import com.fs.ad.domain.AdHtmlTemplate;
+import com.fs.ad.mapper.AdHtmlTemplateMapper;
+import com.fs.ad.service.IAdHtmlTemplateService;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.uuid.IdUtils;
 import com.fs.system.domain.SysConfig;
@@ -12,9 +12,9 @@ import com.fs.system.mapper.SysConfigMapper;
 import com.google.gson.Gson;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.fs.ad.mapper.AdHtmlTemplateMapper;
-import com.fs.ad.domain.AdHtmlTemplate;
-import com.fs.ad.service.IAdHtmlTemplateService;
+
+import java.util.Arrays;
+import java.util.List;
 
 /**
  * 广告信息流链接Service业务层处理

+ 6 - 10
fs-service/src/main/java/com/fs/ad/service/impl/AdIqiyiAccountServiceImpl.java

@@ -1,20 +1,16 @@
 package com.fs.ad.service.impl;
 
-import java.util.Collections;
-import java.util.List;
-
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.ad.domain.AdAccount;
-import com.fs.ad.mapper.AdAccountMapper;
+import com.fs.ad.domain.AdIqiyiAccount;
+import com.fs.ad.mapper.AdIqiyiAccountMapper;
 import com.fs.ad.service.IAdAccountService;
+import com.fs.ad.service.IAdIqiyiAccountService;
 import com.fs.common.utils.DateUtils;
 import lombok.AllArgsConstructor;
-import org.checkerframework.checker.units.qual.A;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.fs.ad.mapper.AdIqiyiAccountMapper;
-import com.fs.ad.domain.AdIqiyiAccount;
-import com.fs.ad.service.IAdIqiyiAccountService;
+
+import java.util.List;
 
 /**
  * 爱奇艺广告账号Service业务层处理
@@ -82,7 +78,7 @@ public class AdIqiyiAccountServiceImpl extends ServiceImpl<AdIqiyiAccountMapper,
     {
         adIqiyiAccount.setUpdateTime(DateUtils.getNowDate());
 
-        AdAccount adAccount = adAccountService.selectByLinkId(adIqiyiAccount.getId());
+        AdAccount adAccount = adAccountService.selectByLinkId(2, adIqiyiAccount.getId());
         adAccount.setName(adIqiyiAccount.getAccountName());
         adAccountService.updateById(adAccount);
         return baseMapper.updateAdIqiyiAccount(adIqiyiAccount);

+ 7 - 26
fs-service/src/main/java/com/fs/ad/service/impl/AdSiteServiceImpl.java

@@ -1,35 +1,16 @@
 package com.fs.ad.service.impl;
 
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.function.Function;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-
-import cn.hutool.core.lang.Filter;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.ad.domain.AdDomain;
-import com.fs.ad.domain.AdIqiyiAccount;
-import com.fs.ad.domain.AdYoukuAccount;
-import com.fs.ad.mapper.AdIqiyiAccountMapper;
-import com.fs.ad.mapper.AdYoukuAccountMapper;
+import com.fs.ad.domain.AdSite;
+import com.fs.ad.mapper.AdSiteMapper;
 import com.fs.ad.service.IAdDomainService;
-import com.fs.ad.service.IAdIqiyiAccountService;
-import com.fs.ad.service.IAdYoukuAccountService;
-import com.fs.baidu.domain.BdAccount;
-import com.fs.baidu.mapper.BdAccountMapper;
-import com.fs.baidu.service.IBdAccountService;
-import com.fs.common.core.domain.BaseEntityTow;
+import com.fs.ad.service.IAdSiteService;
 import com.fs.common.utils.DateUtils;
-import com.fs.common.utils.PubFun;
 import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.fs.ad.mapper.AdSiteMapper;
-import com.fs.ad.domain.AdSite;
-import com.fs.ad.service.IAdSiteService;
+
+import java.util.List;
 
 /**
  * 站点管理Service业务层处理
@@ -79,7 +60,7 @@ public class AdSiteServiceImpl extends ServiceImpl<AdSiteMapper, AdSite> impleme
         adSite.setCreateTime(DateUtils.getNowDate());
         int insert = baseMapper.insert(adSite);
         AdDomain domain = adDomainService.getById(adSite.getDomainId());
-        adSite.setUrl("https://" + domain.getDomain() + "/#/?tid=" + adSite.getId());
+        adSite.setUrl("https://" + domain.getDomain() + "/?tid=" + adSite.getId());
         baseMapper.updateById(adSite);
         return insert;
     }
@@ -94,7 +75,7 @@ public class AdSiteServiceImpl extends ServiceImpl<AdSiteMapper, AdSite> impleme
     public int updateAdSite(AdSite adSite)
     {
         adSite.setUpdateTime(DateUtils.getNowDate());
-        return baseMapper.updateAdSite(adSite);
+        return baseMapper.updateById(adSite);
     }
 
     /**

+ 90 - 0
fs-service/src/main/java/com/fs/ad/service/impl/AdUploadLogServiceImpl.java

@@ -0,0 +1,90 @@
+package com.fs.ad.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.ad.domain.AdUploadLog;
+import com.fs.ad.mapper.AdUploadLogMapper;
+import com.fs.ad.service.IAdUploadLogService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 百度回传日志Service业务层处理
+ * 
+ * @author fs
+ * @date 2025-03-14
+ */
+@Service
+public class AdUploadLogServiceImpl extends ServiceImpl<AdUploadLogMapper, AdUploadLog> implements IAdUploadLogService {
+
+    /**
+     * 查询百度回传日志
+     * 
+     * @param id 百度回传日志主键
+     * @return 百度回传日志
+     */
+    @Override
+    public AdUploadLog selectAdUploadLogById(Long id)
+    {
+        return baseMapper.selectAdUploadLogById(id);
+    }
+
+    /**
+     * 查询百度回传日志列表
+     * 
+     * @param adUploadLog 百度回传日志
+     * @return 百度回传日志
+     */
+    @Override
+    public List<AdUploadLog> selectAdUploadLogList(AdUploadLog adUploadLog){
+        return baseMapper.selectAdUploadLogList(adUploadLog);
+    }
+
+    /**
+     * 新增百度回传日志
+     * 
+     * @param adUploadLog 百度回传日志
+     * @return 结果
+     */
+    @Override
+    public int insertAdUploadLog(AdUploadLog adUploadLog)
+    {
+        return baseMapper.insertAdUploadLog(adUploadLog);
+    }
+
+    /**
+     * 修改百度回传日志
+     * 
+     * @param adUploadLog 百度回传日志
+     * @return 结果
+     */
+    @Override
+    public int updateAdUploadLog(AdUploadLog adUploadLog)
+    {
+        return baseMapper.updateAdUploadLog(adUploadLog);
+    }
+
+    /**
+     * 批量删除百度回传日志
+     * 
+     * @param ids 需要删除的百度回传日志主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAdUploadLogByIds(Long[] ids)
+    {
+        return baseMapper.deleteAdUploadLogByIds(ids);
+    }
+
+    /**
+     * 删除百度回传日志信息
+     * 
+     * @param id 百度回传日志主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAdUploadLogById(Long id)
+    {
+        return baseMapper.deleteAdUploadLogById(id);
+    }
+}

+ 6 - 8
fs-service/src/main/java/com/fs/ad/service/impl/AdYoukuAccountServiceImpl.java

@@ -1,18 +1,16 @@
 package com.fs.ad.service.impl;
 
-import java.util.Collections;
-import java.util.List;
-
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.ad.domain.AdAccount;
+import com.fs.ad.domain.AdYoukuAccount;
+import com.fs.ad.mapper.AdYoukuAccountMapper;
 import com.fs.ad.service.IAdAccountService;
+import com.fs.ad.service.IAdYoukuAccountService;
 import com.fs.common.utils.DateUtils;
 import lombok.AllArgsConstructor;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.fs.ad.mapper.AdYoukuAccountMapper;
-import com.fs.ad.domain.AdYoukuAccount;
-import com.fs.ad.service.IAdYoukuAccountService;
+
+import java.util.List;
 
 /**
  * 优酷广告账号Service业务层处理
@@ -77,7 +75,7 @@ public class AdYoukuAccountServiceImpl extends ServiceImpl<AdYoukuAccountMapper,
     public int updateAdYoukuAccount(AdYoukuAccount adYoukuAccount)
     {
         adYoukuAccount.setUpdateTime(DateUtils.getNowDate());
-        AdAccount adAccount = adAccountService.selectByLinkId(adYoukuAccount.getId());
+        AdAccount adAccount = adAccountService.selectByLinkId(1, adYoukuAccount.getId());
         adAccount.setName(adYoukuAccount.getAccountName());
         adAccountService.updateById(adAccount);
         return baseMapper.updateAdYoukuAccount(adYoukuAccount);

+ 91 - 0
fs-service/src/main/java/com/fs/ad/service/impl/BdCreativeStatisticsServiceImpl.java

@@ -0,0 +1,91 @@
+package com.fs.ad.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.ad.domain.BdCreativeStatistics;
+import com.fs.ad.mapper.BdCreativeStatisticsMapper;
+import com.fs.ad.service.IBdCreativeStatisticsService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 百度创意统计Service业务层处理
+ * 
+ * @author fs
+ * @date 2025-03-14
+ */
+@Service
+public class BdCreativeStatisticsServiceImpl extends ServiceImpl<BdCreativeStatisticsMapper, BdCreativeStatistics> implements IBdCreativeStatisticsService {
+
+    /**
+     * 查询百度创意统计
+     * 
+     * @param id 百度创意统计主键
+     * @return 百度创意统计
+     */
+    @Override
+    public BdCreativeStatistics selectBdCreativeStatisticsById(Long id)
+    {
+        return baseMapper.selectBdCreativeStatisticsById(id);
+    }
+
+    /**
+     * 查询百度创意统计列表
+     * 
+     * @param bdCreativeStatistics 百度创意统计
+     * @return 百度创意统计
+     */
+    @Override
+    public List<BdCreativeStatistics> selectBdCreativeStatisticsList(BdCreativeStatistics bdCreativeStatistics)
+    {
+        return baseMapper.selectBdCreativeStatisticsList(bdCreativeStatistics);
+    }
+
+    /**
+     * 新增百度创意统计
+     * 
+     * @param bdCreativeStatistics 百度创意统计
+     * @return 结果
+     */
+    @Override
+    public int insertBdCreativeStatistics(BdCreativeStatistics bdCreativeStatistics)
+    {
+        return baseMapper.insertBdCreativeStatistics(bdCreativeStatistics);
+    }
+
+    /**
+     * 修改百度创意统计
+     * 
+     * @param bdCreativeStatistics 百度创意统计
+     * @return 结果
+     */
+    @Override
+    public int updateBdCreativeStatistics(BdCreativeStatistics bdCreativeStatistics)
+    {
+        return baseMapper.updateBdCreativeStatistics(bdCreativeStatistics);
+    }
+
+    /**
+     * 批量删除百度创意统计
+     * 
+     * @param ids 需要删除的百度创意统计主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBdCreativeStatisticsByIds(Long[] ids)
+    {
+        return baseMapper.deleteBdCreativeStatisticsByIds(ids);
+    }
+
+    /**
+     * 删除百度创意统计信息
+     * 
+     * @param id 百度创意统计主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBdCreativeStatisticsById(Long id)
+    {
+        return baseMapper.deleteBdCreativeStatisticsById(id);
+    }
+}

+ 135 - 0
fs-service/src/main/java/com/fs/ad/service/impl/BdReportDataServiceImpl.java

@@ -0,0 +1,135 @@
+package com.fs.ad.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.ad.domain.BdReportData;
+import com.fs.ad.mapper.BdReportDataMapper;
+import com.fs.ad.service.IBdReportDataService;
+import com.fs.baidu.api.BaiduApis;
+import com.fs.baidu.domain.BdAccount;
+import com.fs.baidu.enums.BdTimeUnit;
+import com.fs.baidu.param.QueryReportDataParam;
+import com.fs.baidu.service.IBdAccountService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 百度定向统计Service业务层处理
+ * 
+ * @author fs
+ * @date 2025-03-13
+ */
+@Service
+@AllArgsConstructor
+public class BdReportDataServiceImpl extends ServiceImpl<BdReportDataMapper, BdReportData> implements IBdReportDataService {
+
+    private final BaiduApis baiduApis;
+    private final IBdAccountService bdAccountService;
+
+    /**
+     * 查询百度定向统计
+     * 
+     * @param id 百度定向统计主键
+     * @return 百度定向统计
+     */
+    @Override
+    public BdReportData selectBdReportDataById(Long id)
+    {
+        return baseMapper.selectBdReportDataById(id);
+    }
+
+    /**
+     * 查询百度定向统计列表
+     * 
+     * @param bdReportData 百度定向统计
+     * @return 百度定向统计
+     */
+    @Override
+    public List<BdReportData> selectBdReportDataList(BdReportData bdReportData)
+    {
+        return baseMapper.selectBdReportDataList(bdReportData);
+    }
+
+    /**
+     * 新增百度定向统计
+     * 
+     * @param bdReportData 百度定向统计
+     * @return 结果
+     */
+    @Override
+    public int insertBdReportData(BdReportData bdReportData)
+    {
+        return baseMapper.insertBdReportData(bdReportData);
+    }
+
+    /**
+     * 修改百度定向统计
+     * 
+     * @param bdReportData 百度定向统计
+     * @return 结果
+     */
+    @Override
+    public int updateBdReportData(BdReportData bdReportData)
+    {
+        return baseMapper.updateBdReportData(bdReportData);
+    }
+
+    /**
+     * 批量删除百度定向统计
+     * 
+     * @param ids 需要删除的百度定向统计主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBdReportDataByIds(Long[] ids)
+    {
+        return baseMapper.deleteBdReportDataByIds(ids);
+    }
+
+    /**
+     * 删除百度定向统计信息
+     * 
+     * @param id 百度定向统计主键
+     * @return 结果
+     */
+    @Override
+    public int deleteBdReportDataById(Long id)
+    {
+        return baseMapper.deleteBdReportDataById(id);
+    }
+
+    @Override
+    public void syncReportData(LocalDate time) {
+        List<Integer> typeList = Arrays.asList(2324048, 2503330, 2510393, 2532512);
+        List<BdAccount> list = bdAccountService.list();
+        typeList.forEach(type->{
+            QueryReportDataParam param = new QueryReportDataParam();
+            param.setReportType(type);
+            param.setStartDate(time);
+            param.setEndDate(time);
+            param.setPage(0);
+            param.setRowCount(200);
+            param.setStartRow(0);
+            param.setTimeUnit(BdTimeUnit.DAY);
+            list.forEach(account -> {
+                baiduApis.getReportDataAll(account, param);
+            });
+        });
+    }
+
+    public void syncCreativeStatistics(LocalDate time) {
+        List<BdAccount> list = bdAccountService.list();
+        QueryReportDataParam param = new QueryReportDataParam();
+        param.setReportType(2094816);
+        param.setStartDate(time);
+        param.setEndDate(time);
+        param.setPage(0);
+        param.setRowCount(200);
+        param.setStartRow(0);
+        param.setTimeUnit(BdTimeUnit.DAY);
+        list.forEach(account -> baiduApis.getCreativeStatisticsAll(account, param));
+    }
+}

+ 15 - 0
fs-service/src/main/java/com/fs/ad/vo/DyAuthorizedVo.java

@@ -0,0 +1,15 @@
+package com.fs.ad.vo;
+
+import lombok.Data;
+
+@Data
+public class DyAuthorizedVo {
+
+    private String uid;
+    private String app_id;
+    private String material_auth_status;
+    private String state;
+    private String auth_code;
+    private String scope;
+
+}

+ 0 - 1
fs-service/src/main/java/com/fs/ad/yk/vo/DataBackVo.java

@@ -4,7 +4,6 @@ import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import org.checkerframework.checker.units.qual.A;
 
 @Data
 @Builder

+ 151 - 19
fs-service/src/main/java/com/fs/baidu/api/BaiduApis.java

@@ -3,28 +3,33 @@ package com.fs.baidu.api;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.ad.domain.AdHtmlClickLog;
+import com.fs.ad.domain.BdCreativeStatistics;
+import com.fs.ad.domain.BdReportData;
 import com.fs.ad.mapper.AdHtmlClickLogMapper;
-import com.fs.baidu.domain.BdAccount;
-import com.fs.baidu.domain.BdCreative;
-import com.fs.baidu.domain.BdPlan;
-import com.fs.baidu.domain.BdUnit;
+import com.fs.ad.mapper.BdReportDataMapper;
+import com.fs.ad.service.IBdCreativeStatisticsService;
+import com.fs.ad.service.IBdReportDataService;
+import com.fs.baidu.domain.*;
 import com.fs.baidu.param.*;
-import com.fs.baidu.service.IBdAccountService;
-import com.fs.baidu.service.IBdCreativeService;
-import com.fs.baidu.service.IBdPlanService;
-import com.fs.baidu.service.IBdUnitService;
+import com.fs.baidu.service.*;
 import com.fs.baidu.utils.BdApiRequest;
 import com.fs.baidu.vo.*;
 import com.fs.common.core.domain.R;
 import com.fs.common.utils.PubFun;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.function.Function;
+import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -37,7 +42,10 @@ public class BaiduApis {
     private final IBdPlanService planService;
     private final IBdCreativeService creativeService;
     private final IBdUnitService unitService;
+    public final IBdApiService apiService;
     private final AdHtmlClickLogMapper adHtmlClickLogMapper;
+    private final BdReportDataMapper bdReportDataMapper;
+    private final IBdCreativeStatisticsService bdCreativeStatisticsService;
 
     /**
      * 查询账户列表
@@ -224,11 +232,117 @@ public class BaiduApis {
 
 
 
-    public R getReportData(BdAccount account, QueryReportDataParam params){
+    public void getReportDataAll(BdAccount account, QueryReportDataParam paramData){
+        Supplier<Integer> getType = () -> {
+            if(paramData.getReportType() == 2324048) return 0;
+            if(paramData.getReportType() == 2503330) return 1;
+            if(paramData.getReportType() == 2510393) return 2;
+            if(paramData.getReportType() == 2532512) return 3;
+            if(paramData.getReportType() == 2094816) return 4;
+            return 99;
+        };
+        List<ReportDataVo> allData = new ArrayList<>();
+        BdApi byId = apiService.getById(account.getApiId());
+        boolean data = true;
+        String dataJson = JSON.toJSONString(paramData);
+        for (int page = 1 ; data ; page++) {
+            QueryReportDataParam params = JSON.parseObject(dataJson, QueryReportDataParam.class);
+            // 设置分页参数
+            params.setPage(page);
+            R result = getReportData(byId.getAccessToken(), account.getAccountName(), params);
+            // 处理第一次请求时获取总行数
+            List<ReportDataVo> list = (List<ReportDataVo>) result.get("data");
+            if(!list.isEmpty()){
+                list.forEach(e -> e.setType(getType.get()));
+                allData.addAll(list);
+            }
+            data = list.size() == paramData.getRowCount();
+        }
+        List<BdReportData> collect = allData.stream().map(e -> {
+            BdReportData bdReportData = new BdReportData();
+            bdReportData.setType(e.getType());
+            bdReportData.setDate(LocalDate.now());
+            bdReportData.setUserName(e.getUserName());
+            bdReportData.setUserId(e.getUserId());
+            bdReportData.setCampaignId(e.getCampaignId());
+            bdReportData.setCampaignName(e.getCampaignName());
+            if(e.getCampaignStatus() != null){
+                bdReportData.setCampaignStatus(e.getCampaignStatus().getCode());
+                bdReportData.setCampaignNameStatus(e.getCampaignStatus().getCode());
+            }
+            bdReportData.setAdGroupId(e.getAdGroupId());
+            bdReportData.setAdGroupName(e.getAdGroupName());
+            if(e.getAdGroupStatus() != null){
+                bdReportData.setAdGroupStatus(e.getAdGroupStatus().getCode());
+            }
+            bdReportData.setAdGroupNameStatus(e.getAdGroupNameStatus());
+            if(e.getProv() != null){
+                bdReportData.setProvinceId(Long.parseLong(e.getProv().getProvinceId()));
+                bdReportData.setProvinceName(e.getProv().getProvinceName());
+            }
+            bdReportData.setGenderName(e.getGenderName());
+            bdReportData.setAge(e.getAgeName());
+            bdReportData.setShowWord(e.getShowWord());
+            bdReportData.setFeedWord(e.getFeedWord());
+
+            bdReportData.setImpression(e.getImpression());
+            bdReportData.setClick(e.getClick());
+            bdReportData.setCost(e.getCost());
+            bdReportData.setCtr(e.getCtr());
+            bdReportData.setCpc(e.getCpc());
+            bdReportData.setCpm(e.getCpm());
+            return bdReportData;
+        }).collect(Collectors.toList());
+        collect.parallelStream().forEach(bdReportDataMapper::insert);
+    }
+
+    public void getCreativeStatisticsAll(BdAccount account, QueryReportDataParam params){
+        params.setColumns(Arrays.asList("date", "userId", "userName", "campaignNameStatus", "adGroupNameStatus", "ideaInfo", "ideaNameStatus", "feedSubjectEnum", "impression", "click", "cost", "ctr", "cpc", "cpm", "iaaCost", "iaaPayRoi", "phoneButtonClicks", "interaction"));
+        BdApi byId = apiService.getById(account.getApiId());
+        String url = "https://api.baidu.com/json/sms/service/OpenApiReportService/getReportData";
+        if(params.getPage() != null && params.getRowCount() != null){
+            params.setStartRow(params.getPage() * params.getRowCount());
+        }
+        String resultStr = request.requestToken(url, byId.getAccessToken(), account.getAccountName(), params);
+        JSONObject data = JSON.parseObject(resultStr).getJSONArray("data").getJSONObject(0);
+        Integer total = data.getInteger("totalRowCount");
+        List<ReportVO> list = data.getJSONArray("rows").toJavaList(ReportVO.class);
+        List<BdCreativeStatistics> collect = list.parallelStream().map(e -> {
+            BdCreativeStatistics entity = new BdCreativeStatistics();
+            entity.setDate(e.getDate());
+            entity.setUserId(e.getUserId());
+            entity.setUserName(e.getUserName());
+            entity.setCampaignNameStatus(e.getCampaignNameStatus());
+            entity.setAdGroupNameStatus(e.getAdGroupNameStatus());
+            entity.setIdeaInfo(e.getIdeaInfo());
+            entity.setIdeaNameStatus(e.getIdeaNameStatus());
+            if(e.getFeedSubjectEnum() != null){
+                entity.setFeedSubjectEnum(e.getFeedSubjectEnum().getValue());
+            }
+            entity.setImpression(e.getImpression());
+            entity.setClick(e.getClick());
+            entity.setCost(e.getCost());
+            entity.setCtr(e.getCtr());
+            entity.setCpc(e.getCpc());
+            entity.setCpm(e.getCpm());
+            entity.setIaaCost(e.getIaaCost());
+            entity.setIaaPayRoi(e.getIaaPayRoi());
+            entity.setPhoneButtonClicks(e.getPhoneButtonClicks());
+            entity.setInteraction(e.getInteraction());
+            return entity;
+        }).collect(Collectors.toList());
+        boolean b = bdCreativeStatisticsService.saveBatch(collect);
+        log.info("是否添加成功:{}", b);
+
+    }
+
+
+
+    public R getReportData(String token, String name, QueryReportDataParam params){
         String url = "https://api.baidu.com/json/sms/service/OpenApiReportService/getReportData";
         if(params.getReportType() == 2324048){
             params.getColumns().add("prov");
-            params.getColumns().add("city");
+//            params.getColumns().add("city");
         }
         if(params.getReportType() == 2503330){
             params.getColumns().add("genderName");
@@ -240,10 +354,22 @@ public class BaiduApis {
             params.getColumns().add("showWord");
             params.getColumns().add("feedWord");
         }
+        if(params.getReportType() == 114718){
+            params.getColumns().add("ideaId");
+            params.getColumns().add("videoId");
+            params.getColumns().add("videoNameStatus");
+            params.getColumns().add("videoInfo");
+            params.getColumns().add("ideaNameStatus");
+        }
+        if(params.getReportType() == 2094817){
+            params.getColumns().add("imageUrl");
+            params.getColumns().add("imageId");
+            params.getColumns().add("ideaNameStatus");
+        }
         if(params.getPage() != null && params.getRowCount() != null){
-            params.setStartRow(params.getPage() * params.getRowCount());
+            params.setStartRow((params.getPage() - 1) * params.getRowCount());
         }
-        String resultStr = request.request(url, account.getApiId(), account.getAccountName(), params);
+        String resultStr = request.requestToken(url, token, name, params);
         JSONObject data = JSON.parseObject(resultStr).getJSONArray("data").getJSONObject(0);
         Integer total = data.getInteger("totalRowCount");
         List<ReportDataVo> list = data.getJSONArray("rows").toJavaList(ReportDataVo.class);
@@ -261,18 +387,24 @@ public class BaiduApis {
                 if(e.getCtr() != null){
                     e.setCtr(e.getCtr().setScale(4, RoundingMode.HALF_UP));
                 }
+                if(e.getWeixinFollowSuccessConversionsCost() != null){
+                    e.setWeixinFollowSuccessConversionsCost(e.getWeixinFollowSuccessConversionsCost().setScale(2, RoundingMode.HALF_UP));
+                }
+                if(e.getFeedOCPCConversionsDetail133Cost() != null){
+                    e.setFeedOCPCConversionsDetail133Cost(e.getFeedOCPCConversionsDetail133Cost().setScale(2, RoundingMode.HALF_UP));
+                }
             });
             list.stream().filter(e -> e.getCtr().doubleValue() > 0).forEach(e -> {
                 e.setCtr(e.getCtr().multiply(BigDecimal.valueOf(100)));
             });
         }
-        if(!list.isEmpty()){
-            List<Long> uidList = PubFun.listToNewList(list, ReportDataVo::getAdGroupId);
-            List<AdHtmlClickLog> logList = adHtmlClickLogMapper.staticData(uidList);
-            if(!logList.isEmpty()){
-
-            }
-        }
+//        if(!list.isEmpty()){
+//            List<Long> uidList = PubFun.listToNewList(list, ReportDataVo::getAdGroupId);
+//            List<AdHtmlClickLog> logList = adHtmlClickLogMapper.staticData(uidList);
+//            if(!logList.isEmpty()){
+//
+//            }
+//        }
         return R.ok().put("data", list).put("total", total);
     }
 

+ 12 - 8
fs-service/src/main/java/com/fs/baidu/param/QueryReportDataParam.java

@@ -21,14 +21,18 @@ public class QueryReportDataParam {
             "date",           // 时间
             "userName",       // 账户
             "userId",         // 账户ID
-            "campaignId",     // 推广计划ID
-            "campaignName",   // 推广计划名称
-            "campaignStatus", // 推广计划状态(枚举)
-            "campaignNameStatus", // 推广计划名称状态(含删除标记)
-            "adGroupId",      // 推广单元ID
-            "adGroupName",    // 推广单元名称
-            "adGroupStatus",  // 推广单元状态(枚举)
-            "adGroupNameStatus", // 推广单元名称状态(含删除标记)
+            "weixinFollowSuccessConversions",         // 账户ID
+            "weixinFollowSuccessConversionsCost",         // 账户ID
+            "feedOCPCConversionsDetail133",         // 账户ID
+            "feedOCPCConversionsDetail133Cost",         // 账户ID
+//            "campaignId",     // 推广计划ID
+//            "campaignName",   // 推广计划名称
+//            "campaignStatus", // 推广计划状态(枚举)
+//            "campaignNameStatus", // 推广计划名称状态(含删除标记)
+//            "adGroupId",      // 推广单元ID
+//            "adGroupName",    // 推广单元名称
+//            "adGroupStatus",  // 推广单元状态(枚举)
+//            "adGroupNameStatus", // 推广单元名称状态(含删除标记)
             "impression",     // 展现
             "click",          // 点击
             "cost",           // 消费

+ 1 - 5
fs-service/src/main/java/com/fs/baidu/service/impl/BdAccountServiceImpl.java

@@ -82,16 +82,12 @@ public class BdAccountServiceImpl extends ServiceImpl<BdAccountMapper, BdAccount
     @Override
     public List<BdAccount> selectBdAccountList(BdAccount bdAccount){
         List<BdAccount> list = baseMapper.selectBdAccountList(bdAccount);
-        if(list.isEmpty()) return list;
         List<Long> longs = PubFun.listToNewList(list, BdAccount::getAccountId);
         List<BdPlan> planList = bdPlanService.list(new QueryWrapper<BdPlan>().in("account_id", longs));
-        if(planList.isEmpty()) return list;
         Map<Long, Long> planMap = PubFun.listToMapByGroupCount(planList, BdPlan::getAccountId);
         List<BdUnit> unitList = bdUnitService.list(new QueryWrapper<BdUnit>().in("account_id", longs));
-        if(unitList.isEmpty()) return list;
         Map<Long, Long> unitMap = PubFun.listToMapByGroupCount(unitList, BdUnit::getAccountId);
         List<BdCreative> creativeList = bdCreativeService.list(new QueryWrapper<BdCreative>().in("account_id", longs));
-        if(creativeList.isEmpty()) return list;
         Map<Long, Long> creativeMap = PubFun.listToMapByGroupCount(creativeList, BdCreative::getAccountId);
         list.stream().filter(e -> e.getAccountId() != null).forEach(e -> {
             e.setPlanCount(planMap.getOrDefault(e.getAccountId(), 0L));
@@ -130,7 +126,7 @@ public class BdAccountServiceImpl extends ServiceImpl<BdAccountMapper, BdAccount
     public int updateBdAccount(BdAccount bdAccount)
     {
         bdAccount.setUpdateTime(DateUtils.getNowDate());
-        AdAccount adAccount = adAccountService.selectByLinkId(bdAccount.getId());
+        AdAccount adAccount = adAccountService.selectByLinkId(0, bdAccount.getId());
         adAccount.setName(bdAccount.getAccountName());
         adAccountService.updateById(adAccount);
         return baseMapper.updateById(bdAccount);

+ 5 - 1
fs-service/src/main/java/com/fs/baidu/utils/BdApiRequest.java

@@ -25,9 +25,13 @@ public class BdApiRequest {
 
     public <T> String request(String url, Long apiId, String userName, T body){
         BdApi api = apiService.getById(apiId);
+        return requestToken(url, api.getAccessToken(), userName, body);
+    }
+
+    public <T> String requestToken(String url, String accToken, String userName, T body){
         Map<String, String> header = new HashMap<>();
         header.put("userName", userName);
-        header.put("accessToken", api.getAccessToken());
+        header.put("accessToken", accToken);
         BdRequestParam<T> build = BdRequestParam.<T>builder().body(body).header(header).build();
         String json = JSON.toJSONString(build);
         HttpRequest request = HttpUtil.createPost(url).body(json);

+ 25 - 0
fs-service/src/main/java/com/fs/baidu/vo/ReportDataVo.java

@@ -12,6 +12,7 @@ import java.util.Date;
 @Data
 public class ReportDataVo {
     // 基础字段
+    private Integer type; // 根据时间单位可能需要调整格式(如String或LocalDateTime)
     private String date; // 根据时间单位可能需要调整格式(如String或LocalDateTime)
 
     private String userName;
@@ -31,6 +32,20 @@ public class ReportDataVo {
     private Long adGroupId;
 
     private String adGroupName;
+    // 创意ID
+    private String ideaId;
+    // 视频ID
+    private String videoId;
+    // 视屏名称
+    private String videoNameStatus;
+    // 视频信息
+    private VideoInfo videoInfo;
+    // 图片地址
+    private String imageUrl;
+    // 图片ID
+    private String imageId;
+    // 创意名称
+    private String ideaNameStatus;
 
     private AdGroupStatusEnum adGroupStatus;
 
@@ -61,6 +76,10 @@ public class ReportDataVo {
     private BigDecimal cpc;
 
     private BigDecimal cpm;
+    private Integer weixinFollowSuccessConversions;
+    private BigDecimal weixinFollowSuccessConversionsCost;
+    private Integer feedOCPCConversionsDetail133;
+    private BigDecimal feedOCPCConversionsDetail133Cost;
 
     // --- 嵌套对象定义 ---
     @Data
@@ -105,5 +124,11 @@ public class ReportDataVo {
         AdGroupStatusEnum(int code) { this.code = code; }
     }
 
+    @Data
+    public static class VideoInfo{
+        private String videoThumbnail;
+        private String videoURL;
+    }
+
     // --- Getters & Setters(此处省略,实际需生成)---
 }

+ 150 - 0
fs-service/src/main/java/com/fs/baidu/vo/ReportVO.java

@@ -0,0 +1,150 @@
+package com.fs.baidu.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.Date;
+
+@Data
+public class ReportVO {
+
+    // ------------------------ 属性-属性数据 ------------------------
+
+    /** 日期,格式示例:DAY: 2021-03-31;HOUR: 2021-03-31 23:00;WEEK/MONTH/SUMMARY: 2021-03-01至2021-03-31 */
+    private LocalDate date;
+
+    /** 账户ID */
+    private Long userId;
+
+    /** 账户名称 */
+    private String userName;
+
+    /** 推广计划(含已删除标记,如“推广计划[已删除]”) */
+    private String campaignNameStatus;
+
+    /** 推广单元(含已删除标记,如“推广单元[已删除]”) */
+    private String adGroupNameStatus;
+
+    /** 创意组合信息(嵌套结构) */
+    private String ideaInfo;
+
+    /** 创意名称(含已删除标记,如“创意名称[已删除]”) */
+    private String ideaNameStatus;
+
+    /** Feed主题类型,枚举:0-全部,1-网站链接,10-百家号推广... */
+    private FeedSubjectEnum feedSubjectEnum;
+
+    // ------------------------ 效果指标-基础指标 ------------------------
+
+    /** 展现次数 */
+    private Long impression;
+
+    /** 点击次数 */
+    private Long click;
+
+    /** 消费金额 */
+    private BigDecimal cost;
+
+    /** 点击率 */
+    private BigDecimal ctr;
+
+    /** 平均点击价格 */
+    private BigDecimal cpc;
+
+    /** 千次展现消费 */
+    private BigDecimal cpm;
+
+    /** IAA广告变现LTV */
+    private BigDecimal iaaCost;
+
+    /** IAA广告变现ROI */
+    private BigDecimal iaaPayRoi;
+
+    /** 组件点击次数(创意按钮点击) */
+    private Long phoneButtonClicks;
+
+    /** 互动次数(视频广告含播放互动) */
+    private Long interaction;
+
+    // ------------------------ 枚举定义 ------------------------
+
+    /** 是否共服枚举 */
+    public enum OrgIsMultiServed {
+        NO(0, "否"),
+        YES(1, "是");
+
+        private final Integer key;
+        private final String value;
+
+        OrgIsMultiServed(Integer key, String value) {
+            this.key = key;
+            this.value = value;
+        }
+
+        public static OrgIsMultiServed fromKey(Integer key) {
+            for (OrgIsMultiServed e : values()) {
+                if (e.key.equals(key)) return e;
+            }
+            return null;
+        }
+    }
+
+    /** 是否内部账户枚举 */
+    public enum UcIsInner {
+        NO(0, "否"),
+        YES(1, "是");
+
+        private final Integer key;
+        private final String value;
+
+        UcIsInner(Integer key, String value) {
+            this.key = key;
+            this.value = value;
+        }
+
+        public static UcIsInner fromKey(Integer key) {
+            for (UcIsInner e : values()) {
+                if (e.key.equals(key)) return e;
+            }
+            return null;
+        }
+    }
+
+    /** Feed主题枚举 */
+    public enum FeedSubjectEnum {
+        ALL(0, "全部"),
+        WEBSITE(1, "网站链接"),
+        BAIJIA_HAO(10, "百家号推广"),
+        IOS_APP(2, "应用推广(iOS)"),
+        ANDROID_APP(3, "应用推广(Android)"),
+        MINI_PROGRAM(4, "小程序"),
+        PRODUCT_CATALOG(5, "商品目录"),
+        STORE(6, "门店推广"),
+        ECOMMERCE(7, "电商店铺"),
+        SALES_LEAD(8, "销售线索"),
+        APP_LAUNCH(9, "应用推广(应用调起)");
+
+        private final Integer key;
+        private final String value;
+
+        FeedSubjectEnum(Integer key, String value) {
+            this.key = key;
+            this.value = value;
+        }
+
+        public static FeedSubjectEnum fromKey(Integer key) {
+            for (FeedSubjectEnum e : values()) {
+                if (e.key.equals(key)) return e;
+            }
+            return null;
+        }
+
+        public String getValue() {
+            return value;
+        }
+    }
+
+    // ------------------------ 组合列嵌套类 ------------------------
+
+}

+ 11 - 0
fs-service/src/main/java/com/fs/baidu/vo/ad/AdDyClickCallbackVo.java

@@ -0,0 +1,11 @@
+package com.fs.baidu.vo.ad;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class AdDyClickCallbackVo extends AdBaseClickCallbackVo {
+    private String clickId;
+    private String creativeId;
+}

+ 3 - 0
fs-service/src/main/java/com/fs/sop/domain/QwSopTemp.java

@@ -8,6 +8,7 @@ import com.fs.common.annotation.Excel;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.time.LocalTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -69,6 +70,8 @@ public class QwSopTemp implements Serializable
     @TableField(exist = false)
     private List<QwSopTempDay> list = new ArrayList<>();
     @TableField(exist = false)
+    private LocalTime time;
+    @TableField(exist = false)
     private boolean cuoser;
     @TableField(exist = false)
     private List<String> timeList;

+ 5 - 3
fs-service/src/main/java/com/fs/sop/service/impl/QwSopTempServiceImpl.java

@@ -359,6 +359,9 @@ public class QwSopTempServiceImpl implements IQwSopTempService
 
     @Override
     public void createSopTempRules(QwSopTemp temp) {
+        if(temp.getTime() == null){
+            return;
+        }
         FsUserCourse fsUserCourse = fsUserCourseMapper.selectFsUserCourseByCourseId(temp.getCourseId());
         temp.setProject(fsUserCourse.getProject());
         qwSopTempMapper.updateQwSopTemp(temp);
@@ -377,10 +380,9 @@ public class QwSopTempServiceImpl implements IQwSopTempService
                 timeList = JSON.parseArray(JSON.toJSONString(temp.getTimeList()), String.class);
             }
             DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm");
-            if(e.getViewStartTime() == null){
-                e.setViewStartTime(LocalTime.of(9, 0));
+            if(temp.getTime() != null){
+                timeList.add(0, temp.getTime().format(formatter));
             }
-            timeList.add(0, e.getViewStartTime().format(formatter));
             AtomicInteger sorts = new AtomicInteger(0);
             List<QwSopTempRules> rulesList = timeList.stream().map(time -> {
                 QwSopTempRules rules = new QwSopTempRules();

+ 96 - 0
fs-service/src/main/resources/mapper/ad/AdDyAccountMapper.xml

@@ -0,0 +1,96 @@
+<?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="com.fs.ad.mapper.AdDyAccountMapper">
+    
+    <resultMap type="AdDyAccount" id="AdDyAccountResult">
+        <result property="id"    column="id"    />
+        <result property="advertiserId"    column="advertiser_id"    />
+        <result property="accountStringId"    column="account_string_id"    />
+        <result property="advertiserName"    column="advertiser_name"    />
+        <result property="isValid"    column="is_valid"    />
+        <result property="accountRole"    column="account_role"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectAdDyAccountVo">
+        select id, advertiser_id, account_string_id, advertiser_name, is_valid, account_role, create_time, create_by, update_by, update_time, remark from ad_dy_account
+    </sql>
+
+    <select id="selectAdDyAccountList" parameterType="AdDyAccount" resultMap="AdDyAccountResult">
+        <include refid="selectAdDyAccountVo"/>
+        <where>  
+            <if test="advertiserId != null "> and advertiser_id = #{advertiserId}</if>
+            <if test="accountStringId != null  and accountStringId != ''"> and account_string_id = #{accountStringId}</if>
+            <if test="advertiserName != null  and advertiserName != ''"> and advertiser_name like concat('%', #{advertiserName}, '%')</if>
+            <if test="isValid != null "> and is_valid = #{isValid}</if>
+            <if test="accountRole != null  and accountRole != ''"> and account_role = #{accountRole}</if>
+        </where>
+    </select>
+    
+    <select id="selectAdDyAccountById" parameterType="Long" resultMap="AdDyAccountResult">
+        <include refid="selectAdDyAccountVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertAdDyAccount" parameterType="AdDyAccount" useGeneratedKeys="true" keyProperty="id">
+        insert into ad_dy_account
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="advertiserId != null">advertiser_id,</if>
+            <if test="accountStringId != null">account_string_id,</if>
+            <if test="advertiserName != null">advertiser_name,</if>
+            <if test="isValid != null">is_valid,</if>
+            <if test="accountRole != null">account_role,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="advertiserId != null">#{advertiserId},</if>
+            <if test="accountStringId != null">#{accountStringId},</if>
+            <if test="advertiserName != null">#{advertiserName},</if>
+            <if test="isValid != null">#{isValid},</if>
+            <if test="accountRole != null">#{accountRole},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateAdDyAccount" parameterType="AdDyAccount">
+        update ad_dy_account
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="advertiserId != null">advertiser_id = #{advertiserId},</if>
+            <if test="accountStringId != null">account_string_id = #{accountStringId},</if>
+            <if test="advertiserName != null">advertiser_name = #{advertiserName},</if>
+            <if test="isValid != null">is_valid = #{isValid},</if>
+            <if test="accountRole != null">account_role = #{accountRole},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteAdDyAccountById" parameterType="Long">
+        delete from ad_dy_account where id = #{id}
+    </delete>
+
+    <delete id="deleteAdDyAccountByIds" parameterType="String">
+        delete from ad_dy_account where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 106 - 0
fs-service/src/main/resources/mapper/ad/AdDyApiMapper.xml

@@ -0,0 +1,106 @@
+<?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="com.fs.ad.mapper.AdDyApiMapper">
+    
+    <resultMap type="AdDyApi" id="AdDyApiResult">
+        <result property="id"    column="id"    />
+        <result property="appId"    column="app_id"    />
+        <result property="appSecet"    column="app_secet"    />
+        <result property="authCode"    column="auth_code"    />
+        <result property="accessToken"    column="access_token"    />
+        <result property="expiresIn"    column="expires_in"    />
+        <result property="refreshToken"    column="refresh_token"    />
+        <result property="refreshTokenExpiresIn"    column="refresh_token_expires_in"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="remark"    column="remark"    />
+    </resultMap>
+
+    <sql id="selectAdDyApiVo">
+        select id, app_id, app_secet, auth_code, access_token, expires_in, refresh_token, refresh_token_expires_in, create_time, create_by, update_by, update_time, remark from ad_dy_api
+    </sql>
+
+    <select id="selectAdDyApiList" parameterType="AdDyApi" resultMap="AdDyApiResult">
+        <include refid="selectAdDyApiVo"/>
+        <where>  
+            <if test="appId != null  and appId != ''"> and app_id = #{appId}</if>
+            <if test="appSecet != null  and appSecet != ''"> and app_secet = #{appSecet}</if>
+            <if test="authCode != null  and authCode != ''"> and auth_code = #{authCode}</if>
+            <if test="accessToken != null  and accessToken != ''"> and access_token = #{accessToken}</if>
+            <if test="expiresIn != null "> and expires_in = #{expiresIn}</if>
+            <if test="refreshToken != null  and refreshToken != ''"> and refresh_token = #{refreshToken}</if>
+            <if test="refreshTokenExpiresIn != null "> and refresh_token_expires_in = #{refreshTokenExpiresIn}</if>
+        </where>
+    </select>
+    
+    <select id="selectAdDyApiById" parameterType="Long" resultMap="AdDyApiResult">
+        <include refid="selectAdDyApiVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertAdDyApi" parameterType="AdDyApi" useGeneratedKeys="true" keyProperty="id">
+        insert into ad_dy_api
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="appId != null">app_id,</if>
+            <if test="appSecet != null">app_secet,</if>
+            <if test="authCode != null">auth_code,</if>
+            <if test="accessToken != null">access_token,</if>
+            <if test="expiresIn != null">expires_in,</if>
+            <if test="refreshToken != null">refresh_token,</if>
+            <if test="refreshTokenExpiresIn != null">refresh_token_expires_in,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="remark != null">remark,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="appId != null">#{appId},</if>
+            <if test="appSecet != null">#{appSecet},</if>
+            <if test="authCode != null">#{authCode},</if>
+            <if test="accessToken != null">#{accessToken},</if>
+            <if test="expiresIn != null">#{expiresIn},</if>
+            <if test="refreshToken != null">#{refreshToken},</if>
+            <if test="refreshTokenExpiresIn != null">#{refreshTokenExpiresIn},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="remark != null">#{remark},</if>
+         </trim>
+    </insert>
+
+    <update id="updateAdDyApi" parameterType="AdDyApi">
+        update ad_dy_api
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="appId != null">app_id = #{appId},</if>
+            <if test="appSecet != null">app_secet = #{appSecet},</if>
+            <if test="authCode != null">auth_code = #{authCode},</if>
+            <if test="accessToken != null">access_token = #{accessToken},</if>
+            <if test="expiresIn != null">expires_in = #{expiresIn},</if>
+            <if test="refreshToken != null">refresh_token = #{refreshToken},</if>
+            <if test="refreshTokenExpiresIn != null">refresh_token_expires_in = #{refreshTokenExpiresIn},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="remark != null">remark = #{remark},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteAdDyApiById" parameterType="Long">
+        delete from ad_dy_api where id = #{id}
+    </delete>
+
+    <delete id="deleteAdDyApiByIds" parameterType="String">
+        delete from ad_dy_api where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 2 - 1
fs-service/src/main/resources/mapper/ad/AdSiteMapper.xml

@@ -23,10 +23,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </sql>
 
     <select id="selectAdSiteList" parameterType="AdSite" resultType="AdSite">
-        select a.*,c.domain,b.name templateName,d.name accountName from ad_site a
+        select a.*,c.domain,b.name templateName,d.name accountName,e.link_name from ad_site a
         inner join ad_html_template b on a.template_id = b.id
         inner join ad_domain c on a.domain_id = c.id
         left join ad_account d on a.account_id = d.id
+        left join qw_work_link e on a.work_id = e.id
         <where>
             <if test="templateId != null "> and a.template_id = #{templateId}</if>
             <if test="type != null "> and a.type = #{type}</if>

+ 101 - 0
fs-service/src/main/resources/mapper/ad/AdUploadLogMapper.xml

@@ -0,0 +1,101 @@
+<?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="com.fs.ad.mapper.AdUploadLogMapper">
+    
+    <resultMap type="AdUploadLog" id="AdUploadLogResult">
+        <result property="id"    column="id"    />
+        <result property="siteId"    column="site_id"    />
+        <result property="type"    column="type"    />
+        <result property="templateId"    column="template_id"    />
+        <result property="accountId"    column="account_id"    />
+        <result property="domainId"    column="domain_id"    />
+        <result property="url"    column="url"    />
+        <result property="uploadType"    column="upload_type"    />
+        <result property="vid"    column="vid"    />
+    </resultMap>
+
+    <sql id="selectAdUploadLogVo">
+        select * from ad_upload_log
+    </sql>
+
+    <select id="selectAdUploadLogList" parameterType="AdUploadLog" resultType="AdUploadLog">
+        select a.*,b.name siteName,b.url siteUrl,c.name accountName from ad_upload_log a
+        inner join ad_site b on a.site_id = b.id
+        inner join ad_account c on a.account_id = c.id
+        <where>  
+            <if test="siteId != null "> and a.site_id = #{siteId}</if>
+            <if test="type != null "> and a.type = #{type}</if>
+            <if test="templateId != null "> and a.template_id = #{templateId}</if>
+            <if test="accountId != null "> and a.account_id = #{accountId}</if>
+            <if test="domainId != null "> and a.domain_id = #{domainId}</if>
+            <if test="url != null  and url != ''"> and a.url = #{url}</if>
+            <if test="uploadType != null  and uploadType != ''"> and a.upload_type = #{uploadType}</if>
+            <if test="vid != null  and vid != ''"> and a.vid = #{vid}</if>
+            <if test="startDate != null and endDate != null">
+                AND date_format(a.create_time,'%Y-%m-%d') &gt;= #{startDate}
+                AND date_format(a.create_time,'%Y-%m-%d') &lt;= #{endDate}
+            </if>
+        </where>
+        order by a.create_time desc
+    </select>
+    
+    <select id="selectAdUploadLogById" parameterType="Long" resultMap="AdUploadLogResult">
+        <include refid="selectAdUploadLogVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertAdUploadLog" parameterType="AdUploadLog" useGeneratedKeys="true" keyProperty="id">
+        insert into ad_upload_log
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="siteId != null">site_id,</if>
+            <if test="type != null">type,</if>
+            <if test="templateId != null">template_id,</if>
+            <if test="accountId != null">account_id,</if>
+            <if test="domainId != null">domain_id,</if>
+            <if test="url != null">url,</if>
+            <if test="uploadType != null">upload_type,</if>
+            <if test="vid != null">vid,</if>
+            <if test="createTime != null">create_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="siteId != null">#{siteId},</if>
+            <if test="type != null">#{type},</if>
+            <if test="templateId != null">#{templateId},</if>
+            <if test="accountId != null">#{accountId},</if>
+            <if test="domainId != null">#{domainId},</if>
+            <if test="url != null">#{url},</if>
+            <if test="uploadType != null">#{uploadType},</if>
+            <if test="vid != null">#{vid},</if>
+            <if test="createTime != null">#{createTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateAdUploadLog" parameterType="AdUploadLog">
+        update ad_upload_log
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="siteId != null">site_id = #{siteId},</if>
+            <if test="type != null">type = #{type},</if>
+            <if test="templateId != null">template_id = #{templateId},</if>
+            <if test="accountId != null">account_id = #{accountId},</if>
+            <if test="domainId != null">domain_id = #{domainId},</if>
+            <if test="url != null">url = #{url},</if>
+            <if test="uploadType != null">upload_type = #{uploadType},</if>
+            <if test="vid != null">vid = #{vid},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteAdUploadLogById" parameterType="Long">
+        delete from ad_upload_log where id = #{id}
+    </delete>
+
+    <delete id="deleteAdUploadLogByIds" parameterType="String">
+        delete from ad_upload_log where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 141 - 0
fs-service/src/main/resources/mapper/ad/BdCreativeStatisticsMapper.xml

@@ -0,0 +1,141 @@
+<?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="com.fs.ad.mapper.BdCreativeStatisticsMapper">
+    
+    <resultMap type="BdCreativeStatistics" id="BdCreativeStatisticsResult">
+        <result property="id"    column="id"    />
+        <result property="date"    column="date"    />
+        <result property="userid"    column="userId"    />
+        <result property="username"    column="userName"    />
+        <result property="campaignnamestatus"    column="campaignNameStatus"    />
+        <result property="adgroupnamestatus"    column="adGroupNameStatus"    />
+        <result property="ideainfo"    column="ideaInfo"    />
+        <result property="ideanamestatus"    column="ideaNameStatus"    />
+        <result property="feedsubjectenum"    column="feedSubjectEnum"    />
+        <result property="impression"    column="impression"    />
+        <result property="click"    column="click"    />
+        <result property="cost"    column="cost"    />
+        <result property="ctr"    column="ctr"    />
+        <result property="cpc"    column="cpc"    />
+        <result property="cpm"    column="cpm"    />
+        <result property="iaacost"    column="iaaCost"    />
+        <result property="iaapayroi"    column="iaaPayRoi"    />
+        <result property="phonebuttonclicks"    column="phoneButtonClicks"    />
+        <result property="interaction"    column="interaction"    />
+    </resultMap>
+
+    <sql id="selectBdCreativeStatisticsVo">
+        select id, date, userId, userName, campaignNameStatus, adGroupNameStatus, ideaInfo, ideaNameStatus, feedSubjectEnum, impression, click, cost, ctr, cpc, cpm, iaaCost, iaaPayRoi, phoneButtonClicks, interaction from bd_creative_statistics
+    </sql>
+
+    <select id="selectBdCreativeStatisticsList" parameterType="BdCreativeStatistics" resultMap="BdCreativeStatisticsResult">
+        <include refid="selectBdCreativeStatisticsVo"/>
+        <where>  
+            <if test="date != null "> and date = #{date}</if>
+            <if test="userid != null "> and userId = #{userid}</if>
+            <if test="username != null "> and userName like concat('%', #{username}, '%')</if>
+            <if test="campaignnamestatus != null "> and campaignNameStatus = #{campaignnamestatus}</if>
+            <if test="adgroupnamestatus != null "> and adGroupNameStatus = #{adgroupnamestatus}</if>
+            <if test="ideainfo != null  and ideainfo != ''"> and ideaInfo = #{ideainfo}</if>
+            <if test="ideanamestatus != null "> and ideaNameStatus = #{ideanamestatus}</if>
+            <if test="feedsubjectenum != null "> and feedSubjectEnum = #{feedsubjectenum}</if>
+            <if test="impression != null "> and impression = #{impression}</if>
+            <if test="click != null "> and click = #{click}</if>
+            <if test="cost != null "> and cost = #{cost}</if>
+            <if test="ctr != null "> and ctr = #{ctr}</if>
+            <if test="cpc != null "> and cpc = #{cpc}</if>
+            <if test="cpm != null "> and cpm = #{cpm}</if>
+            <if test="iaacost != null "> and iaaCost = #{iaacost}</if>
+            <if test="iaapayroi != null "> and iaaPayRoi = #{iaapayroi}</if>
+            <if test="phonebuttonclicks != null "> and phoneButtonClicks = #{phonebuttonclicks}</if>
+            <if test="interaction != null "> and interaction = #{interaction}</if>
+        </where>
+    </select>
+    
+    <select id="selectBdCreativeStatisticsById" parameterType="Long" resultMap="BdCreativeStatisticsResult">
+        <include refid="selectBdCreativeStatisticsVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertBdCreativeStatistics" parameterType="BdCreativeStatistics" useGeneratedKeys="true" keyProperty="id">
+        insert into bd_creative_statistics
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="date != null">date,</if>
+            <if test="userid != null">userId,</if>
+            <if test="username != null">userName,</if>
+            <if test="campaignnamestatus != null">campaignNameStatus,</if>
+            <if test="adgroupnamestatus != null">adGroupNameStatus,</if>
+            <if test="ideainfo != null">ideaInfo,</if>
+            <if test="ideanamestatus != null">ideaNameStatus,</if>
+            <if test="feedsubjectenum != null">feedSubjectEnum,</if>
+            <if test="impression != null">impression,</if>
+            <if test="click != null">click,</if>
+            <if test="cost != null">cost,</if>
+            <if test="ctr != null">ctr,</if>
+            <if test="cpc != null">cpc,</if>
+            <if test="cpm != null">cpm,</if>
+            <if test="iaacost != null">iaaCost,</if>
+            <if test="iaapayroi != null">iaaPayRoi,</if>
+            <if test="phonebuttonclicks != null">phoneButtonClicks,</if>
+            <if test="interaction != null">interaction,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="date != null">#{date},</if>
+            <if test="userid != null">#{userid},</if>
+            <if test="username != null">#{username},</if>
+            <if test="campaignnamestatus != null">#{campaignnamestatus},</if>
+            <if test="adgroupnamestatus != null">#{adgroupnamestatus},</if>
+            <if test="ideainfo != null">#{ideainfo},</if>
+            <if test="ideanamestatus != null">#{ideanamestatus},</if>
+            <if test="feedsubjectenum != null">#{feedsubjectenum},</if>
+            <if test="impression != null">#{impression},</if>
+            <if test="click != null">#{click},</if>
+            <if test="cost != null">#{cost},</if>
+            <if test="ctr != null">#{ctr},</if>
+            <if test="cpc != null">#{cpc},</if>
+            <if test="cpm != null">#{cpm},</if>
+            <if test="iaacost != null">#{iaacost},</if>
+            <if test="iaapayroi != null">#{iaapayroi},</if>
+            <if test="phonebuttonclicks != null">#{phonebuttonclicks},</if>
+            <if test="interaction != null">#{interaction},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBdCreativeStatistics" parameterType="BdCreativeStatistics">
+        update bd_creative_statistics
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="date != null">date = #{date},</if>
+            <if test="userid != null">userId = #{userid},</if>
+            <if test="username != null">userName = #{username},</if>
+            <if test="campaignnamestatus != null">campaignNameStatus = #{campaignnamestatus},</if>
+            <if test="adgroupnamestatus != null">adGroupNameStatus = #{adgroupnamestatus},</if>
+            <if test="ideainfo != null">ideaInfo = #{ideainfo},</if>
+            <if test="ideanamestatus != null">ideaNameStatus = #{ideanamestatus},</if>
+            <if test="feedsubjectenum != null">feedSubjectEnum = #{feedsubjectenum},</if>
+            <if test="impression != null">impression = #{impression},</if>
+            <if test="click != null">click = #{click},</if>
+            <if test="cost != null">cost = #{cost},</if>
+            <if test="ctr != null">ctr = #{ctr},</if>
+            <if test="cpc != null">cpc = #{cpc},</if>
+            <if test="cpm != null">cpm = #{cpm},</if>
+            <if test="iaacost != null">iaaCost = #{iaacost},</if>
+            <if test="iaapayroi != null">iaaPayRoi = #{iaapayroi},</if>
+            <if test="phonebuttonclicks != null">phoneButtonClicks = #{phonebuttonclicks},</if>
+            <if test="interaction != null">interaction = #{interaction},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteBdCreativeStatisticsById" parameterType="Long">
+        delete from bd_creative_statistics where id = #{id}
+    </delete>
+
+    <delete id="deleteBdCreativeStatisticsByIds" parameterType="String">
+        delete from bd_creative_statistics where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 145 - 0
fs-service/src/main/resources/mapper/ad/BdReportDataMapper.xml

@@ -0,0 +1,145 @@
+<?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="com.fs.ad.mapper.BdReportDataMapper">
+    
+    <resultMap type="BdReportData" id="BdReportDataResult">
+        <result property="id"    column="id"    />
+        <result property="type"    column="type"    />
+        <result property="date"    column="date"    />
+        <result property="userName"    column="user_name"    />
+        <result property="userId"    column="user_id"    />
+        <result property="campaignId"    column="campaign_id"    />
+        <result property="campaignName"    column="campaign_name"    />
+        <result property="campaignStatus"    column="campaign_status"    />
+        <result property="campaignNameStatus"    column="campaign_name_status"    />
+        <result property="adGroupId"    column="ad_group_id"    />
+        <result property="adGroupName"    column="ad_group_name"    />
+        <result property="adGroupStatus"    column="ad_group_status"    />
+        <result property="adGroupNameStatus"    column="ad_group_name_status"    />
+        <result property="provinceId"    column="province_id"    />
+        <result property="provinceName"    column="province_name"    />
+        <result property="genderName"    column="gender_name"    />
+        <result property="age"    column="age"    />
+        <result property="showWord"    column="show_word"    />
+        <result property="feedWord"    column="feed_word"    />
+        <result property="createTime"    column="create_time"    />
+    </resultMap>
+
+    <sql id="selectBdReportDataVo">
+        select id, type, date, user_name, user_id, campaign_id, campaign_name, campaign_status, campaign_name_status, ad_group_id, ad_group_name, ad_group_status, ad_group_name_status, province_id, province_name, gender_name, age, show_word, feed_word, create_time from bd_report_data
+    </sql>
+
+    <select id="selectBdReportDataList" parameterType="BdReportData" resultMap="BdReportDataResult">
+        <include refid="selectBdReportDataVo"/>
+        <where>  
+            <if test="type != null "> and type = #{type}</if>
+            <if test="date != null "> and date = #{date}</if>
+            <if test="userName != null  and userName != ''"> and user_name like concat('%', #{userName}, '%')</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="campaignId != null "> and campaign_id = #{campaignId}</if>
+            <if test="campaignName != null  and campaignName != ''"> and campaign_name like concat('%', #{campaignName}, '%')</if>
+            <if test="campaignStatus != null "> and campaign_status = #{campaignStatus}</if>
+            <if test="campaignNameStatus != null "> and campaign_name_status = #{campaignNameStatus}</if>
+            <if test="adGroupId != null "> and ad_group_id = #{adGroupId}</if>
+            <if test="adGroupName != null  and adGroupName != ''"> and ad_group_name like concat('%', #{adGroupName}, '%')</if>
+            <if test="adGroupStatus != null "> and ad_group_status = #{adGroupStatus}</if>
+            <if test="adGroupNameStatus != null "> and ad_group_name_status = #{adGroupNameStatus}</if>
+            <if test="provinceId != null "> and province_id = #{provinceId}</if>
+            <if test="provinceName != null  and provinceName != ''"> and province_name like concat('%', #{provinceName}, '%')</if>
+            <if test="genderName != null  and genderName != ''"> and gender_name like concat('%', #{genderName}, '%')</if>
+            <if test="age != null  and age != ''"> and age = #{age}</if>
+            <if test="showWord != null  and showWord != ''"> and show_word = #{showWord}</if>
+            <if test="feedWord != null  and feedWord != ''"> and feed_word = #{feedWord}</if>
+        </where>
+    </select>
+    
+    <select id="selectBdReportDataById" parameterType="Long" resultMap="BdReportDataResult">
+        <include refid="selectBdReportDataVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertBdReportData" parameterType="BdReportData" useGeneratedKeys="true" keyProperty="id">
+        insert into bd_report_data
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="type != null">type,</if>
+            <if test="date != null">date,</if>
+            <if test="userName != null">user_name,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="campaignId != null">campaign_id,</if>
+            <if test="campaignName != null">campaign_name,</if>
+            <if test="campaignStatus != null">campaign_status,</if>
+            <if test="campaignNameStatus != null">campaign_name_status,</if>
+            <if test="adGroupId != null">ad_group_id,</if>
+            <if test="adGroupName != null">ad_group_name,</if>
+            <if test="adGroupStatus != null">ad_group_status,</if>
+            <if test="adGroupNameStatus != null">ad_group_name_status,</if>
+            <if test="provinceId != null">province_id,</if>
+            <if test="provinceName != null">province_name,</if>
+            <if test="genderName != null">gender_name,</if>
+            <if test="age != null">age,</if>
+            <if test="showWord != null">show_word,</if>
+            <if test="feedWord != null">feed_word,</if>
+            <if test="createTime != null">create_time,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="type != null">#{type},</if>
+            <if test="date != null">#{date},</if>
+            <if test="userName != null">#{userName},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="campaignId != null">#{campaignId},</if>
+            <if test="campaignName != null">#{campaignName},</if>
+            <if test="campaignStatus != null">#{campaignStatus},</if>
+            <if test="campaignNameStatus != null">#{campaignNameStatus},</if>
+            <if test="adGroupId != null">#{adGroupId},</if>
+            <if test="adGroupName != null">#{adGroupName},</if>
+            <if test="adGroupStatus != null">#{adGroupStatus},</if>
+            <if test="adGroupNameStatus != null">#{adGroupNameStatus},</if>
+            <if test="provinceId != null">#{provinceId},</if>
+            <if test="provinceName != null">#{provinceName},</if>
+            <if test="genderName != null">#{genderName},</if>
+            <if test="age != null">#{age},</if>
+            <if test="showWord != null">#{showWord},</if>
+            <if test="feedWord != null">#{feedWord},</if>
+            <if test="createTime != null">#{createTime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateBdReportData" parameterType="BdReportData">
+        update bd_report_data
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="type != null">type = #{type},</if>
+            <if test="date != null">date = #{date},</if>
+            <if test="userName != null">user_name = #{userName},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="campaignId != null">campaign_id = #{campaignId},</if>
+            <if test="campaignName != null">campaign_name = #{campaignName},</if>
+            <if test="campaignStatus != null">campaign_status = #{campaignStatus},</if>
+            <if test="campaignNameStatus != null">campaign_name_status = #{campaignNameStatus},</if>
+            <if test="adGroupId != null">ad_group_id = #{adGroupId},</if>
+            <if test="adGroupName != null">ad_group_name = #{adGroupName},</if>
+            <if test="adGroupStatus != null">ad_group_status = #{adGroupStatus},</if>
+            <if test="adGroupNameStatus != null">ad_group_name_status = #{adGroupNameStatus},</if>
+            <if test="provinceId != null">province_id = #{provinceId},</if>
+            <if test="provinceName != null">province_name = #{provinceName},</if>
+            <if test="genderName != null">gender_name = #{genderName},</if>
+            <if test="age != null">age = #{age},</if>
+            <if test="showWord != null">show_word = #{showWord},</if>
+            <if test="feedWord != null">feed_word = #{feedWord},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteBdReportDataById" parameterType="Long">
+        delete from bd_report_data where id = #{id}
+    </delete>
+
+    <delete id="deleteBdReportDataByIds" parameterType="String">
+        delete from bd_report_data where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>