|
@@ -0,0 +1,278 @@
|
|
|
+package flink.zanxiangnet.ad.monitoring.process;
|
|
|
+
|
|
|
+import flink.zanxiangnet.ad.monitoring.AdStatJob;
|
|
|
+import flink.zanxiangnet.ad.monitoring.clickhouse.sink.ClickhouseUtil;
|
|
|
+import flink.zanxiangnet.ad.monitoring.pojo.entity.AdStatOfHourDWD;
|
|
|
+import flink.zanxiangnet.ad.monitoring.pojo.entity.AdStatOfMinuteDWD;
|
|
|
+import flink.zanxiangnet.ad.monitoring.pojo.entity.CostHourDM;
|
|
|
+import flink.zanxiangnet.ad.monitoring.pojo.entity.CostMinuterDM;
|
|
|
+import flink.zanxiangnet.ad.monitoring.util.DateUtil;
|
|
|
+import org.apache.flink.configuration.Configuration;
|
|
|
+import org.apache.flink.streaming.api.functions.windowing.ProcessWindowFunction;
|
|
|
+import org.apache.flink.streaming.api.windowing.windows.TimeWindow;
|
|
|
+import org.apache.flink.util.Collector;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.sql.Connection;
|
|
|
+import java.sql.ResultSet;
|
|
|
+import java.sql.SQLException;
|
|
|
+import java.sql.Statement;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Properties;
|
|
|
+
|
|
|
+public class CostMinuteHourProcess extends ProcessWindowFunction<AdStatOfMinuteDWD, CostHourDM, Long, TimeWindow> {
|
|
|
+ private static final DateTimeFormatter formatForLastReduceKey = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH:mm");
|
|
|
+ private Connection connection = null;
|
|
|
+ private int minutenow = 1;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void open(Configuration conf) throws SQLException, ClassNotFoundException, IOException {
|
|
|
+ Properties props = new Properties();
|
|
|
+ props.load(AdStatJob.class.getResourceAsStream("/application.properties"));
|
|
|
+ connection = ClickhouseUtil.getConn(props, "cc-bp11803zbt0oq045io.ads.rds.aliyuncs.com",
|
|
|
+ "8123", "data_monitoring");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public CostHourDM datachange(AdStatOfMinuteDWD adStatOfMinuteDWD, CostHourDM costHourDM) {
|
|
|
+
|
|
|
+ costHourDM.dt = adStatOfMinuteDWD.getStatDay();
|
|
|
+
|
|
|
+ costHourDM.campaignId = adStatOfMinuteDWD.getCampaignId().toString();
|
|
|
+
|
|
|
+ costHourDM.createTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(adStatOfMinuteDWD.getCreateTime());
|
|
|
+
|
|
|
+
|
|
|
+ String tmpHour = adStatOfMinuteDWD.getHour() > 9 ? adStatOfMinuteDWD.getHour().toString() : "0" + adStatOfMinuteDWD.getHour().toString();
|
|
|
+ costHourDM.hour = adStatOfMinuteDWD.getStatDay() + " " + tmpHour + ":00:00";
|
|
|
+
|
|
|
+ costHourDM.adId = adStatOfMinuteDWD.getAdId().toString();
|
|
|
+
|
|
|
+ costHourDM.adgroupId = adStatOfMinuteDWD.getAdgroupId().toString();
|
|
|
+
|
|
|
+ costHourDM.adcreativeId = "";
|
|
|
+
|
|
|
+ costHourDM.accountId = adStatOfMinuteDWD.getAccountId().toString();
|
|
|
+
|
|
|
+ costHourDM.costTotal = adStatOfMinuteDWD.getCostTotal();
|
|
|
+
|
|
|
+ costHourDM.costDay = adStatOfMinuteDWD.getCostDay();
|
|
|
+
|
|
|
+ costHourDM.costHour = adStatOfMinuteDWD.getCostHour();
|
|
|
+
|
|
|
+ costHourDM.costSpeed = adStatOfMinuteDWD.getCostHour();
|
|
|
+
|
|
|
+ costHourDM.viewCountTotal = adStatOfMinuteDWD.getViewCountTotal();
|
|
|
+
|
|
|
+ costHourDM.viewCountDay = adStatOfMinuteDWD.getViewCountDay();
|
|
|
+
|
|
|
+ costHourDM.viewCountHour = adStatOfMinuteDWD.getViewCountHour();
|
|
|
+
|
|
|
+ costHourDM.thousandDisplayPriceAll = adStatOfMinuteDWD.getThousandDisplayPriceAll();
|
|
|
+
|
|
|
+ costHourDM.thousandDisplayPriceDay = adStatOfMinuteDWD.getThousandDisplayPriceDay();
|
|
|
+
|
|
|
+ costHourDM.thousandDisplayPriceHour = adStatOfMinuteDWD.getThousandDisplayPriceHour();
|
|
|
+
|
|
|
+ costHourDM.validClickCountTotal = adStatOfMinuteDWD.getValidClickCountTotal();
|
|
|
+
|
|
|
+ costHourDM.validClickCountDay = adStatOfMinuteDWD.getValidClickCountDay();
|
|
|
+
|
|
|
+ costHourDM.validClickCountHour = adStatOfMinuteDWD.getValidClickCountHour();
|
|
|
+
|
|
|
+ costHourDM.ctrAll = adStatOfMinuteDWD.getCtrAll();
|
|
|
+
|
|
|
+ costHourDM.ctrDay = adStatOfMinuteDWD.getCtrDay();
|
|
|
+
|
|
|
+ costHourDM.ctrHour = adStatOfMinuteDWD.getCtrHour();
|
|
|
+
|
|
|
+ costHourDM.cpcAll = adStatOfMinuteDWD.getCpcAll();
|
|
|
+
|
|
|
+ costHourDM.cpcDay = adStatOfMinuteDWD.getCpcDay();
|
|
|
+
|
|
|
+ costHourDM.cpcHour = adStatOfMinuteDWD.getCpcHour();
|
|
|
+
|
|
|
+ costHourDM.conversionsCountTotal = adStatOfMinuteDWD.getConversionsCountTotal();
|
|
|
+
|
|
|
+ costHourDM.conversionsCountDay = adStatOfMinuteDWD.getConversionsCountDay();
|
|
|
+
|
|
|
+ costHourDM.conversionsCountHour = adStatOfMinuteDWD.getConversionsCountHour();
|
|
|
+
|
|
|
+ costHourDM.conversionsCostTotal = adStatOfMinuteDWD.getConversionsCostAll();
|
|
|
+
|
|
|
+ costHourDM.conversionsCostDay = adStatOfMinuteDWD.getConversionsCostDay();
|
|
|
+
|
|
|
+ costHourDM.conversionsCostHour = adStatOfMinuteDWD.getConversionsCostHour();
|
|
|
+
|
|
|
+ costHourDM.conversionsRateAll = adStatOfMinuteDWD.getConversionsRateAll();
|
|
|
+
|
|
|
+ costHourDM.conversionsRateDay = adStatOfMinuteDWD.getConversionsRateDay();
|
|
|
+
|
|
|
+ costHourDM.conversionsRateHour = adStatOfMinuteDWD.getConversionsRateHour();
|
|
|
+
|
|
|
+ costHourDM.firstDayOrderRoiTotal = 0;
|
|
|
+
|
|
|
+ costHourDM.firstDayOrderRoiDay = 0;
|
|
|
+
|
|
|
+ costHourDM.firstDayOrderRoiHour = 0;
|
|
|
+
|
|
|
+ costHourDM.firstDayOrderAmountTotal = adStatOfMinuteDWD.getFirstDayOrderAmountTotal();
|
|
|
+
|
|
|
+ costHourDM.firstDayOrderAmountDay = adStatOfMinuteDWD.getFirstDayOrderAmountDay();
|
|
|
+
|
|
|
+ costHourDM.firstDayOrderAmountHour = adStatOfMinuteDWD.getFirstDayOrderAmountHour();
|
|
|
+
|
|
|
+ costHourDM.firstDayOrderCountTotal = adStatOfMinuteDWD.getFirstDayOrderCountTotal();
|
|
|
+
|
|
|
+ costHourDM.firstDayOrderCountDay = adStatOfMinuteDWD.getFirstDayOrderCountDay();
|
|
|
+
|
|
|
+ costHourDM.firstDayOrderCountHour = adStatOfMinuteDWD.getFirstDayOrderCountHour();
|
|
|
+
|
|
|
+ costHourDM.webOrderAmountTotal = adStatOfMinuteDWD.getOrderAmountTotal();
|
|
|
+
|
|
|
+ costHourDM.webOrderAmountDay = adStatOfMinuteDWD.getOrderAmountDay();
|
|
|
+
|
|
|
+ costHourDM.webOrderAmountHour = adStatOfMinuteDWD.getOrderAmountHour();
|
|
|
+
|
|
|
+ costHourDM.webOrderCostTotal = adStatOfMinuteDWD.getWebOrderCostAll();
|
|
|
+
|
|
|
+ costHourDM.webOrderCostDay = adStatOfMinuteDWD.getWebOrderCostDay();
|
|
|
+
|
|
|
+ costHourDM.webOrderCostHour = adStatOfMinuteDWD.getWebOrderCostHour();
|
|
|
+
|
|
|
+ costHourDM.webOrderRateTotal = adStatOfMinuteDWD.getOrderRateAll();
|
|
|
+
|
|
|
+ costHourDM.webOrderRateDay = adStatOfMinuteDWD.getOrderRateDay();
|
|
|
+
|
|
|
+ costHourDM.webOrderRateHour = adStatOfMinuteDWD.getOrderRateHour();
|
|
|
+
|
|
|
+ costHourDM.webOrderCountTotal = adStatOfMinuteDWD.getOrderCountTotal();
|
|
|
+
|
|
|
+ costHourDM.webOrderCountDay = adStatOfMinuteDWD.getOrderCountDay();
|
|
|
+
|
|
|
+ costHourDM.webOrderCountHour = adStatOfMinuteDWD.getOrderCountHour();
|
|
|
+
|
|
|
+ costHourDM.orderRoiTotal = adStatOfMinuteDWD.getOrderRoiAll();
|
|
|
+
|
|
|
+ costHourDM.orderRoiDay = adStatOfMinuteDWD.getOrderRoiDay();
|
|
|
+
|
|
|
+ costHourDM.orderRoiHour = adStatOfMinuteDWD.getOrderRoiHour();
|
|
|
+
|
|
|
+ costHourDM.orderUnitPriceTotal = adStatOfMinuteDWD.getOrderUnitPriceAll();
|
|
|
+
|
|
|
+ costHourDM.orderUnitPriceDay = adStatOfMinuteDWD.getOrderUnitPriceDay();
|
|
|
+
|
|
|
+ costHourDM.orderUnitPriceHour = adStatOfMinuteDWD.getOrderUnitPriceHour();
|
|
|
+
|
|
|
+ costHourDM.fromFollowUvTotal = adStatOfMinuteDWD.getOfficialAccountFollowCountTotal();
|
|
|
+
|
|
|
+ costHourDM.fromFollowUvDay = adStatOfMinuteDWD.getOfficialAccountFollowCountDay();
|
|
|
+
|
|
|
+ costHourDM.fromFollowUvHour = adStatOfMinuteDWD.getOfficialAccountFollowCountHour();
|
|
|
+
|
|
|
+ costHourDM.fromFollowCostTotal = adStatOfMinuteDWD.getOfficialAccountFollowCountTotal() == 0 ? 0 : adStatOfMinuteDWD.getCostTotal() / adStatOfMinuteDWD.getOfficialAccountFollowCountTotal();
|
|
|
+
|
|
|
+ costHourDM.fromFollowCostDay = adStatOfMinuteDWD.getOfficialAccountFollowCountDay() == 0 ? 0 : adStatOfMinuteDWD.getCostDay() / adStatOfMinuteDWD.getOfficialAccountFollowCountDay();
|
|
|
+
|
|
|
+ costHourDM.fromFollowCostHour = adStatOfMinuteDWD.getOfficialAccountFollowCountHour() == 0 ? 0 : adStatOfMinuteDWD.getCostHour() / adStatOfMinuteDWD.getOfficialAccountFollowCountHour();
|
|
|
+
|
|
|
+ costHourDM.fromFollowRateTotal = adStatOfMinuteDWD.getOfficialAccountFollowRateAll();
|
|
|
+
|
|
|
+ costHourDM.fromFollowRateDay = adStatOfMinuteDWD.getOfficialAccountFollowRateDay();
|
|
|
+
|
|
|
+ costHourDM.fromFollowRateHour = adStatOfMinuteDWD.getOfficialAccountFollowRateHour();
|
|
|
+
|
|
|
+ costHourDM.webRegisterCountTotal = adStatOfMinuteDWD.getOfficialAccountRegisterUserCountTotal();
|
|
|
+
|
|
|
+ costHourDM.webRegisterCountDay = adStatOfMinuteDWD.getOfficialAccountRegisterUserCountDay();
|
|
|
+
|
|
|
+ costHourDM.webRegisterCountHour = adStatOfMinuteDWD.getOfficialAccountRegisterUserCountHour();
|
|
|
+
|
|
|
+ costHourDM.webRegisterUvTotal = adStatOfMinuteDWD.getOfficialAccountRegisterUserCountTotal();
|
|
|
+
|
|
|
+ costHourDM.webRegisterUvDay = adStatOfMinuteDWD.getOfficialAccountRegisterUserCountDay();
|
|
|
+
|
|
|
+ costHourDM.webRegisterUvHour = adStatOfMinuteDWD.getOfficialAccountRegisterUserCountHour();
|
|
|
+
|
|
|
+ costHourDM.webRegisterCostTotal = adStatOfMinuteDWD.getOfficialAccountRegisterCostAll();
|
|
|
+
|
|
|
+ costHourDM.webRegisterCostDay = adStatOfMinuteDWD.getOfficialAccountRegisterCostDay();
|
|
|
+
|
|
|
+ costHourDM.webRegisterCostHour = adStatOfMinuteDWD.getOfficialAccountRegisterCostHour();
|
|
|
+ return costHourDM;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void process(Long elementCount, ProcessWindowFunction<AdStatOfMinuteDWD, CostHourDM, Long, TimeWindow>.Context context,
|
|
|
+ Iterable<AdStatOfMinuteDWD> iterable, Collector<CostHourDM> collector) throws Exception {
|
|
|
+ long beginTime = context.window().getStart();
|
|
|
+ LocalDateTime beginDateTime = DateUtil.milliToLocalDateTime(beginTime);
|
|
|
+ LocalDate beginDate = beginDateTime.toLocalDate();
|
|
|
+
|
|
|
+ String statDay = DateUtil.formatLocalDate(beginDate);
|
|
|
+
|
|
|
+
|
|
|
+ int hourInt = beginDateTime.getHour();
|
|
|
+ String hour = beginDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00:00"));
|
|
|
+ String lastHour = beginDateTime.minusHours(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00:00"));
|
|
|
+ String lastTwoHour = beginDateTime.minusHours(2).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00:00"));
|
|
|
+ String lastThreeHour = beginDateTime.minusHours(3).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:00:00"));
|
|
|
+
|
|
|
+ this.minutenow = (beginDateTime.getMinute() % 5) == 0 ? 1 : (beginDateTime.getMinute() % 5);
|
|
|
+ long now = System.currentTimeMillis();
|
|
|
+
|
|
|
+
|
|
|
+ List<AdStatOfMinuteDWD> adStatOfMinuteDWDlist = new ArrayList<>(24);
|
|
|
+
|
|
|
+ for (AdStatOfMinuteDWD adStatOfMinuteDWD : iterable) {
|
|
|
+
|
|
|
+ adStatOfMinuteDWDlist.add(adStatOfMinuteDWD);
|
|
|
+ CostHourDM costHourDM = new CostHourDM();
|
|
|
+
|
|
|
+ if (adStatOfMinuteDWD.getHour() != hourInt) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ String adId = adStatOfMinuteDWD.getAdId().toString();
|
|
|
+ String sql = "select " +
|
|
|
+ "if(hour='" + lastHour + "',cost_hour,0) last_hour_cost, " +
|
|
|
+ "if(hour='" + lastTwoHour + "',cost_hour,0) last_two_hour_cost, " +
|
|
|
+ "if(hour='" + lastHour + "',cost_hour,0) - if(hour='" + lastTwoHour + "',cost_hour,0) cost_last_hour_diff, " +
|
|
|
+ "(if(hour='" + lastHour + "',cost_hour,0) - if(hour='" + lastTwoHour + "',cost_hour,0))*(if(hour='" + lastTwoHour + "',cost_hour,0) - if(hour='" + lastThreeHour + "',cost_hour,0)) cost_last_three_trend " +
|
|
|
+ "from data_monitoring.cost_hour ch " +
|
|
|
+ "where dt='" + statDay + "' and ad_id='" + adId + "' ";
|
|
|
+
|
|
|
+
|
|
|
+ Statement statement = connection.createStatement();
|
|
|
+ ResultSet rs = statement.executeQuery(sql);
|
|
|
+ while (rs.next()) {
|
|
|
+ costHourDM.costLastHour = rs.getLong(1);
|
|
|
+ costHourDM.costLastTwoHour = rs.getLong(2);
|
|
|
+ costHourDM.costLastHourDiff = rs.getLong(3);
|
|
|
+ costHourDM.costLastThreeTrend = rs.getLong(4);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ CostHourDM CostHourDM_new = datachange(adStatOfMinuteDWD, costHourDM);
|
|
|
+
|
|
|
+ collector.collect(CostHourDM_new);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void clear(ProcessWindowFunction<AdStatOfMinuteDWD, CostHourDM, Long, TimeWindow>.Context context) throws Exception {
|
|
|
+ }
|
|
|
+
|
|
|
+}
|