|
@@ -23,9 +23,7 @@ import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import java.util.Date;
|
|
|
|
-import java.util.List;
|
|
|
|
-import java.util.Map;
|
|
|
|
|
|
+import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
@Service
|
|
@@ -92,9 +90,10 @@ public class AiStrategyServiceImpl implements IAiStrategyService {
|
|
}
|
|
}
|
|
//3:获取相应字段相应的用户定义域
|
|
//3:获取相应字段相应的用户定义域
|
|
String definitionDomain = getStragyDefDomain(strategyTemplate,strategy);
|
|
String definitionDomain = getStragyDefDomain(strategyTemplate,strategy);
|
|
|
|
+ System.out.println(definitionDomain);
|
|
//4:计算定向拆分逻辑
|
|
//4:计算定向拆分逻辑
|
|
List<AiKuaishouStrategyTargetBase>getBases = splitBasesByDomain(definitionDomain,targetBases);
|
|
List<AiKuaishouStrategyTargetBase>getBases = splitBasesByDomain(definitionDomain,targetBases);
|
|
- if(null == getBases){
|
|
|
|
|
|
+ if(null == getBases||getBases.isEmpty()){
|
|
log.info("定向拆分失败=>definitionDomain:{}",definitionDomain);
|
|
log.info("定向拆分失败=>definitionDomain:{}",definitionDomain);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -125,25 +124,25 @@ public class AiStrategyServiceImpl implements IAiStrategyService {
|
|
// 策略定向拆分数据,写入数据库
|
|
// 策略定向拆分数据,写入数据库
|
|
AiKuaishouStrategyTargetUnion targetUnion = new AiKuaishouStrategyTargetUnion(strategyMiddle.getId(),item.getId(),item.getTargetContent());
|
|
AiKuaishouStrategyTargetUnion targetUnion = new AiKuaishouStrategyTargetUnion(strategyMiddle.getId(),item.getId(),item.getTargetContent());
|
|
targetUnionService.save(targetUnion);
|
|
targetUnionService.save(targetUnion);
|
|
- //拼装广告组参数
|
|
|
|
- JSONObject unitParams = createUnitParams(token,campaignId,strategy,strategyTemplate, item,timestamp,unitCnt);
|
|
|
|
- Map<String, Object> unitCreateResult = kuaishouInterfaceService.adUnitCreate(token.getAccessToken(), token.getAccountId(), unitParams,1);
|
|
|
|
- Integer unitCode = (Integer) unitCreateResult.get("code");
|
|
|
|
- String unitMessage = (String) unitCreateResult.get("message");
|
|
|
|
- if(unitCode != 0 ){
|
|
|
|
- log.info("组创建失败=>accountId:{};message:{}",accountId,unitMessage);
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- Long unitId = (Long) unitCreateResult.get("unitId");
|
|
|
|
// 选择素材,创建创意
|
|
// 选择素材,创建创意
|
|
for(KuaiShouVideoGet videoItem: videoGets){
|
|
for(KuaiShouVideoGet videoItem: videoGets){
|
|
- //
|
|
|
|
- JSONObject creativeParams = creativeParams(token,unitId,videoItem,timestamp,unitCnt,strategy);
|
|
|
|
|
|
+ //拼装广告组参数
|
|
|
|
+ JSONObject unitParams = createUnitParams(token,campaignId,strategy,strategyTemplate, item,timestamp,unitCnt);
|
|
|
|
+ Map<String, Object> unitCreateResult = kuaishouInterfaceService.adUnitCreate(token.getAccessToken(), token.getAccountId(), unitParams,1);
|
|
|
|
+ Integer unitCode = (Integer) unitCreateResult.get("code");
|
|
|
|
+ String unitMessage = (String) unitCreateResult.get("message");
|
|
|
|
+ if(unitCode != 0 ){
|
|
|
|
+ log.info("组创建失败=>accountId:{};message:{}",accountId,unitMessage);
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ Long unitId = (Long) unitCreateResult.get("unitId");
|
|
|
|
+
|
|
|
|
+ JSONObject creativeParams = creativeParams(token,unitId,videoItem,unitCnt,strategy);
|
|
JSONArray sceneIdJsonArray = JSONArray.parseArray(strategy.getSceneId());
|
|
JSONArray sceneIdJsonArray = JSONArray.parseArray(strategy.getSceneId());
|
|
// 如果广告位只包含 上下滑大屏广告(6),则一个素材搭配1张封面,生成1个创意
|
|
// 如果广告位只包含 上下滑大屏广告(6),则一个素材搭配1张封面,生成1个创意
|
|
if (sceneIdJsonArray.contains(6) && sceneIdJsonArray.size() == 1){
|
|
if (sceneIdJsonArray.contains(6) && sceneIdJsonArray.size() == 1){
|
|
//直接创建创意
|
|
//直接创建创意
|
|
- createCreative(token,creativeParams,campaignId,unitId,strategy,targetUnion,1);
|
|
|
|
|
|
+ createCreative(token,creativeParams,campaignId,unitId,strategy,targetUnion,1,videoItem);
|
|
} else {
|
|
} else {
|
|
// 素材自带的封面 ctop_material_image_info 内部素材的自带封面,素造的没有
|
|
// 素材自带的封面 ctop_material_image_info 内部素材的自带封面,素造的没有
|
|
// 素材的智能抽帧封面 ctop_material_cut_frame 其中素造的为8张封面,内部的为15张封面
|
|
// 素材的智能抽帧封面 ctop_material_cut_frame 其中素造的为8张封面,内部的为15张封面
|
|
@@ -157,11 +156,12 @@ public class AiStrategyServiceImpl implements IAiStrategyService {
|
|
int creativeCnt = 1;
|
|
int creativeCnt = 1;
|
|
if (null!=orgFrameList&&!orgFrameList.isEmpty()) {
|
|
if (null!=orgFrameList&&!orgFrameList.isEmpty()) {
|
|
for (int i = 0; i < orgFrameList.size(); i++) {
|
|
for (int i = 0; i < orgFrameList.size(); i++) {
|
|
|
|
+ System.out.println(creativeCnt);
|
|
String imageCode = orgFrameList.get(i).getCode();
|
|
String imageCode = orgFrameList.get(i).getCode();
|
|
String imageUrl = orgFrameList.get(i).getUrl();
|
|
String imageUrl = orgFrameList.get(i).getUrl();
|
|
String imageToken = getImageToken(imageUrl,imageCode,accountId,token.getAccessToken());
|
|
String imageToken = getImageToken(imageUrl,imageCode,accountId,token.getAccessToken());
|
|
creativeParams.put("image_token",imageToken);
|
|
creativeParams.put("image_token",imageToken);
|
|
- createCreative(token,creativeParams,campaignId,unitId,strategy,targetUnion,creativeCnt);
|
|
|
|
|
|
+ createCreative(token,creativeParams,campaignId,unitId,strategy,targetUnion,creativeCnt,videoItem);
|
|
creativeCnt++;
|
|
creativeCnt++;
|
|
if (creativeCnt > 15) {
|
|
if (creativeCnt > 15) {
|
|
break;
|
|
break;
|
|
@@ -171,11 +171,12 @@ public class AiStrategyServiceImpl implements IAiStrategyService {
|
|
|
|
|
|
if ((null!=cutFrameList&&!cutFrameList.isEmpty()) && (creativeCnt<=15)){
|
|
if ((null!=cutFrameList&&!cutFrameList.isEmpty()) && (creativeCnt<=15)){
|
|
for (int i = 0; i < cutFrameList.size(); i++) {
|
|
for (int i = 0; i < cutFrameList.size(); i++) {
|
|
|
|
+ System.out.println(creativeCnt);
|
|
String imageCode = cutFrameList.get(i).getSignature();
|
|
String imageCode = cutFrameList.get(i).getSignature();
|
|
String imageUrl = cutFrameList.get(i).getUrl();
|
|
String imageUrl = cutFrameList.get(i).getUrl();
|
|
String imageToken = getImageToken(imageUrl,imageCode,accountId,token.getAccessToken());
|
|
String imageToken = getImageToken(imageUrl,imageCode,accountId,token.getAccessToken());
|
|
creativeParams.put("image_token",imageToken);
|
|
creativeParams.put("image_token",imageToken);
|
|
- createCreative(token,creativeParams,campaignId,unitId,strategy,targetUnion,creativeCnt);
|
|
|
|
|
|
+ createCreative(token,creativeParams,campaignId,unitId,strategy,targetUnion,creativeCnt,videoItem);
|
|
creativeCnt ++;
|
|
creativeCnt ++;
|
|
if (creativeCnt > 15) {
|
|
if (creativeCnt > 15) {
|
|
break;
|
|
break;
|
|
@@ -187,30 +188,40 @@ public class AiStrategyServiceImpl implements IAiStrategyService {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- private JSONObject creativeParams(CtopOauthToken token,Long unitId,KuaiShouVideoGet videoItem,String timestamp,int unitCnt,KuaishouStrategy strategy){
|
|
|
|
|
|
+ private JSONObject creativeParams(CtopOauthToken token,Long unitId,KuaiShouVideoGet videoItem,int unitCnt,KuaishouStrategy strategy){
|
|
JSONObject creativeParams = new JSONObject();
|
|
JSONObject creativeParams = new JSONObject();
|
|
creativeParams.put("advertiser_id",token.getAccountId());
|
|
creativeParams.put("advertiser_id",token.getAccountId());
|
|
-
|
|
|
|
creativeParams.put("unit_id",unitId);
|
|
creativeParams.put("unit_id",unitId);
|
|
creativeParams.put("photo_id",videoItem.getPhotoId());
|
|
creativeParams.put("photo_id",videoItem.getPhotoId());
|
|
- creativeParams.put("creative_name","智能创意-"+timestamp+unitCnt+"-"+1);
|
|
|
|
|
|
+ String uuid = UUID.randomUUID().toString();
|
|
|
|
+ creativeParams.put("creative_name","智能创意-"+uuid+unitCnt+"-"+1);
|
|
creativeParams.put("creative_material_type",videoItem.getMaterialType());
|
|
creativeParams.put("creative_material_type",videoItem.getMaterialType());
|
|
creativeParams.put("action_bar_text","立即下载");
|
|
creativeParams.put("action_bar_text","立即下载");
|
|
//TODO 广告语
|
|
//TODO 广告语
|
|
creativeParams.put("description","测试广告语");
|
|
creativeParams.put("description","测试广告语");
|
|
// 安卓下载中间页ID
|
|
// 安卓下载中间页ID
|
|
- if(null == strategy.getSiteId()||!"".equals(strategy.getSiteId())){
|
|
|
|
- creativeParams.put("site_id",strategy.getSiteId());
|
|
|
|
|
|
+ JSONArray siteIdArray = JSONArray.parseArray(strategy.getSiteId());
|
|
|
|
+ if(null == siteIdArray||!siteIdArray.isEmpty()){
|
|
|
|
+ JSONObject siteObject = siteIdArray.getJSONObject(0);
|
|
|
|
+ Long appId = siteObject.getLong("appId");
|
|
|
|
+ Long siteId = siteObject.getLong("siteId");
|
|
|
|
+ if(null!=siteId){
|
|
|
|
+ creativeParams.put("site_id",siteId);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- if(null == strategy.getClickTrackUrl()||!"".equals(strategy.getClickTrackUrl())){
|
|
|
|
|
|
+ if(null != strategy.getClickTrackUrl()&&!"".equals(strategy.getClickTrackUrl())){
|
|
creativeParams.put("click_track_url",strategy.getClickTrackUrl());
|
|
creativeParams.put("click_track_url",strategy.getClickTrackUrl());
|
|
}
|
|
}
|
|
- if(null == strategy.getImpressionUrl()||!"".equals(strategy.getImpressionUrl())){
|
|
|
|
|
|
+ if(null != strategy.getImpressionUrl()&&!"".equals(strategy.getImpressionUrl())){
|
|
creativeParams.put("impression_url",strategy.getImpressionUrl());
|
|
creativeParams.put("impression_url",strategy.getImpressionUrl());
|
|
}
|
|
}
|
|
- if(null == strategy.getActionbarClickUrl()||!"".equals(strategy.getActionbarClickUrl())){
|
|
|
|
|
|
+ if(null != strategy.getActionbarClickUrl()&&!"".equals(strategy.getActionbarClickUrl())){
|
|
creativeParams.put("actionbar_click_url",strategy.getActionbarClickUrl());
|
|
creativeParams.put("actionbar_click_url",strategy.getActionbarClickUrl());
|
|
}
|
|
}
|
|
|
|
+ if(null!=strategy.getCreativeCategory()){
|
|
|
|
+ creativeParams.put("creative_category",strategy.getCreativeCategory());
|
|
|
|
+ creativeParams.put("creative_tag",JSONArray.parseArray(strategy.getCreativeTag()));
|
|
|
|
+ }
|
|
return creativeParams;
|
|
return creativeParams;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -237,9 +248,10 @@ public class AiStrategyServiceImpl implements IAiStrategyService {
|
|
JSONObject unitParams = new JSONObject();
|
|
JSONObject unitParams = new JSONObject();
|
|
unitParams.put("advertiser_id",token.getAccountId());
|
|
unitParams.put("advertiser_id",token.getAccountId());
|
|
unitParams.put("campaign_id",campaignId);
|
|
unitParams.put("campaign_id",campaignId);
|
|
- unitParams.put("unit_name", strategy.getStrategyName() + item.getTargetType() +
|
|
|
|
- item.getTargetContent() + timestamp + unitCnt);
|
|
|
|
|
|
+ String uuid = UUID.randomUUID().toString();
|
|
|
|
+ unitParams.put("unit_name", strategy.getStrategyName() + item.getTargetType() + item.getTargetContent() + uuid + unitCnt);
|
|
unitParams.put("bid_type",10);
|
|
unitParams.put("bid_type",10);
|
|
|
|
+ unitParams.put("ocpx_action_type",180);
|
|
|
|
|
|
if(null!=strategy.getUseAppMarket()&&!"".equals(strategy.getUseAppMarket())){
|
|
if(null!=strategy.getUseAppMarket()&&!"".equals(strategy.getUseAppMarket())){
|
|
unitParams.put("use_app_market",Integer.parseInt(strategy.getUseAppMarket()));
|
|
unitParams.put("use_app_market",Integer.parseInt(strategy.getUseAppMarket()));
|
|
@@ -310,7 +322,7 @@ public class AiStrategyServiceImpl implements IAiStrategyService {
|
|
return unitParams;
|
|
return unitParams;
|
|
}
|
|
}
|
|
private void createCreative(CtopOauthToken token,JSONObject creativeParams,Long campaignId,Long unitId,
|
|
private void createCreative(CtopOauthToken token,JSONObject creativeParams,Long campaignId,Long unitId,
|
|
- KuaishouStrategy strategy,AiKuaishouStrategyTargetUnion targetUnion,int creativeCnt){
|
|
|
|
|
|
+ KuaishouStrategy strategy,AiKuaishouStrategyTargetUnion targetUnion,int creativeCnt,KuaiShouVideoGet videoGet){
|
|
creativeParams.put("creative_name",creativeParams.getString("creative_name")+creativeCnt);
|
|
creativeParams.put("creative_name",creativeParams.getString("creative_name")+creativeCnt);
|
|
Map<String, Object> creativeCreateResult = kuaishouInterfaceService.creativeCreate
|
|
Map<String, Object> creativeCreateResult = kuaishouInterfaceService.creativeCreate
|
|
(token.getAccessToken(), token.getAccountId(), creativeParams,1);
|
|
(token.getAccessToken(), token.getAccountId(), creativeParams,1);
|
|
@@ -325,6 +337,8 @@ public class AiStrategyServiceImpl implements IAiStrategyService {
|
|
mapCreative.setAccountId(token.getAccountId());
|
|
mapCreative.setAccountId(token.getAccountId());
|
|
mapCreative.setCampaignId(campaignId);
|
|
mapCreative.setCampaignId(campaignId);
|
|
mapCreative.setUnitId(unitId);
|
|
mapCreative.setUnitId(unitId);
|
|
|
|
+ //TODO 添加
|
|
|
|
+ mapCreative.setVideoSignature(videoGet.getSignature());
|
|
mapCreative.setCreativeId(creativeId);
|
|
mapCreative.setCreativeId(creativeId);
|
|
mapCreative.setStrategyId(strategy.getId());
|
|
mapCreative.setStrategyId(strategy.getId());
|
|
mapCreative.setStrategyTargetUnionId(targetUnion.getId());
|
|
mapCreative.setStrategyTargetUnionId(targetUnion.getId());
|
|
@@ -392,8 +406,12 @@ public class AiStrategyServiceImpl implements IAiStrategyService {
|
|
*/
|
|
*/
|
|
private boolean checkContains(JSONArray shortArray, JSONArray longArray) {
|
|
private boolean checkContains(JSONArray shortArray, JSONArray longArray) {
|
|
for (int i = 0; i < shortArray.size(); i++) {
|
|
for (int i = 0; i < shortArray.size(); i++) {
|
|
- if(longArray.contains(shortArray.getLong(i))){
|
|
|
|
- return true;
|
|
|
|
|
|
+ Long s = shortArray.getLong(i);
|
|
|
|
+ for(int j=0;j<longArray.size();j++){
|
|
|
|
+ Long l = longArray.getLong(j);
|
|
|
|
+ if(s.equals(l)){
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
return false;
|
|
@@ -408,19 +426,23 @@ public class AiStrategyServiceImpl implements IAiStrategyService {
|
|
private String getContainsElement(String definitionDomain, String targetContent){
|
|
private String getContainsElement(String definitionDomain, String targetContent){
|
|
JSONArray definitionDomainArray = JSONArray.parseArray(definitionDomain);
|
|
JSONArray definitionDomainArray = JSONArray.parseArray(definitionDomain);
|
|
JSONArray targetContentArray = JSONArray.parseArray(targetContent);
|
|
JSONArray targetContentArray = JSONArray.parseArray(targetContent);
|
|
- if(definitionDomainArray.size()>=targetContentArray.size()){
|
|
|
|
- return getContainsArray(targetContentArray,definitionDomainArray);
|
|
|
|
- }
|
|
|
|
return getContainsArray(definitionDomainArray,targetContentArray);
|
|
return getContainsArray(definitionDomainArray,targetContentArray);
|
|
}
|
|
}
|
|
|
|
|
|
- private String getContainsArray(JSONArray shortArray, JSONArray longArray) {
|
|
|
|
|
|
+ private String getContainsArray(JSONArray definitionDomainArray, JSONArray targetContentArray) {
|
|
|
|
+ log.info("definitionDomainArray:"+definitionDomainArray.toJSONString());
|
|
|
|
+ log.info("targetContentArray:"+targetContentArray.toJSONString());
|
|
JSONArray resultArray = new JSONArray();
|
|
JSONArray resultArray = new JSONArray();
|
|
- for (int i = 0; i < shortArray.size(); i++) {
|
|
|
|
- if(longArray.contains(shortArray.getLong(i))){
|
|
|
|
- resultArray.add(shortArray.getLong(i));
|
|
|
|
|
|
+ for (int i = 0; i < definitionDomainArray.size(); i++) {
|
|
|
|
+ Long s = definitionDomainArray.getLong(i);
|
|
|
|
+ for(int j=0;j<targetContentArray.size();j++){
|
|
|
|
+ Long l = targetContentArray.getLong(j);
|
|
|
|
+ if(l.equals(s)){
|
|
|
|
+ resultArray.add(l);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ log.info("result:"+resultArray.toJSONString());
|
|
return resultArray.toJSONString();
|
|
return resultArray.toJSONString();
|
|
}
|
|
}
|
|
}
|
|
}
|