瀏覽代碼

feat:转化ID可调整

pudongliang 4 月之前
父節點
當前提交
578abe77f0
共有 45 個文件被更改,包括 371 次插入149 次删除
  1. 1 1
      portal/dist/assets/accountGroup-DRyRIpMM.js
  2. 1 1
      portal/dist/assets/adAutoConf-DXWRKn2r.js
  3. 1 1
      portal/dist/assets/adPlanConf-B5ICyrJS.js
  4. 1 1
      portal/dist/assets/auth-CxqHg15m.js
  5. 1 1
      portal/dist/assets/conversion-BnkTJedD.js
  6. 0 0
      portal/dist/assets/detail-CuurGZO8.js
  7. 1 1
      portal/dist/assets/drama-DZjAoAho.js
  8. 0 0
      portal/dist/assets/edit-CXzM0smf.js
  9. 0 0
      portal/dist/assets/index-9NiP6dvT.js
  10. 0 0
      portal/dist/assets/index-BEy-uoFq.js
  11. 0 0
      portal/dist/assets/index-BfaiW0jD.js
  12. 0 0
      portal/dist/assets/index-BwSKpKKZ.js
  13. 0 0
      portal/dist/assets/index-Bz4bYq0C.js
  14. 0 0
      portal/dist/assets/index-CC7jw8-8.js
  15. 0 0
      portal/dist/assets/index-CFnpjaXc.js
  16. 0 0
      portal/dist/assets/index-CHEP4trw.js
  17. 0 0
      portal/dist/assets/index-CapIuygS.js
  18. 0 0
      portal/dist/assets/index-CgGvDZEA.js
  19. 0 0
      portal/dist/assets/index-D1PFKA5J.js
  20. 0 0
      portal/dist/assets/index-D8Qd7v-2.js
  21. 0 0
      portal/dist/assets/index-DJQm4osK.js
  22. 0 0
      portal/dist/assets/index-DKjbcLB3.js
  23. 0 0
      portal/dist/assets/index-DeEYUmce.js
  24. 0 0
      portal/dist/assets/index-Devbz46X.js
  25. 0 0
      portal/dist/assets/index-Dzjkvk4F.js
  26. 0 0
      portal/dist/assets/index-PtjAxINc.js
  27. 0 0
      portal/dist/assets/index-RXM0dcSS.js
  28. 0 1
      portal/dist/assets/index-x4JL4CHG.js
  29. 1 1
      portal/dist/assets/loadPageConf-6VRHnvNm.js
  30. 1 1
      portal/dist/assets/ossFile-BXDJ7rro.js
  31. 0 0
      portal/dist/assets/request-BL8cceOQ.js
  32. 1 1
      portal/dist/assets/user-Bc1POEhK.js
  33. 1 1
      portal/dist/index.html
  34. 21 0
      portal/src/api/dailyAdgroupReport.js
  35. 1 19
      portal/src/api/dailyCreativeReport.js
  36. 8 2
      portal/src/router/index.js
  37. 0 1
      portal/src/views/ad-plan-conf/detail.vue
  38. 0 1
      portal/src/views/ad-plan-conf/index.vue
  39. 310 0
      portal/src/views/daily-adgroup-report/index.vue
  40. 2 96
      portal/src/views/daily-creative-report/index.vue
  41. 4 4
      src/main/java/com/moka/gdtauto/controller/DailyAdgroupReportController.java
  42. 1 1
      src/main/java/com/moka/gdtauto/service/AdPlanConfService.java
  43. 5 5
      src/main/java/com/moka/gdtauto/service/impl/AdPlanConfServiceImpl.java
  44. 7 7
      src/main/java/com/moka/gdtauto/task/AdAutoTask.java
  45. 2 2
      src/test/java/com/moka/gdtauto/service/AdAutoDeleteTest.java

+ 1 - 1
portal/dist/assets/accountGroup-nGJ1D7OV.js → portal/dist/assets/accountGroup-DRyRIpMM.js

@@ -1 +1 @@
-import{r as u}from"./request-Cj91lFqZ.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-BL8cceOQ.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-fSj3ArXE.js → portal/dist/assets/adAutoConf-DXWRKn2r.js

@@ -1 +1 @@
-import{r as e}from"./request-Cj91lFqZ.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-BL8cceOQ.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};

+ 1 - 1
portal/dist/assets/adPlanConf-L2lJcTIE.js → portal/dist/assets/adPlanConf-B5ICyrJS.js

