admin
2021-08-02 e89de9319d8f771f8e53cb5f876d06465a580c57
src/main/java/com/yeshi/buwan/controller/parser/ConfigParser.java
@@ -2,7 +2,9 @@
import java.io.PrintWriter;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -19,6 +21,7 @@
import com.yeshi.buwan.log.LogHelper;
import com.yeshi.buwan.service.imp.SystemService;
import com.yeshi.buwan.service.inter.ad.FloatADService;
import com.yeshi.buwan.service.inter.system.SystemConfigService;
import com.yeshi.buwan.service.manager.IPManager;
import com.yeshi.buwan.util.IPUtil;
import com.yeshi.buwan.util.StringUtil;
@@ -51,11 +54,14 @@
    @Resource
    private IPManager ipManager;
    @Resource
    private SystemConfigService systemConfigService;
    public ADConfig getAdShowType(String key, String channel, int version, Map<String, String> map) {
        String splash = map.get(key);
        JSONObject jsonObject = JSONObject.fromObject(splash);
        if (jsonObject == null||jsonObject.isEmpty())
        if (jsonObject == null || jsonObject.isEmpty())
            return null;
        ADConfig adConfig = null;
        channel = channel.toLowerCase();
@@ -63,10 +69,35 @@
            // 默认为应用宝
            channel = "qq";
        }
        adConfig = new Gson().fromJson(jsonObject.optJSONObject(channel).toString(), ADConfig.class);
        JSONObject channelAd = jsonObject.optJSONObject(channel);
        adConfig = new Gson().fromJson(channelAd.toString(), ADConfig.class);
        if (version >= adConfig.getVersion()) {
            adConfig = null;
        }
        //格式如下:
        //{"typeProperties":{"csj":{"weight":1,"pid":"123123"},"gdt":{"weight":1,"pid":"123123"}}}
        if (adConfig != null && channelAd.optJSONObject("typeProbability") != null) {
            JSONObject properties = channelAd.optJSONObject("typeProbability");
            BigDecimal total = new BigDecimal(0);
            for (Iterator<String> its = properties.keys(); its.hasNext(); ) {
                String k = its.next();
                total = total.add(new BigDecimal(properties.optJSONObject(k).optString("weight")));
            }
            BigDecimal random = total.multiply(new BigDecimal(Math.random()));
            total = new BigDecimal(0);
            for (Iterator<String> its = properties.keys(); its.hasNext(); ) {
                String k = its.next();
                total = total.add(new BigDecimal(properties.optJSONObject(k).optString("weight")));
                if (random.compareTo(total) < 0) {
                    adConfig.setPid(properties.optJSONObject(k).optString("pid"));
                    adConfig.setType(k);
                    break;
                }
            }
        }
        return adConfig;
    }
@@ -216,13 +247,31 @@
            adConfig = null;
        adNew.put("pptvNoAdReward", gson.toJson(adConfig));
        //热启动开屏
        adConfig = getAdShowType("ad_splash_hot_start", acceptData.getChannel(), acceptData.getVersion(), map);
        if (hiddenAll)
            adConfig = null;
        adNew.put("splashHotStart", gson.toJson(adConfig));
        //其他广告
        adConfig = getAdShowType("ad_other", acceptData.getChannel(), acceptData.getVersion(), map);
        if (hiddenAll)
            adConfig = null;
        adNew.put("other", gson.toJson(adConfig));
        data.put("ad", ad);
        data.put("adNew", adNew);
        //PPTV免广告权益时长,暂时设置为3小时
        data.put("pptvNoAdRewardHour", 3);
        //设置网页加速域名
        data.put("webSpeedUpHost", map.get("web_speed_up_host"));
        //我的页面banner
        data.put("minePageBanner", map.get("mine_page_banner"));
        //播放页外跳协议白名单
        data.put("jumpAppProtocolPrefix", map.get("player_out_jump_protocol_prefix"));
        //获取购买记录链接
        data.put("buyRecordUrl", systemConfigService.getConfigValueByKeyCache("buyRecordUrl"));
        out.print(JsonUtil.loadTrueJson(data.toString()));
    }
@@ -278,6 +327,8 @@
        public void setPid(String pid) {
            this.pid = pid;
        }
    }
}