Browse Source

feat:创意日报

pudongliang 3 months ago
parent
commit
782c8fc6dc
44 changed files with 140 additions and 34 deletions
  1. 1 1
      portal/dist/assets/accountGroup-v3r0H1CD.js
  2. 1 1
      portal/dist/assets/adAutoConf-Dj4ye5ZZ.js
  3. 0 1
      portal/dist/assets/adPlanConf-DYAfLFrA.js
  4. 1 0
      portal/dist/assets/adPlanConf-D_c4iGM3.js
  5. 1 1
      portal/dist/assets/auth-BJKslpjZ.js
  6. 1 1
      portal/dist/assets/conversion-CoHryZbR.js
  7. 0 0
      portal/dist/assets/detail-D6sOXoPK.js
  8. 1 1
      portal/dist/assets/drama-Biplb52o.js
  9. 0 0
      portal/dist/assets/edit-lAY5dHln.js
  10. 0 0
      portal/dist/assets/index-259Gu2or.js
  11. 0 0
      portal/dist/assets/index-ApTBmTjn.js
  12. 0 0
      portal/dist/assets/index-B1cslr_k.js
  13. 0 0
      portal/dist/assets/index-Bk4DkawS.js
  14. 0 0
      portal/dist/assets/index-Brju-kLq.js
  15. 0 0
      portal/dist/assets/index-C0ZHpecc.js
  16. 1 1
      portal/dist/assets/index-CMO_aamX.js
  17. 0 0
      portal/dist/assets/index-CTMVq2dr.js
  18. 0 0
      portal/dist/assets/index-CknIOw0r.js
  19. 0 0
      portal/dist/assets/index-CsiF6xkY.js
  20. 0 0
      portal/dist/assets/index-DIX7zQyD.js
  21. 0 0
      portal/dist/assets/index-DQrgRlws.js
  22. 0 0
      portal/dist/assets/index-DYLOcK4Q.js
  23. 0 0
      portal/dist/assets/index-D_PcYCSR.js
  24. 0 0
      portal/dist/assets/index-Dde3-_Gk.js
  25. 0 0
      portal/dist/assets/index-Dqeg2YZR.js
  26. 0 0
      portal/dist/assets/index-InfflNVo.js
  27. 0 0
      portal/dist/assets/index-QSMAZlds.js
  28. 0 0
      portal/dist/assets/index-u3PBca_p.js
  29. 0 0
      portal/dist/assets/index-xVIXaHMr.js
  30. 1 1
      portal/dist/assets/loadPageConf-BVoPbaND.js
  31. 1 1
      portal/dist/assets/ossFile-B1p_LnA1.js
  32. 0 0
      portal/dist/assets/request-BSQsKCsT.js
  33. 1 1
      portal/dist/assets/user-BaTJcJ6w.js
  34. 1 1
      portal/dist/index.html
  35. 7 0
      portal/src/api/adPlanConf.js
  36. 41 4
      portal/src/views/daily-adgroup-report/index.vue
  37. 39 3
      portal/src/views/daily-creative-report/index.vue
  38. 11 0
      src/main/java/com/moka/gdtauto/controller/AdPlanConfController.java
  39. 3 2
      src/main/java/com/moka/gdtauto/controller/DailyAdgroupReportController.java
  40. 3 2
      src/main/java/com/moka/gdtauto/controller/DailyCreativeReportController.java
  41. 11 5
      src/main/java/com/moka/gdtauto/service/DailyAdgroupReportService.java
  42. 11 5
      src/main/java/com/moka/gdtauto/service/DailyCreativeReportService.java
  43. 2 1
      src/main/java/com/moka/gdtauto/task/DailyCreativeReportSyncTask.java
  44. 1 1
      src/test/java/com/moka/gdtauto/service/AdPlanDailyReportSyncTest.java

+ 1 - 1
portal/dist/assets/accountGroup-0-mwX8vR.js → portal/dist/assets/accountGroup-v3r0H1CD.js

@@ -1 +1 @@
-import{r as u}from"./request-DoD-XwtY.js";function c(t){return u({url:"/api/account-group/create",method:"post",data:t})}function e(t){return u({url:"/api/account-group/update",method:"post",data:t})}function n(t){return u({url:`/api/account-group/${t}`,method:"delete"})}function a(t=1,o=10){return u({url:"/api/account-group/list",method:"get",params:{pageNum:t,pageSize:o}})}function p(){return u({url:"/api/account-group/all",method:"get"})}function i(t){return u({url:`/api/account-group/${t}/accounts`,method:"get"})}export{i as a,p as b,c,n as d,a as g,e as u};
+import{r as u}from"./request-BSQsKCsT.js";function c(t){return u({url:"/api/account-group/create",method:"post",data:t})}function e(t){return u({url:"/api/account-group/update",method:"post",data:t})}function n(t){return u({url:`/api/account-group/${t}`,method:"delete"})}function a(t=1,o=10){return u({url:"/api/account-group/list",method:"get",params:{pageNum:t,pageSize:o}})}function p(){return u({url:"/api/account-group/all",method:"get"})}function i(t){return u({url:`/api/account-group/${t}/accounts`,method:"get"})}export{i as a,p as b,c,n as d,a as g,e as u};

