|
@@ -3,8 +3,7 @@ package cn.com.ctop.kuaishou.modules.ai.service.impl;
|
|
|
import cn.com.ctop.common.module.entity.CtopOauthToken;
|
|
|
import cn.com.ctop.common.module.entity.MaterialCutFrame;
|
|
|
import cn.com.ctop.common.module.service.IMaterialCutFrameService;
|
|
|
-import cn.com.ctop.common.module.utils.Check;
|
|
|
-import cn.com.ctop.common.module.utils.HttpUtils2;
|
|
|
+import cn.com.ctop.common.module.utils.*;
|
|
|
import cn.com.ctop.kuaishou.modules.ai.service.IKuaiShouCreateService;
|
|
|
import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouGroup;
|
|
|
import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouImageGet;
|
|
@@ -18,6 +17,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
|
|
|
@Service
|
|
@@ -41,6 +41,13 @@ public class KuaiShouCreateServiceImpl implements IKuaiShouCreateService {
|
|
|
@Value("${ai.callback.callback-creative-url}")
|
|
|
private String creativeUrl;
|
|
|
|
|
|
+ /**
|
|
|
+ * 创建 组 && 创意
|
|
|
+ *
|
|
|
+ * @param oauthToken
|
|
|
+ * @param campaign_id
|
|
|
+ * @param group_list
|
|
|
+ */
|
|
|
@Override
|
|
|
public void createUnitAndCreative(CtopOauthToken oauthToken, Long campaign_id, JSONArray group_list) {
|
|
|
JSONArray returnArr = new JSONArray();
|
|
@@ -86,9 +93,11 @@ public class KuaiShouCreateServiceImpl implements IKuaiShouCreateService {
|
|
|
if (!Check.isNull(groupCreateJson.getJSONArray("scene_id"))) {
|
|
|
createJson.put("scene_id", groupCreateJson.getJSONArray("scene_id")); //资源位置
|
|
|
}
|
|
|
- if (!Check.isNull(groupCreateJson.getInteger("unit_type"))) {
|
|
|
- createJson.put("unit_type", groupCreateJson.getInteger("unit_type")); //创意制作方式
|
|
|
+ Integer unit_type = groupCreateJson.getInteger("unit_type");
|
|
|
+ if (Check.isNull(unit_type)) {
|
|
|
+ throw new Exception("请选择创意制作方式");
|
|
|
}
|
|
|
+ createJson.put("unit_type", groupCreateJson.getInteger("unit_type")); //创意制作方式
|
|
|
if (!Check.isNull(groupCreateJson.getString("begin_time"))) {
|
|
|
createJson.put("begin_time", groupCreateJson.getString("begin_time")); //投放开始时间
|
|
|
}
|
|
@@ -172,6 +181,7 @@ public class KuaiShouCreateServiceImpl implements IKuaiShouCreateService {
|
|
|
returnJson.put("unit_id", unitId);
|
|
|
returnJson.put("code", 0);
|
|
|
returnJson.put("message", "广告组创建成功");
|
|
|
+ returnJson.put("type", 1);
|
|
|
KuaiShouGroup group = groupService.selectGroupByUnitId(oauthToken.getAccountId(), unitId);
|
|
|
if (!Check.isNull(group)) {
|
|
|
returnJson.put("group_create_time", group.getGroupCreateTime());
|
|
@@ -179,13 +189,18 @@ public class KuaiShouCreateServiceImpl implements IKuaiShouCreateService {
|
|
|
Thread thread = new Thread() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
- createCreative(oauthToken, unitId, groupCreateJson.getJSONArray("creative_list"));
|
|
|
+ if (unit_type == 4) { // 自定义2.0创意
|
|
|
+ createCreative(oauthToken, unitId, groupCreateJson.getJSONArray("creative_list"));
|
|
|
+ } else if (unit_type == 7) { // 程序化创意
|
|
|
+ createProgramCreative(oauthToken, unitId, groupCreateJson.getJSONObject("programCreative"));
|
|
|
+ }
|
|
|
}
|
|
|
};
|
|
|
thread.start();
|
|
|
} else {
|
|
|
returnJson.put("code", -1);
|
|
|
returnJson.put("message", unitMap.get("message"));
|
|
|
+ returnJson.put("type", 1);
|
|
|
}
|
|
|
returnArr.add(returnJson);
|
|
|
} catch (Exception e) {
|
|
@@ -193,6 +208,7 @@ public class KuaiShouCreateServiceImpl implements IKuaiShouCreateService {
|
|
|
returnJson.put("group_uuid", group_uuid);
|
|
|
returnJson.put("code", -1);
|
|
|
returnJson.put("message", e.getMessage());
|
|
|
+ returnJson.put("type", 1);
|
|
|
returnArr.add(returnJson);
|
|
|
}
|
|
|
}
|
|
@@ -201,7 +217,7 @@ public class KuaiShouCreateServiceImpl implements IKuaiShouCreateService {
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * 创建广告创意
|
|
|
+ * 创建自定义广告创意
|
|
|
*
|
|
|
* @param oauthToken
|
|
|
* @param unit_id
|
|
@@ -311,14 +327,137 @@ public class KuaiShouCreateServiceImpl implements IKuaiShouCreateService {
|
|
|
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 创建程序化创意
|
|
|
+ *
|
|
|
+ * @param oauthToken
|
|
|
+ * @param unit_id
|
|
|
+ * @param programCreativeJson
|
|
|
+ */
|
|
|
+ private void createProgramCreative(CtopOauthToken oauthToken, Long unit_id, JSONObject programCreativeJson) {
|
|
|
+ JSONArray returnArray = new JSONArray();
|
|
|
+ String creative_uuid = programCreativeJson.getString("creative_uuid");
|
|
|
+ try {
|
|
|
+ JSONObject programJson = new JSONObject();
|
|
|
+ programJson.put("advertiser_id", oauthToken.getAccountId());
|
|
|
+ programJson.put("unit_id", unit_id);
|
|
|
+ if (!Check.isNull(programCreativeJson.getString("package_name"))) {
|
|
|
+ programJson.put("package_name", programCreativeJson.getString("package_name"));
|
|
|
+ }
|
|
|
+ if (!Check.isNull(programCreativeJson.getJSONArray("horizontal_photo_ids"))) {
|
|
|
+ programJson.put("horizontal_photo_ids", programCreativeJson.getJSONArray("horizontal_photo_ids"));
|
|
|
+ }
|
|
|
+ if (!Check.isNull(programCreativeJson.getJSONArray("vertical_photo_ids"))) {
|
|
|
+ programJson.put("vertical_photo_ids", programCreativeJson.getJSONArray("vertical_photo_ids"));
|
|
|
+ }
|
|
|
+ JSONArray cover_image_tokens = new JSONArray();
|
|
|
+ JSONArray image_md5s = programCreativeJson.getJSONArray("image_md5s");
|
|
|
+ if (!Check.isNull(image_md5s)) {
|
|
|
+ for (int i = 0; i < image_md5s.size(); i++) {
|
|
|
+ String image_md5 = (String) image_md5s.get(i);
|
|
|
+ if (!Check.isNull(image_md5)) {
|
|
|
+ String imageToken = getImageToken(image_md5, oauthToken.getAccountId(), oauthToken.getAccessToken());
|
|
|
+ if (!Check.isNull(imageToken)) {
|
|
|
+ cover_image_tokens.add(imageToken);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ programJson.put("cover_image_tokens", cover_image_tokens);
|
|
|
+ }
|
|
|
+ if (!Check.isNull(programCreativeJson.getLong("site_id"))) {
|
|
|
+ programJson.put("site_id", programCreativeJson.getLong("site_id"));
|
|
|
+ }
|
|
|
+ if (!Check.isNull(programCreativeJson.getJSONArray("sticker_styles"))) {
|
|
|
+ programJson.put("sticker_styles", programCreativeJson.getJSONArray("sticker_styles"));
|
|
|
+ }
|
|
|
+ if (!Check.isNull(programCreativeJson.getJSONArray("cover_slogans"))) {
|
|
|
+ programJson.put("cover_slogans", programCreativeJson.getJSONArray("cover_slogans"));
|
|
|
+ }
|
|
|
+ if (!Check.isNull(programCreativeJson.getString("action_bar"))) {
|
|
|
+ programJson.put("action_bar", programCreativeJson.getString("action_bar"));
|
|
|
+ }
|
|
|
+ if (!Check.isNull(programCreativeJson.getJSONArray("captions"))) {
|
|
|
+ programJson.put("captions", programCreativeJson.getJSONArray("captions"));
|
|
|
+ }
|
|
|
+ if (!Check.isNull(programCreativeJson.getString("click_url"))) {
|
|
|
+ programJson.put("click_url", programCreativeJson.getString("click_url"));
|
|
|
+ }
|
|
|
+ if (!Check.isNull(programCreativeJson.getString("actionbar_click_url"))) {
|
|
|
+ programJson.put("actionbar_click_url", programCreativeJson.getString("actionbar_click_url"));
|
|
|
+ }
|
|
|
+ if (!Check.isNull(programCreativeJson.getInteger("creative_category"))) {
|
|
|
+ programJson.put("creative_category", programCreativeJson.getInteger("creative_category"));
|
|
|
+ }
|
|
|
+ if (!Check.isNull(programCreativeJson.getJSONArray("creative_tag"))) {
|
|
|
+ programJson.put("creative_tag", programCreativeJson.getJSONArray("creative_tag"));
|
|
|
+ }
|
|
|
+ Map<String, String> headers = new HashMap<>();
|
|
|
+ headers.put("Content-Type", "application/json");
|
|
|
+ headers.put("Access-Token", oauthToken.getAccessToken());
|
|
|
+ String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.PROGRAM_CREATE;
|
|
|
+ String result = HttpUtils.kuaiShouhttpPostRequest(url, programJson.toJSONString(), headers);
|
|
|
+ JSONObject resultJson = JSONObject.parseObject(result);
|
|
|
+ JSONObject returnJson = new JSONObject();
|
|
|
+ returnJson.put("creative_uuid", creative_uuid);
|
|
|
+ if (!Check.isNull(resultJson)) {
|
|
|
+ if (resultJson.getInteger("code") == 0) {
|
|
|
+ returnJson.put("unit_id", unit_id);
|
|
|
+ returnJson.put("type", 2);
|
|
|
+ returnJson.put("code", 0);
|
|
|
+ returnJson.put("message", "程序化创意创建成功");
|
|
|
+ } else {
|
|
|
+ returnJson.put("code", -1);
|
|
|
+ returnJson.put("type", 2);
|
|
|
+ returnJson.put("message", resultJson.getString("message"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ returnArray.add(returnJson);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ JSONObject returnJson = new JSONObject();
|
|
|
+ returnJson.put("creative_uuid", creative_uuid);
|
|
|
+ returnJson.put("message", e.getMessage());
|
|
|
+ returnJson.put("type", 2);
|
|
|
+ returnJson.put("code", -1);
|
|
|
+ returnArray.add(returnJson);
|
|
|
+ }
|
|
|
+ callback(creativeUrl, returnArray, "program_create");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 回调
|
|
|
+ *
|
|
|
+ * @param url
|
|
|
+ * @param requestArr
|
|
|
+ * @param type
|
|
|
+ */
|
|
|
private void callback(String url, JSONArray requestArr, String type) {
|
|
|
JSONObject requestJson = new JSONObject();
|
|
|
requestJson.put("callbackData", requestArr);
|
|
|
String s = HttpUtils2.httpPostRequest(url, requestJson, null);
|
|
|
JSONObject jsonObject = JSONObject.parseObject(s);
|
|
|
- log.info("{},回调数据返回结果:{}", type, jsonObject);
|
|
|
+ if (!Check.isNull(jsonObject)) {
|
|
|
+ Integer code = jsonObject.getInteger("code");
|
|
|
+ if (code == 0) {
|
|
|
+ log.info("{},回调成功", type);
|
|
|
+ } else {
|
|
|
+ log.info("{},回调失败,入参:{}", type, requestJson);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ log.info("{},回调返回结果为空,入参:{}", type, requestJson);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据封面MD5 获取imageToken
|
|
|
+ *
|
|
|
+ * @param md5
|
|
|
+ * @param accountId
|
|
|
+ * @param accessToken
|
|
|
+ * @return
|
|
|
+ */
|
|
|
private String getImageToken(String md5, Long accountId, String accessToken) {
|
|
|
String imageToken = null;
|
|
|
QueryWrapper<KuaiShouImageGet> queryWrapper = new QueryWrapper<>();
|
|
@@ -337,6 +476,12 @@ public class KuaiShouCreateServiceImpl implements IKuaiShouCreateService {
|
|
|
return imageToken;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取定向包
|
|
|
+ *
|
|
|
+ * @param unitJson
|
|
|
+ * @return
|
|
|
+ */
|
|
|
private JSONObject getTarget(JSONObject unitJson) {
|
|
|
JSONObject target = new JSONObject();
|
|
|
if (!Check.isNull(unitJson.getJSONArray("region"))) {
|