pudongliang пре 4 месеци
родитељ
комит
b43e3abcbd

BIN
docs/巡检配置.jpg


+ 37 - 0
docs/巡检配置.json

@@ -0,0 +1,37 @@
+{
+  "account_ids": [],
+  "accounts_source": "feishu",
+  "conversion_id_map": {
+    "default": 76431685
+  },
+  "patrol": {
+    "cost_threshold_min": 5000,
+    "new_ad_days": 3,
+    "rules_new": {
+      "roi_min_50": 0.15,
+      "roi_min_100": 0.20,
+      "scan_cost_max": 1000
+    },
+    "rules_old": {
+      "roi_min_30": 0.10,
+      "roi_min_50": 0.15,
+      "scan_cost_max": 1000
+    }
+  },
+  "rebuild": {
+    "target_ads_per_account": 20,
+    "proven_material_ratio": 0.5,
+    "proven_lookback_days": 7,
+    "template_ad": "ROI项目广告模板A",
+    "template_creative": "ROI项目创意模板B"
+  },
+  "bidding": {
+    "initial_roi": 0.35,
+    "target_roi": 0.50,
+    "floor": 0.30,
+    "ceiling": 0.70,
+    "maturity_days": 2,
+    "max_daily_step": 0.03,
+    "safety_factor": 0.8
+  }
+}

+ 1 - 1
portal/dist/assets/accountGroup-C4kFBCHF.js → portal/dist/assets/accountGroup-CfkmfYfy.js

@@ -1 +1 @@
-import{r as u}from"./request-Dq2O12M5.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-MXC_vLnx.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/adPlanConf-DuL2mViC.js → portal/dist/assets/adPlanConf-DHZqplEG.js

@@ -1 +1 @@
-import{r as a}from"./request-Dq2O12M5.js";function r(n){return a({url:"/api/ad-plan-conf/reCreate",method:"post",data:n})}function d(n){return a({url:"/api/ad-plan-conf/generate-plan",method:"post",data:n})}function o(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 u(n){return a({url:"/api/ad-plan-conf/create",method:"post",data:n})}function p(n){return a({url:"/api/ad-plan-conf/update",method:"post",data:n})}function s(n=1,t=10){return a({url:"/api/ad-plan-conf/list",method:"get",params:{pageNum:n,pageSize:t}})}function f(n){return a({url:`/api/ad-plan-conf/${n}`,method:"get"})}function i(n){return a({url:"/api/ad-plan/list",method:"get",params:n})}function c(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 g(n){return a({url:"/api/ad-plan-conf/gdtDeleteByConfId",params:{confId:n},method:"get"})}function h(n,t){return a({url:`/api/ad-plan-conf/gdtSuspendByPlanIds/${n}`,method:"post",data:t})}function P(n,t){return a({url:`/api/ad-plan-conf/gdtDeleteByPlanIds/${n}`,method:"post",data:t})}export{d as a,f as b,u as c,i as d,g as e,h as f,s as g,P as h,l as i,o as j,c as k,r,m as s,p as u};
+import{r as a}from"./request-MXC_vLnx.js";function r(n){return a({url:"/api/ad-plan-conf/reCreate",method:"post",data:n})}function d(n){return a({url:"/api/ad-plan-conf/generate-plan",method:"post",data:n})}function o(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 u(n){return a({url:"/api/ad-plan-conf/create",method:"post",data:n})}function p(n){return a({url:"/api/ad-plan-conf/update",method:"post",data:n})}function s(n=1,t=10){return a({url:"/api/ad-plan-conf/list",method:"get",params:{pageNum:n,pageSize:t}})}function f(n){return a({url:`/api/ad-plan-conf/${n}`,method:"get"})}function i(n){return a({url:"/api/ad-plan/list",method:"get",params:n})}function c(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 g(n){return a({url:"/api/ad-plan-conf/gdtDeleteByConfId",params:{confId:n},method:"get"})}function h(n,t){return a({url:`/api/ad-plan-conf/gdtSuspendByPlanIds/${n}`,method:"post",data:t})}function P(n,t){return a({url:`/api/ad-plan-conf/gdtDeleteByPlanIds/${n}`,method:"post",data:t})}export{d as a,f as b,u as c,i as d,g as e,h as f,s as g,P as h,l as i,o as j,c as k,r,m as s,p as u};

+ 1 - 1
portal/dist/assets/auth-CXiRZ6Uq.js → portal/dist/assets/auth-C0KREr5Z.js

@@ -1 +1 @@
-import{r as t}from"./request-Dq2O12M5.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-MXC_vLnx.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-dGJFgjKX.js → portal/dist/assets/conversion-2g2_K6CE.js

@@ -1 +1 @@
-import{r as t}from"./request-Dq2O12M5.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-MXC_vLnx.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-BHY4liwS.js


+ 1 - 1
portal/dist/assets/drama-DDq2EhUL.js → portal/dist/assets/drama-Cdr5zpmT.js

@@ -1 +1 @@
-import{r as t}from"./request-Dq2O12M5.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-MXC_vLnx.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/index-6wefLTDo.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
portal/dist/assets/index-B6kAmPRF.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
portal/dist/assets/index-BX2Slyk2.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
portal/dist/assets/index-Bkqak6Po.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
portal/dist/assets/index-Bn5zbc0E.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
portal/dist/assets/index-BrV7shAZ.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
portal/dist/assets/index-BtKYX4-g.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
portal/dist/assets/index-Cem2P-je.js


Разлика између датотеке није приказан због своје велике величине
+ 1 - 1
portal/dist/assets/index-DBd_GChl.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
portal/dist/assets/index-DHC4FYaT.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
portal/dist/assets/index-DHUSK4ad.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
portal/dist/assets/index-DXG5GL7v.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
portal/dist/assets/index-VVh4O0fW.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
portal/dist/assets/index-XrXbjd61.js


Разлика између датотеке није приказан због своје велике величине
+ 0 - 0
portal/dist/assets/index-qn8Z-JQ-.js


+ 1 - 1
portal/dist/assets/loadPageConf-Dm5xBGCQ.js → portal/dist/assets/loadPageConf-Chcvcnzl.js

@@ -1 +1 @@
-import{r as o}from"./request-Dq2O12M5.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-MXC_vLnx.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-DrOhqvFL.js → portal/dist/assets/ossFile-Cjo0YZ75.js

@@ -1 +1 @@
-import{r as t}from"./request-Dq2O12M5.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-MXC_vLnx.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-MXC_vLnx.js


+ 1 - 1
portal/dist/assets/user-5dg4RB4s.js → portal/dist/assets/user-CMk06A8t.js

@@ -1 +1 @@
-import{r as e}from"./request-Dq2O12M5.js";function s(){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})}export{u as a,s as b,a as c,n as g,o as l};
+import{r as e}from"./request-MXC_vLnx.js";function s(){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})}export{u as a,s as b,a as c,n as g,o as l};