+ 1 - 1
portal/dist/assets/adAutoConf-kogHWoCA.js → portal/dist/assets/adAutoConf-Dj4ye5ZZ.js

@@ -1 +1 @@
-import{r as e}from"./request-DoD-XwtY.js";function u(t){return e({url:"/api/ad-auto-conf/list",method:"get",params:t})}function n(t){return e({url:`/api/ad-auto-conf/${t}`,method:"get"})}function a(t){return e({url:"/api/ad-auto-conf",method:"post",data:t})}function r(t){return e({url:"/api/ad-auto-conf/update",method:"post",data:t})}function d(t){return e({url:`/api/ad-auto-conf/${t}`,method:"delete"})}function i(t){return e({url:`/api/ad-auto-conf/execute?id=${t}`,method:"post"})}function f(t){return e({url:"/api/execute-log/list",method:"get",params:t})}function c(t){return e({url:"/api/execute-log/getChildLog",method:"get",params:t})}export{c as a,f as b,n as c,d,i as e,u as g,a as s,r as u};
+import{r as e}from"./request-BSQsKCsT.js";function u(t){return e({url:"/api/ad-auto-conf/list",method:"get",params:t})}function n(t){return e({url:`/api/ad-auto-conf/${t}`,method:"get"})}function a(t){return e({url:"/api/ad-auto-conf",method:"post",data:t})}function r(t){return e({url:"/api/ad-auto-conf/update",method:"post",data:t})}function d(t){return e({url:`/api/ad-auto-conf/${t}`,method:"delete"})}function i(t){return e({url:`/api/ad-auto-conf/execute?id=${t}`,method:"post"})}function f(t){return e({url:"/api/execute-log/list",method:"get",params:t})}function c(t){return e({url:"/api/execute-log/getChildLog",method:"get",params:t})}export{c as a,f as b,n as c,d,i as e,u as g,a as s,r as u};

+ 0 - 1
portal/dist/assets/adPlanConf-DYAfLFrA.js

@@ -1 +0,0 @@
-import{r as a}from"./request-DoD-XwtY.js";function d(n){return a({url:"/api/ad-plan-conf/reCreate",method:"post",data:n})}function o(n){return a({url:"/api/ad-plan-conf/generate-plan",method:"post",data:n})}function u(n){return a({url:`/api/ad-plan-conf/reGeneratePlan/${n}`,method:"get"})}function l(n){return a({url:`/api/ad-plan-conf/syncSystemStatus/${n}`,method:"get"})}function p(n){return a({url:"/api/ad-plan-conf/create",method:"post",data:n})}function s(n){return a({url:"/api/ad-plan-conf/update",method:"post",data:n})}function i(n=1,e=10,t={}){return a({url:"/api/ad-plan-conf/list",method:"get",params:{pageNum:n,pageSize:e,...t}})}function f(n){return a({url:`/api/ad-plan-conf/${n}`,method:"get"})}function c(n){return a({url:"/api/ad-plan/list",method:"get",params:n})}function g(n){return a({url:`/api/ad-plan-creative/plan/${n}`,method:"get"})}function m(n){return a({url:"/api/ad-plan-conf/gdtSuspendByConfId",params:{confId:n},method:"get"})}function h(n){return a({url:"/api/ad-plan-conf/gdtDeleteByConfId",params:{confId:n},method:"get"})}function C(n,e){return a({url:`/api/ad-plan-conf/gdtSuspendByPlanIds/${n}`,method:"post",data:e})}function P(n,e){return a({url:`/api/ad-plan-conf/gdtDeleteByPlanIds/${n}`,method:"post",data:e})}function y(n=[]){return a({url:"/api/ad-plan-conf/getOneCreativeImage",method:"post",data:n})}function I(){return a({url:"/api/ad-plan-conf/getOneBrandImage",method:"get"})}function B(n=[]){return a({url:"/api/ad-plan-conf/getOneCreativeVideo",method:"post",data:n})}export{y as a,I as b,B as c,o as d,p as e,f,i as g,c as h,h as i,C as j,P as k,l,u as m,g as n,d as r,m as s,s as u};

+ 1 - 0
portal/dist/assets/adPlanConf-D_c4iGM3.js

