获取信用卡账户列表列表
// 过滤状态不正常的账户;按卡片级别排序,卡片级别相同按账户级别排序
public Map<String, Object> accountList(String idtype, String idno) { Map<String, Object> resultMap = New.map(); //调用wx11获取卡信息列表 XmlContent xmlContent = cmbcInterfaceService.SeaCardInfoByCard(SearchStyle.byNum.getVal(), idtype, idno, ""); if(!CreditAbout.NORMAL.equals(xmlContent.getHead().get("TRSQ"))){ resultMap.put("errorMsg", xmlContent.getHead().get("ERTX")); return resultMap; } if(xmlContent.getBody().isEmpty() || xmlContent.getRows().isEmpty() || xmlContent.getRows().size()<1){ resultMap.put("errorMsg", "接口返回卡列表为空"); return resultMap; } //过滤卡片 保留主卡 状态正常的卡 有效期正常的卡 List<Map<String,String>> accountList =xmlContent.getRows(); List<Map<String,String>> accountList2 =new ArrayList<Map<String,String>>(); for(Map<String,String> m :accountList){ if ("1".equals(m.get("cMaFlag")) && "".equals(m.get("cCardStat")) && !"00000000".equals(m.get("ActiveDay")) ) { accountList2.add(m); } } if(accountList2==null || accountList2.size()<1){ resultMap.put("errorMsg", "账户状态不正常"); logger.error("invoking WX11 success,and card size >0,but status is not normal, where idno :{}",idno); return resultMap; } //获取账户类别个数 Set<String> set = new HashSet<String>(); for(Map<String,String> m :accountList2){ set.add(m.get("CateCur")); } //过滤账户,遍历账户下卡片级别 最高级别作为账户级别 Map<String,Map<String,String>> map = New.map(); for(Map<String,String> m :accountList2){ for(String s : set){ if(m.get("CateCur").equals(s)){ if(map.get(s) == null){ map.put(s, m); }else{ if(Libs.parseToInt(map.get(s).get("ProdLevel")) <= Libs.parseToInt(m.get("ProdLevel")) ){ map.put(s, m); } } } } } //一个账户返回一条记录 List<Map<String,String>> accountList3 =new ArrayList<Map<String,String>>(); Iterator<String> it = map.keySet().iterator(); while(it.hasNext()){ String cateCur = it.next(); Map<String,String> row = map.get(cateCur); accountList3.add(row); } //账户排序:先按卡片级别排,再按账户排 Collections.sort(accountList3, new Comparator<Map<String,String>>() { @Override public int compare(Map<String, String> o1, Map<String, String> o2) { if(!o2.get("ProdLevel").equals(o1.get("ProdLevel"))){ return (Integer.parseInt(o2.get("ProdLevel")) - Integer.parseInt(o1.get("ProdLevel")) ); }else { if(Integer.parseInt(o2.get("CateCur"))-Integer.parseInt(o1.get("CateCur"))<=0){ return 1; }else{ return -1; } } } }); resultMap.put("accountList", accountList3); return resultMap; }
第二种排序规则
/** * 对所有状态正常的账户,先按级别排序;如果级别相同,则按【账户优先级】排序。 * 状态不正常的账户,排在状态正常的账户后面,按【账户优先级】排序。 * accountListAll:(获取账户列表). * @return */ public Map<String, Object> accountListAll(String idtype, String idno) { Map<String, Object> resultMap = New.map(); //调用wx11获取卡信息列表 XmlContent xmlContent = cmbcInterfaceService.SeaCardInfoByCard(SearchStyle.byNum.getVal(), idtype, idno, ""); if(!CreditAbout.NORMAL.equals(xmlContent.getHead().get("TRSQ"))){ resultMap.put("errorMsg", xmlContent.getHead().get("ERTX")); return resultMap; } if(xmlContent.getBody().isEmpty() || xmlContent.getRows().isEmpty() || xmlContent.getRows().size()<1){ resultMap.put("errorMsg", "接口返回卡列表为空"); return resultMap; } //过滤卡片 保留主卡 List<Map<String,String>> accountList =new ArrayList<Map<String,String>>(); for(Map<String,String> m :xmlContent.getRows()){ if ("1".equals(m.get("cMaFlag"))) { accountList.add(m); } } if(accountList==null || accountList.size()<1){ resultMap.put("errorMsg", "没有主卡"); return resultMap; } //获取账户类别个数 Set<String> set = new HashSet<String>(); for(Map<String,String> m :accountList){ set.add(m.get("CateCur")); } //遍历set和accountList,每个账户返回一条记录 Map<String,Map<String,String>> map = New.map(); for(Map<String,String> m :accountList){ for(String s : set){ if(m.get("CateCur").equals(s)){ //不管状态,先放进去 if(map.get(s) == null){ map.put(s, m); }else{ //如果map中卡状态(status_map)异常,m中卡状态正常,将m替换map boolean status_map="".equals(map.get(s).get("cCardStat")) && !"00000000".equals(map.get(s).get("ActiveDay")); boolean status_m="".equals(m.get("cCardStat")) && !"00000000".equals(m.get("ActiveDay")); if (!status_map && status_m) { map.put(s, m); } //如果map中卡状态(status_map)正常,并且 m中卡状态正常,取卡片级别高的 if (status_map && status_m) { if(Libs.parseToInt(map.get(s).get("ProdLevel")) <= Libs.parseToInt(m.get("ProdLevel")) ){ map.put(s, m); } } } } } } //取map中的账户列表 List<Map<String,String>> accountList2 =new ArrayList<Map<String,String>>(); Iterator<String> it = map.keySet().iterator(); while(it.hasNext()){ String cateCur = it.next(); Map<String,String> row = map.get(cateCur); accountList2.add(row); } //账户排序 //账户排序,账户状态异常的,放在后面。如果账户状态正常,先按卡片级别排,再按账户排;如果账户状态不正常,按照账户排序 Collections.sort(accountList2, new Comparator<Map<String,String>>() { @Override public int compare(Map<String, String> o1, Map<String, String> o2) { boolean status_o1="".equals(o1.get("cCardStat")) && !"00000000".equals(o1.get("ActiveDay")); boolean status_o2="".equals(o2.get("cCardStat")) && !"00000000".equals(o2.get("ActiveDay")); if (status_o1 && status_o2) { if(!o2.get("ProdLevel").equals(o1.get("ProdLevel"))){ return (Integer.parseInt(o2.get("ProdLevel")) - Integer.parseInt(o1.get("ProdLevel")) ); }else { if(Integer.parseInt(o2.get("CateCur"))-Integer.parseInt(o1.get("CateCur"))<=0){ return 1; }else{ return -1; } } }else if (status_o1 && !status_o2) { return -1; }else if (!status_o1 && status_o2) { return 1; }else{ if(Integer.parseInt(o2.get("CateCur"))-Integer.parseInt(o1.get("CateCur"))<=0){ return 1; }else{ return -1; } } } }); resultMap.put("accountList", accountList2); for (Map<String, String> map2 : accountList2) { logger.info("---11111111-------ProdLevel:{},----CateCur:{}",map2.get("ProdLevel"),map2.get("CateCur")); } return resultMap; }
『愿你我既可以朝九晚五,又能够浪迹天涯』
浙公网安备 33010602011771号