Parcourir la source

修改头条行政区划代码逻辑

syh il y a 5 ans
Parent
commit
e4be1acf7e
13 fichiers modifiés avec 236 ajouts et 249 suppressions
  1. 23 31
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouMaterialsLoadJob.java
  2. 9 27
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/controller/BytedanceAreaInfoController.java
  3. 5 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/mapper/BytedanceAreaInfoMapper.java
  4. 22 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/mapper/xml/BytedanceAreaInfoMapper.xml
  5. 5 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/service/IBytedanceAreaInfoService.java
  6. 0 14
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/service/IBytedanceGroupApiService.java
  7. 11 1
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/service/impl/BytedanceAreaInfoServiceImpl.java
  8. 0 142
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/service/impl/BytedanceGroupApiServiceImpl.java
  9. 13 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/vo/BytedanceAreaInfoVO.java
  10. 6 32
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/entity/ByteDanceCampaign.java
  11. 8 1
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/IByteDanceCampaignService.java
  12. 1 1
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/impl/ByteDanceAdvertiserDataServiceImpl.java
  13. 133 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/impl/ByteDanceCampaignServiceImpl.java

+ 23 - 31
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouMaterialsLoadJob.java

@@ -26,36 +26,28 @@ public class KuaishouMaterialsLoadJob implements Job {
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-        Thread thread = new Thread() {
-            @Override
-            public void run() {
-                //增加接口的开始和结束日期
-                Date startDate = DateUtils.addDay(new Date(), -1);
-                Date endDate = new Date();
-                //1:查询当日数据
-                List<CtopOauthToken> tokens = tokenService.selectKuaiShouToken();
-                executorService = Executors.newFixedThreadPool(8);
-                tokens.forEach(token -> {
-                    executorService.submit(new Runnable() {
-                        @Override
-                        public void run() {
-                            try {
-
-                                //获取全量视频素材数据
-                                kuaishouInterfaceService.getVideoList(token, DateUtils.getNowDate("yyyy-MM-dd"));
-                                // 获取图片信息数据
-                                kuaishouInterfaceService.getImageList(token, DateUtils.getNowDate("yyyy-MM-dd"));
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                            } finally {
-                            }
-                        }
-                    });
-                });
-                log.info("快手物料数据同步完成");
-            }
-        };
-        thread.start();
-
+        //增加接口的开始和结束日期
+        Date startDate = DateUtils.addDay(new Date(), -1);
+        Date endDate = new Date();
+        //1:查询当日数据
+        List<CtopOauthToken> tokens = tokenService.selectKuaiShouToken();
+        executorService = Executors.newFixedThreadPool(8);
+        tokens.forEach(token -> {
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        //获取全量视频素材数据
+                        kuaishouInterfaceService.getVideoList(token, DateUtils.getNowDate("yyyy-MM-dd"));
+                        // 获取图片信息数据
+                        kuaishouInterfaceService.getImageList(token, DateUtils.getNowDate("yyyy-MM-dd"));
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                    }
+                }
+            });
+        });
+        log.info("快手物料数据同步完成");
     }
 }

+ 9 - 27
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/controller/BytedanceAreaInfoController.java

@@ -1,11 +1,12 @@
 package cn.com.ctop.toutiao.modules.batch.controller;
 
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
 import cn.com.ctop.toutiao.modules.batch.entity.BytedanceAreaInfo;
 import cn.com.ctop.toutiao.modules.batch.service.IBytedanceAreaInfoService;