@@ -1 +1 @@
-import{r as a}from"./request-Cj91lFqZ.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};
+import{r as a}from"./request-BL8cceOQ.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 - 1
portal/dist/assets/auth-BvjNuH8p.js → portal/dist/assets/auth-CxqHg15m.js

@@ -1 +1 @@
-import{r as t}from"./request-Cj91lFqZ.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-BL8cceOQ.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-BbhKWt0I.js → portal/dist/assets/conversion-BnkTJedD.js

@@ -1 +1 @@
-import{r as t}from"./request-Cj91lFqZ.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-BL8cceOQ.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};

文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/detail-CuurGZO8.js


+ 1 - 1
portal/dist/assets/drama-CDUv2eO7.js → portal/dist/assets/drama-DZjAoAho.js

@@ -1 +1 @@
-import{r as t}from"./request-Cj91lFqZ.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-BL8cceOQ.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};

文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/edit-CXzM0smf.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-9NiP6dvT.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-BEy-uoFq.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-BfaiW0jD.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-BwSKpKKZ.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-Bz4bYq0C.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-CC7jw8-8.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-CFnpjaXc.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-CHEP4trw.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-CapIuygS.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-CgGvDZEA.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-D1PFKA5J.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-D8Qd7v-2.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-DJQm4osK.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-DKjbcLB3.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-DeEYUmce.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-Devbz46X.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-Dzjkvk4F.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-PtjAxINc.js


文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/index-RXM0dcSS.js


文件差異過大導致無法顯示
+ 0 - 1
portal/dist/assets/index-x4JL4CHG.js


+ 1 - 1
portal/dist/assets/loadPageConf-o8udg8vi.js → portal/dist/assets/loadPageConf-6VRHnvNm.js

@@ -1 +1 @@
-import{r as o}from"./request-Cj91lFqZ.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-BL8cceOQ.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-rY762FSB.js → portal/dist/assets/ossFile-BXDJ7rro.js

@@ -1 +1 @@
-import{r as t}from"./request-Cj91lFqZ.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-BL8cceOQ.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};

文件差異過大導致無法顯示
+ 0 - 0
portal/dist/assets/request-BL8cceOQ.js


+ 1 - 1
portal/dist/assets/user-W7s1uzfv.js → portal/dist/assets/user-Bc1POEhK.js

@@ -1 +1 @@
-import{r as e}from"./request-Cj91lFqZ.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-BL8cceOQ.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-iUtVMwIO.js"></script>
+    <script type="module" crossorigin src="/assets/index-x4JL4CHG.js"></script>
     <link rel="stylesheet" crossorigin href="/assets/index-5iqyiYFJ.css">
   </head>
   <body>

+ 21 - 0
portal/src/api/dailyAdgroupReport.js

@@ -0,0 +1,21 @@
+import request from '@/utils/request'
+
+/**
+ * 分页查询广告日报表
+ * @param {Object} params
+ * @param {String} params.timeLine      时间口径 REQUEST_TIME / REPORTING_TIME
+ * @param {Number} [params.groupId]     账号组ID(可选)
+ * @param {Number} [params.accountId]   广告账户ID(可选)
+ * @param {Number} [params.adgroupId]   广告组ID(可选)
+ * @param {String} [params.startDate]   开始日期 yyyy-MM-dd(可选)
+ * @param {String} [params.endDate]     结束日期 yyyy-MM-dd(可选)
+ * @param {Number} [params.page]        页码(默认1)
+ * @param {Number} [params.pageSize]    每页数量(默认20)
+ */
+export function getDailyAdgroupReportList(params) {
+  return request({
+    url: '/api/gdt/daily-adgroup-report/list',
+    method: 'get',
+    params
+  })
+}

+ 1 - 19
portal/src/api/dailyReport.js → portal/src/api/dailyCreativeReport.js