@@ -0,0 +1 @@
+import{r as n}from"./request-BSQsKCsT.js";function o(e){return n({url:"/api/ad-plan-conf/reCreate",method:"post",data:e})}function d(e){return n({url:"/api/ad-plan-conf/generate-plan",method:"post",data:e})}function l(e){return n({url:`/api/ad-plan-conf/reGeneratePlan/${e}`,method:"get"})}function u(e){return n({url:`/api/ad-plan-conf/syncSystemStatus/${e}`,method:"get"})}function p(e){return n({url:"/api/ad-plan-conf/create",method:"post",data:e})}function s(e){return n({url:"/api/ad-plan-conf/update",method:"post",data:e})}function i(e=1,a=10,t={}){return n({url:"/api/ad-plan-conf/list",method:"get",params:{pageNum:e,pageSize:a,...t}})}function f(e){return n({url:`/api/ad-plan-conf/${e}`,method:"get"})}function c(e){return n({url:"/api/ad-plan/list",method:"get",params:e})}function g(e){return n({url:`/api/ad-plan-creative/plan/${e}`,method:"get"})}function m(e){return n({url:"/api/ad-plan-conf/gdtSuspendByConfId",params:{confId:e},method:"get"})}function h(e){return n({url:"/api/ad-plan-conf/gdtDeleteByConfId",params:{confId:e},method:"get"})}function C(e,a){return n({url:`/api/ad-plan-conf/gdtSuspendByPlanIds/${e}`,method:"post",data:a})}function P(e,a){return n({url:`/api/ad-plan-conf/gdtDeleteByPlanIds/${e}`,method:"post",data:a})}function y(e=[]){return n({url:"/api/ad-plan-conf/getOneCreativeImage",method:"post",data:e})}function I(){return n({url:"/api/ad-plan-conf/getOneBrandImage",method:"get"})}function B(e=[]){return n({url:"/api/ad-plan-conf/getOneCreativeVideo",method:"post",data:e})}function S(){return n({url:"/api/ad-plan-conf/allForSelect",method:"get"})}export{y as a,I as b,B as c,d,p as e,f,i as g,c as h,h as i,C as j,P as k,u as l,l as m,g as n,S as o,o as r,m as s,s as u};

+ 1 - 1
portal/dist/assets/auth-BGPBmseW.js → portal/dist/assets/auth-BJKslpjZ.js

@@ -1 +1 @@
-import{r as t}from"./request-DoD-XwtY.js";function i(){return t({url:"/api/gdt/auth/authorize-url",method:"get"})}function n(r){return t({url:"/api/gdt/auth/refresh",method:"post",params:r})}function u(){return t({url:"/api/gdt/auth/list",method:"get"})}function a(){return u()}function o(){return t({url:"/api/gdt/auth/expiring",method:"get"})}export{o as a,a as b,i as g,u as l,n as r};
+import{r as t}from"./request-BSQsKCsT.js";function i(){return t({url:"/api/gdt/auth/authorize-url",method:"get"})}function n(r){return t({url:"/api/gdt/auth/refresh",method:"post",params:r})}function u(){return t({url:"/api/gdt/auth/list",method:"get"})}function a(){return u()}function o(){return t({url:"/api/gdt/auth/expiring",method:"get"})}export{o as a,a as b,i as g,u as l,n as r};

+ 1 - 1
portal/dist/assets/conversion-KE15Tvl6.js → portal/dist/assets/conversion-CoHryZbR.js

@@ -1 +1 @@
-import{r as t}from"./request-DoD-XwtY.js";function e(n,o){return t({url:"/api/gdt/conversion/sync",method:"post",params:{orgAccountId:n,accountId:o}})}function s(n=1,o=20){return t({url:"/api/gdt/conversion/list",method:"get",params:{page:n,pageSize:o}})}function i(n){return t({url:"/api/gdt/conversion/detail",method:"get",params:{conversionId:n}})}function a(){return t({url:"/api/gdt/conversion/all",method:"get"})}export{s as a,i as b,a as g,e as s};
+import{r as t}from"./request-BSQsKCsT.js";function e(n,o){return t({url:"/api/gdt/conversion/sync",method:"post",params:{orgAccountId:n,accountId:o}})}function s(n=1,o=20){return t({url:"/api/gdt/conversion/list",method:"get",params:{page:n,pageSize:o}})}function i(n){return t({url:"/api/gdt/conversion/detail",method:"get",params:{conversionId:n}})}function a(){return t({url:"/api/gdt/conversion/all",method:"get"})}export{s as a,i as b,a as g,e as s};

File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/detail-D6sOXoPK.js


+ 1 - 1
portal/dist/assets/drama-DWCsB2Ay.js → portal/dist/assets/drama-Biplb52o.js