+import cn.com.ctop.toutiao.modules.batch.vo.BytedanceAreaInfoVO;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -29,8 +30,8 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
-import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -53,34 +54,15 @@ public class BytedanceAreaInfoController {
      * 分页列表查询
      *
      * @param bytedanceAreaInfo
-     * @param pageNo
-     * @param pageSize
      * @param req
      * @return
      */
-    @AutoLog(value = "省市县信息-分页列表查询")
-    @ApiOperation(value = "省市县信息-分页列表查询", notes = "省市县信息-分页列表查询")
     @GetMapping(value = "/list")
-    public Result<IPage<BytedanceAreaInfo>> queryPageList(BytedanceAreaInfo bytedanceAreaInfo,
-                                                          @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
-                                                          @RequestParam(name = "pageSize", defaultValue = "1000") Integer pageSize,
-                                                          HttpServletRequest req) {
-        Result<IPage<BytedanceAreaInfo>> result = new Result<>();
-        QueryWrapper<BytedanceAreaInfo> queryWrapper = QueryGenerator.initQueryWrapper(bytedanceAreaInfo, req.getParameterMap());
-        Page<BytedanceAreaInfo> page = new Page<>(pageNo, pageSize);
-        IPage<BytedanceAreaInfo> pageList = bytedanceAreaInfoService.page(page, queryWrapper);
-        List<BytedanceAreaInfo> areaInfos = pageList.getRecords();
-        if(null!=areaInfos&&!areaInfos.isEmpty()){
-            List<BytedanceAreaInfo>setAreas = new ArrayList<>();
-            areaInfos.forEach(areaInfo->{
-                boolean hasChild = bytedanceAreaInfoService.hasChild(areaInfo);
-                areaInfo.setHasChild(hasChild);
-                setAreas.add(areaInfo);
-            });
-            pageList.setRecords(setAreas);
-        }
-        result.setSuccess(true);
-        result.setResult(pageList);
+    public Map<String,Object> queryPageList(BytedanceAreaInfo bytedanceAreaInfo,HttpServletRequest req) {
+        Map<String,Object> result = new HashMap<>();
+        List<BytedanceAreaInfoVO> vos = bytedanceAreaInfoService.getListByParams(bytedanceAreaInfo);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
+        result.put("data",vos);
         return result;
     }
 

+ 5 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/mapper/BytedanceAreaInfoMapper.java

@@ -1,7 +1,11 @@
 package cn.com.ctop.toutiao.modules.batch.mapper;
 
 import cn.com.ctop.toutiao.modules.batch.entity.BytedanceAreaInfo;
+import cn.com.ctop.toutiao.modules.batch.vo.BytedanceAreaInfoVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 省市县信息
@@ -12,4 +16,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface BytedanceAreaInfoMapper extends BaseMapper<BytedanceAreaInfo> {
 
+    List<BytedanceAreaInfoVO> getListByParams(@Param(value = "parentCode") String parentCode, @Param(value = "level") Integer level);
 }

+ 22 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/mapper/xml/BytedanceAreaInfoMapper.xml

@@ -2,4 +2,26 @@
 <!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.batch.mapper.BytedanceAreaInfoMapper">
 
+    <select id="getListByParams" resultType="cn.com.ctop.toutiao.modules.batch.vo.BytedanceAreaInfoVO">
+        select
+            a.id,
+            a.name,
+            a.code,
+            a.parent_code,
+            a.level,
+            (
+                select
+                    count(1) from ctop_bytedance_area_info b
+                where
+                    b.parent_code = a.code
+                <if test="level!=null">
+                    and b.level &lt;= #{level}
+                </if>
+            ) as 'hasChild'
+        from ctop_bytedance_area_info a
+        where 1=1
+        <if test="parentCode!=null">
+           and a.parent_code = #{parentCode}
+        </if>
+    </select>
 </mapper>

+ 5 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/service/IBytedanceAreaInfoService.java

@@ -1,8 +1,11 @@
 package cn.com.ctop.toutiao.modules.batch.service;
 
 import cn.com.ctop.toutiao.modules.batch.entity.BytedanceAreaInfo;
+import cn.com.ctop.toutiao.modules.batch.vo.BytedanceAreaInfoVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * 省市县信息
  *
@@ -13,4 +16,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
 public interface IBytedanceAreaInfoService extends IService<BytedanceAreaInfo> {
 
     boolean hasChild(BytedanceAreaInfo areaInfo);
+
+    List<BytedanceAreaInfoVO> getListByParams(BytedanceAreaInfo bytedanceAreaInfo);
 }

+ 0 - 14
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/service/IBytedanceGroupApiService.java

@@ -1,14 +0,0 @@
-package cn.com.ctop.toutiao.modules.batch.service;
-
-import cn.com.ctop.common.module.entity.CtopOauthToken;
-import cn.com.ctop.toutiao.modules.material.entity.ByteDanceCampaign;
-import com.alibaba.fastjson.JSONArray;
-
-import java.util.List;
-import java.util.Map;
-
-public interface IBytedanceGroupApiService {
-    List<ByteDanceCampaign> getGroupListByParams(CtopOauthToken token, JSONArray ids, String campaignName, String landingType, String status, String campaignCreateTime, Integer page, Integer pageSize);
-    Map<String,Object>createGroup(CtopOauthToken token,String campaignName,String operation,String budgetMode,String budget,String landingType,String uniqueFk);
-    Map<String,Object>updateGroup(CtopOauthToken token, String campaignId, String campaignName, String modifyTime,String budget);
-}

+ 11 - 1
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/service/impl/BytedanceAreaInfoServiceImpl.java

@@ -3,10 +3,13 @@ package cn.com.ctop.toutiao.modules.batch.service.impl;
 import cn.com.ctop.toutiao.modules.batch.entity.BytedanceAreaInfo;
 import cn.com.ctop.toutiao.modules.batch.mapper.BytedanceAreaInfoMapper;
 import cn.com.ctop.toutiao.modules.batch.service.IBytedanceAreaInfoService;
+import cn.com.ctop.toutiao.modules.batch.vo.BytedanceAreaInfoVO;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -18,7 +21,8 @@ import java.util.List;
  */
 @Service
 public class BytedanceAreaInfoServiceImpl extends ServiceImpl<BytedanceAreaInfoMapper, BytedanceAreaInfo> implements IBytedanceAreaInfoService {
-
+    @Autowired
+    private BytedanceAreaInfoMapper bytedanceAreaInfoMapper;
     @Override
     public boolean hasChild(BytedanceAreaInfo areaInfo) {
         QueryWrapper<BytedanceAreaInfo>queryWrapper = new QueryWrapper<>();
@@ -30,4 +34,10 @@ public class BytedanceAreaInfoServiceImpl extends ServiceImpl<BytedanceAreaInfoM
             return true;
         }
     }
+
+    @Override
+    public List<BytedanceAreaInfoVO> getListByParams(BytedanceAreaInfo bytedanceAreaInfo) {
+        List<BytedanceAreaInfoVO>areaInfos = bytedanceAreaInfoMapper.getListByParams(bytedanceAreaInfo.getParentCode(),bytedanceAreaInfo.getLevel());
+        return areaInfos;
+    }
 }

+ 0 - 142
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/service/impl/BytedanceGroupApiServiceImpl.java

@@ -1,142 +0,0 @@
-package cn.com.ctop.toutiao.modules.batch.service.impl;
-
-import cn.com.ctop.common.module.entity.CtopOauthToken;
-import cn.com.ctop.common.module.utils.HttpUtils;
-import cn.com.ctop.common.module.utils.PropertiesUtils;
-import cn.com.ctop.common.module.utils.ResultMapUtils;
-import cn.com.ctop.common.module.utils.StatusCode;
-import cn.com.ctop.toutiao.modules.batch.service.IBytedanceGroupApiService;
-import cn.com.ctop.toutiao.modules.material.entity.ByteDanceCampaign;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@Service
-@Slf4j
-public class BytedanceGroupApiServiceImpl implements IBytedanceGroupApiService {
-    @Override
-    /**
-     * 获取广告组数据
-     */
-    public List<ByteDanceCampaign> getGroupListByParams(CtopOauthToken token, JSONArray ids, String campaignName, String landingType, String status, String campaignCreateTime, Integer page, Integer pageSize) {
-        List<ByteDanceCampaign> campaigns = new ArrayList<>();
-        // 请求地址
-        String url = PropertiesUtils.getValue("bytedance_config", "bytedance_api_url") + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_campaign_get");
-        // 请求参数
-        JSONObject filtering = new JSONObject();
-        if(null!=ids&&!ids.isEmpty()){
-            filtering.put("ids",ids);
-        }
-        if(null!=campaignName&&!campaignName.equals("")){
-            filtering.put("campaign_name",campaignName);
-        }
-        if(null!=landingType&&!landingType.equals("")){
-            filtering.put("landing_type",landingType);
-        }
-        if(null!=status&&!status.equals("")){
-            filtering.put("status",status);
-        }
-        if(null!=campaignCreateTime&&!campaignCreateTime.equals("")){
-            filtering.put("campaign_create_time",landingType);
-        }
-
-        JSONObject params = new JSONObject();
-        params.put("advertiser_id", token.getAccountId());
-        params.put("page", page);
-        params.put("page_size", pageSize);
-        params.put("filtering", filtering);
-        JSONObject result = HttpUtils.bytedanceGetRequest(token.getAccessToken(),url,params);
-        if(result == null){
-            log.error("获取广告组数据异常=>param:{}",params.toJSONString());
-            return campaigns;
-        }
-        Integer code = result.getInteger("code");
-        String message = result.getString("message");
-        if(null == code||!code.equals(0)){
-            log.error("获取广告组数据异常=>{},param:{}",message,params.toJSONString());
-            return campaigns;
-        }
-        JSONArray dataList = result.getJSONObject("data").getJSONArray("list");
-        if(null == dataList||dataList.isEmpty()){
-            log.info("获取广告组数据为空=>param:{}",params.toJSONString());
-            return campaigns;
-        }
-        for(int i=0;i<dataList.size();i++){
-            JSONObject data = dataList.getJSONObject(i);
-            ByteDanceCampaign campaign = new ByteDanceCampaign(data,token.getAccountId().toString());
-            campaigns.add(campaign);
-        }
-        return campaigns;
-    }
-
-    /**
-     * 每个广告主账号下最多可允许创建500个广告组,如超出需要先删除一部分广告组后才可继续创建。
-     * @param token
-     * @param campaignName
-     * @param operation
-     * @param budgetMode
-     * @param budget
-     * @param landingType
-     * @param uniqueFk
-     * @return
-     */
-    @Override
-    public Map<String, Object> createGroup(CtopOauthToken token, String campaignName, String operation, String budgetMode, String budget, String landingType, String uniqueFk) {
-        Map<String,Object>result = new HashMap<>();
-        // 请求地址
-        String url = PropertiesUtils.getValue("bytedance_config", "bytedance_api_url") + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_campaign_create");
-        // 请求参数
-        JSONObject param = new JSONObject();
-        param.put("advertiser_id",token.getAccountId());
-        param.put("campaign_name",campaignName);
-        if(null!=operation&&!operation.trim().equals("")){
-            param.put("operation",operation);
-        }
-        param.put("budget_mode", budgetMode);
-        if(null != budget&&!budget.trim().equals("")){
-            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);
-        if(data == null){
-            log.error("创建广告组异常=>param:{}",param.toJSONString());
-            ResultMapUtils.setResultMap(result, StatusCode.BYTEDACNE_API_GROUP_CREATE_ERROR);
-            return result;
-        }
-        Integer code = data.getInteger("code");
-        String message = data.getString("message");
-        if(null == code||!code.equals(0)){
-            log.error("获取广告组数据异常=>{},parmas:{}",message,param.toJSONString());
-            ResultMapUtils.setResultMap(result,-1,message,false);
-            return result;
-        }
-        Long campaignId = data.getJSONObject("data").getLong("campaign_id");
-        ResultMapUtils.setResultMap(result,StatusCode.COMMON_SUCCESS);
-        result.put("campaign_id",campaignId);
-        return result;
-    }
-
-    @Override
-    public Map<String, Object> updateGroup(CtopOauthToken token, String campaignId, String campaignName, String modifyTime,String budget) {
-        // 请求地址
-        String url = "https://ad.oceanengine.com/open_api/2/campaign/update/";
-        // 请求参数
-        JSONObject data = new JSONObject();
-        data.put("advertiser_id",token.getAccountId());
-        data.put("campaign_name",campaignName);
-        data.put("budget",budget);
-        data.put("campaign_id", campaignId);
-        data.put("modify_time", modifyTime);
-        JSONObject result = HttpUtils.bytedancePostRequest(token.getAccessToken(),url,data);
-        return new HashMap<>();
-    }
-}

+ 13 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/batch/vo/BytedanceAreaInfoVO.java

@@ -0,0 +1,13 @@
+package cn.com.ctop.toutiao.modules.batch.vo;
+
+import lombok.Data;
+
+@Data
+public class BytedanceAreaInfoVO {
+    private Long id;
+    private String name;
+    private String code;
+    private String parentCode;
+    private Integer level;
+    private Integer hasChild;
+}

+ 6 - 32
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/entity/ByteDanceCampaign.java

@@ -34,24 +34,8 @@ public class ByteDanceCampaign {
     @TableId
     @ApiModelProperty(value = "今日头条广告组id")
     private Long id;
-    /**
-     * 平台用户id
-     */
-    @Excel(name = "平台用户id", width = 15)
-    @ApiModelProperty(value = "平台用户id")
-    private String advertiserId;
-    /**
-     * 头条账号id
-     */
-    @Excel(name = "头条账号id", width = 15)
-    @ApiModelProperty(value = "头条账号id")
-    private Long toutiaoId;
-    /**
-     * 头条账号id
-     */
-    @Excel(name = "模板id", width = 15)
-    @ApiModelProperty(value = "模板id")
-    private Long templateId;
+
+    private Long accountId;
     /**
      * 广告组名称
      */
@@ -119,8 +103,7 @@ public class ByteDanceCampaign {
 
     public ByteDanceCampaign(Long id, String advertiserId, Long toutiaoId, String name, BigDecimal budget, String budgetMode, String landingType, String modifyTime, String status, String optStatus, String campaignCreateTime, String campaignModifyTime, Date createTime, Date updateTime) {
         this.id = id;
-        this.advertiserId = advertiserId;
-        this.toutiaoId = toutiaoId;
+
         this.name = name;
         this.budget = budget;
         this.budgetMode = budgetMode;
@@ -134,14 +117,10 @@ public class ByteDanceCampaign {
         this.updateTime = updateTime;
     }
 
-    public ByteDanceCampaign(JSONObject dataObject, String accountId) {
+    public ByteDanceCampaign(JSONObject dataObject, Long accountId) {
         Long id = dataObject.getLong("id");
         this.id = id;
-        this.advertiserId = accountId;
-        Long toutiaoId = dataObject.getLong("advertiser_id");
-        if (null != toutiaoId) {
-            this.toutiaoId = toutiaoId;
-        }
+        this.accountId = accountId;
         String name = dataObject.getString("name");
         if (null != name && !"".equals(name.trim())) {
             this.name = name;
@@ -185,18 +164,13 @@ public class ByteDanceCampaign {
 
     public ByteDanceCampaign(Long id, CtopOauthToken oauthToken, String campaignName, String budgetMode, Integer budget, String landingType) {
         this.id = id;
-        this.advertiserId = oauthToken.getAdvertiserId();
+        this.accountId = oauthToken.getAccountId();
         this.name = campaignName;
         this.budgetMode = budgetMode;
         this.budget = BigDecimal.valueOf(budget);
         this.landingType = landingType;
-        this.toutiaoId = oauthToken.getAccountId();
         Date now = new Date();
         this.createTime = now;
         this.updateTime = now;
     }
-
-    public ByteDanceCampaign(JSONObject data, CtopOauthToken token) {
-
-    }
 }

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

@@ -1,8 +1,13 @@
 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 com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * @Description: 今日头条广告组信息
  * @Author: jeecg-boot
@@ -10,5 +15,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @Version: V1.0
  */
 public interface IByteDanceCampaignService extends IService<ByteDanceCampaign> {
-
+    List<ByteDanceCampaign> getGroupListByParams(CtopOauthToken token, JSONArray ids, String campaignName, String landingType, String status, String campaignCreateTime, Integer page, Integer pageSize);
+    Map<String,Object> createGroup(CtopOauthToken token, String campaignName, String operation, String budgetMode, String budget, String landingType, String uniqueFk);
+    Map<String,Object>updateGroup(CtopOauthToken token, String campaignId, String campaignName, String modifyTime,String budget);
 }

+ 1 - 1
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/service/impl/ByteDanceAdvertiserDataServiceImpl.java

@@ -798,7 +798,7 @@ public class ByteDanceAdvertiserDataServiceImpl implements IByteDanceAdvertiserD
         }
         for (int i = 0; i < data.size(); i++) {
             JSONObject dataObject = data.getJSONObject(i);
-            ByteDanceCampaign campaign = new ByteDanceCampaign(dataObject, accountId);
+            ByteDanceCampaign campaign = new ByteDanceCampaign(dataObject, Long.parseLong(accountId));
             campaignService.saveOrUpdate(campaign);
         }
         getAdvertiserCampaignByPageNumber(accountId, pageNumber + 1, ids, date);

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

@@ -1,11 +1,24 @@
 package cn.com.ctop.toutiao.modules.material.service.impl;
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.utils.HttpUtils;
+import cn.com.ctop.common.module.utils.PropertiesUtils;
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
 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 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.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @Description: 今日头条广告组信息
  * @Author: jeecg-boot
@@ -14,6 +27,126 @@ import org.springframework.stereotype.Service;
  */
 
 @Service
+@Slf4j
 public class ByteDanceCampaignServiceImpl extends ServiceImpl<ByteDanceCampaignMapper, ByteDanceCampaign> implements IByteDanceCampaignService {
+    @Override
+    /**
+     * 获取广告组数据
+     */
+    public List<ByteDanceCampaign> getGroupListByParams(CtopOauthToken token, JSONArray ids, String campaignName, String landingType, String status, String campaignCreateTime, Integer page, Integer pageSize) {
+        List<ByteDanceCampaign> campaigns = new ArrayList<>();
+        // 请求地址
+        String url = PropertiesUtils.getValue("bytedance_config", "bytedance_api_url") + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_campaign_get");
+        // 请求参数
+        JSONObject filtering = new JSONObject();
+        if(null!=ids&&!ids.isEmpty()){
+            filtering.put("ids",ids);
+        }
+        if(null!=campaignName&&!campaignName.equals("")){
+            filtering.put("campaign_name",campaignName);
+        }
+        if(null!=landingType&&!landingType.equals("")){
+            filtering.put("landing_type",landingType);
+        }
+        if(null!=status&&!status.equals("")){
+            filtering.put("status",status);
+        }
+        if(null!=campaignCreateTime&&!campaignCreateTime.equals("")){
+            filtering.put("campaign_create_time",landingType);
+        }
+
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", token.getAccountId());
+        params.put("page", page);
+        params.put("page_size", pageSize);
+        params.put("filtering", filtering);
+        JSONObject result = HttpUtils.bytedanceGetRequest(token.getAccessToken(),url,params);
+        if(result == null){
+            log.error("获取广告组数据异常=>param:{}",params.toJSONString());
+            return campaigns;
+        }
+        Integer code = result.getInteger("code");
+        String message = result.getString("message");
+        if(null == code||!code.equals(0)){
+            log.error("获取广告组数据异常=>{},param:{}",message,params.toJSONString());
+            return campaigns;
+        }
+        JSONArray dataList = result.getJSONObject("data").getJSONArray("list");
+        if(null == dataList||dataList.isEmpty()){
+            log.info("获取广告组数据为空=>param:{}",params.toJSONString());
+            return campaigns;
+        }
+        for(int i=0;i<dataList.size();i++){
+            JSONObject data = dataList.getJSONObject(i);
+            ByteDanceCampaign campaign = new ByteDanceCampaign(data,token.getAccountId());
+            this.saveOrUpdate(campaign);
+            campaigns.add(campaign);
+        }
+        return campaigns;
+    }
+
+    /**
+     * 每个广告主账号下最多可允许创建500个广告组,如超出需要先删除一部分广告组后才可继续创建。
+     * @param token
+     * @param campaignName
+     * @param operation
+     * @param budgetMode
+     * @param budget
+     * @param landingType
+     * @param uniqueFk
+     * @return
+     */
+    @Override
+    public Map<String, Object> createGroup(CtopOauthToken token, String campaignName, String operation, String budgetMode, String budget, String landingType, String uniqueFk) {
+        Map<String,Object>result = new HashMap<>();
+        // 请求地址
+        String url = PropertiesUtils.getValue("bytedance_config", "bytedance_api_url") + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_campaign_create");
+        // 请求参数
+        JSONObject param = new JSONObject();
+        param.put("advertiser_id",token.getAccountId());
+        param.put("campaign_name",campaignName);
+        if(null!=operation&&!operation.trim().equals("")){
+            param.put("operation",operation);
+        }
+        param.put("budget_mode", budgetMode);
+        if(null != budget&&!budget.trim().equals("")){
+            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);
+        if(data == null){
+            log.error("创建广告组异常=>param:{}",param.toJSONString());
+            ResultMapUtils.setResultMap(result, StatusCode.BYTEDACNE_API_GROUP_CREATE_ERROR);
+            return result;
+        }
+        Integer code = data.getInteger("code");
+        String message = data.getString("message");
+        if(null == code||!code.equals(0)){
+            log.error("获取广告组数据异常=>{},parmas:{}",message,param.toJSONString());
+            ResultMapUtils.setResultMap(result,-1,message,false);
+            return result;
+        }
+        Long campaignId = data.getJSONObject("data").getLong("campaign_id");
+        ResultMapUtils.setResultMap(result,StatusCode.COMMON_SUCCESS);
+        result.put("campaign_id",campaignId);
+        return result;
+    }
 
+    @Override
+    public Map<String, Object> updateGroup(CtopOauthToken token, String campaignId, String campaignName, String modifyTime,String budget) {
+        // 请求地址
+        String url = "https://ad.oceanengine.com/open_api/2/campaign/update/";
+        // 请求参数
+        JSONObject data = new JSONObject();
+        data.put("advertiser_id",token.getAccountId());
+        data.put("campaign_name",campaignName);
+        data.put("budget",budget);
+        data.put("campaign_id", campaignId);
+        data.put("modify_time", modifyTime);
+        JSONObject result = HttpUtils.bytedancePostRequest(token.getAccessToken(),url,data);
+        return new HashMap<>();
+    }
 }