Browse Source

修改代码逻辑

syh 5 years ago
parent
commit
8e8aad3e28
13 changed files with 183 additions and 118 deletions
  1. 5 5
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceAdvertiserPostController.java
  2. 44 7
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceTemplateController.java
  3. 7 6
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ByteDanceAdvertisePlan.java
  4. 4 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ByteDanceImageInfo.java
  5. 3 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ByteDanceVideoInfo.java
  6. 8 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/UserAllocation.java
  7. 2 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IByteDanceAdvertisePlanService.java
  8. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IBytedanceAdvertisePlanTemplateService.java
  9. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IFileInfoService.java
  10. 4 6
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ByteDanceAdvertisePlanServiceImpl.java
  11. 75 29
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/BytedanceAdvertisePlanTemplateServiceImpl.java
  12. 25 52
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/FileInfoServiceImpl.java
  13. 3 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/common/BytedanceInterfaceConstant.java

+ 5 - 5
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceAdvertiserPostController.java

@@ -175,7 +175,7 @@ public class ByteDanceAdvertiserPostController {
         data.put("download_type", "DOWNLOAD_URL");//坑
         data.put("package", "com.igg.android.lordsmobile_cn");//坑
         data.put("app_type", "APP_ANDROID");//坑
-        return advertisePlanService.advertiserPlanCreate(accountId, campaignId, data.toJSONString());
+        return advertisePlanService.advertiserPlanCreate(new CTopOauthToken(), campaignId, data.toJSONString());
     }
 
     /**
@@ -254,8 +254,8 @@ public class ByteDanceAdvertiserPostController {
      * @
      */
     @RequestMapping("/advertiser/video/add")