@@ -1 +1 @@
-import{r as t}from"./request-DoD-XwtY.js";function n(a){return t({url:"/api/gdt/asset/drama/sync",method:"post",params:{accountId:a}})}function m(a=1,s=20,r=""){return t({url:"/api/gdt/asset/drama/list",method:"get",params:{dramaName:r,page:a,pageSize:s}})}function d(a){return t({url:"/api/gdt/asset/drama/myDramaAssets",method:"get",params:{dramaName:a}})}function o(){return t({url:"/api/gdt/asset/drama/sync/conf/myConf",method:"get"})}function u(a){return t({url:"/api/gdt/asset/drama/sync/conf/add",method:"post",data:a})}function i(a){return t({url:"/api/gdt/asset/drama/sync/conf/delete",method:"post",params:{id:a}})}export{o as a,u as b,i as d,m as g,d as m,n as s};
+import{r as t}from"./request-BSQsKCsT.js";function n(a){return t({url:"/api/gdt/asset/drama/sync",method:"post",params:{accountId:a}})}function m(a=1,s=20,r=""){return t({url:"/api/gdt/asset/drama/list",method:"get",params:{dramaName:r,page:a,pageSize:s}})}function d(a){return t({url:"/api/gdt/asset/drama/myDramaAssets",method:"get",params:{dramaName:a}})}function o(){return t({url:"/api/gdt/asset/drama/sync/conf/myConf",method:"get"})}function u(a){return t({url:"/api/gdt/asset/drama/sync/conf/add",method:"post",data:a})}function i(a){return t({url:"/api/gdt/asset/drama/sync/conf/delete",method:"post",params:{id:a}})}export{o as a,u as b,i as d,m as g,d as m,n as s};

File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/edit-lAY5dHln.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-259Gu2or.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-ApTBmTjn.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-B1cslr_k.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-Bk4DkawS.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-Brju-kLq.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-C0ZHpecc.js


File diff suppressed because it is too large
+ 1 - 1
portal/dist/assets/index-CMO_aamX.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-CTMVq2dr.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-CknIOw0r.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-CsiF6xkY.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-DIX7zQyD.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-DQrgRlws.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-DYLOcK4Q.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-D_PcYCSR.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-Dde3-_Gk.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-Dqeg2YZR.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-InfflNVo.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-QSMAZlds.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-u3PBca_p.js


File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/index-xVIXaHMr.js


+ 1 - 1
portal/dist/assets/loadPageConf-CfvQH1Gs.js → portal/dist/assets/loadPageConf-BVoPbaND.js

@@ -1 +1 @@
-import{r as o}from"./request-DoD-XwtY.js";function t(a){return o({url:"/api/load-page-conf/list",method:"get",params:a})}function n(a){return o({url:`/api/load-page-conf/${a}`,method:"get"})}function r(a){return o({url:"/api/load-page-conf",method:"post",data:a})}function u(a){return o({url:"/api/load-page-conf",method:"put",data:a})}function d(){return o({url:"/api/load-page-conf/all",method:"get"})}export{t as a,n as b,r as c,d as g,u};
+import{r as o}from"./request-BSQsKCsT.js";function t(a){return o({url:"/api/load-page-conf/list",method:"get",params:a})}function n(a){return o({url:`/api/load-page-conf/${a}`,method:"get"})}function r(a){return o({url:"/api/load-page-conf",method:"post",data:a})}function u(a){return o({url:"/api/load-page-conf",method:"put",data:a})}function d(){return o({url:"/api/load-page-conf/all",method:"get"})}export{t as a,n as b,r as c,d as g,u};

+ 1 - 1
portal/dist/assets/ossFile-BtfxgtSx.js → portal/dist/assets/ossFile-B1p_LnA1.js

@@ -1 +1 @@
-import{r as t}from"./request-DoD-XwtY.js";function i(e){return t({timeout:12e5,url:"/api/oss-file/upload",method:"post",data:e,headers:{"Content-Type":"multipart/form-data"}})}function o(e){return t({url:"/api/oss-file/list",method:"get",params:e})}function r(e){return t({url:`/api/oss-file/${e}`,method:"delete"})}function l(e){return t({url:"/api/oss-file/batch",method:"delete",params:{fileIds:e}})}export{l as b,r as d,o as g,i as u};
+import{r as t}from"./request-BSQsKCsT.js";function i(e){return t({timeout:12e5,url:"/api/oss-file/upload",method:"post",data:e,headers:{"Content-Type":"multipart/form-data"}})}function o(e){return t({url:"/api/oss-file/list",method:"get",params:e})}function r(e){return t({url:`/api/oss-file/${e}`,method:"delete"})}function l(e){return t({url:"/api/oss-file/batch",method:"delete",params:{fileIds:e}})}export{l as b,r as d,o as g,i as u};

File diff suppressed because it is too large
+ 0 - 0
portal/dist/assets/request-BSQsKCsT.js


+ 1 - 1
portal/dist/assets/user-DIoef0NW.js → portal/dist/assets/user-BaTJcJ6w.js