@@ -1,24 +1,6 @@
 import request from '@/utils/request'
 
 /**
- * 手动同步指定账户日报表
- * @param {Object} params
- * @param {String} params.jobNumber     工号
- * @param {Number} params.orgAccountId  组织账户ID
- * @param {Number} params.accountId     广告账户ID
- * @param {String} params.startDate     开始日期 yyyy-MM-dd
- * @param {String} params.endDate       结束日期 yyyy-MM-dd
- * @param {String} params.timeLine      时间口径 REQUEST_TIME / REPORTING_TIME
- */
-export function syncDailyReport(params) {
-  return request({
-    url: '/api/gdt/daily-report/sync',
-    method: 'post',
-    params
-  })
-}
-
-/**
  * 分页查询日报表
  * @param {Object} params
  * @param {String} params.timeLine      时间口径 REQUEST_TIME / REPORTING_TIME
@@ -30,7 +12,7 @@ export function syncDailyReport(params) {
  */
 export function getDailyReportList(params) {
   return request({
-    url: '/api/gdt/daily-report/list',
+    url: '/api/gdt/daily-creative-report/list',
     method: 'get',
     params
   })

+ 8 - 2
portal/src/router/index.js

@@ -97,11 +97,17 @@ const routes = [
         meta: { title: '转化归因管理', icon: 'DataAnalysis' }
       },
       {
-        path: 'daily-report',
+        path: 'daily-creative-report',
         name: 'DailyReport',
-        component: () => import('@/views/daily-report/index.vue'),
+        component: () => import('@/views/daily-creative-report/index.vue'),
         meta: { title: '创意日报表', icon: 'TrendCharts' }
       },
+      {
+        path: 'daily-adgroup-report',
+        name: 'DailyAdgroupReport',
+        component: () => import('@/views/daily-adgroup-report/index.vue'),
+        meta: { title: '广告日报表', icon: 'DataLine' }
+      },
       // {
       //   path: 'adgroup',
       //   name: 'Adgroup',

+ 0 - 1
portal/src/views/ad-plan-conf/detail.vue

@@ -377,7 +377,6 @@
         </el-table-column>
         <el-table-column prop="adgroupId" label="广告ID" width="150" >
           <template #default="{ row }">
-            {{ row.adgroupId }}
             <el-button v-if="row.adgroupId > 0" size="small" link @click="goToTencentByAdgroupId(row)">
               <el-icon color="#409efc" class="no-inherit">
                 <Share />

+ 0 - 1
portal/src/views/ad-plan-conf/index.vue

@@ -247,7 +247,6 @@
 
         <el-form-item label="转化ID" prop="conversionId">
           <el-select
-          :disabled="valueDisabled"
             v-model="formData.conversionId"
             :min="1"
             placeholder="请输入转化ID"

+ 310 - 0
portal/src/views/daily-adgroup-report/index.vue

@@ -0,0 +1,310 @@
+<template>
+  <div class="space-y-6">
+    <div class="bg-white rounded-xl shadow-sm border border-gray-200 p-6">
+
+      <!-- 标题栏 -->
+      <div class="border-b border-gray-200 pb-4 mb-6">
+        <div class="flex items-center justify-between flex-wrap gap-4">
+          <h2 class="text-xl font-semibold text-gray-800 flex items-center gap-2">
+            <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-blue-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
+              <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z" />
+            </svg>
+            广告日报表
+          </h2>
+        </div>
+      </div>
+
+      <!-- 查询条件 -->
+      <div class="flex flex-col gap-3 mb-6">
+        <!-- 第一行:筛选控件 -->
+        <div class="flex flex-wrap items-center gap-4">
+          <!-- 时间口径 radio -->
+          <div class="flex items-center gap-2">
+            <span class="text-sm text-gray-600 font-medium">时间口径:</span>
+            <el-radio-group v-model="queryForm.timeLine" @change="handleTimeLineChange">
+              <el-radio-button value="REQUEST_TIME">请求时间</el-radio-button>
+              <el-radio-button value="REPORTING_TIME">上报时间</el-radio-button>
+            </el-radio-group>
+          </div>
+
+          <el-select
+            v-model="queryForm.groupId"
+            placeholder="账号组筛选"
+            clearable
+            filterable
+            style="width: 180px"
+            @change="handleSearch"
+          >
+            <el-option
+              v-for="g in groupOptions"
+              :key="g.id"
+              :label="g.groupName"
+              :value="g.id"
+            />
+          </el-select>
+
+          <el-input
+            v-model="queryForm.accountId"
+            placeholder="账户ID筛选"
+            clearable
+            style="width: 160px"
+            @clear="handleSearch"
+          />
+
+          <el-input
+            v-model="queryForm.adgroupId"
+            placeholder="广告组ID筛选"
+            clearable
+            style="width: 180px"
+            @clear="handleSearch"
+          />
+
+          <el-date-picker
+            v-model="queryDateRange"
+            type="daterange"
+            range-separator="~"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            format="YYYY-MM-DD"
+            value-format="YYYY-MM-DD"
+            style="width: 240px"
+            @change="handleSearch"
+          />
+        </div>
+
+        <!-- 第二行:按钮右对齐 -->
+        <div class="flex justify-end gap-2">
+          <el-button type="primary" @click="handleSearch">
+            <el-icon><Search /></el-icon>
+            查询
+          </el-button>
+          <el-button @click="handleReset">重置</el-button>
+        </div>
+      </div>
+
+      <!-- 数据表格 -->
+      <el-table
+        :data="reportList"
+        v-loading="loading"
+        stripe
+        border
+        style="width: 100%"
+        max-height="600"
+      >
+        <!-- yyyy-MM-dd -->
+        <el-table-column prop="date" label="日期" width="110" fixed="left" >
+          <template #default="{ row }">{{ row.date.substring(0, 10) }}</template>
+        </el-table-column>
+        <el-table-column prop="accountId" label="账户ID" width="130" fixed="left" />
+        <el-table-column prop="adgroupId" label="广告组ID" width="140" />
+        <el-table-column prop="adgroupName" label="广告组名称" width="180" show-overflow-tooltip />
+        <el-table-column prop="cost" label="消耗(元)" width="110" align="right">
+          <template #default="{ row }">{{ formatNum(row.cost) }}</template>
+        </el-table-column>
+        <el-table-column prop="viewCount" label="曝光数" width="100" align="right">
+          <template #default="{ row }">{{ formatInt(row.viewCount) }}</template>
+        </el-table-column>
+        <el-table-column prop="validClickCount" label="有效点击" width="100" align="right">
+          <template #default="{ row }">{{ formatInt(row.validClickCount) }}</template>
+        </el-table-column>
+        <el-table-column prop="ctr" label="点击率" width="90" align="right">
+          <template #default="{ row }">{{ formatPct(row.ctr) }}</template>
+        </el-table-column>
+        <el-table-column prop="cpc" label="CPC" width="90" align="right">
+          <template #default="{ row }">{{ formatNum(row.cpc) }}</template>
+        </el-table-column>
+        <el-table-column prop="conversionsCount" label="转化数" width="90" align="right">
+          <template #default="{ row }">{{ formatInt(row.conversionsCount) }}</template>
+        </el-table-column>
+        <el-table-column prop="conversionsCost" label="转化成本" width="100" align="right">
+          <template #default="{ row }">{{ formatNum(row.conversionsCost) }}</template>
+        </el-table-column>
+        <el-table-column label="1日ROI" width="90" align="right">
+          <template #default="{ row }">{{ formatRoi(row.incomeRoi1) }}</template>
+        </el-table-column>
+        <el-table-column label="1日LTV" width="100" align="right">
+          <template #default="{ row }">{{ formatNum(row.incomeVal1) }}</template>
+        </el-table-column>
+        <el-table-column label="3日ROI" width="90" align="right">
+          <template #default="{ row }">{{ formatRoi(row.incomeRoi3) }}</template>
+        </el-table-column>
+        <el-table-column label="3日LTV" width="100" align="right">
+          <template #default="{ row }">{{ formatNum(row.incomeVal3) }}</template>
+        </el-table-column>
+        <el-table-column label="7日ROI" width="90" align="right">
+          <template #default="{ row }">{{ formatRoi(row.incomeRoi7) }}</template>
+        </el-table-column>
+        <el-table-column label="7日LTV" width="100" align="right">
+          <template #default="{ row }">{{ formatNum(row.incomeVal7) }}</template>
+        </el-table-column>
+        <el-table-column label="14日ROI" width="90" align="right">
+          <template #default="{ row }">{{ formatRoi(row.incomeRoi14) }}</template>
+        </el-table-column>
+        <el-table-column label="14日LTV" width="100" align="right">
+          <template #default="{ row }">{{ formatNum(row.incomeVal14) }}</template>
+        </el-table-column>
+        <el-table-column label="24h ROI" width="100" align="right">
+          <template #default="{ row }">{{ formatRoi(row.incomeRoi124h) }}</template>
+        </el-table-column>
+        <el-table-column label="24h LTV" width="100" align="right">
+          <template #default="{ row }">{{ formatNum(row.incomeVal24h) }}</template>
+        </el-table-column>
+        <el-table-column prop="videoOuterPlayCount" label="视频播放" width="100" align="right">
+          <template #default="{ row }">{{ formatInt(row.videoOuterPlayCount) }}</template>
+        </el-table-column>
+        <el-table-column prop="videoOuterPlay3sCount" label="3s播放" width="90" align="right">
+          <template #default="{ row }">{{ formatInt(row.videoOuterPlay3sCount) }}</template>
+        </el-table-column>
+      </el-table>
+
+      <!-- 分页 -->
+      <div class="mt-6 flex justify-end">
+        <el-pagination
+          v-model:current-page="pagination.page"
+          v-model:page-size="pagination.pageSize"
+          :page-sizes="[20, 50, 100, 200]"
+          :total="pagination.total"
+          layout="total, sizes, prev, pager, next, jumper"
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+        />
+      </div>
+    </div>
+  </div>
+</template>
+
+<script setup>
+defineOptions({
+  name: 'DailyAdgroupReport'
+})
+
+import { ref, reactive, computed, onMounted } from 'vue'
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { Refresh, Search } from '@element-plus/icons-vue'
+import { useRoute } from 'vue-router'
+import { getDailyAdgroupReportList } from '@/api/dailyAdgroupReport'
+import { getAccountGroupListAll } from '@/api/accountGroup'
+
+const route = useRoute()
+
+// ─── 响应式状态 ───────────────────────────────────────────────────────────────
+const loading = ref(false)
+const syncing = ref(false)
+const reportList = ref([])
+const groupOptions = ref([])
+
+// 同步表单
+const syncForm = reactive({ accountId: '' })
+const syncDateRange = ref([])
+
+// 查询表单
+const queryForm = reactive({
+  timeLine: 'REQUEST_TIME',
+  accountId: '',
+  groupId: null,
+  adgroupId: '',
+})
+const getDefaultDateRange = () => {
+  const end = new Date()
+  const start = new Date()
+  start.setDate(start.getDate() - 0)
+  const fmt = (d) => `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`
+  return [fmt(start), fmt(end)]
+}
+const queryDateRange = ref(getDefaultDateRange())
+
+// 分页
+const pagination = reactive({ page: 1, pageSize: 20, total: 0 })
+
+// ─── 计算属性 ─────────────────────────────────────────────────────────────────
+const totalPages = computed(() => Math.ceil(pagination.total / pagination.pageSize) || 0)
+
+// ─── 格式化工具 ───────────────────────────────────────────────────────────────
+const formatNum = (v) => (v == null ? '-' : Number(v).toFixed(2))
+const formatInt = (v) => (v == null ? '-' : Number(v).toLocaleString())
+const formatPct = (v) => (v == null ? '-' : (Number(v) * 100).toFixed(2) + '%')
+const formatRoi = (v) => (v == null ? '-' : Number(v).toFixed(4))
+
+// ─── 加载数据 ─────────────────────────────────────────────────────────────────
+const loadList = async () => {
+  loading.value = true
+  try {
+    const params = {
+      timeLine: queryForm.timeLine,
+      page: pagination.page,
+      pageSize: pagination.pageSize,
+    }
+    if (queryForm.accountId) params.accountId = queryForm.accountId
+    if (queryForm.groupId) params.groupId = queryForm.groupId
+    if (queryForm.adgroupId) params.adgroupId = queryForm.adgroupId
+    if (queryDateRange.value && queryDateRange.value.length === 2) {
+      params.startDate = queryDateRange.value[0]
+      params.endDate = queryDateRange.value[1]
+    }
+    const res = await getDailyAdgroupReportList(params)
+    if (res.success) {
+      reportList.value = res.data || []
+      pagination.total = res.total || 0
+    } else {
+      ElMessage.error(res.message || '查询失败')
+    }
+  } catch (err) {
+    console.error('查询日报表失败:', err)
+    ElMessage.error('查询失败')
+  } finally {
+    loading.value = false
+  }
+}
+
+// ─── 事件处理 ─────────────────────────────────────────────────────────────────
+const handleTimeLineChange = () => {
+  pagination.page = 1
+  loadList()
+}
+
+const handleSearch = () => {
+  pagination.page = 1
+  loadList()
+}
+
+const handleReset = () => {
+  queryForm.accountId = ''
+  queryForm.groupId = null
+  queryForm.adgroupId = ''
+  queryDateRange.value = getDefaultDateRange()
+  pagination.page = 1
+  loadList()
+}
+
+const handleSizeChange = (size) => {
+  pagination.pageSize = size
+  pagination.page = 1
+  loadList()
+}
+
+const handleCurrentChange = (page) => {
+  pagination.page = page
+  loadList()
+}
+
+// ─── 加载账号组 ───────────────────────────────────────────────────────────────
+const loadGroupOptions = async () => {
+  try {
+    const res = await getAccountGroupListAll()
+    if (res.success) {
+      groupOptions.value = res.data || []
+    }
+  } catch (err) {
+    console.error('加载账号组失败:', err)
+  }
+}
+
+// ─── 初始化 ───────────────────────────────────────────────────────────────────
+onMounted(() => {
+  loadGroupOptions()
+  if (route.query.adgroupId) {
+    queryForm.adgroupId = String(route.query.adgroupId)
+  }
+  loadList()
+})
+</script>

+ 2 - 96
portal/src/views/daily-report/index.vue → portal/src/views/daily-creative-report/index.vue

@@ -110,49 +110,6 @@
         </div>
       </div>
 
-      <!-- 数据统计卡片 -->
-      <div class="grid grid-cols-1 md:grid-cols-3 gap-4 mb-6">
-        <div class="bg-gradient-to-br from-blue-50 to-blue-100 rounded-lg p-4 border border-blue-200">
-          <div class="flex items-center justify-between">
-            <div>
-              <p class="text-sm text-blue-600 mb-1">数据总条数</p>
-              <p class="text-2xl font-bold text-blue-700">{{ pagination.total }}</p>
-            </div>
-            <div class="p-3 bg-blue-200 rounded-lg">
-              <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-blue-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
-                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 10h16M4 14h16M4 18h16" />
-              </svg>
-            </div>
-          </div>
-        </div>
-        <div class="bg-gradient-to-br from-green-50 to-green-100 rounded-lg p-4 border border-green-200">
-          <div class="flex items-center justify-between">
-            <div>
-              <p class="text-sm text-green-600 mb-1">当前口径</p>
-              <p class="text-lg font-bold text-green-700">{{ queryForm.timeLine === 'REQUEST_TIME' ? '请求时间' : '上报时间' }}</p>
-            </div>
-            <div class="p-3 bg-green-200 rounded-lg">
-              <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-green-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
-                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
-              </svg>
-            </div>
-          </div>
-        </div>
-        <div class="bg-gradient-to-br from-purple-50 to-purple-100 rounded-lg p-4 border border-purple-200">
-          <div class="flex items-center justify-between">
-            <div>
-              <p class="text-sm text-purple-600 mb-1">总页数</p>
-              <p class="text-2xl font-bold text-purple-700">{{ totalPages }}</p>
-            </div>
-            <div class="p-3 bg-purple-200 rounded-lg">
-              <svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6 text-purple-600" fill="none" viewBox="0 0 24 24" stroke="currentColor">
-                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" />
-              </svg>
-            </div>
-          </div>
-        </div>
-      </div>
-
       <!-- 数据表格 -->
       <el-table
         :data="reportList"
@@ -252,7 +209,7 @@ import { ref, reactive, computed, onMounted } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
 import { Refresh, Search } from '@element-plus/icons-vue'
 import { useRoute } from 'vue-router'
-import { syncDailyReport, getDailyReportList } from '@/api/dailyReport'
+import { getDailyReportList } from '@/api/dailyCreativeReport'
 import { getAccountGroupListAll } from '@/api/accountGroup'
 
 const route = useRoute()
@@ -277,7 +234,7 @@ const queryForm = reactive({
 const getDefaultDateRange = () => {
   const end = new Date()
   const start = new Date()
-  start.setDate(start.getDate() - 6)
+  start.setDate(start.getDate() - 0)
   const fmt = (d) => `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`
   return [fmt(start), fmt(end)]
 }
@@ -357,57 +314,6 @@ const handleCurrentChange = (page) => {
   loadList()
 }
 
-const handleSync = () => {
-  if (!syncForm.accountId) {
-    ElMessage.warning('请输入广告账户ID')
-    return
-  }
-
-  const startDate = syncDateRange.value?.[0] || getTodayStr()
-  const endDate = syncDateRange.value?.[1] || getTodayStr()
-
-  ElMessageBox.confirm(
-    `确定同步账户 ${syncForm.accountId} 的日报数据(${startDate} ~ ${endDate})?`,
-    '确认同步',
-    { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }
-  ).then(async () => {
-    syncing.value = true
-    const [r1, r2] = await Promise.all([
-      syncDailyReport({
-        jobNumber: '',
-        orgAccountId: 0,
-        accountId: Number(syncForm.accountId),
-        startDate,
-        endDate,
-        timeLine: 'REQUEST_TIME',
-      }),
-      syncDailyReport({
-        jobNumber: '',
-        orgAccountId: 0,
-        accountId: Number(syncForm.accountId),
-        startDate,
-        endDate,
-        timeLine: 'REPORTING_TIME',
-      }),
-    ])
-    syncing.value = false
-    if (r1.success && r2.success) {
-      ElMessage.success(`同步完成:REQUEST_TIME ${r1.count ?? 0} 条,REPORTING_TIME ${r2.count ?? 0} 条`)
-      await loadList()
-    } else {
-      ElMessage.error((r1.message || r2.message) || '同步失败')
-    }
-  })
-}
-
-const getTodayStr = () => {
-  const d = new Date()
-  const y = d.getFullYear()
-  const m = String(d.getMonth() + 1).padStart(2, '0')
-  const day = String(d.getDate()).padStart(2, '0')
-  return `${y}-${m}-${day}`
-}
-
 // ─── 加载账号组 ───────────────────────────────────────────────────────────────
 const loadGroupOptions = async () => {
   try {

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

@@ -34,25 +34,25 @@ public class DailyAdgroupReportController {
     /**
      * 分页查询日报表
      */
-    @Operation(summary = "查询日报表列表", description = "分页查询指定口径的动态创意日报数据")
+    @Operation(summary = "查询日报表列表", description = "分页查询指定口径的广告日报数据")
     @GetMapping("/list")
     public Result<?> list(
             @Parameter(description = "时间口径 REQUEST_TIME / REPORTING_TIME")
             @RequestParam(defaultValue = "REQUEST_TIME") String timeLine,
             @Parameter(description = "账号组ID(可选)") @RequestParam(required = false) Long groupId,
             @Parameter(description = "广告账户ID(可选)") @RequestParam(required = false) Long accountId,
-            @Parameter(description = "动态创意ID(可选)") @RequestParam(required = false) Long dynamicCreativeId,
+            @Parameter(description = "广告组ID(可选)") @RequestParam(required = false) Long adgroupId,
             @Parameter(description = "开始日期 yyyy-MM-dd(可选)") @RequestParam(required = false) String startDate,
             @Parameter(description = "结束日期 yyyy-MM-dd(可选)") @RequestParam(required = false) String endDate,
             @Parameter(description = "页码") @RequestParam(defaultValue = "1") long page,
             @Parameter(description = "每页数量") @RequestParam(defaultValue = "20") long pageSize) {
         try {
             Page<? extends BaseDailyAdgroupReport> result =
-                    dailyReportService.listReports(timeLine, groupId, accountId, dynamicCreativeId, startDate, endDate, page, pageSize);
+                    dailyReportService.listReports(timeLine, groupId, accountId, adgroupId, startDate, endDate, 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={} groupId={} accountId={} adgroupId={}", timeLine, groupId, accountId, adgroupId, e);
             return Result.fail("查询失败:" + e.getMessage());
         }
     }

+ 1 - 1
src/main/java/com/moka/gdtauto/service/AdPlanConfService.java

@@ -72,5 +72,5 @@ public interface AdPlanConfService extends IService<AdPlanConf> {
     void gdtSuspendByCreatives(AdPlanConf conf, List<AdPlanCreative> creatives);
 
 
-    void gdtAdgroupPatrolDelete(AdPlanConf conf);
+    void gdtAdgroupPatrolSuspend(AdPlanConf conf);
 }

+ 5 - 5
src/main/java/com/moka/gdtauto/service/impl/AdPlanConfServiceImpl.java

@@ -1095,7 +1095,7 @@ public class AdPlanConfServiceImpl extends ServiceImpl<AdPlanConfMapper, AdPlanC
 
 
     @Override
-    public void gdtAdgroupPatrolDelete(AdPlanConf conf) {
+    public void gdtAdgroupPatrolSuspend(AdPlanConf conf) {
         try {
             List<AdPlan> plans = adPlanService.lambdaQuery()
                     .eq(AdPlan::getAdPlanConfId, conf.getId())
@@ -1132,16 +1132,16 @@ public class AdPlanConfServiceImpl extends ServiceImpl<AdPlanConfMapper, AdPlanC
                     .toList();
 
             if (deletePlans.isEmpty()) {
-                log.info("gdtAdgroupPatrolDelete 无需删除广告组 confId={} [{}, {}]", conf.getId(), startDate, endDate);
+                log.info("gdtAdgroupPatrolDelete 无需暂停广告组 confId={} [{}, {}]", conf.getId(), startDate, endDate);
                 return;
             }
 
             TencentAds tencentAds = clientFactory.getTencentAds(Constant.JOB_NUMBER, Constant.MAIN_ORG_ACCOUNT_ID);
-            doDeletePlans(tencentAds, deletePlans);
+            doSuspendPlans(tencentAds, deletePlans);
             lambdaUpdate().eq(AdPlanConf::getId, conf.getId())
-                    .set(AdPlanConf::getFailReason, "广告巡检删除" + deletePlans.size() + "个广告")
+                    .set(AdPlanConf::getFailReason, "广告巡检暂停" + deletePlans.size() + "个广告")
                     .update();
-            log.info("gdtAdgroupPatrolDelete 删除广告组完成 confId={} deleteCount={} [{}, {}]",
+            log.info("gdtAdgroupPatrolDelete 暂停广告组完成 confId={} deleteCount={} [{}, {}]",
                     conf.getId(), deletePlans.size(), startDate, endDate);
         } catch (Exception e) {
             log.error("gdtAdgroupPatrolDelete error confId={}", conf.getId(), e);

+ 7 - 7
src/main/java/com/moka/gdtauto/task/AdAutoTask.java

@@ -49,9 +49,9 @@ public class AdAutoTask {
     }
 
     @Scheduled(cron = "0 20 0 * * ?")
-    @SchedulerLock(name = "ad-auto-delete-task", lockAtMostFor = "9m", lockAtLeastFor = "2m")
-    public void adAutoDeleteTask() {
-        log.info("AdAutoDeleteTask execute");
+    @SchedulerLock(name = "ad-auto-suspend-task", lockAtMostFor = "9m", lockAtLeastFor = "2m")
+    public void adAutoSuspendTask() {
+        log.info("adAutoSuspendTask execute");
         // 8天前
         LocalDateTime beginTime = LocalDateTime.now().minusDays(10);
         List<AdPlanConf> confList = 
@@ -61,7 +61,7 @@ public class AdAutoTask {
             .list();
         
         if (confList.isEmpty()) {
-            log.info("没有需要删除的广告计划配置");
+            log.info("没有需要暂停的广告计划配置");
             return;
         }
         
@@ -74,12 +74,12 @@ public class AdAutoTask {
             executor.submit(() -> {
                 try {
                     semaphore.acquire();
-                    adPlanConfService.gdtAdgroupPatrolDelete(conf);
+                    adPlanConfService.gdtAdgroupPatrolSuspend(conf);
                 } catch (InterruptedException e) {
                     log.error("获取信号量被中断,confId={}", conf.getId(), e);
                     Thread.currentThread().interrupt();
                 } catch (Exception e) {
-                    log.error("删除广告计划配置失败,confId={}", conf.getId(), e);
+                    log.error("暂停广告计划配置失败,confId={}", conf.getId(), e);
                 } finally {
                     semaphore.release();
                     latch.countDown();
@@ -97,6 +97,6 @@ public class AdAutoTask {
             executor.shutdown();
         }
         
-        log.info("AdAutoDeleteTask 完成,共处理 {} 个配置", confList.size());
+        log.info("AdAutoSuspendTask 完成,共处理 {} 个配置", confList.size());
     }
 }

+ 2 - 2
src/test/java/com/moka/gdtauto/service/AdAutoDeleteTest.java

@@ -22,7 +22,7 @@ public class AdAutoDeleteTest {
         List<Long> confIds = List.of(36L,37L,43L,44L,45L,51L);
         for (Long confId : confIds) {
             AdPlanConf adPlanConf = adPlanConfService.getById(confId);
-            adPlanConfService.gdtAdgroupPatrolDelete(adPlanConf);
+            adPlanConfService.gdtAdgroupPatrolSuspend(adPlanConf);
         }
     }
 
@@ -36,6 +36,6 @@ public class AdAutoDeleteTest {
             .lt(AdPlanConf::getCreateTime, threeDaysAgo)
             .orderByDesc(AdPlanConf::getId)
             .list();
-        confList.forEach(conf -> adPlanConfService.gdtAdgroupPatrolDelete(conf));
+        confList.forEach(conf -> adPlanConfService.gdtAdgroupPatrolSuspend(conf));
     }
 }

部分文件因文件數量過多而無法顯示