AdvertiserLoader.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package com.cloudcross.ssp.loader;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.HashSet;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Set;
  9. import org.apache.log4j.Logger;
  10. import com.cloudcross.ssp.model.Advertiser;
  11. /**
  12. * 将广告主代理商信息存入内存
  13. *创建人:周俊
  14. *创建时间:2016.01.04
  15. *
  16. */
  17. public class AdvertiserLoader {
  18. private static final Logger log = Logger.getLogger(AdvertiserLoader.class);
  19. public static List<Advertiser> ADVERTISER_LIST = new ArrayList<Advertiser>();//存放所有的广告主信息
  20. private static Map<Long,String> AGENTID_ADVERTISERID_MAP = new HashMap<Long,String>();//存放agentId,advertiserId键值对
  21. /**
  22. * 获取所有的agentId放入set集合
  23. * @return
  24. */
  25. private static Set<Long> setAgentIdSet(){
  26. Set<Long> agentIdSet = new HashSet<Long>();
  27. if(ADVERTISER_LIST != null && ADVERTISER_LIST.size()>0){
  28. for(Advertiser adv:ADVERTISER_LIST){
  29. agentIdSet.add(adv.getAgentId());
  30. }
  31. }else{
  32. log.debug("ADVERTISER_LIST为空,广告主信息为空或没有加载到内存,请检查!");
  33. }
  34. return agentIdSet;
  35. }
  36. /**
  37. * 处理加载内存中的广告主的数据,根据agentId把数据分成不同的组
  38. * key:agentId
  39. * value:List<Advertiser> list里面的数据有共同的agentId
  40. * @return
  41. */
  42. private static Map<Long,List<Advertiser>> setAgentIdKeyMap(){
  43. Map<Long,List<Advertiser>> agentKeyMap = new HashMap<Long, List<Advertiser>>();
  44. Set<Long> agentIdSet = setAgentIdSet();
  45. Iterator<Long> it = agentIdSet.iterator();
  46. while(it.hasNext()){
  47. Long agentId = it.next();
  48. List<Advertiser> advList = new ArrayList<Advertiser>();
  49. for(int i=0;i<ADVERTISER_LIST.size();i++){
  50. if(agentId.equals(ADVERTISER_LIST.get(i).getAgentId())){
  51. advList.add(ADVERTISER_LIST.remove(i));
  52. i--;
  53. }
  54. }
  55. agentKeyMap.put(agentId, advList);
  56. }
  57. return agentKeyMap;
  58. }
  59. /**
  60. * 将通过agentId分类的数据广告主List集合中的广告主Id拼接成字符串,结果放到AGENTID_ADVERTISERID_MAP中
  61. * key:agenyId
  62. * value:{advertiserId1,advertiserId2,advertiserId3,...}
  63. */
  64. public static void setAgentIdAdvertiserIdMap(){
  65. Map<Long,List<Advertiser>> map = setAgentIdKeyMap();
  66. List<Advertiser> list = null;
  67. for(Map.Entry<Long, List<Advertiser>> entry:map.entrySet()){
  68. Long l = entry.getKey();
  69. list = entry.getValue();
  70. Integer count = list.size();
  71. String str = "";
  72. for(int i=0;i<count-1;i++){
  73. str = str+list.get(i).getId()+",";
  74. }
  75. str = str + list.get(count-1).getId();
  76. AGENTID_ADVERTISERID_MAP.put(l, str);
  77. }
  78. }
  79. /**
  80. * 提供外部访问内存数据的方法
  81. * @param agentId
  82. * @return
  83. */
  84. public static String getAgentIdAdvertiserIdMap(Long agentId){
  85. if(AGENTID_ADVERTISERID_MAP != null && AGENTID_ADVERTISERID_MAP.size()>0){
  86. log.debug(AGENTID_ADVERTISERID_MAP.get(agentId));
  87. return AGENTID_ADVERTISERID_MAP.get(agentId);
  88. }else{
  89. log.debug("无法从内存获取数据");
  90. return "";
  91. }
  92. }
  93. }