@@ -1 +1 @@
-import{r as e}from"./request-DoD-XwtY.js";function t(){return e({url:"/api/user/list",method:"get"})}function u(r){return e({url:"/api/user/info",method:"get",params:r})}function n(r){return e({url:"/api/user/user-token-url",method:"get",params:r})}function o(r){return e({url:"/api/user/login",method:"post",params:r})}function a(r){return e({url:"/api/user/change-password",method:"post",params:r})}function i(r){return e({url:"/api/user/save",method:"post",params:r})}export{u as a,t as b,a as c,n as g,o as l,i as s};
+import{r as e}from"./request-BSQsKCsT.js";function t(){return e({url:"/api/user/list",method:"get"})}function u(r){return e({url:"/api/user/info",method:"get",params:r})}function n(r){return e({url:"/api/user/user-token-url",method:"get",params:r})}function o(r){return e({url:"/api/user/login",method:"post",params:r})}function a(r){return e({url:"/api/user/change-password",method:"post",params:r})}function i(r){return e({url:"/api/user/save",method:"post",params:r})}export{u as a,t as b,a as c,n as g,o as l,i as s};

+ 1 - 1
portal/dist/index.html

@@ -5,7 +5,7 @@
     <link rel="icon" type="image/svg+xml" href="/vite.svg" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <title>腾讯广告自动化管理后台</title>
-    <script type="module" crossorigin src="/assets/index-B0FHiS-9.js"></script>
+    <script type="module" crossorigin src="/assets/index-CMO_aamX.js"></script>
     <link rel="stylesheet" crossorigin href="/assets/index-5iqyiYFJ.css">
   </head>
   <body>

+ 7 - 0
portal/src/api/adPlanConf.js

@@ -172,3 +172,10 @@ export function getOneCreativeVideo(ids = []) {
     data: ids
   })
 }
+
+export function allForSelect() {
+  return request({
+    url: '/api/ad-plan-conf/allForSelect',
+    method: 'get'
+  })
+}

+ 41 - 4
portal/src/views/daily-adgroup-report/index.vue

@@ -28,6 +28,22 @@
           </div>
 
           <el-select
+            v-model="queryForm.confId"
+            placeholder="配置"
+            clearable
+            filterable
+            style="width: 180px"
+            @change="handleSearch"
+          >
+            <el-option
+              v-for="g in confOptions"
+              :key="g.id"
+              :label="g.name"
+              :value="g.id"
+            />
+          </el-select>
+
+          <el-select
             v-model="queryForm.groupId"
             placeholder="账号组筛选"
             clearable
@@ -94,7 +110,9 @@
         @sort-change="handleSortChange"
       >
         <!-- yyyy-MM-dd -->
-         <!-- <el-table-column prop="confId" label="配置ID" width="90" /> -->
+         <el-table-column prop="confId" label="配置ID" width="110" show-overflow-tooltip>
+           <template #default="{ row }">{{ getConfName(row.confId) }}</template>
+          </el-table-column>
          <el-table-column prop="groupId" label="账号组ID" width="110" show-overflow-tooltip >
           <template #default="{ row }">{{ getGroupName(row.groupId) }}</template>
           </el-table-column>
@@ -202,6 +220,7 @@ import { Refresh, Search } from '@element-plus/icons-vue'
 import { useRoute } from 'vue-router'
 import { getDailyAdgroupReportList } from '@/api/dailyAdgroupReport'
 import { getAccountGroupListAll } from '@/api/accountGroup'
+import { allForSelect } from '@/api/adPlanConf'
 import dayjs from 'dayjs'
 const route = useRoute()
 
@@ -212,7 +231,9 @@ const reportList = ref([])
 const groupOptions = ref([])
 const groupNameMap = ref({})
 const getGroupName = (id) => groupNameMap.value[id] || ''
-
+const confOptions = ref([])
+const confNameMap = ref({})
+const getConfName = (id) => confNameMap.value[id] || ''
 
 // 同步表单
 const syncForm = reactive({ accountId: '' })
@@ -358,9 +379,25 @@ const loadGroupOptions = async () => {
   }
 }
 
+const loadConfOptions = async () => {
+  try {
+    const res = await allForSelect()
+    if (res.success) {
+      confOptions.value = res.data || []
+      confNameMap.value = res.data.reduce((acc, cur) => {
+        acc[cur.id] = cur.name
+        return acc
+      }, {})
+    }
+  } catch (err) {
+    console.error('加载配置项失败:', err)
+  }
+}
+
 // ─── 初始化 ───────────────────────────────────────────────────────────────────
