| | |
| | | import com.google.gson.Gson; |
| | | import com.google.gson.GsonBuilder; |
| | | import com.google.gson.annotations.Expose; |
| | | import com.google.gson.reflect.TypeToken; |
| | | import com.yeshi.buwan.domain.ad.AdAreaConfig; |
| | | import com.yeshi.buwan.domain.ad.ThirdAdType; |
| | | import com.yeshi.buwan.domain.recommend.FloatAD; |
| | | import com.yeshi.buwan.domain.system.DetailSystem; |
| | | import com.yeshi.buwan.dto.config.ADShieldIPConfig; |
| | | import com.yeshi.buwan.dto.log.BaseLog; |
| | | import com.yeshi.buwan.log.LogHelper; |
| | | import com.yeshi.buwan.service.imp.DetailSystemConfigService; |
| | | import com.yeshi.buwan.service.imp.SystemService; |
| | | import com.yeshi.buwan.service.inter.ad.AdAreaConfigService; |
| | | import com.yeshi.buwan.service.inter.ad.FloatADService; |
| | | import com.yeshi.buwan.service.inter.system.SystemConfigService; |
| | | import com.yeshi.buwan.service.inter.user.UserDPContentWatchStatisticService; |
| | |
| | | import com.yeshi.buwan.util.IPUtil; |
| | | import com.yeshi.buwan.util.JsonUtil; |
| | | import com.yeshi.buwan.util.StringUtil; |
| | | import com.yeshi.buwan.util.ad.AdAreaUtil; |
| | | import com.yeshi.buwan.util.log.LoggerUtil; |
| | | import com.yeshi.buwan.util.log.UserActiveLogFactory; |
| | | import com.yeshi.buwan.vo.AcceptData; |
| | | import com.yeshi.buwan.vo.ad.AdConfigTypeVO; |
| | | import net.sf.json.JSONArray; |
| | | import net.sf.json.JSONObject; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | 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; |
| | |
| | | |
| | | |
| | | Logger logger = LoggerFactory.getLogger(ConfigParser.class); |
| | | |
| | | Logger debugLogger = LoggerFactory.getLogger("debug"); |
| | | |
| | | @Resource |
| | | private DetailSystemConfigService configService; |
| | | @Resource |
| | |
| | | |
| | | @Resource |
| | | private APPManager appManager; |
| | | |
| | | @Resource |
| | | private AdAreaConfigService adAreaConfigService; |
| | | |
| | | |
| | | public ADConfig getAdShowType(String key, String channel, int version, Map<String, String> map) { |
| | |
| | | |
| | | |
| | | // 获取广告配置信息 |
| | | private void loadAdConfig(AcceptData acceptData, Map<String, String> map, String ip, boolean isDPUser,JSONObject data) { |
| | | private void loadAdConfig(AcceptData acceptData, Map<String, String> map, String ip, boolean isDPUser, JSONObject data) { |
| | | Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); |
| | | Map<String, Boolean> shieldMap = new HashMap<>(); |
| | | // 获取区域屏蔽信息 |
| | | String shieldInfo = map.get("ad_shield_province_rules"); |
| | | if (!StringUtil.isNullOrEmpty(shieldInfo)) { |
| | | JSONObject json = JSONObject.fromObject(shieldInfo); |
| | | //获取渠道需要屏蔽的城市 |
| | | JSONObject shieldProvinceRules = json.optJSONObject(acceptData.getChannel().toLowerCase()); |
| | | if (shieldProvinceRules != null) { |
| | | IPUtil.IPInfo ipInfo = null; |
| | | try { |
| | | ipInfo = ipManager.getIPInfo(ip); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | logger.error("IP地址位置信息获取失败:" + ip); |
| | | } |
| | | List<AdAreaConfig> areaConfigList = null; |
| | | try { |
| | | areaConfigList = adAreaConfigService.listCache(acceptData.getChannel(), Long.parseLong(acceptData.getDetailSystem().getId())); |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | IPUtil.IPInfo ipInfo = null; |
| | | if (areaConfigList != null && areaConfigList.size() > 0) { |
| | | try { |
| | | ipInfo = ipManager.getIPInfo(ip); |
| | | if (ipInfo != null) { |
| | | //获取是否需要屏蔽开屏 |
| | | for (AdConfigTypeVO adType : AdConfigTypeVO.values()) { |
| | | JSONArray splashProvinces = shieldProvinceRules.optJSONArray(adType.getSettingKey()); |
| | | if (splashProvinces != null) { |
| | | for (int i = 0; i < splashProvinces.size(); i++) { |
| | | String p = splashProvinces.optString(i); |
| | | if (p.equalsIgnoreCase(ipInfo.getProvince())) { |
| | | shieldMap.put(adType.getSettingKey(), true); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | debugLogger.info("IP归属地:IP-{},版本-{}, 渠道-{},省-{}, 市-{}", ip, acceptData.getVersion(), acceptData.getChannel(), ipInfo.getProvince(), ipInfo.getCity()); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | logger.error("IP地址位置信息获取失败:" + ip); |
| | | } |
| | | } |
| | | JSONObject adNew = new JSONObject(); |
| | | JSONObject ad = new JSONObject(); |
| | | for (AdConfigTypeVO adType: AdConfigTypeVO.values()){ |
| | | ADConfig adConfig = getAdShowType(adType.getDbKey(), acceptData.getChannel(), acceptData.getVersion(), map); |
| | | if (shieldMap.get(adType.getSettingKey())!=null&&shieldMap.get(adType.getSettingKey())) { |
| | | //屏蔽广告 |
| | | adConfig = null; |
| | | for (AdConfigTypeVO adType : AdConfigTypeVO.values()) { |
| | | ADConfig adConfig = getAdShowType(adType.getDbKey(), acceptData.getChannel(), acceptData.getVersion(), map); |
| | | // 判断广告是否根据地域屏蔽 |
| | | if (ipInfo != null) { |
| | | ThirdAdType thirdAdType = AdAreaUtil.getAdType(ipInfo.getProvince(), ipInfo.getCity(), adType, areaConfigList); |
| | | if (thirdAdType != null) { |
| | | if (thirdAdType == ThirdAdType.none) { |
| | | // 不展示广告 |
| | | adConfig = null; |
| | | } else if (adConfig != null) { |
| | | // 指定广告类型 |
| | | adConfig.setType(thirdAdType.name()); |
| | | } |
| | | } |
| | | } |
| | | ad.put(adType.getVoKey(), adConfig == null ? "" : adConfig.getType()); |
| | | adNew.put(adType.getVoKey(), gson.toJson(adConfig)); |
| | |
| | | |
| | | } |
| | | // 加载广告配置 |
| | | loadAdConfig(acceptData,map,ip,isDPUser,data); |
| | | loadAdConfig(acceptData, map, ip, isDPUser, data); |
| | | |
| | | //PPTV免广告权益时长,暂时设置为3小时 |
| | | data.put("pptvNoAdRewardHour", 3); |