|
@@ -6,6 +6,7 @@ import cn.com.ctop.job.kuaishou.data.entity.KuaishouAccountAdSceneReportDaily;
|
|
|
import cn.com.ctop.job.kuaishou.data.entity.KuaishouAdUnitList;
|
|
|
import cn.com.ctop.job.kuaishou.data.entity.KuaishouAdvertiserFundDailyFlows;
|
|
|
import cn.com.ctop.job.kuaishou.data.entity.KuaishouAdvertiserFundGet;
|
|
|
+import cn.com.ctop.job.kuaishou.data.entity.KuaishouAgentAccountList;
|
|
|
import cn.com.ctop.job.kuaishou.data.entity.KuaishouAudienceReportDaily;
|
|
|
import cn.com.ctop.job.kuaishou.data.entity.KuaishouCampaignList;
|
|
|
import cn.com.ctop.job.kuaishou.data.entity.OauthAgentToken;
|
|
@@ -136,7 +137,7 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
|
|
|
toGet = false;
|
|
|
}
|
|
|
if (toGet) {
|
|
|
- getAdUnitReport(advertiserId, null, accessToken, startDate, endDate, page + 1);
|
|
|
+ getAdUnitReport(advertiserId, unitId, accessToken, startDate, endDate, page + 1);
|
|
|
} else {
|
|
|
log.info("快手广告组数据获取完成:accountId:{}", advertiserId);
|
|
|
}
|
|
@@ -196,7 +197,11 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
|
|
|
if (Check.isNull(project) || Check.isNull(details)) {
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+ Map<String, String> textMap = new HashMap<>();
|
|
|
+ List<JSONObject> lists = tokenMapper.getKuaishouOcpxTypeList();
|
|
|
+ for (JSONObject da : lists) {
|
|
|
+ textMap.put(da.getString("ocpxActionType"), da.getString("ocpxActionName"));
|
|
|
+ }
|
|
|
// 最高出价
|
|
|
Long maxBid = project.getLong("maxBid");
|
|
|
|
|
@@ -208,24 +213,34 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
|
|
|
}
|
|
|
|
|
|
//转化目标map
|
|
|
- Map<Integer, Long> ocpxMap = new HashMap<>();
|
|
|
+ Map<Integer, String> ocpxMap = new HashMap<>();
|
|
|
String ocpxTypeStr = project.getString("ocpxActionType");
|
|
|
if (!Check.isNull(ocpxTypeStr)) {
|
|
|
JSONArray ocpxArr = JSONArray.parseArray(ocpxTypeStr);
|
|
|
+ StringBuffer nameStr = new StringBuffer();
|
|
|
for (int i = 0; i < ocpxArr.size(); i++) {
|
|
|
JSONObject obj = ocpxArr.getJSONObject(i);
|
|
|
- ocpxMap.put(obj.getInteger("ocpxCode"), obj.getLong("maxValue"));
|
|
|
+ ocpxMap.put(obj.getInteger("ocpxCode"), obj.getString("maxValue"));
|
|
|
+ nameStr.append(textMap.get(obj.getString("ocpxCode"))).append(" ");
|
|
|
+ }
|
|
|
+ if (ocpxArr.size() > 0) {
|
|
|
+ ocpxMap.put(199999, nameStr.toString());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//深度转化目标map
|
|
|
- Map<Integer, Long> deepMap = new HashMap<>();
|
|
|
+ Map<Integer, String> deepMap = new HashMap<>();
|
|
|
String deepTypeStr = project.getString("deepConversionType");
|
|
|
if (!Check.isNull(deepTypeStr)) {
|
|
|
JSONArray deepArr = JSONArray.parseArray(deepTypeStr);
|
|
|
+ StringBuffer nameStr = new StringBuffer();
|
|
|
for (int i = 0; i < deepArr.size(); i++) {
|
|
|
JSONObject obj = deepArr.getJSONObject(i);
|
|
|
- deepMap.put(obj.getInteger("deepCode"), obj.getLong("deepValue"));
|
|
|
+ deepMap.put(obj.getInteger("deepCode"), obj.getString("deepValue"));
|
|
|
+ nameStr.append(textMap.get(obj.getString("deepCode"))).append(" ");
|
|
|
+ }
|
|
|
+ if (deepArr.size() > 0) {
|
|
|
+ deepMap.put(199999, nameStr.toString());
|
|
|
}
|
|
|
}
|
|
|
List<KuaishouAdUnitList> ksAdUnitList = new ArrayList<>();
|
|
@@ -258,51 +273,78 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
|
|
|
Boolean typeFalg = true;
|
|
|
Boolean bidFalg = true;
|
|
|
|
|
|
+ StringBuffer msgType = new StringBuffer();
|
|
|
+ StringBuffer msgBid = new StringBuffer();
|
|
|
//优化目标
|
|
|
if (!bidList.isEmpty()) {
|
|
|
if (!bidList.contains(bidType)) {
|
|
|
//项目不包含该优化目标,则关停
|
|
|
typeFalg = false;
|
|
|
+ msgType.append("已设优化:").append(bidTypeStr).append("<br/>").append(",目标优化:").append(bidType);
|
|
|
} else if (bidType == 2 && bid > maxBid) {
|
|
|
//若优化目标为2点击数,并且广告组出价大于项目设置最大出价,则关停
|
|
|
bidFalg = false;
|
|
|
+ msgBid.append("目标优化为点击数,且组出价:").append(bid / 1000).append("大于项目最大出价:").append(maxBid / 1000);
|
|
|
}
|
|
|
}
|
|
|
//转化目标
|
|
|
if (!Check.isNull(ocpxActionType) && ocpxActionType != 0) {
|
|
|
+ String ocpxStr = ocpxActionType.toString();
|
|
|
+ String octypeName = Check.isNull(textMap.get(ocpxStr)) ? ocpxStr : textMap.get(ocpxStr);
|
|
|
//!=0是设置过转化目标
|
|
|
if (!Check.isNullMap(ocpxMap)) {
|
|
|
- Long ocpxBid = ocpxMap.get(ocpxActionType);
|
|
|
+ String ocpxBid = ocpxMap.get(ocpxActionType);
|
|
|
if (Check.isNull(ocpxBid)) {
|
|
|
- if (ocpxActionType == 2 && dayBudget != 0 && dayBudget <= 500 * 1000) {
|
|
|
- // 转化目标为2行为数,并且预算小于等于500且不是不限,则允许启动
|
|
|
- typeFalg = true;
|
|
|
+ if (ocpxActionType == 2) {
|
|
|
+ if (dayBudget == 0 || dayBudget > 500 * 1000) {
|
|
|
+ // 转化目标为2行为数,并且预算大于500 或者不限,则关停
|
|
|
+ msgType.append("目标转化是行为数,");
|
|
|
+ if (dayBudget == 0) {
|
|
|
+ msgType.append("且组单日预算设置为不限!");
|
|
|
+ } else {
|
|
|
+ msgType.append("且组单日预算:").append(dayBudget / 1000).append("大于500!");
|
|
|
+ }
|
|
|
+ }
|
|
|
} else {
|
|
|
//通过key未获取值,说明不包含该目标,进行关停
|
|
|
typeFalg = false;
|
|
|
+ msgType.append("已设转化:").append(ocpxMap.get(199999)).append("<br/>").append("目标转化:").append(octypeName);
|
|
|
}
|
|
|
} else {
|
|
|
- if (cpaBid > ocpxBid) {
|
|
|
+ if (cpaBid > Long.valueOf(ocpxBid)) {
|
|
|
//组转化出价 大于 项目设置最大转化出价,则关停
|
|
|
bidFalg = false;
|
|
|
+ msgBid.append("[").append(octypeName).append("]最高出价:").append(Long.valueOf(ocpxBid) / 1000).append("<br/>");
|
|
|
+ msgBid.append("目标出价:").append(cpaBid / 1000);
|
|
|
}
|
|
|
}
|
|
|
} else if (ocpxActionType == 2 && (dayBudget == 0 || dayBudget > 500 * 1000)) {
|
|
|
// 转化目标为2行为数,并且预算大于500 或者不限,则关停
|
|
|
typeFalg = false;
|
|
|
+ msgType.append("目标转化是行为数,");
|
|
|
+ if (dayBudget == 0) {
|
|
|
+ msgType.append("且组单日预算设置为不限!");
|
|
|
+ } else {
|
|
|
+ msgType.append("且组单日预算:").append(dayBudget / 1000).append("大于500!");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //转化目标
|
|
|
+ //深度转化目标
|
|
|
if (!Check.isNull(deepConversionType) && deepConversionType != 0 && !deepMap.isEmpty()) {
|
|
|
- Long deepBid = deepMap.get(deepConversionType);
|
|
|
+ String deepStr = deepConversionType.toString();
|
|
|
+ String depTypeName = Check.isNull(textMap.get(deepStr)) ? deepStr : textMap.get(deepStr);
|
|
|
+ String deepBid = deepMap.get(deepConversionType);
|
|
|
if (Check.isNull(deepBid)) {
|
|
|
//通过key未获取值,说明不包含该目标,进行关停
|
|
|
typeFalg = false;
|
|
|
+ msgType.append("已设深度:").append(deepMap.get(199999)).append("<br/>").append("目标深度:").append(depTypeName);
|
|
|
} else {
|
|
|
- if (deepConversionBid > deepBid) {
|
|
|
+ if (deepConversionBid > Long.valueOf(deepBid)) {
|
|
|
//组深度转化出价 大于 项目设置最大转化出价,则关停
|
|
|
bidFalg = false;
|
|
|
+ msgBid.append("[").append(depTypeName).append("]最高深度出价:").append(Long.valueOf(deepBid) / 1000).append("<br/>");
|
|
|
+ msgBid.append("目标深度出价:").append(deepConversionBid / 1000);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -311,7 +353,7 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
|
|
|
executorBidTypeService.submit(new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
- warningOperationService.kuaiShouWarningOperation(project.getLong("projectId"), project.getString("projectName"), accountId, unitId, unitName);
|
|
|
+ warningOperationService.kuaiShouWarningOperation(project.getLong("projectId"), project.getString("projectName"), accountId, unitId, unitName, msgType.toString());
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -319,7 +361,7 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
|
|
|
executorMaxBidService.submit(new Runnable() {
|
|
|
@Override
|
|
|
public void run() {
|
|
|
- warningOperationService.kuaiShouBidWarningOperation(project.getLong("projectId"), project.getString("projectName"), accountId, unitId, unitName);
|
|
|
+ warningOperationService.kuaiShouBidWarningOperation(project.getLong("projectId"), project.getString("projectName"), accountId, unitId, unitName, msgBid.toString());
|
|
|
}
|
|
|
});
|
|
|
}
|
|
@@ -364,7 +406,7 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
|
|
|
deleteMap.put("unitId", unitId);
|
|
|
adUnitReportMapper.deleteByMap(deleteMap);
|
|
|
} else {
|
|
|
- getAdUnitReport(acccountId, null, token, null, null, 1);
|
|
|
+ getAdUnitReport(acccountId, unitId, token, null, null, 1);
|
|
|
}
|
|
|
} else {
|
|
|
log.error("=》=》=》AdUnitReportServiceImpl.updateUnitStatus修改广告组状态失败,advertiserId:{},unitId:{},返回信息:{}", acccountId, unitId, resultJson);
|
|
@@ -798,5 +840,85 @@ public class AdUnitReportServiceImpl implements IAdUnitReportService {
|
|
|
return fundDailyFlowsMapper.getAllAccounts();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 快手-代理商数据
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void getAgentAccountList() {
|
|
|
+ List<Long> appList = new ArrayList<>();
|
|
|
+ appList.add(27L);
|
|
|
+ appList.add(165893351L);
|
|
|
+ for (int i = 0; i < appList.size(); i++) {
|
|
|
+ Long appId = appList.get(i);
|
|
|
+ OauthAgentToken agentToken = agentTokenMapper.getTokenByAppId(appId);
|
|
|
+ getAgentAccountList(agentToken.getAccessToken(), agentToken.getAgentId(), 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 代理商获取广告主列表
|
|
|
+ */
|
|
|
+ private void getAgentAccountList(String token, Long agentId, int page) {
|
|
|
+ try {
|
|
|
+ log.info("=====代理商获取广告主列表====page--{}===《《《《《", page);
|
|
|
+ Map<String, String> headers = new HashMap<String, String>();
|
|
|
+ headers.put("Content-Type", " application/json");
|
|
|
+ headers.put("Access-Token", token);
|
|
|
+ JSONObject param = new JSONObject();
|
|
|
+ param.put("select_type", 0);
|
|
|
+ param.put("select_value", null);
|
|
|
+ param.put("agent_id", agentId);
|
|
|
+ param.put("page_size", 1000);
|
|
|
+ param.put("page", page);
|
|
|
+
|
|
|
+ String result = HttpUtils.httpPostRequest(postUrl + KuaishouConstant.AGENT_ACCOUNT_LIST, param, headers);
|
|
|
+ JSONObject resultJson = JSONObject.parseObject(result);
|
|
|
+ if (Check.isNull(resultJson)) {
|
|
|
+ log.info("代理商获取广告主列表返回为空");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Integer code = resultJson.getInteger("code");
|
|
|
+ if (code != 0) {
|
|
|
+ log.error("代理商获取广告主列表code错误,返回:{}", resultJson);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ JSONObject data = resultJson.getJSONObject("data");
|
|
|
+ if (Check.isNull(data)) {
|
|
|
+ log.error("代理商获取广告主列表data节点为空");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ JSONArray details = data.getJSONArray("details");
|
|
|
+ if (Check.isNull(details)) {
|
|
|
+ log.error("代理商获取广告主列表details节点为空");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<KuaishouAgentAccountList> agentList = new ArrayList<>();
|
|
|
+ for (int i = 0; i < details.size(); i++) {
|
|
|
+ JSONObject detailJson = details.getJSONObject(i);
|
|
|
+ if (!Check.isNull(detailJson)) {
|
|
|
+ KuaishouAgentAccountList agent = new KuaishouAgentAccountList(detailJson, agentId);
|
|
|
+ agentList.add(agent);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!Check.isNull(agentList)) {
|
|
|
+ adUnitReportMapper.replaceBatchKuaishouAgentAccountList(agentList);
|
|
|
+ }
|
|
|
+ //是否有下一页
|
|
|
+ Boolean toGet = true;
|
|
|
+ if (details.size() < 1000) {
|
|
|
+ toGet = false;
|
|
|
+ }
|
|
|
+ if (toGet) {
|
|
|
+ getAgentAccountList(token, agentId, page + 1);
|
|
|
+ } else {
|
|
|
+ log.info("代理商获取广告主列表完成========");
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
|
|
|
+ }
|
|
|
}
|