+ 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-7BbsP2EG.js"></script>
+    <script type="module" crossorigin src="/assets/index-DBd_GChl.js"></script>
     <link rel="stylesheet" crossorigin href="/assets/index-BMB56fl-.css">
   </head>
   <body>

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

@@ -409,13 +409,19 @@
                 <el-table-column label="创意图片/视频" width="120">
                   <template #default="{ row }">
                     <el-image
-                      v-if="row.creativeFileUrl"
+                      v-if="row.creativeFileType === 'image' && row.creativeFileUrl"
                       :src="row.creativeFileUrl"
                       :preview-src-list="[row.creativeFileUrl]"
                       fit="cover"
                       style="width: 60px; height: 60px"
                       class="cursor-pointer rounded border"
                     />
+                    <video
+                      v-else-if="row.creativeFileType === 'video' && row.creativeFileUrl"
+                      :src="row.creativeFileUrl"
+                      controls
+                      style="width: 60px; height: 60px"
+                      class="cursor-pointer rounded border"></video>
                     <span v-else>-</span>
                   </template>
                 </el-table-column>
@@ -945,6 +951,7 @@ const handleGeneratePlan = async () => {
   }
     const data = { ...formData.value }
     data.id = editingId.value
+    data.pageIds = data.pageIdArr.join(',')
     generatePlanBtnLoading.value = true
     const res = await generatePlan(data)
   if (res.success) {

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

@@ -82,7 +82,7 @@ public class AdPlanConfController {
         adPlanConfService.gdtSuspendByConf(adPlanConf);
         adPlanConfService.lambdaUpdate()
         .eq(AdPlanConf::getId, confId)
-        .eq(AdPlanConf::getSystemSuspendProcessStatus, 1)
+        .set(AdPlanConf::getSystemSuspendProcessStatus, 1)
         .update();
         return Result.success("暂停执行中");
     }
@@ -104,7 +104,7 @@ public class AdPlanConfController {
         adPlanConfService.gdtSuspendByPlanIds(adPlanConf, planIds);
         adPlanConfService.lambdaUpdate()
         .eq(AdPlanConf::getId, confId)
-        .eq(AdPlanConf::getSystemSuspendProcessStatus, 1)
+        .set(AdPlanConf::getSystemSuspendProcessStatus, 1)
         .update();
         return Result.success();
     }
@@ -123,7 +123,7 @@ public class AdPlanConfController {
         adPlanConfService.gdtDeleteByConf(adPlanConf);
         adPlanConfService.lambdaUpdate()
         .eq(AdPlanConf::getId, confId)
-        .eq(AdPlanConf::getSystemSuspendProcessStatus, 1)
+        .set(AdPlanConf::getSystemSuspendProcessStatus, 1)
         .update();
         return Result.success("暂停执行中");
     }
@@ -145,7 +145,7 @@ public class AdPlanConfController {
         adPlanConfService.gdtDeleteByPlanIds(adPlanConf, planIds);
         adPlanConfService.lambdaUpdate()
         .eq(AdPlanConf::getId, confId)
-        .eq(AdPlanConf::getSystemSuspendProcessStatus, 1)
+        .set(AdPlanConf::getSystemSuspendProcessStatus, 1)
         .update();
         return Result.success();
     }

Неке датотеке нису приказане због велике количине промена