Przeglądaj źródła

头条广告组相关接口

syh 4 lat temu
rodzic
commit
88166791db

+ 15 - 8
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -4,7 +4,6 @@ import cn.com.ctop.common.module.entity.BindAccountLogin;
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.IBindAccountLoginService;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
-import cn.com.ctop.common.module.utils.CloudVideoProcessUtil;
 import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.crawler.modules.pangolin.entity.PangolinApp;
 import cn.com.ctop.crawler.modules.pangolin.service.PangolinAppService;
@@ -13,6 +12,7 @@ import cn.com.ctop.crawler.modules.pangolin.service.PangolinLoginService;
 import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouWebInterfaceService;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertiserDataService;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceCampaignService;
+import cn.com.ctop.toutiao.modules.material.vo.BytedanceCampaignEditVo;
 import cn.com.ctop.toutiao.modules.report.service.IReportService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
@@ -27,7 +27,6 @@ import org.springframework.test.context.junit4.SpringRunner;
 
 import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -43,10 +42,19 @@ public class SampleTest {
     @Autowired
     private IReportService reportService;
     @Test
-    public void testOceanEngineJob() {
-        Map<String, Object> stringObjectMap = CloudVideoProcessUtil.videoCutFrameHandle("video/2019-10-30/ios推广视频-1572428291052.mp4", "video/2019-10-30/cut/${Number}.jpg");
-        System.err.println(stringObjectMap);
-
+    public void loadBytedanceCampaignData() {
+//        List<CtopOauthToken> tokens = oauthTokenService.selectToutiaoToken();
+//        tokens.forEach(token -> campaignService.getAdvertiserCampaign(token, null, null));
+//        campaignService.createCampaign(1649600126891015L,"测试广告组123",null,"BUDGET_MODE_DAY",15000,"APP",null);
+//        campaignService.getAdvertiserCampaign(token, null, null);
+
+        campaignService.updateCampaignStatus(1649600126891015L,"1673352811480076,1673351071217708","enable");
+        BytedanceCampaignEditVo vo = new BytedanceCampaignEditVo();
+        vo.setAccountId(1649600126891015L);
+        vo.setId(1673352811480076L);
+        vo.setCampaignName("咩哈哈哈哈哈");
+        vo.setBudget(10000);
+        campaignService.updateCampaign(vo);
     }
 
     @Autowired
@@ -69,7 +77,7 @@ public class SampleTest {
         log.info("总用时:{}毫秒", end - start);
     }
 
-    static ExecutorService executorService = null;
+    static ExecutorService executorService = Executors.newFixedThreadPool(10);;
     static CountDownLatch countDownLatch = null;
 
     @Test
@@ -77,7 +85,6 @@ public class SampleTest {
         Long start = System.currentTimeMillis();
         List<BindAccountLogin> list = bindAccountLoginService.getListByParams(CtopAdConstant.PLATFORM_TYPE_KUAISHOU_PY, 1);
         if (list != null && !list.isEmpty()) {
-            executorService = Executors.newFixedThreadPool(10);
             countDownLatch = new CountDownLatch(list.size());
             list.forEach(login -> {
                 executorService.submit(() -> {

+ 25 - 25
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/controller/ByteDanceCampaignController.java

@@ -1,8 +1,11 @@
 package cn.com.ctop.toutiao.modules.material.controller;
 
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
 import cn.com.ctop.common.module.utils.StringUtils;
 import cn.com.ctop.toutiao.modules.material.entity.ByteDanceCampaign;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceCampaignService;
+import cn.com.ctop.toutiao.modules.material.vo.BytedanceCampaignEditVo;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -17,7 +20,9 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -81,17 +86,19 @@ public class ByteDanceCampaignController {
 
     /**
      * 添加
-     *
-     * @param byteDanceCampaign
      * @return
      */
     @AutoLog(value = "今日头条广告组信息-添加")
     @ApiOperation(value = "今日头条广告组信息-添加", notes = "今日头条广告组信息-添加")
     @PostMapping(value = "/add")
-    public Result<ByteDanceCampaign> add(@RequestBody ByteDanceCampaign byteDanceCampaign) {
+    public Result<ByteDanceCampaign> add(@RequestParam(name = "accountId") Long accountId,
+                                         @RequestParam(name = "campaignName") String campaignName,
+                                         @RequestParam(name = "budgetMode") String budgetMode,
+                                         @RequestParam(name = "budget") Integer budget,
+                                         @RequestParam(name = "landingType") String landingType) {
         Result<ByteDanceCampaign> result = new Result<>();
         try {
-            byteDanceCampaignService.save(byteDanceCampaign);
+            byteDanceCampaignService.createCampaign(accountId,campaignName,null,budgetMode,budget,landingType,null);
             result.success("添加成功!");
         } catch (Exception e) {
             log.error(e.getMessage(), e);
@@ -102,38 +109,31 @@ public class ByteDanceCampaignController {
 
     /**
      * 编辑
-     *
-     * @param byteDanceCampaign
      * @return
      */
     @AutoLog(value = "今日头条广告组信息-编辑")
     @ApiOperation(value = "今日头条广告组信息-编辑", notes = "今日头条广告组信息-编辑")
     @PutMapping(value = "/edit")
-    public Result<ByteDanceCampaign> edit(@RequestBody ByteDanceCampaign byteDanceCampaign) {
-        Result<ByteDanceCampaign> result = new Result<>();
-        ByteDanceCampaign byteDanceCampaignEntity = byteDanceCampaignService.getById(byteDanceCampaign.getId());
-        if (byteDanceCampaignEntity == null) {
-            result.error500("未找到对应实体");
-        } else {
-            boolean ok = byteDanceCampaignService.updateById(byteDanceCampaign);
-            if (ok) {
-                result.success("修改成功!");
-            }else {
-                result.error500("未知错误");
-            }
-        }
-
-        return result;
+    public Map<String,Object> edit(@RequestBody BytedanceCampaignEditVo editVo) {
+        return byteDanceCampaignService.updateCampaign(editVo);
     }
 
     /**
      * 修改广告组状态
      * @return
      */
-//    @PostMapping("/editStatus")
-//    public Map<String,Object> editStatus(){
-//
-//    }
+    @PostMapping("/editStatus")
+    public Map<String,Object> editStatus(@RequestParam(name = "accountId")Long accountId,
+                                         @RequestParam(name = "ids") String ids,
+                                         @RequestParam(name = "status")String status){
+        Map<String,Object>result = new HashMap();
+        if(null == accountId||accountId==0||null == ids||ids.trim().equals("")||null==status||status.trim().equals("")){
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR);
+            return result;
+        }
+        byteDanceCampaignService.updateCampaignStatus(accountId,ids,status);
+        return result;
+    }
     /**
      * 通过id删除
      *

+ 4 - 1
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/mapper/ByteDanceCampaignMapper.java

@@ -2,6 +2,9 @@ package cn.com.ctop.toutiao.modules.material.mapper;
 
 import cn.com.ctop.toutiao.modules.material.entity.ByteDanceCampaign;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @Description: 今日头条广告组信息
@@ -10,5 +13,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @Version: V1.0
  */
 public interface ByteDanceCampaignMapper extends BaseMapper<ByteDanceCampaign> {
-
+    void replaceBatch(@Param(value = "campaigns") List<ByteDanceCampaign> campaigns);
 }

+ 32 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/mapper/xml/ByteDanceCampaignMapper.xml

@@ -2,4 +2,36 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.com.ctop.toutiao.modules.material.mapper.ByteDanceCampaignMapper">
 
+    <insert id="replaceBatch">
+        replace into ctop_bytedance_campaign(
+        id,
+        account_id,
+        name,
+        budget,
+        budget_mode,
+        landing_type,
+        modify_time,
+        status,
+        campaign_create_time,
+        campaign_modify_time,
+        create_time,
+        update_time)
+        values
+        <foreach collection="campaigns" item="report" separator=",">
+            (
+            #{report.id},
+            #{report.accountId},
+            #{report.name},
+            #{report.budget},
+            #{report.budgetMode},
+            #{report.landingType},
+            #{report.modifyTime},
+            #{report.status},
+            #{report.campaignCreateTime},
+            #{report.campaignModifyTime},
+            #{report.createTime},
+            #{report.updateTime}
+            )
+        </foreach>
+    </insert>
 </mapper>

+ 5 - 3
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/IByteDanceCampaignService.java

@@ -2,6 +2,7 @@ package cn.com.ctop.toutiao.modules.material.service;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.toutiao.modules.material.entity.ByteDanceCampaign;
+import cn.com.ctop.toutiao.modules.material.vo.BytedanceCampaignEditVo;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.Map;
@@ -13,8 +14,9 @@ import java.util.Map;
  * @Version: V1.0
  */
 public interface IByteDanceCampaignService extends IService<ByteDanceCampaign> {
-    Map<String,Object> createCampaign(CtopOauthToken token, String campaignName, String operation, String budgetMode, String budget, String landingType, String uniqueFk);
-    Map<String,Object>updateCampaign(CtopOauthToken token, String campaignId, String campaignName, String modifyTime,String budget);
-    Map<String, Object> updateCampaignStatus(CtopOauthToken token, String campaignIds, String optStatus);
+    Map<String,Object> createCampaign(Long accountId, String campaignName, String operation, String budgetMode, Integer budget, String landingType, String uniqueFk);
+    Map<String,Object>updateCampaign(CtopOauthToken token, Long campaignId, String campaignName, String modifyTime,Integer budget);
+    Map<String, Object> updateCampaignStatus(Long accountId, String campaignIds, String optStatus);
     Map<String, Object> getAdvertiserCampaign(CtopOauthToken token, String ids, String date);
+    Map<String, Object> updateCampaign(BytedanceCampaignEditVo editVo);
 }

+ 37 - 28
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/impl/ByteDanceCampaignServiceImpl.java

@@ -1,14 +1,17 @@
 package cn.com.ctop.toutiao.modules.material.service.impl;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import cn.com.ctop.common.module.utils.*;
 import cn.com.ctop.toutiao.modules.material.entity.ByteDanceCampaign;
 import cn.com.ctop.toutiao.modules.material.mapper.ByteDanceCampaignMapper;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceCampaignService;
+import cn.com.ctop.toutiao.modules.material.vo.BytedanceCampaignEditVo;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
@@ -24,9 +27,13 @@ import java.util.*;
 @Service
 @Slf4j
 public class ByteDanceCampaignServiceImpl extends ServiceImpl<ByteDanceCampaignMapper, ByteDanceCampaign> implements IByteDanceCampaignService {
+    @Autowired
+    private ByteDanceCampaignMapper campaignMapper;
+    @Autowired
+    private ICtopOauthTokenService tokenService;
     /**
      * 每个广告主账号下最多可允许创建500个广告组,如超出需要先删除一部分广告组后才可继续创建。
-     * @param token
+     * @param accountId
      * @param campaignName
      * @param operation
      * @param budgetMode
@@ -36,8 +43,9 @@ public class ByteDanceCampaignServiceImpl extends ServiceImpl<ByteDanceCampaignM
      * @return
      */
     @Override
-    public Map<String, Object> createCampaign(CtopOauthToken token, String campaignName, String operation, String budgetMode, String budget, String landingType, String uniqueFk) {
+    public Map<String, Object> createCampaign(Long accountId, String campaignName, String operation, String budgetMode, Integer budget, String landingType, String uniqueFk) {
         Map<String,Object>result = new HashMap<>();
+        CtopOauthToken token = tokenService.getTokenByAccountId(accountId);
         // 请求地址
         String url = PropertiesUtils.getValue("bytedance_config", "bytedance_api_url") + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_campaign_create");
         // 请求参数
@@ -48,14 +56,14 @@ public class ByteDanceCampaignServiceImpl extends ServiceImpl<ByteDanceCampaignM
             param.put("operation",operation);
         }
         param.put("budget_mode", budgetMode);
-        if(null != budget&&!budget.trim().equals("")){
+        if(null != budget){
             param.put("budget",budget);
         }
         param.put("landing_type", landingType);
         if(null != uniqueFk&&!uniqueFk.trim().equals("")){
             param.put("unique_fk",uniqueFk);
         }
-        JSONObject data = HttpUtils.bytedancePostRequest(url,token.getAccessToken(),param);
+        JSONObject data = HttpUtils.bytedancePostRequest(token.getAccessToken(),url,param);
         if(data == null){
             log.error("创建广告组异常=>param:{}",param.toJSONString());
             ResultMapUtils.setResultMap(result, StatusCode.BYTEDACNE_API_GROUP_CREATE_ERROR);
@@ -68,14 +76,16 @@ public class ByteDanceCampaignServiceImpl extends ServiceImpl<ByteDanceCampaignM
             ResultMapUtils.setResultMap(result,-1,message,false);
             return result;
         }
+        System.out.println(data.toJSONString());
         Long campaignId = data.getJSONObject("data").getLong("campaign_id");
+        this.getAdvertiserCampaign(token,null,null);
         ResultMapUtils.setResultMap(result,StatusCode.COMMON_SUCCESS);
         result.put("campaign_id",campaignId);
         return result;
     }
 
     @Override
-    public Map<String, Object> updateCampaign(CtopOauthToken token, String campaignId, String campaignName,String budgetMode, String budget) {
+    public Map<String, Object> updateCampaign(CtopOauthToken token, Long campaignId, String campaignName,String budgetMode, Integer budget) {
         Map<String, Object> resultMap = new HashMap<>();
         ByteDanceCampaign campaign = this.getById(campaignId);
         //2: 根据token以及用户id获取用户信息数据
@@ -100,7 +110,6 @@ public class ByteDanceCampaignServiceImpl extends ServiceImpl<ByteDanceCampaignM
         String result = HttpUtils.httpPostRequest(url, params, headers);
         JSONObject jsonObject = JSONObject.parseObject(result);
         Integer code = jsonObject.getInteger("code");
-
         if (null == code || !code.equals(0)) {
             log.info("广告组更新接口异常==》accountId:{},message:{}", token.getAccountId(), jsonObject.getString("message"));
             resultMap.put("code", -1);
@@ -114,17 +123,7 @@ public class ByteDanceCampaignServiceImpl extends ServiceImpl<ByteDanceCampaignM
             resultMap.put("message", "广告组更新异常");
             return resultMap;
         }
-        if (null != campaignName && !"".equals(campaignName.trim())) {
-            campaign.setName(campaignName);
-        }
-        if (null != budgetMode && !"".equals(budgetMode.trim())) {
-            params.put("budget_mode", budgetMode);
-            campaign.setBudgetMode(budgetMode);
-        }
-        if (null != budget) {
-            campaign.setBudget(new BigDecimal(budget));
-        }
-        this.updateById(campaign);
+        this.getAdvertiserCampaign(token,campaignId+"",null);
 
         resultMap.put("code", 0);
         resultMap.put("message", "广告组信息修改成功");
@@ -140,6 +139,19 @@ public class ByteDanceCampaignServiceImpl extends ServiceImpl<ByteDanceCampaignM
         return resultMap;
     }
 
+    @Override
+    public Map<String, Object> updateCampaign(BytedanceCampaignEditVo editVo) {
+        Map<String,Object>result = new HashMap<>();
+        CtopOauthToken token = tokenService.getTokenByAccountId(editVo.getAccountId());
+        if(null == token){
+            ResultMapUtils.setResultMap(result,StatusCode.COMMON_PARAM_ERROR);
+            return result;
+        }
+        this.getAdvertiserCampaign(token,editVo.getId()+"",null);
+        this.updateCampaign(token,editVo.getId(),editVo.getCampaignName(),editVo.getBudgetMode(),editVo.getBudget());
+        return null;
+    }
+
     private void getAdvertiserCampaignByPageNumber(CtopOauthToken token, Integer pageNumber, String ids, String date) {
         //2: 根据token以及用户id获取用户信息数据
         String url = PropertiesUtils.getValue("bytedance_config", "bytedance_api_url") + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_campaign_get");
@@ -165,8 +177,8 @@ public class ByteDanceCampaignServiceImpl extends ServiceImpl<ByteDanceCampaignM
         params.put("filtering", filtering.toJSONString());
         params.put("advertiser_id", token.getAccountId());
         params.put("page", pageNumber + "");
+        params.put("page_size", 100);
         String result = HttpUtils.httpGetRequest(url, headers, params);
-        System.out.println(result);
         JSONObject jsonObject = JSONObject.parseObject(result);
         Integer code = jsonObject.getInteger("code");
         if (null == code || !code.equals(0)) {
@@ -175,20 +187,23 @@ public class ByteDanceCampaignServiceImpl extends ServiceImpl<ByteDanceCampaignM
         }
         JSONArray data = jsonObject.getJSONObject("data").getJSONArray("list");
         if (null == data || data.isEmpty()) {
-            log.error("获取广告组信息不存在==》accountId:{},message:{}", token.getAccountId(), jsonObject.getString("message"));
             return;
         }
+        List<ByteDanceCampaign> campaigns = new ArrayList<>();
         for (int i = 0; i < data.size(); i++) {
             JSONObject dataObject = data.getJSONObject(i);
             ByteDanceCampaign campaign = new ByteDanceCampaign(dataObject,token.getAccountId());
-            this.saveOrUpdate(campaign);
+            campaigns.add(campaign);
         }
+        campaignMapper.replaceBatch(campaigns);
         getAdvertiserCampaignByPageNumber(token, pageNumber + 1, ids, date);
     }
 
     @Override
-    public Map<String, Object> updateCampaignStatus(CtopOauthToken token, String campaignIds, String optStatus) {
+    public Map<String, Object> updateCampaignStatus(Long accountId, String campaignIds, String optStatus) {
         Map<String, Object> resultMap = new HashMap<>();
+        CtopOauthToken token = tokenService.getTokenByAccountId(accountId);
+        this.getAdvertiserCampaign(token,null,null);
         JSONArray ids = new JSONArray();
         String[] getIds = campaignIds.split(StringUtils.COMMA);
         if (null != getIds && getIds.length > 0) {
@@ -223,13 +238,7 @@ public class ByteDanceCampaignServiceImpl extends ServiceImpl<ByteDanceCampaignM
             resultMap.put("message", "广告组更新状态异常");
             return resultMap;
         }
-        JSONArray getCampaignIds = data.getJSONArray("campaign_ids");
-        if (null != getCampaignIds && !getCampaignIds.isEmpty()) {
-            for (int i = 0; i < getCampaignIds.size(); i++) {
-                Long id = getCampaignIds.getLong(i);
-                getAdvertiserCampaign(token,id+"",null);
-            }
-        }
+        this.getAdvertiserCampaign(token,null,null);
         resultMap.put("code", 0);
         resultMap.put("message", "广告组状态修改成功");
         return resultMap;

+ 12 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/vo/BytedanceCampaignEditVo.java

@@ -0,0 +1,12 @@
+package cn.com.ctop.toutiao.modules.material.vo;
+
+import lombok.Data;
+
+@Data
+public class BytedanceCampaignEditVo {
+    private Long accountId;
+    private Long id;
+    private String campaignName;
+    private String budgetMode;
+    private Integer budget;
+}