-    public Map<String, Object> advertiserVideoAdd(String accountId, Long videoFileId) {
-        return fileInfoService.uploadVideoToTemplate(accountId, videoFileId, "bytedance");
+    public Map<String, Object> advertiserVideoAdd(String accountId, String videoUrl) {
+        return fileInfoService.uploadVideoToTemplate(accountId, videoUrl, "bytedance");
     }
 
     /**
@@ -265,8 +265,8 @@ public class ByteDanceAdvertiserPostController {
      * @
      */
     @RequestMapping("/advertiser/image/add")
-    public Map<String, Object> advertiserImageAdd(String accountId, Long imageFileId) {
-        return fileInfoService.uploadImageToTemplate(accountId, imageFileId, "bytedance");
+    public Map<String, Object> advertiserImageAdd(String accountId, String imageUrl) {
+        return fileInfoService.uploadImageToTemplate(accountId, imageUrl, "bytedance");
     }
 
     @RequestMapping("/industry/list")

+ 44 - 7
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceTemplateController.java

@@ -57,6 +57,23 @@ public class ByteDanceTemplateController {
         return deliveryTargetTemplateService.insertTemplate(template);
     }
 
+    @PostMapping(value = "allocation/list")
+    public Result<IPage<UserAllocation>> queryPageList(@RequestBody UserAllocation userAllocation,
+                                                       @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                       @RequestParam(name = "pageSize", defaultValue = "100") Integer pageSize,
+                                                       HttpServletRequest req) {
+        Result<IPage<UserAllocation>> result = new Result<>();
+        QueryWrapper<UserAllocation> queryWrapper = QueryGenerator.initQueryWrapper(userAllocation, req.getParameterMap());
+        Page<UserAllocation> page = new Page<>(pageNo, pageSize);
+        IPage<UserAllocation> pageList = userAllocationService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    @Autowired
+    private IUserAllocationService userAllocationService;
+
     /**
      * 用户定向
      *
@@ -77,8 +94,8 @@ public class ByteDanceTemplateController {
      * @return
      */
     @PostMapping("advertiserplan/insert")
-    public Map<String, Object> advertiserplanTemplateInsert(@RequestBody BytedanceAdvertisePlanTemplate template, HttpServletRequest req) {
-        return advertisePlanTemplateService.insertTemplate(template);
+    public Map<String, Object> advertiserplanTemplateInsert(@RequestBody BytedanceAdvertisePlanTemplate template, String accountId, HttpServletRequest req) {
+        return advertisePlanTemplateService.insertTemplate(template, accountId);
     }
 
     /**
@@ -123,13 +140,11 @@ public class ByteDanceTemplateController {
      * @功能:获取广告组列表信息
      */
     @PostMapping(value = "campaign/data/list")
-    public Result<IPage<ByteDanceCampaign>> audiencePageList(ByteDanceCampaign campaign, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
-                                                             @RequestParam(name = "pageSize", defaultValue = "100") Integer pageSize, HttpServletRequest req) {
+    public Result<IPage<ByteDanceCampaign>> campaignPageList(@RequestBody ByteDanceCampaign campaign, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                             @RequestParam(name = "pageSize", defaultValue = "1000") Integer pageSize, HttpServletRequest req) {
         Result<IPage<ByteDanceCampaign>> result = new Result<>();
-        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        campaign.setAdvertiserId(user.getId());
         QueryWrapper<ByteDanceCampaign> queryWrapper = QueryGenerator.initQueryWrapper(campaign, req.getParameterMap());
-        queryWrapper.eq("advertiser_id", campaign.getAdvertiserId()).orderByAsc("id");
+        queryWrapper.eq("toutiao_id", campaign.getToutiaoId()).orderByAsc("id");
         Page<ByteDanceCampaign> page = new Page<>(pageNo, pageSize);
         IPage<ByteDanceCampaign> pageList = campaignService.page(page, queryWrapper);
         result.setSuccess(true);
@@ -137,6 +152,28 @@ public class ByteDanceTemplateController {
         return result;
     }
 
+    /**
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     * @功能:获取广告计划列表信息
+     */
+    @PostMapping(value = "plan/data/list")
+    public Result<IPage<ByteDanceAdvertisePlan>> planPageList(@RequestBody ByteDanceAdvertisePlan plan, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                              @RequestParam(name = "pageSize", defaultValue = "1000") Integer pageSize, HttpServletRequest req) {
+        Result<IPage<ByteDanceAdvertisePlan>> result = new Result<>();
+        QueryWrapper<ByteDanceAdvertisePlan> queryWrapper = QueryGenerator.initQueryWrapper(plan, req.getParameterMap());
+        queryWrapper.eq("toutiao_id", plan.getToutiaoId()).orderByDesc("id");
+        Page<ByteDanceAdvertisePlan> page = new Page<>(pageNo, pageSize);
+        IPage<ByteDanceAdvertisePlan> pageList = planService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    @Autowired
+    private IByteDanceAdvertisePlanService planService;
     @Autowired
     private IByteDanceCampaignService campaignService;
 

+ 7 - 6
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ByteDanceAdvertisePlan.java

@@ -424,17 +424,17 @@ public class ByteDanceAdvertisePlan {
         }
     }
 
-    public ByteDanceAdvertisePlan(JSONObject dataObject, String accountId, Long adId, JSONObject params) {
+    public ByteDanceAdvertisePlan(String advertiserId, Long adId, JSONObject params) {
         this.id = adId;
-        this.advertiserId = accountId;
+        this.advertiserId = advertiserId;
         String name = params.getString("name");
         if (null != name && !"".equals(name.trim())) {
             this.name = name;
         }
 
-        Long advertiserId = params.getLong("advertiser_id");
-        if (null != advertiserId) {
-            this.toutiaoId = advertiserId;
+        Long toutiaoId = params.getLong("advertiser_id");
+        if (null != toutiaoId) {
+            this.toutiaoId = toutiaoId;
         }
         Long campaignId = params.getLong("campaign_id");
         if (null != campaignId) {
@@ -687,5 +687,6 @@ public class ByteDanceAdvertisePlan {
         }
     }
 
-
+    public ByteDanceAdvertisePlan() {
+    }
 }

+ 4 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ByteDanceImageInfo.java

@@ -41,7 +41,7 @@ public class ByteDanceImageInfo {
      */
     @Excel(name = "文件id", width = 15)
     @ApiModelProperty(value = "文件id")
-    private Long fileId;
+    private String fileId;
     /**
      * 头条平台账号id
      */
@@ -105,9 +105,9 @@ public class ByteDanceImageInfo {
     @ApiModelProperty(value = "updateTime")
     private Date updateTime;
 
-    public ByteDanceImageInfo(JSONObject data, CTopOauthToken token, Long imageFileId) {
-        this.id = data.getString("video_id");
-        this.fileId = imageFileId;
+    public ByteDanceImageInfo(JSONObject data, CTopOauthToken token) {
+        this.id = data.getString("id");
+        this.fileId = id;
         this.accountId = token.getAccountId();
         this.advertiserId = token.getAdvertiserId();
         this.width = data.getInteger("width");

+ 3 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/ByteDanceVideoInfo.java

@@ -41,7 +41,7 @@ public class ByteDanceVideoInfo {
      */
     @Excel(name = "对应本文件id", width = 15)
     @ApiModelProperty(value = "对应本文件id")
-    private Long fileId;
+    private String fileId;
     /**
      * 平台账号id
      */
@@ -101,9 +101,9 @@ public class ByteDanceVideoInfo {
     @ApiModelProperty(value = "updateTime")
     private Date updateTime;
 
-    public ByteDanceVideoInfo(JSONObject data, CTopOauthToken token, Long fileId) {
+    public ByteDanceVideoInfo(JSONObject data, CTopOauthToken token) {
         this.id = data.getString("video_id");
-        this.fileId = fileId;
+        this.fileId = id;
         this.accountId = token.getAccountId();
         this.advertiserId = token.getAdvertiserId();
         this.width = data.getInteger("width");

+ 8 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/UserAllocation.java

@@ -31,15 +31,21 @@ public class UserAllocation {
 	/**主键ID*/
 	@TableId(type = IdType.UUID)
     @ApiModelProperty(value = "主键ID")
-	private Integer id;
+    private Long id;
 	/**登陆人id*/
 	@Excel(name = "登陆人id", width = 15)
     @ApiModelProperty(value = "登陆人id")
 	private String userId;
+    /**
+     * 平台类型 1:头条 2:快手
+     */
+    @Excel(name = "平台类型", width = 15)
+    @ApiModelProperty(value = "平台类型")
+    private String mediaId;
 	/**账户id*/
 	@Excel(name = "账户id", width = 15)
     @ApiModelProperty(value = "账户id")
-	private Integer accountId;
+    private Long accountId;
 	/**广告主ID*/
 	@Excel(name = "广告主ID", width = 15)
     @ApiModelProperty(value = "广告主ID")

+ 2 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IByteDanceAdvertisePlanService.java

@@ -2,6 +2,7 @@ package org.jeecg.modules.ctop.service;
 
 import org.jeecg.modules.ctop.entity.ByteDanceAdvertisePlan;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.ctop.entity.CTopOauthToken;
 
 import java.util.Map;
 
@@ -13,5 +14,5 @@ import java.util.Map;
  */
 public interface IByteDanceAdvertisePlanService extends IService<ByteDanceAdvertisePlan> {
 
-    Map<String, Object> advertiserPlanCreate(String accountId, Long campaignId, String dataString);
+    Map<String, Object> advertiserPlanCreate(CTopOauthToken token, Long campaignId, String dataString);
 }

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IBytedanceAdvertisePlanTemplateService.java

@@ -13,5 +13,5 @@ import java.util.Map;
  */
 public interface IBytedanceAdvertisePlanTemplateService extends IService<BytedanceAdvertisePlanTemplate> {
 
-    Map<String, Object> insertTemplate(BytedanceAdvertisePlanTemplate template);
+    Map<String, Object> insertTemplate(BytedanceAdvertisePlanTemplate template, String accountId);
 }

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IFileInfoService.java

@@ -13,9 +13,9 @@ import java.util.Map;
  */
 public interface IFileInfoService extends IService<FileInfo> {
 
-    Map<String, Object> uploadVideoToTemplate(String accountId, Long videoFileId, String templatename);
+    Map<String, Object> uploadVideoToTemplate(String accountId, String videoUrl, String templatename);
 
-    Map<String, Object> uploadImageToTemplate(String accountId, Long imageFileId, String templatename);
+    Map<String, Object> uploadImageToTemplate(String accountId, String imageFileId, String templatename);
 
     Map<String, Object> getIndustryList(String accountId);
 }

+ 4 - 6
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ByteDanceAdvertisePlanServiceImpl.java

@@ -39,10 +39,8 @@ public class ByteDanceAdvertisePlanServiceImpl extends ServiceImpl<ByteDanceAdve
     private static final Logger logger = LoggerFactory.getLogger(ByteDanceAdvertisePlanServiceImpl.class);
 
     @Override
-    public Map<String, Object> advertiserPlanCreate(String accountId, Long campaignId, String dataString) {
+    public Map<String, Object> advertiserPlanCreate(CTopOauthToken token, Long campaignId, String dataString) {
         Map<String, Object> resultMap = new HashMap<>();
-        //1:获取token
-        CTopOauthToken token = tokenService.getOAuthTokenByAccountId(accountId);
         JSONObject data = JSONObject.parseObject(dataString);
         data.put("advertiser_id", token.getAccountId());
         data.put("campaign_id", campaignId);
@@ -50,14 +48,14 @@ public class ByteDanceAdvertisePlanServiceImpl extends ServiceImpl<ByteDanceAdve
         Integer code = result.getInteger("code");
         String message = result.getString("message");
         if (null == code || code != 0) {
-            logger.info("广告计划创建失败,accountId:{},message:{}", accountId, message);
+            logger.info("广告计划创建失败,广告主id:{},message:{}", token.getAdvertiserId(), message);
             resultMap.put("code", -1);
-            resultMap.put("message", "广告计划创建失败");
+            resultMap.put("message", message);
             return resultMap;
         }
         JSONObject dataObject = result.getJSONObject("data");
         Long adId = dataObject.getLong("ad_id");
-        ByteDanceAdvertisePlan plan = new ByteDanceAdvertisePlan(dataObject, accountId, adId, data);
+        ByteDanceAdvertisePlan plan = new ByteDanceAdvertisePlan(token.getAdvertiserId(), adId, data);
         planMapper.insert(plan);
         resultMap.put("code", 0);
         resultMap.put("message", "广告计划创建成功");

+ 75 - 29
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/BytedanceAdvertisePlanTemplateServiceImpl.java

@@ -3,10 +3,8 @@ package org.jeecg.modules.ctop.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.system.vo.LoginUser;
-import org.jeecg.modules.ctop.entity.ByteDanceBudgetTemplate;
-import org.jeecg.modules.ctop.entity.BytedanceAdvertisePlanTemplate;
-import org.jeecg.modules.ctop.entity.CTopOauthToken;
-import org.jeecg.modules.ctop.mapper.BytedanceAdvertisePlanTemplateMapper;
+import org.jeecg.modules.ctop.entity.*;
+import org.jeecg.modules.ctop.mapper.*;
 import org.jeecg.modules.ctop.service.IByteDanceAdvertisePlanService;
 import org.jeecg.modules.ctop.service.IBytedanceAdvertisePlanTemplateService;
 import org.jeecg.modules.ctop.service.ICTopOauthTokenService;
@@ -28,37 +26,85 @@ import java.util.Map;
 public class BytedanceAdvertisePlanTemplateServiceImpl extends ServiceImpl<BytedanceAdvertisePlanTemplateMapper, BytedanceAdvertisePlanTemplate> implements IBytedanceAdvertisePlanTemplateService {
 
     @Override
-    public Map<String, Object> insertTemplate(BytedanceAdvertisePlanTemplate template) {
+    public Map<String, Object> insertTemplate(BytedanceAdvertisePlanTemplate template, String accountId) {
         Map<String, Object> resultMap = new HashMap<>();
-        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        CTopOauthToken token = tokenService.getOAuthTokenByAccountId(user.getId());
-        template.setStatus(1);
-        templateMapper.insert(template);
+        accountId = "74099510334";
+        template = templateMapper.selectById(2);
+        CTopOauthToken token = tokenService.getOAuthTokenByAccountId(accountId);
+//        template.setStatus(1);
+//        templateMapper.insert(template);
         //同步线上广告计划信息
-        String accountId = "e9ca23d68d884d4ebb19d07889727dae";
-        Long campaignId = template.getCampaignTemplateId();
-//        ByteDanceBudgetTemplate budgetTemplate = bu
+        ByteDanceBudgetTemplate budgetTemplate = budgetTemplateMapper.selectById(template.getBudgetTemplateId());
+        BytedanceDeliveryTargetTemplate deliveryTargetTemplate = deliveryTargetTemplateMapper.selectById(template.getDeliveryTargetTemplateId());
+        ByteDanceUserOrientationTemplate userOrientationTemplate = userOrientationTemplateMapper.selectById(template.getUserOrentationTemplateId());
+        ByteDanceCampaign campaign = campaignMapper.selectById(template.getCampaignTemplateId());
         JSONObject data = new JSONObject();
-        data.put("campaign_id", campaignId);
-        data.put("delivery_range", "DEFAULT");
-        data.put("budget_mode", "BUDGET_MODE_DAY");
-        data.put("budget", 2000);//需要大于bid
-        data.put("bid", 100);
-        data.put("start_time", "2019-07-30 01:00");
-        data.put("end_time", "2019-07-31 01:00");
-        data.put("pricing", "PRICING_CPM");
-        data.put("schedule_type", "SCHEDULE_FROM_NOW");
-        data.put("flow_control_mode", "FLOW_CONTROL_MODE_FAST");
-        data.put("name", "测试计划名称");
-        data.put("external_url", "https://lordsmobile.176.com/download.php");
-        data.put("download_url", "https://lordsmobile.176.com/download.php");
-        data.put("download_type", "DOWNLOAD_URL");//坑
-        data.put("package", "com.igg.android.lordsmobile_cn");//坑
-        data.put("app_type", "APP_ANDROID");//坑
-        return advertisePlanService.advertiserPlanCreate(accountId, campaignId, data.toJSONString());
+        //广告组id
+        data.put("campaign_id", template.getCampaignTemplateId());
+        //投放范围
+        data.put("delivery_range", template.getDeliveryRange());
+        //(1):投放目标
+        //投放目标 转化量,点击量,展示量相关 未找到
+//        data.put("")
+        //下载方式 下载链接/落地页链接
+        data.put("download_type", deliveryTargetTemplate.getDownloadType());
+        if (null != deliveryTargetTemplate.getDownloadType() && !"".equals(deliveryTargetTemplate.getDownloadType()) && "DOWNLOAD_URL".equals(deliveryTargetTemplate.getDownloadType())) {
+            //下载链接
+            data.put("download_url", deliveryTargetTemplate.getDownloadUrl());
+            //应用包名
+            data.put("package", deliveryTargetTemplate.getPackageName());
+        }
+
+        if (null != deliveryTargetTemplate.getDownloadType() && !"".equals(deliveryTargetTemplate.getDownloadType()) && "EXTERNAL_URL".equals(deliveryTargetTemplate.getDownloadType())) {
+            //落地页链接
+            data.put("external_url", deliveryTargetTemplate.getExternalUrl());
+        }
+        if (null != campaign.getLandingType() && "APP".equals(campaign.getLandingType()) && null != deliveryTargetTemplate.getDownloadType() && "DOWNLOAD_URL".equals(deliveryTargetTemplate.getDownloadType())) {
+            data.put("app_type", "APP_ANDROID");
+        }
+
+        //(2)人群定向目前空置
+        //(3):预算与出价
+        //广告预算类型 日预算、总预算
+        data.put("budget_mode", budgetTemplate.getBudgetPriceMode());
+        //广告预算
+        data.put("budget", budgetTemplate.getBudgetPrice());//需要大于bid
+        //转化出价(ocpm请填写 cpa_bid)
+        data.put("bid", budgetTemplate.getBudgetPrice());
+        //广告投放时间类型
+        data.put("schedule_type", budgetTemplate.getFlowDateType());
+        //广告投放开始时间
+        data.put("start_time", budgetTemplate.getStartDate());
+        //广告投放结束时间
+        data.put("end_time", budgetTemplate.getEndDate());
+        /**
+         * 广告投放指定时间段
+         * 广告投放时段,默认全时段投放,格式是48*7位字符串,且都是0或1。也就是以半个小时为最小粒度,周一至周日每天分为48个区段,0为不投放,1为投放,不传、全传0、全传1均代表全时段投放。
+         */
+//        data.put("schedule_time", "2019-07-31 01:00");
+        //付费方式
+        data.put("pricing", budgetTemplate.getPriceType());
+        //广告投放速度类型 (投放方式) 优先跑量,均衡投放,优先低成本
+        data.put("flow_control_mode", budgetTemplate.getFlowControlMode());
+        //过滤已转化用户类型 只有投放目标为转化量时,才需要该字段
+        data.put("hide_if_converted", budgetTemplate.getFilterType());
+
+        data.put("name", template.getName());
+
+        return advertisePlanService.advertiserPlanCreate(token, template.getCampaignTemplateId(), data.toJSONString());
+//        return resultMap;
     }
 
     @Autowired
+    private ByteDanceCampaignMapper campaignMapper;
+    @Autowired
+    private ByteDanceBudgetTemplateMapper budgetTemplateMapper;
+    @Autowired
+    private BytedanceDeliveryTargetTemplateMapper deliveryTargetTemplateMapper;
+    @Autowired
+    private ByteDanceUserOrientationTemplateMapper userOrientationTemplateMapper;
+
+    @Autowired
     private IByteDanceAdvertisePlanService advertisePlanService;
     @Autowired
     private BytedanceAdvertisePlanTemplateMapper templateMapper;

+ 25 - 52
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/FileInfoServiceImpl.java

@@ -1,8 +1,10 @@
 package org.jeecg.modules.ctop.service.impl;
 
 import cn.com.ctop.common.utils.PropertiesUtils;
+import cn.com.ctop.toutiao.common.BytedanceInterfaceConstant;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import constant.KuaishouInterfaceConstant;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.ClientProtocolException;
@@ -45,17 +47,11 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
     private static final Logger logger = LoggerFactory.getLogger(FileInfoServiceImpl.class);
 
     @Override
-    public Map<String, Object> uploadVideoToTemplate(String accountId, Long videoFileId, String templatename) {
+    public Map<String, Object> uploadVideoToTemplate(String accountId, String videoUrl, String templatename) {
         Map<String, Object> resultMap = new HashMap<>();
-        FileInfo fileInfo = fileInfoMapper.selectById(videoFileId);
-        if (null == fileInfo) {
-            resultMap.put("message", "该视频文件信息不存在");
-            resultMap.put("code", -1);
-            return resultMap;
-        }
         //TODO查询是否已经上传过头条平台
         CTopOauthToken token = tokenService.getOAuthTokenByAccountId(accountId);
-        JSONObject resultObject = uploadAdvideo(token.getAccessToken(), fileInfo, token.getAccountId() + "");
+        JSONObject resultObject = uploadAdvideo(token.getAccessToken(), videoUrl, token.getAccountId() + "");
         System.out.println(resultObject);
         Integer code = resultObject.getInteger("code");
         String message = resultObject.getString("message");
@@ -66,7 +62,7 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
             return resultMap;
         }
         JSONObject data = resultObject.getJSONObject("data");
-        ByteDanceVideoInfo videoInfo = new ByteDanceVideoInfo(data, token, videoFileId);
+        ByteDanceVideoInfo videoInfo = new ByteDanceVideoInfo(data, token);
         videoInfoMapper.insert(videoInfo);
         resultMap.put("code", 0);
         resultMap.put("message", "视频文件上传成功");
@@ -79,22 +75,10 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
     private ByteDanceImageInfoMapper imageInfoMapper;
 
     @Override
-    public Map<String, Object> uploadImageToTemplate(String accountId, Long imageFileId, String templatename) {
+    public Map<String, Object> uploadImageToTemplate(String accountId, String imageUrl, String templatename) {
         Map<String, Object> resultMap = new HashMap<>();
-        FileInfo fileInfo = fileInfoMapper.selectById(imageFileId);
-        if (null == fileInfo) {
-            resultMap.put("message", "该图片文件信息不存在");
-            resultMap.put("code", -1);
-            return resultMap;
-        }
-        if (null == fileInfo.getType() || !"IMAGE".equals(fileInfo.getType())) {
-            resultMap.put("message", "文件格式错误");
-            resultMap.put("code", -1);
-            return resultMap;
-        }
-        //TODO查询是否已经上传过头条平台
         CTopOauthToken token = tokenService.getOAuthTokenByAccountId(accountId);
-        JSONObject resultObject = uploadAdImage(token.getAccessToken(), fileInfo, token.getAccountId() + "");
+        JSONObject resultObject = uploadAdImage(token.getAccessToken(), imageUrl, token.getAccountId() + "");
         System.out.println(resultObject);
         Integer code = resultObject.getInteger("code");
         String message = resultObject.getString("message");
@@ -105,7 +89,7 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
             return resultMap;
         }
         JSONObject data = resultObject.getJSONObject("data");
-        ByteDanceImageInfo imageInfo = new ByteDanceImageInfo(data, token, imageFileId);
+        ByteDanceImageInfo imageInfo = new ByteDanceImageInfo(data, token);
         imageInfoMapper.insert(imageInfo);
         resultMap.put("code", 0);
         resultMap.put("message", "图片文件上传成功");
@@ -169,22 +153,18 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
         return null;
     }
 
-    public JSONObject uploadAdImage(String accessToken, FileInfo fileInfo, String advertiserId) {
+    public JSONObject uploadAdImage(String accessToken, String imageUrl, String advertiserId) {
         // 请求地址
         String url = PropertiesUtils.getValue("bytedance_config", "bytedance_api_url") + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_file_image_ad");
         // 构造请求
         HttpPost httpPost = new HttpPost(url);
         httpPost.setHeader("Access-Token", accessToken);
-        // 文件参数
-        FileBody file = new FileBody(new File(fileInfo.getPath()));
-        MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create().addPart("image_file", file);
+        MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
         // 其他参数
         entityBuilder.addTextBody("advertiser_id", advertiserId);
-        try {
-            entityBuilder.addTextBody("image_signature", DigestUtils.md5Hex(new FileInputStream(fileInfo.getPath())));
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
+        entityBuilder.addTextBody("upload_type", BytedanceInterfaceConstant.UPLOAD_TYPE_BY_URL);
+        entityBuilder.addTextBody("image_url", imageUrl);
+
         HttpEntity entity = entityBuilder.build();
         CloseableHttpResponse response = null;
         CloseableHttpClient client = null;
@@ -220,26 +200,24 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
         return null;
     }
 
-    public JSONObject uploadAdvideo(String accessToken, FileInfo fileInfo, String advertiserId) {
+    public JSONObject uploadAdvideo(String accessToken, String videoUrl, String advertiserId) {
+        CloseableHttpResponse response = null;
+        CloseableHttpClient client = null;
         // 请求地址
         String url = PropertiesUtils.getValue("bytedance_config", "bytedance_api_url") + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_file_video_ad");
         // 构造请求
         HttpPost httpPost = new HttpPost(url);
         httpPost.setHeader("Access-Token", accessToken);
         // 文件参数
-        FileBody file = new FileBody(new File(fileInfo.getPath()));
-        MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create().addPart("video_file", file);
-        // 其他参数
-        entityBuilder.addTextBody("advertiser_id", advertiserId);
-        try {
-            entityBuilder.addTextBody("video_signature", DigestUtils.md5Hex(new FileInputStream(fileInfo.getPath())));
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        HttpEntity entity = entityBuilder.build();
-        CloseableHttpResponse response = null;
-        CloseableHttpClient client = null;
         try {
+            URI uri = new URI(videoUrl);
+            FileBody file = new FileBody(new File(uri));
+            MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create().addPart("video_file", file);
+            // 其他参数
+            entityBuilder.addTextBody("advertiser_id", advertiserId);
+            //TODO 需要后期优化修改代码逻辑
+            entityBuilder.addTextBody("image_signature", DigestUtils.md5Hex(new FileInputStream(new File(uri))));
+            HttpEntity entity = entityBuilder.build();
             client = HttpClientBuilder.create().build();
             httpPost.setURI(URI.create(url));
             httpPost.setEntity(entity);
@@ -254,9 +232,7 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
                 bufferedReader.close();
                 return JSONObject.parseObject(result.toString());
             }
-        } catch (ClientProtocolException e) {
-            e.printStackTrace();
-        } catch (IOException e) {
+        } catch (Exception e) {
             e.printStackTrace();
         } finally {
             try {
@@ -270,9 +246,6 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
         }
         return null;
     }
-
-    @Autowired
-    private FileInfoMapper fileInfoMapper;
     @Autowired
     private ICTopOauthTokenService tokenService;
 }

+ 3 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/common/BytedanceInterfaceConstant.java

@@ -6,4 +6,7 @@ public class BytedanceInterfaceConstant {
     public static final String REFRESH_TOKEN = "/oauth2/refresh_token";
     public static final String ADVERTISER_INFO = "/2/advertiser/info";
 
+    public static final String UPLOAD_TYPE_BY_FILE = "UPLOAD_BY_FILE";
+    public static final String UPLOAD_TYPE_BY_URL = "UPLOAD_BY_URL";
+
 }