FakeByChannelParse.java 6.71 KB
package com.reyun.report.parse;

import com.reyun.context.AppUtils;
import com.reyun.model.*;
import com.reyun.report.AbstractListReportParse;
import com.reyun.service.ChannelService;
import com.reyun.util.ValidateUtil;
import org.json.JSONException;

import java.text.DecimalFormat;
import java.util.*;

/**
 * Created by nolan on 18/01/2017.
 * description:
 */
public class FakeByChannelParse
        extends AbstractListReportParse
{
    private ChannelService channelService = AppUtils.getApplicationContext().getBean(ChannelService.class);

    @Override
    public ReportListResult parse(ReportListResult reportResult, Long app, Long account, List<String> viewColumns, String reportName, boolean isSearchText, List<String> searchIds) {
        List<Map<String, Object>> valList = reportResult.getVal();
        List<Map<String, Object>> res = new LinkedList<>();

        Map<String, String> nameMap = new HashMap<>();
        List<Long> idList = new ArrayList<>();
        if (ValidateUtil.isValid(valList)) {
            nameMap.put("-1", "自然量");
            for (Map<String, Object> map : valList) {
                idList.add((Long) map.get("cid"));
            }
            List<Channel> channelList = channelService.listChannelByIds(idList);
            if (ValidateUtil.isValid(channelList)) {
                for (Channel ch : channelList) {
                    nameMap.put(ch.getId().toString(), ch.getName());
                }
            }
        }
        Map<String, Object> totalMap = new HashMap<>();
        totalMap.put("cid", "汇总");
        totalMap.put("num_click", 0L);
        totalMap.put("num_black", 0L);
        totalMap.put("rate_click", 0);

        totalMap.put("num_install", 0L);
        totalMap.put("num_install_valid", 0L);
        totalMap.put("num_install_black", 0L);
        totalMap.put("rate_install", 0);

        totalMap.put("num_install_black_deviceid", 0L);
        totalMap.put("num_total_install_black", 0);

        totalMap.put("level1", 0);
        totalMap.put("level2", 0);
        totalMap.put("level3", 0);
        totalMap.put("level45", 0);
        totalMap.put("level67", 0);
        totalMap.put("num_install_fake", 0);

        if (ValidateUtil.isValid(valList)) {
            for (Map<String, Object> map : valList) {
                map.put("cid", nameMap.get(map.get("cid").toString()));
                totalMap.put("num_click", Long.parseLong(totalMap.get("num_click").toString()) + Long.parseLong(map.get("num_click").toString()));
                totalMap.put("num_black", Long.parseLong(totalMap.get("num_black").toString()) + Long.parseLong(map.get("num_black").toString()));

                totalMap.put("num_install", Long.parseLong(totalMap.get("num_install").toString()) + Long.parseLong(map.get("num_install").toString()));
                totalMap.put("num_install_valid", Long.parseLong(totalMap.get("num_install_valid").toString()) + Long.parseLong(map.get("num_install_valid").toString()));
                totalMap.put("num_install_black", Long.parseLong(totalMap.get("num_install_black").toString()) + Long.parseLong(map.get("num_install_black").toString()));

                totalMap.put("num_install_black_deviceid", Long.parseLong(totalMap.get("num_install_black_deviceid").toString()) + Long.parseLong(map.get("num_install_black_deviceid").toString()));
                totalMap.put("num_total_install_black", Long.parseLong(totalMap.get("num_total_install_black").toString()) + Long.parseLong(map.get("num_total_install_black").toString()));

                totalMap.put("level1", Long.parseLong(totalMap.get("level1").toString()) + Long.parseLong(map.get("level1").toString()));
                totalMap.put("level2", Long.parseLong(totalMap.get("level2").toString()) + Long.parseLong(map.get("level2").toString()));
                totalMap.put("level3", Long.parseLong(totalMap.get("level3").toString()) + Long.parseLong(map.get("level3").toString()));
                totalMap.put("level45", Long.parseLong(totalMap.get("level45").toString()) + Long.parseLong(map.get("level45").toString()));
                totalMap.put("level67", Long.parseLong(totalMap.get("level67").toString()) + Long.parseLong(map.get("level67").toString()));
                totalMap.put("num_install_fake", Long.parseLong(totalMap.get("num_install_fake").toString()) + Long.parseLong(map.get("num_install_fake").toString()));
                res.add(map);
            }
        }
        long num_click = Long.parseLong(totalMap.get("num_click").toString());
        long num_black = Long.parseLong(totalMap.get("num_black").toString());

        long num_install = Long.parseLong(totalMap.get("num_install").toString());
        long num_install_black = Long.parseLong(totalMap.get("num_total_install_black").toString());
        if(num_click != 0L && num_black != 0L){
            double v = num_black * 100.0 / num_click;
            DecimalFormat df = new DecimalFormat("#.00");
            totalMap.put("rate_click", df.format(v));
        }

        if(num_install != 0L && num_install_black != 0L){
            double v = num_install_black * 100.0 / num_install;
            DecimalFormat df = new DecimalFormat("#.00");
            totalMap.put("rate_install", df.format(v));
        }
        res.add(0, totalMap);
        reportResult.setVal(res);
        return reportResult;
    }

    @Override
    public ReportListResult parse(ReportListResult reportResult, Long app, Long account, List<String> viewColumns, String reportName, boolean isSearchText, List<String> searchIds, Long cid, Map<String, String> conditions) throws JSONException {
        return null;
    }

    @Override
    public ReportListResult parse(ReportListResult reportResult, Long app, Long account, List<String> viewColumns, String reportName, boolean isSearchText, List<String> searchIds, Long cid) throws JSONException {
        return null;
    }

    public ReportListResult parse(ReportListResult reportResult){
        List<Map<String, Object>> valList = reportResult.getVal();
        Map<String, String> nameMap = new HashMap<>();
//        List<Long> idList = new ArrayList<>();
        Set<Long> idSet = new HashSet<>();
        if (ValidateUtil.isValid(valList)) {
            nameMap.put("-1", "自然量");
            for (Map<String, Object> map : valList) {
                idSet.add((Long) map.get("cid"));
            }
            List<Channel> channelList = channelService.listChannelByIds(idSet);
            if (ValidateUtil.isValid(channelList)) {
                for (Channel ch : channelList) {
                    nameMap.put(ch.getId().toString(), ch.getName());
                }

            }
        }

        return getMapTotalData(reportResult,"cid",nameMap);

    }

    @Override
    protected String firstTotalRowNeedReplaceId()
    {
        return "cid";
    }
}