Bladeren bron

修改预算与出价

yangzian 4 jaren geleden
bovenliggende
commit
43d6109671

+ 2 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/dockapi/MarketingService.java

@@ -70,4 +70,6 @@ public interface MarketingService {
     Result getAudiencePackage(CtopOauthToken token,String landingType,String deliveryRange);
 
     Result getAudiencePackageRead(CtopOauthToken token,String accountId,List<Integer> ids);
+
+    Result createAudiencePackage(CtopOauthToken token);
 }

+ 49 - 9
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/dockapi/MarketingServiceImpl.java

@@ -1052,6 +1052,7 @@ public class MarketingServiceImpl implements MarketingService{
      * @return: org.jeecg.common.api.vo.Result
      * @author: zianY
      */
+    @Override
     public  Result getActionText(CtopOauthToken token, String landingType,String advancedCreativeType) {
 
         JSONObject data = new JSONObject();
@@ -1089,25 +1090,21 @@ public class MarketingServiceImpl implements MarketingService{
      * @return: org.jeecg.common.api.vo.Result
      * @author: zianY
      */
+    @Override
     public Result getAudiencePackage(CtopOauthToken token,String landingType,String deliveryRange) {
-
         JSONObject params = new JSONObject();
         params.put("advertiser_id", token.getAccountId());
-
         Map map = new HashMap();
         map.put("landing_type",landingType);
         map.put("delivery_range",deliveryRange);
         params.put("filtering", map);
         params.put("page", 1);
         params.put("page_size", 100);
-
         params = Check.jsonRemoveEmpty(params);
         JSONObject jsonObject = HttpUtils.bytedanceGetRequest(token.getAccessToken(),
                 urlPath+ PropertiesUtils.getValue("bytedance_config", "bytedance_v2_audience_package_get"),params);
-
         Integer code = jsonObject.getInteger("code");
         String message = jsonObject.getString("message");
-
         if (null == code || !code.equals(0)) {
             log.info("获取定向包接口异常==》accountId:{},message:{}", token.getAccountId(), message);
             return Result.error(message);
@@ -1121,19 +1118,28 @@ public class MarketingServiceImpl implements MarketingService{
     }
 
 
-    public Result getAudiencePackageRead(CtopOauthToken token,String accountId,List<Integer> ids) {
 
+    /**
+     *
+     * @description: 获取人群包详细信息
+     *
+     * @param token
+     * @param accountId
+     * @param ids
+     * @return: org.jeecg.common.api.vo.Result
+     * @author: zianY
+     * @time: 2021/5/12 11:16
+     */
+    @Override
+    public Result getAudiencePackageRead(CtopOauthToken token,String accountId,List<Integer> ids) {
         JSONObject params = new JSONObject();
         params.put("advertiser_id", token.getAccountId());
         params.put("custom_audience_ids", ids);
-
         params = Check.jsonRemoveEmpty(params);
         JSONObject jsonObject = HttpUtils.bytedanceGetRequest(token.getAccessToken(),
                 urlPath+ PropertiesUtils.getValue("bytedance_config", "bytedance_v2_dmp_custom_audience_read"),params);
-
         Integer code = jsonObject.getInteger("code");
         String message = jsonObject.getString("message");
-
         if (null == code || !code.equals(0)) {
             log.info("获取人群包详细信息接口异常==》accountId:{},message:{}", token.getAccountId(), message);
             return Result.error(message);
@@ -1145,4 +1151,38 @@ public class MarketingServiceImpl implements MarketingService{
         }
         return Result.successMsg("获取人群包详细信息成功",dataList.getJSONArray("custom_audience_list"));
     }
+
+
+    /**
+     *
+     * @description: 创建定向包
+     *
+     * @param token
+     * @return: org.jeecg.common.api.vo.Result
+     * @author: zianY
+     */
+    @Override
+    public  Result createAudiencePackage(CtopOauthToken token) {
+
+        JSONObject params = new JSONObject();
+        params.put("advertiser_id", token.getAccountId());
+        params.put("name", "测试-定向包创建-004");
+        params.put("description", "0512定向包-过滤已转化用户-测试");
+        params.put("landing_type", "APP_ANDROID");
+        params.put("hide_if_exists", 2);
+        params.put("hide_if_converted", "AD");
+
+        JSONObject jsonObject = HttpUtils.bytedancePostRequest(token.getAccessToken(),
+                urlPath + PropertiesUtils.getValue("bytedance_config", "bytedance_v2_audience_package_create"),
+                params);
+        Integer code = jsonObject.getInteger("code");
+        String message = jsonObject.getString("message");
+        if (null == code || !code.equals(0)) {
+            log.info("创建定向包接口异常==》accountId:{},message:{}", token.getAccountId(), message);
+            return Result.error(message);
+        }
+        return Result.successMsg("创建定向包成功",jsonObject.getJSONObject("audience_package_id"));
+    }
+
+
 }

+ 20 - 2
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/entity/UpdAdStaOrCpaOrBudget.java

@@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -26,8 +27,25 @@ public class UpdAdStaOrCpaOrBudget implements Serializable {
 
     @ApiModelProperty(value = "计划id")
     private String adId;
-    @ApiModelProperty(value = "出价")
-    private String bId;
+
+
+    /**
+     * 智能投放计划创建出价方式
+     * 固定出价 FIX
+     * 随机出价 RAND
+     * 阶梯出价 STEP
+     * */
+    private String adBidCreateType;
+    /**转化出价最小值*/
+    private BigDecimal adMinBid;
+    /**转化出价最大值*/
+    private BigDecimal adMaxBid;
+    /**转化出价阶梯出价步长*/
+    private BigDecimal adStepBid;
+    /**目标转化出价*/
+    private BigDecimal adCpaBid;
+
+
     @ApiModelProperty(value = "预算")
     private String budget;
 

+ 1 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/AiBytedanceAdvertiserStrategyMapper.java

@@ -18,7 +18,7 @@ public interface AiBytedanceAdvertiserStrategyMapper extends BaseMapper<AiByteda
 
     Integer updStaById(@Param("id") String id,@Param("state") String state);
 
-    Integer updCpaById(@Param("id") String id,@Param("adCpaBid") String adCpaBid);
+    Integer updCpaById(UpdAdStaOrCpaOrBudget updAdStaOrCpaOrBudget);
 
     Integer updBudgetById(@Param("id") String id,@Param("budget") String budget);
 

+ 14 - 1
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/mapper/xml/AiBytedanceAdvertiserStrategyMapper.xml

@@ -26,7 +26,20 @@
     <!--修改 头条 配置信息 出价  -->
     <update id="updCpaById">
         UPDATE ctop_ai_bytedance_advertiser_strategy
-            SET ad_cpa_bid = #{adCpaBid}
+        <set>
+            <if test="adCpaBid != null">
+                ad_cpa_bid = #{adCpaBid},
+            </if>
+            <if test="adMaxBid != null">
+                ad_max_bid = #{adMaxBid},
+            </if>
+            <if test="adMinBid != null">
+                ad_min_bid = #{adMinBid},
+            </if>
+            <if test="adStepBid != null">
+                ad_step_bid = #{adStepBid},
+            </if>
+        </set>
         WHERE
             id = #{id}
     </update>

+ 2 - 0
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/IAiBytedanceAdvertiserStrategyService.java

@@ -104,6 +104,8 @@ public interface IAiBytedanceAdvertiserStrategyService extends IService<AiByteda
 
     Result getDMPCustomAudience(String accountId);
 
+    Result createAudiencePackage(String accountId);
+
 
 
 

+ 18 - 8
jeecg-boot-bytedance/src/main/java/org/jeecg/modules/bytedance/advertise/service/impl/AiBytedanceAdvertiserStrategyServiceImpl.java

@@ -958,20 +958,16 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
      */
     @Override
     public Result updStaOrCpaOrBudgetById(UpdAdStaOrCpaOrBudget updAdStaOrCpaOrBudget) {
-        Result updResult = new Result();
-        CtopOauthToken token = tokenService.getOauthTokenByAccountId(updAdStaOrCpaOrBudget.getAccountId());
-        List<Map<String,Object>> priceList = new ArrayList<>();
-        Map<String,Object> mapPrice = new HashMap<>();
         //1-修改出价
         if (BytedanceConstant.UPDTYPE_BID.equals(updAdStaOrCpaOrBudget.getType())) {
-            aiBytedanceAdvertiserStrategyMapper.updCpaById(updAdStaOrCpaOrBudget.getId(),updAdStaOrCpaOrBudget.getBId());
+            aiBytedanceAdvertiserStrategyMapper.updCpaById(updAdStaOrCpaOrBudget);
         }
         //2-修改预算
         if (BytedanceConstant.UPDTYPE_BUDGET.equals(updAdStaOrCpaOrBudget.getType())) {
             aiBytedanceAdvertiserStrategyMapper.updBudgetById(updAdStaOrCpaOrBudget.getId(), updAdStaOrCpaOrBudget.getBudget());
 
         }
-        return Result.successMsg("修改"+(BytedanceConstant.UPDTYPE_BID.equals(updAdStaOrCpaOrBudget.getType()) ? "出价" : "预算")+"成功。", updResult.getResult());
+        return Result.successMsg("修改"+(BytedanceConstant.UPDTYPE_BID.equals(updAdStaOrCpaOrBudget.getType()) ? "出价" : "预算")+"成功。",null);
     }
 
 
@@ -1282,10 +1278,14 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
        JSONObject jsonObject = (JSONObject)list.getResult();
        JSONArray array = jsonObject.getJSONArray("audience_packages");
         List<Map<String,JSONObject>> dataList = JSONArray.parseObject(array.toJSONString(),List.class);
-
-        // 返回结果中的city 查询 城市名称
         dataList.forEach(map -> {
             JSONObject audience = map.get("audience");
+            //性别
+            String gender = audience.getString("gender");
+            if (Check.isNull(gender)){
+                audience.put("gender", "NONE");
+            }
+            //返回结果中的city 查询 城市名称
             JSONArray citys = audience.getJSONArray("city");
             if (citys != null){
                 QueryWrapper<BytedanceAreaInfo> queryWrapper = new QueryWrapper<>();
@@ -1331,4 +1331,14 @@ public class AiBytedanceAdvertiserStrategyServiceImpl extends ServiceImpl<AiByte
     }
 
 
+    public Result createAudiencePackage(String accountId){
+
+        CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
+
+       Result list = marketingService.createAudiencePackage(token);
+
+        return Result.successMsg("定向包创建成功。",list);
+    }
+
+
 }

+ 2 - 0
jeecg-boot-bytedance/src/main/resources/bytedance_config.properties

@@ -82,6 +82,8 @@ bytedance_v2_tools_action_text_get=/2/tools/action_text/get/
 
 #\u83B7\u53D6\u5B9A\u5411\u5305
 bytedance_v2_audience_package_get=/2/audience_package/get/
+#\u521B\u5EFA\u5B9A\u5411\u5305
+bytedance_v2_audience_package_create=/2/audience_package/create/
 
 
 

+ 16 - 6
jeecg-boot-module-system/src/main/java/org/jeecg/modules/bytedance/advertise/controller/AiBytedanceAdvertiserStrategyController.java

@@ -232,12 +232,6 @@ public class AiBytedanceAdvertiserStrategyController {
 	@PutMapping(value = "/updStaOrCpaOrBudgetById")
 	public Result updStaOrCpaOrBudgetById(UpdAdStaOrCpaOrBudget updAdStaOrCpaOrBudget) {
 		try {
-			/*if (updAdStaOrCpaOrBudget.getData().size() > 100){
-				return Result.error("批量修改数量不能超过闭区间[1~100]");
-			}*/
-			if (Check.isNull(updAdStaOrCpaOrBudget.getBId()) && Check.isNull(updAdStaOrCpaOrBudget.getBudget())){
-				return Result.errorMsg("价格不能为空,请重新输入。");
-			}
 			return aiBytedanceAdvertiserStrategyService.updStaOrCpaOrBudgetById(updAdStaOrCpaOrBudget);
 		}catch (Exception e){
 			log.error("修改出价-预算失败",e.getMessage());
@@ -413,6 +407,22 @@ public class AiBytedanceAdvertiserStrategyController {
 
 
 
+	@ApiOperation(value="创建定向包", notes="创建定向包")
+	@PostMapping(value = "/createAudiencePackage")
+	public Result createAudiencePackage(@RequestParam("accountId") String accountId) {
+		try {
+			return aiBytedanceAdvertiserStrategyService.createAudiencePackage(accountId);
+		}catch (Exception e){
+			log.error("创建定向包异常",e);
+			return Result.error("请求失败,请联系开发人员!");
+		}
+	}
+
+
+
+
+
+