-onMounted(() => {
-  loadGroupOptions()
+onMounted(async () => {
+  await loadGroupOptions()
+  await loadConfOptions()
   if (route.query.adgroupId) {
     queryForm.adgroupId = String(route.query.adgroupId)
   }

+ 39 - 3
portal/src/views/daily-creative-report/index.vue

@@ -54,7 +54,21 @@
               <el-radio-button value="REPORTING_TIME">上报时间</el-radio-button>
             </el-radio-group>
           </div>
-
+<el-select
+            v-model="queryForm.confId"
+            placeholder="配置"
+            clearable
+            filterable
+            style="width: 180px"
+            @change="handleSearch"
+          >
+            <el-option
+              v-for="g in confOptions"
+              :key="g.id"
+              :label="g.name"
+              :value="g.id"
+            />
+          </el-select>
           <el-select
             v-model="queryForm.groupId"
             placeholder="账号组筛选"
@@ -129,7 +143,9 @@
         @sort-change="handleSortChange"
       >
         <!-- yyyy-MM-dd -->
-         <!-- <el-table-column prop="confId" label="配置ID" width="90" /> -->
+         <el-table-column prop="confId" label="配置ID" width="110" show-overflow-tooltip>
+           <template #default="{ row }">{{ getConfName(row.confId) }}</template>
+          </el-table-column>
          <el-table-column prop="groupId" label="账号组ID" width="110" show-overflow-tooltip >
           <template #default="{ row }">{{ getGroupName(row.groupId) }}</template>
           </el-table-column>
@@ -246,6 +262,7 @@ import { useRoute } from 'vue-router'
 import { getDailyReportList } from '@/api/dailyCreativeReport'
 import { getAccountGroupListAll } from '@/api/accountGroup'
 import dayjs from 'dayjs'
+import { allForSelect } from '@/api/adPlanConf'
 
 const route = useRoute()
 
@@ -255,8 +272,11 @@ const syncing = ref(false)
 const reportList = ref([])
 const groupOptions = ref([])
 const groupNameMap = ref({})
-
 const getGroupName = (id) => groupNameMap.value[id] || ''
+const confOptions = ref([])
+const confNameMap = ref({})
+const getConfName = (id) => confNameMap.value[id] || ''
+
 
 // 同步表单
 const syncForm = reactive({ accountId: '' })
@@ -409,9 +429,25 @@ const loadGroupOptions = async () => {
   }
 }
 
+const loadConfOptions = async () => {
+  try {
+    const res = await allForSelect()
+    if (res.success) {
+      confOptions.value = res.data || []
+      confNameMap.value = res.data.reduce((acc, cur) => {
+        acc[cur.id] = cur.name
+        return acc
+      }, {})
+    }
+  } catch (err) {
+    console.error('加载配置失败:', err)
+  }
+}
+
 // ─── 初始化 ───────────────────────────────────────────────────────────────────
 onMounted(async () => {
   await loadGroupOptions()
+  await loadConfOptions()
   if (route.query.dynamicCreativeId) {
     queryForm.dynamicCreativeId = String(route.query.dynamicCreativeId)
   }

+ 11 - 0
src/main/java/com/moka/gdtauto/controller/AdPlanConfController.java

@@ -747,4 +747,15 @@ public class AdPlanConfController {
             return Result.fail("查询品牌图片失败: " + e.getMessage());
         }
     }
+
+    @GetMapping("allForSelect")
+    public Result<List<AdPlanConf>>  allForSelect() {
+        List<AdPlanConf> adPlanConfs = adPlanConfService.
+        list(new LambdaQueryWrapper<AdPlanConf>()
+                .select(AdPlanConf::getId, AdPlanConf::getName)
+                .eq(AdPlanConf::getDeleted, 0)
+                .orderByDesc(AdPlanConf::getId));
+        return Result.success(adPlanConfs, "查询成功");
+    }
+    
 }

+ 3 - 2
src/main/java/com/moka/gdtauto/controller/DailyAdgroupReportController.java

@@ -39,6 +39,7 @@ public class DailyAdgroupReportController {
     public Result<?> list(
             @Parameter(description = "时间口径 REQUEST_TIME / REPORTING_TIME")
             @RequestParam(defaultValue = "REQUEST_TIME") String timeLine,
+            @Parameter(description = "配置ID(可选)") @RequestParam(required = false) Long confId,
             @Parameter(description = "账号组ID(可选)") @RequestParam(required = false) Long groupId,
             @Parameter(description = "广告账户ID(可选)") @RequestParam(required = false) Long accountId,
             @Parameter(description = "广告组ID(可选)") @RequestParam(required = false) Long adgroupId,
@@ -50,11 +51,11 @@ public class DailyAdgroupReportController {
             @Parameter(description = "每页数量") @RequestParam(defaultValue = "20") long pageSize) {
         try {
             Page<? extends BaseDailyAdgroupReport> result =
-                    dailyReportService.listReports(timeLine, groupId, accountId, adgroupId, startDate, endDate, sortField, sortOrder, page, pageSize);
+                    dailyReportService.listReports(timeLine, confId, groupId, accountId, adgroupId, startDate, endDate, sortField, sortOrder, page, pageSize);
             return Result.success(result.getRecords(), "查询成功")
                     .withPage(page, pageSize, result.getTotal());
         } catch (Exception e) {
-            log.error("查询日报表失败 timeLine={} groupId={} accountId={} adgroupId={}", timeLine, groupId, accountId, adgroupId, e);
+            log.error("查询日报表失败 timeLine={} confId={} groupId={} accountId={} adgroupId={}", timeLine, confId, groupId, accountId, adgroupId, e);
             return Result.fail("查询失败:" + e.getMessage());
         }
     }

+ 3 - 2
src/main/java/com/moka/gdtauto/controller/DailyCreativeReportController.java

@@ -39,6 +39,7 @@ public class DailyCreativeReportController {
     public Result<?> list(
             @Parameter(description = "时间口径 REQUEST_TIME / REPORTING_TIME")
             @RequestParam(defaultValue = "REQUEST_TIME") String timeLine,
+            @Parameter(description = "配置ID(可选)") @RequestParam(required = false) Long confId,
             @Parameter(description = "账号组ID(可选)") @RequestParam(required = false) Long groupId,
             @Parameter(description = "广告账户ID(可选)") @RequestParam(required = false) Long accountId,
             @Parameter(description = "广告ID(可选)") @RequestParam(required = false) Long adgroupId,
@@ -51,11 +52,11 @@ public class DailyCreativeReportController {
             @Parameter(description = "每页数量") @RequestParam(defaultValue = "20") long pageSize) {
         try {
             Page<? extends BaseDailyCreativeReport> result =
-                    dailyReportService.listReports(timeLine, groupId, accountId, adgroupId, dynamicCreativeId, startDate, endDate, sortField, sortOrder, page, pageSize);
+                    dailyReportService.listReports(timeLine, confId, groupId, accountId, adgroupId, dynamicCreativeId, startDate, endDate, sortField, sortOrder, page, pageSize);
             return Result.success(result.getRecords(), "查询成功")
                     .withPage(page, pageSize, result.getTotal());
         } catch (Exception e) {
-            log.error("查询日报表失败 timeLine={} groupId={} accountId={} dynamicCreativeId={}", timeLine, groupId, accountId, dynamicCreativeId, e);
+            log.error("查询日报表失败 timeLine={} confId={} groupId={} accountId={} dynamicCreativeId={}", timeLine, confId, groupId, accountId, dynamicCreativeId, e);
             return Result.fail("查询失败:" + e.getMessage());
         }
     }

+ 11 - 5
src/main/java/com/moka/gdtauto/service/DailyAdgroupReportService.java

@@ -273,23 +273,26 @@ public class DailyAdgroupReportService {
      * @return 分页结果
      */
     public Page<? extends BaseDailyAdgroupReport> listReports(
-            String timeLine, Long groupId, Long accountId, Long adgroupId,
+            String timeLine, Long confId, Long groupId, Long accountId, Long adgroupId,
             String startDate, String endDate, String sortField, String sortOrder,
             long pageNum, long pageSize) {
 
         if ("REPORTING_TIME".equals(timeLine)) {
-            LambdaQueryWrapper<RepDailyAdgroupReport> wrapper = buildRepWrapper(groupId, accountId, adgroupId, startDate, endDate, sortField, sortOrder);
+            LambdaQueryWrapper<RepDailyAdgroupReport> wrapper = buildRepWrapper(confId, groupId, accountId, adgroupId, startDate, endDate, sortField, sortOrder);
             return repMapper.selectPage(new Page<>(pageNum, pageSize), wrapper);
         } else {
-            LambdaQueryWrapper<ReqDailyAdgroupReport> wrapper = buildReqWrapper(groupId, accountId, adgroupId, startDate, endDate, sortField, sortOrder);
+            LambdaQueryWrapper<ReqDailyAdgroupReport> wrapper = buildReqWrapper(confId, groupId, accountId, adgroupId, startDate, endDate, sortField, sortOrder);
             return reqMapper.selectPage(new Page<>(pageNum, pageSize), wrapper);
         }
     }
 
     private LambdaQueryWrapper<ReqDailyAdgroupReport> buildReqWrapper(
-            Long groupId, Long accountId, Long adgroupId, String startDate, String endDate,
+            Long confId, Long groupId, Long accountId, Long adgroupId, String startDate, String endDate,
             String sortField, String sortOrder) {
         LambdaQueryWrapper<ReqDailyAdgroupReport> wrapper = new LambdaQueryWrapper<>();
+        if (confId != null) {
+            wrapper.eq(ReqDailyAdgroupReport::getConfId, confId);
+        }
         if (groupId != null) {
             wrapper.eq(ReqDailyAdgroupReport::getGroupId, groupId);
         }
@@ -311,9 +314,12 @@ public class DailyAdgroupReportService {
     }
 
     private LambdaQueryWrapper<RepDailyAdgroupReport> buildRepWrapper(
-            Long groupId, Long accountId, Long adgroupId, String startDate, String endDate,
+            Long confId, Long groupId, Long accountId, Long adgroupId, String startDate, String endDate,
             String sortField, String sortOrder) {
         LambdaQueryWrapper<RepDailyAdgroupReport> wrapper = new LambdaQueryWrapper<>();
+        if (confId != null) {
+            wrapper.eq(RepDailyAdgroupReport::getConfId, confId);
+        }
         if (groupId != null) {
             wrapper.eq(RepDailyAdgroupReport::getGroupId, groupId);
         }

+ 11 - 5
src/main/java/com/moka/gdtauto/service/DailyCreativeReportService.java

@@ -282,23 +282,26 @@ public class DailyCreativeReportService {
      * @return 分页结果
      */
     public Page<? extends BaseDailyCreativeReport> listReports(
-            String timeLine, Long groupId, Long accountId, Long adgroupId, Long dynamicCreativeId,
+            String timeLine, Long confId, Long groupId, Long accountId, Long adgroupId, Long dynamicCreativeId,
             String startDate, String endDate, String sortField, String sortOrder,
             long pageNum, long pageSize) {
 
         if ("REPORTING_TIME".equals(timeLine)) {
-            LambdaQueryWrapper<RepDailyCreativeReport> wrapper = buildRepWrapper(groupId, accountId, adgroupId, dynamicCreativeId, startDate, endDate, sortField, sortOrder);
+            LambdaQueryWrapper<RepDailyCreativeReport> wrapper = buildRepWrapper(confId, groupId, accountId, adgroupId, dynamicCreativeId, startDate, endDate, sortField, sortOrder);
             return repMapper.selectPage(new Page<>(pageNum, pageSize), wrapper);
         } else {
-            LambdaQueryWrapper<ReqDailyCreativeReport> wrapper = buildReqWrapper(groupId, accountId, adgroupId, dynamicCreativeId, startDate, endDate, sortField, sortOrder);
+            LambdaQueryWrapper<ReqDailyCreativeReport> wrapper = buildReqWrapper(confId, groupId, accountId, adgroupId, dynamicCreativeId, startDate, endDate, sortField, sortOrder);
             return reqMapper.selectPage(new Page<>(pageNum, pageSize), wrapper);
         }
     }
 
     private LambdaQueryWrapper<ReqDailyCreativeReport> buildReqWrapper(
-            Long groupId, Long accountId, Long adgroupId, Long dynamicCreativeId, String startDate, String endDate,
+            Long confId, Long groupId, Long accountId, Long adgroupId, Long dynamicCreativeId, String startDate, String endDate,
             String sortField, String sortOrder) {
         LambdaQueryWrapper<ReqDailyCreativeReport> wrapper = new LambdaQueryWrapper<>();
+        if (confId != null) {
+            wrapper.eq(ReqDailyCreativeReport::getConfId, confId);
+        }
         if (groupId != null) {
             wrapper.eq(ReqDailyCreativeReport::getGroupId, groupId);
         }
@@ -323,9 +326,12 @@ public class DailyCreativeReportService {
     }
 
     private LambdaQueryWrapper<RepDailyCreativeReport> buildRepWrapper(
-            Long groupId, Long accountId, Long adgroupId, Long dynamicCreativeId, String startDate, String endDate,
+            Long confId, Long groupId, Long accountId, Long adgroupId, Long dynamicCreativeId, String startDate, String endDate,
             String sortField, String sortOrder) {
         LambdaQueryWrapper<RepDailyCreativeReport> wrapper = new LambdaQueryWrapper<>();
+        if (confId != null) {
+            wrapper.eq(RepDailyCreativeReport::getConfId, confId);
+        }
         if (groupId != null) {
             wrapper.eq(RepDailyCreativeReport::getGroupId, groupId);
         }

+ 2 - 1
src/main/java/com/moka/gdtauto/task/DailyCreativeReportSyncTask.java

@@ -4,6 +4,7 @@ import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 
 import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
 
 import com.moka.gdtauto.service.DailyCreativeReportService;
 import com.tencent.ads.model.v3.TimeLine;
@@ -20,7 +21,7 @@ import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;
  * @since 2026-03-03
  */
 @Slf4j
-//@Component
+@Component
 @RequiredArgsConstructor
 public class DailyCreativeReportSyncTask {
 

+ 1 - 1
src/test/java/com/moka/gdtauto/service/AdPlanDailyReportSyncTest.java

@@ -59,7 +59,7 @@ public class AdPlanDailyReportSyncTest {
     @Test
     public void testSyncTenDaysDailyCreativeReport() {
         DateTimeFormatter FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-            String start = LocalDate.now().plusDays(-10).format(FMT);
+            String start = LocalDate.now().plusDays(-5).format(FMT);
             String end = LocalDate.now().format(FMT);
             dailyCreativeReportService.syncAllAccounts(null, start, end, TimeLine.REQUEST_TIME.getValue());
             dailyCreativeReportService.syncAllAccounts(null, start, end, TimeLine.REPORTING_TIME.getValue());

Some files were not shown because too many files changed in this diff