package project.web.admin.impl.report; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.servlet.http.HttpServletResponse; import org.apache.commons.collections.CollectionUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.Drawing; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.VerticalAlignment; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.streaming.SXSSFWorkbook; import kernel.util.Arith; import kernel.util.DateUtils; import kernel.util.StringUtils; import kernel.web.Page; import kernel.web.PagedQueryDao; import project.Constants; import project.party.PartyService; import project.party.model.Party; import project.party.model.UserRecom; import project.party.recom.UserRecomService; import project.user.UserData; import project.user.UserDataService; import project.web.admin.service.report.AdminAgentAllStatisticsService; public class AdminAgentAllStatisticsServiceImpl implements AdminAgentAllStatisticsService { private PartyService partyService; private PagedQueryDao pagedQueryDao; private UserDataService userDataService; private UserRecomService userRecomService; private Page getPageList(int pageNo, int pageSize, String startTime, String endTime, String loginPartyId,String roleName, String usernameOrUid, String targetPartyId) { Map parameters = new HashMap(); StringBuffer queryString = new StringBuffer(); queryString.append("SELECT party.ROLENAME AS rolename,party.USERNAME AS username,party.USERCODE AS UID,party.UUID AS partyId ");// 用户 queryString.append("FROM PAT_PARTY party "); queryString.append("LEFT JOIN PAT_USER_RECOM ur ON party.UUID = ur.PARTY_ID ");// 推荐人 根目录判定 queryString.append("WHERE 1=1 "); queryString.append("AND party.ROLENAME IN('" + Constants.SECURITY_ROLE_AGENT + "','"+Constants.SECURITY_ROLE_AGENTLOW+"') "); if (!StringUtils.isNullOrEmpty(loginPartyId)) { List children = this.userRecomService.findChildren(loginPartyId); if (children.size() == 0) { return new Page(); } queryString.append(" and party.UUID in (:children) "); parameters.put("children", children); } if (!StringUtils.isNullOrEmpty(targetPartyId)) { List children = this.userRecomService.findRecomsToPartyId(targetPartyId); if (children.size() == 0) { return new Page(); } queryString.append(" and party.UUID in (:children) "); parameters.put("children", children); } if (StringUtils.isNullOrEmpty(targetPartyId) && StringUtils.isNullOrEmpty(usernameOrUid)) {// 目标partyId为空 // ,username参数为空,的情况下,如果是视图,显示根目录 queryString.append(" and ur.RECO_ID is NULL "); } if (!StringUtils.isNullOrEmpty(usernameOrUid)) { queryString.append("AND (party.USERNAME like:username OR party.USERCODE like:username ) "); parameters.put("username", "%" + usernameOrUid + "%"); } queryString.append("ORDER BY party.USERCODE ASC "); Page page = this.pagedQueryDao.pagedQuerySQL(pageNo, pageSize, queryString.toString(), parameters); return page; } public Page pagedQuery(int pageNo, int pageSize, String startTime, String endTime, String loginPartyId,String roleName, String usernameOrUid, String targetPartyId) { Page page = getPageList(pageNo, pageSize, startTime, endTime, loginPartyId, usernameOrUid, roleName,targetPartyId);// 获取当前页的用户相关 /** * 页面查询第一层partyId级 */ List list_partyId = new ArrayList(); for (int i = 0; i < page.getElements().size(); i++) { Map map_party = (Map) page.getElements().get(i); list_partyId.add(map_party.get("partyId").toString()); } List> result = new ArrayList>(); for (int i = 0; i < list_partyId.size(); i++) { int reco_agent = 0; /** * 所有子集 */ List children_all = this.userRecomService.findChildren(list_partyId.get(i)); /** * 正式用户 */ List children_member = new ArrayList<>(); for (int j = 0; j < children_all.size(); j++) { String partyId = children_all.get(j); Party party = partyService.cachePartyBy(partyId,true); if (Constants.SECURITY_ROLE_AGENT.equals(party.getRolename())||Constants.SECURITY_ROLE_AGENTLOW.equals(party.getRolename())) { reco_agent++; } else if (Constants.SECURITY_ROLE_MEMBER.equals(party.getRolename())) { children_member.add(partyId); } } Map item_result = this.sumUserData(children_member,startTime,endTime); item_result.put("reco_agent", reco_agent); item_result.put("reco_member", children_member.size()); item_result.put("partyId", list_partyId.get(i)); Party party = partyService.cachePartyBy(list_partyId.get(i),true); item_result.put("username", party.getUsername()); item_result.put("UID", party.getUsercode()); result.add(item_result); } Page page_result = new Page(); page_result.setElements(result); compute(page_result.getElements());// 计算总收益 return page_result; } private Map sumUserData(List children, String startTime, String endTime) { if(CollectionUtils.isEmpty(children)) {//children数据为空时,数据填充,这里操作减少dubbo调用 return sumData(new HashMap(), new ArrayList()); } Map item_result = new HashMap(); List> datas = this.userDataService.cacheByPartyIds(children); for (int i = 0; i < datas.size(); i++) { Map data_all = datas.get(i); if (data_all == null) { continue; } List userdata= filterData(data_all,startTime,endTime); item_result = sumData(item_result, userdata); } if(item_result.isEmpty()) {//item_result数据为空时,数据填充 item_result = sumData(item_result, new ArrayList()); } return item_result; } private Map sumData(Map item_result,List datas) { double recharge_dapp = 0; double withdraw_dapp = 0; double recharge = 0; double recharge_usdt = 0; double recharge_eth = 0; double recharge_btc = 0; double recharge_ht = 0; double recharge_ltc = 0; double withdraw = 0; double withdraw_eth = 0; double withdraw_btc = 0; double recharge_withdrawal_fee = 0; double gift_money = 0; double balance_amount = 0; double amount = 0; double fee = 0; double order_income = 0; double finance_amount = 0; double finance_income = 0; double exchange_amount =0; double exchange_fee = 0; double exchange_income =0; double coin_income =0; double furtures_amount =0; double furtures_fee=0; double furtures_income=0; double miner_income=0; double miner_amount=0; double third_recharge_amount=0; double exchange_lever_amount = 0; double exchange_lever_fee = 0; double exchange_lever_order_income = 0; for(int i = 0 ;i< datas.size(); i++) { UserData data = datas.get(i); // 充提 recharge_dapp = Arith.add(data.getRecharge_dapp(), recharge_dapp); withdraw_dapp = Arith.add(data.getWithdraw_dapp(), withdraw_dapp); recharge = Arith.add(data.getRecharge(), recharge); recharge_usdt = Arith.add(data.getRecharge_usdt(), recharge_usdt); recharge_eth = Arith.add(data.getRecharge_eth(), recharge_eth); recharge_btc = Arith.add(data.getRecharge_btc(), recharge_btc); recharge_ht = Arith.add(data.getRecharge_ht(), recharge_ht); recharge_ltc = Arith.add(data.getRecharge_ltc(), recharge_ltc); withdraw = Arith.add(data.getWithdraw(), withdraw); withdraw_eth = Arith.add(data.getWithdraw_eth(), withdraw_eth); withdraw_btc = Arith.add(data.getWithdraw_btc(), withdraw_btc); recharge_withdrawal_fee = Arith.add(data.getRecharge_withdrawal_fee(), recharge_withdrawal_fee); gift_money = Arith.add(data.getGift_money(), gift_money); balance_amount = Arith.add( Arith.sub(data.getRecharge(), data.getWithdraw()), balance_amount); // 永续 amount = Arith.add( data.getAmount(), amount); fee = Arith.add(data.getFee(), fee); order_income = Arith.add( data.getOrder_income(), order_income); // 理财 finance_amount = Arith.add( data.getFinance_amount(), finance_amount); finance_income = Arith.add( data.getFinance_income(), finance_income); // 币币 exchange_amount = Arith.add( data.getExchange_amount(), exchange_amount); exchange_fee = Arith.add( data.getExchange_fee(), exchange_fee); //exchange_income = Arith.add(data.getExchange_income(), exchange_income); exchange_income = 0; coin_income = Arith.add(data.getCoin_income(), coin_income); // 交割 furtures_amount = Arith.add( data.getFurtures_amount(), furtures_amount); furtures_fee = Arith.add( data.getFurtures_fee(), furtures_fee); furtures_income = Arith.add(data.getFurtures_income(), furtures_income); //矿机 miner_income = Arith.add(data.getMiner_income(), miner_income); miner_amount = Arith.add(data.getMiner_amount(), miner_amount); //三方充值货币金额 third_recharge_amount = Arith.add(data.getThird_recharge_amount(), third_recharge_amount); //币币杠杆 exchange_lever_amount = Arith.add(data.getExchange_lever_amount(), exchange_lever_amount); exchange_lever_fee = Arith.add(data.getExchange_lever_fee(), exchange_lever_fee); exchange_lever_order_income = Arith.add(data.getExchange_lever_order_income(), exchange_lever_order_income); } if(item_result != null && item_result.size() != 0) { // 充提 item_result.put("recharge_dapp", Arith.add(Double.valueOf( item_result.get("recharge_dapp").toString()), recharge_dapp)); item_result.put("withdraw_dapp",Arith.add(Double.valueOf( item_result.get("withdraw_dapp").toString()) ,withdraw_dapp)); item_result.put("recharge", Arith.add(Double.valueOf( item_result.get("recharge").toString()), recharge)); item_result.put("recharge_usdt", Arith.add(Double.valueOf( item_result.get("recharge_usdt").toString()), recharge_usdt)); item_result.put("recharge_eth", Arith.add(Double.valueOf( item_result.get("recharge_eth").toString()), recharge_eth)); item_result.put("recharge_btc", Arith.add(Double.valueOf( item_result.get("recharge_btc").toString()), recharge_btc)); item_result.put("recharge_ht", Arith.add(Double.valueOf( item_result.get("recharge_ht").toString()), recharge_ht)); item_result.put("recharge_ltc", Arith.add(Double.valueOf( item_result.get("recharge_ltc").toString()), recharge_ltc)); item_result.put("withdraw",Arith.add(Double.valueOf( item_result.get("withdraw").toString()) ,withdraw)); item_result.put("withdraw_eth",Arith.add(Double.valueOf( item_result.get("withdraw_eth").toString()) ,withdraw_eth)); item_result.put("withdraw_btc",Arith.add(Double.valueOf( item_result.get("withdraw_btc").toString()) ,withdraw_btc)); item_result.put("recharge_withdrawal_fee", Arith.add(Double.valueOf( item_result.get("recharge_withdrawal_fee").toString()),recharge_withdrawal_fee)); item_result.put("gift_money", Arith.add(Double.valueOf( item_result.get("gift_money").toString()),gift_money)); item_result.put("balance_amount", Arith.add(Double.valueOf( item_result.get("balance_amount").toString()),balance_amount)); // 永续 item_result.put("amount", Arith.add(Double.valueOf( item_result.get("amount").toString()),amount)); item_result.put("fee", Arith.add(Double.valueOf( item_result.get("fee").toString()),fee)); item_result.put("order_income", Arith.add(Double.valueOf( item_result.get("order_income").toString()),order_income)); // 理财 item_result.put("finance_amount", Arith.add(Double.valueOf( item_result.get("finance_amount").toString()),finance_amount)); item_result.put("finance_income", Arith.add(Double.valueOf( item_result.get("finance_income").toString()),finance_income)); // 币币 item_result.put("exchange_amount", Arith.add(Double.valueOf( item_result.get("exchange_amount").toString()),exchange_amount)); item_result.put("exchange_fee", Arith.add(Double.valueOf( item_result.get("exchange_fee").toString()),exchange_fee)); //item_result.put("exchange_income", Arith.add(Double.valueOf( item_result.get("exchange_income").toString()),exchange_income)); item_result.put("exchange_income", 0); item_result.put("coin_income", Arith.add(Double.valueOf( item_result.get("coin_income").toString()),coin_income)); // 交割 item_result.put("furtures_amount", Arith.add(Double.valueOf( item_result.get("furtures_amount").toString()),furtures_amount)); item_result.put("furtures_fee", Arith.add(Double.valueOf( item_result.get("furtures_fee").toString()),furtures_fee)); item_result.put("furtures_income", Arith.add(Double.valueOf( item_result.get("furtures_income").toString()),furtures_income)); //矿机 item_result.put("miner_income", Arith.add(Double.valueOf( item_result.get("miner_income").toString()),miner_income)); item_result.put("miner_amount", Arith.add(Double.valueOf( item_result.get("miner_amount").toString()),miner_amount)); //三方充值货币金额 item_result.put("third_recharge_amount", Arith.add(Double.valueOf( item_result.get("third_recharge_amount").toString()),third_recharge_amount)); //币币杠杆 item_result.put("exchange_lever_amount", Arith.add(Double.valueOf( item_result.get("exchange_lever_amount").toString()),exchange_lever_amount)); item_result.put("exchange_lever_fee", Arith.add(Double.valueOf( item_result.get("exchange_lever_fee").toString()),exchange_lever_fee)); item_result.put("exchange_lever_order_income", Arith.add(Double.valueOf( item_result.get("exchange_lever_order_income").toString()),exchange_lever_order_income)); }else { // 充提 item_result.put("recharge_dapp", recharge_dapp); item_result.put("withdraw_dapp", withdraw_dapp); item_result.put("recharge", recharge); item_result.put("recharge_usdt", recharge_usdt); item_result.put("recharge_eth", recharge_eth); item_result.put("recharge_btc", recharge_btc); item_result.put("recharge_ht", recharge_ht); item_result.put("recharge_ltc", recharge_ltc); item_result.put("withdraw", withdraw); item_result.put("withdraw_eth", withdraw_eth); item_result.put("withdraw_btc", withdraw_btc); item_result.put("recharge_withdrawal_fee", recharge_withdrawal_fee); item_result.put("gift_money", gift_money); item_result.put("balance_amount", balance_amount); // 永续 item_result.put("amount", amount); item_result.put("fee", fee); item_result.put("order_income", order_income); // 理财 item_result.put("finance_amount", finance_amount); item_result.put("finance_income", finance_income); // 币币 item_result.put("exchange_amount", exchange_amount); item_result.put("exchange_fee", exchange_fee); item_result.put("exchange_income", 0); item_result.put("coin_income", coin_income); // 交割 item_result.put("furtures_amount", furtures_amount); item_result.put("furtures_fee", furtures_fee); item_result.put("furtures_income", furtures_income); // 矿机 item_result.put("miner_income", miner_income); item_result.put("miner_amount", miner_amount); //三方充值货币金额 item_result.put("third_recharge_amount", third_recharge_amount); //币币杠杆 item_result.put("exchange_lever_amount", exchange_lever_amount); item_result.put("exchange_lever_fee", exchange_lever_fee); item_result.put("exchange_lever_order_income", exchange_lever_order_income); } return item_result; } private List filterData(Map datas, String startTime, String endTime) { List result = new ArrayList(); for(Entry valueEntry:datas.entrySet()) { UserData userdata = valueEntry.getValue(); Date time = userdata.getCreateTime(); if (!StringUtils.isNullOrEmpty(startTime)) { Date startDate = DateUtils.toDate(startTime, DateUtils.DF_yyyyMMdd); int intervalDays = DateUtils.getIntervalDaysByTwoDate(startDate, time);// 开始-数据时间 if (intervalDays > 0) // 开始>数据时间 ,则过滤 continue; } if (!StringUtils.isNullOrEmpty(endTime)) { Date endDate = DateUtils.toDate(endTime, DateUtils.DF_yyyyMMdd); int intervalDays = DateUtils.getIntervalDaysByTwoDate(endDate, time);// 结束-数据时间 if (intervalDays < 0) // 结束<数据时间 continue; } result.add(userdata); } return result; } private void compute(List> datas) { if (CollectionUtils.isEmpty(datas)) return; Double totle_income = 0d; Double totle_fee = 0d; Double business_profit = 0d;//交易盈亏 Double fin_miner_amount = 0d;//理财 矿机 交易额 Double fin_miner_income = 0d;//理财 矿机 收益 for (Map data : datas) { totle_income = 0d; totle_fee = 0d; business_profit = 0d; fin_miner_amount = 0d; fin_miner_income = 0d; if (null != data.get("order_income")) data.put("order_income", Arith.sub(0, new Double(data.get("order_income").toString())));// 订单收益负数 if (null != data.get("finance_income")) data.put("finance_income", Arith.sub(0, new Double(data.get("finance_income").toString())));// 理财收益负数 if (null != data.get("exchange_income")) data.put("exchange_income", 0);// 币币收益负数 if (null != data.get("furtures_income")) data.put("furtures_income", Arith.sub(0, new Double(data.get("furtures_income").toString())));// 交割收益负数 if (null != data.get("miner_income")) data.put("miner_income", Arith.sub(0, new Double(data.get("miner_income").toString())));// 矿机收益负数 if (null != data.get("exchange_lever_order_income")) data.put("exchange_lever_order_income", Arith.sub(0, new Double(data.get("exchange_lever_order_income").toString())));// 币币收益负数 if (!dataExistNull(data)) continue; totle_income = Arith.add(totle_income, new Double(data.get("recharge_withdrawal_fee").toString())); totle_income = Arith.add(totle_income, new Double(data.get("order_income").toString())); totle_income = Arith.add(totle_income, new Double(data.get("fee").toString())); totle_income = Arith.add(totle_income, new Double(data.get("finance_income").toString())); totle_income = Arith.add(totle_income, new Double(data.get("exchange_fee").toString())); totle_income = Arith.add(totle_income, new Double(0)); totle_income = Arith.add(totle_income, new Double(data.get("furtures_fee").toString())); totle_income = Arith.add(totle_income, new Double(data.get("furtures_income").toString())); totle_income = Arith.add(totle_income, new Double(data.get("miner_income").toString())); totle_income = Arith.add(totle_income, new Double(data.get("exchange_lever_order_income").toString())); data.put("totle_income", totle_income); totle_fee = Arith.add(totle_fee, new Double(data.get("recharge_withdrawal_fee").toString())); totle_fee = Arith.add(totle_fee, new Double(data.get("fee").toString())); totle_fee = Arith.add(totle_fee, new Double(data.get("exchange_fee").toString())); totle_fee = Arith.add(totle_fee, new Double(data.get("furtures_fee").toString())); totle_fee = Arith.add(totle_fee, new Double(data.get("exchange_lever_fee").toString())); data.put("totle_fee", totle_fee); business_profit = Arith.add(business_profit, new Double(data.get("order_income").toString())); business_profit = Arith.add(business_profit, new Double(data.get("exchange_income").toString())); business_profit = Arith.add(business_profit, new Double(data.get("furtures_income").toString())); business_profit = Arith.add(business_profit, new Double(data.get("exchange_lever_order_income").toString())); data.put("business_profit", business_profit); fin_miner_amount = Arith.add(fin_miner_amount, new Double(data.get("finance_amount").toString())); fin_miner_amount = Arith.add(fin_miner_amount, new Double(data.get("miner_amount").toString())); data.put("fin_miner_amount", fin_miner_amount); fin_miner_income = Arith.add(fin_miner_income, new Double(data.get("finance_income").toString())); fin_miner_income = Arith.add(fin_miner_income, new Double(data.get("miner_income").toString())); data.put("fin_miner_income", fin_miner_income); } } /** * 统计的数据存在空时,不统计总额 * @param data * @return */ private boolean dataExistNull(Map data) { if (null == data.get("recharge_withdrawal_fee")) return false; if (null == data.get("order_income")) return false; if (null == data.get("fee")) return false; if (null == data.get("finance_income")) return false; if (null == data.get("exchange_fee")) return false; if (null == data.get("exchange_income")) return false; if (null == data.get("furtures_fee")) return false; if (null == data.get("furtures_income")) return false; return true; } public String loadExportData(HttpServletResponse response, int pageSize, String startTime, String endTime,String loginPartyId, String usernameOrUid, String roleName, String targetPartyId) throws IOException { // 生成数据信息 int sheetNum = 0; // 生成表头 Integer i = 0; // 在内存中保持100行,超过100行将被刷新到磁盘 SXSSFWorkbook wb = new SXSSFWorkbook(100); Sheet sheet = wb.createSheet(); // 表,一个表包含多个行 Drawing patriarch = sheet.createDrawingPatriarch(); CellStyle style = wb.createCellStyle(); Row row = null;// 行,一行包括多个单元格 Cell cell = null;// 单元格 Page page = null; int pageNo = 1; Map headMap = new LinkedHashMap(); headMap.put("用户", new Integer[] { 0, 4 }); headMap.put("充提", new Integer[] { 0, 9 }); headMap.put("永续合约", new Integer[] { 0, 2 }); headMap.put("理财收益", new Integer[] { 1, 1 }); headMap.put("币币", new Integer[] { 0, 2 }); headMap.put("交割合约", new Integer[] { 0, 2 }); headMap.put("收益", new Integer[] { 1, 1 }); createMergedHead(wb, sheet, headMap, i++); return ""; } private void createMergedHead(SXSSFWorkbook wb, Sheet sheet, Map headMap, int i) { Font font = wb.createFont(); font.setFontHeightInPoints((short) 10); font.setFontName("Courier New"); CellStyle style = wb.createCellStyle(); style.setFont(font); style.setWrapText(true); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); Row row = sheet.createRow(i); int rowPosition = 0;// 行坐标 int cellPosition = 0;// 列坐标 for (Entry entry : headMap.entrySet()) { Cell cell = row.createCell(cellPosition); cell.setCellStyle(style); cell.setCellValue(entry.getKey()); CellRangeAddress region = new CellRangeAddress(rowPosition, rowPosition + entry.getValue()[0], cellPosition, cellPosition + entry.getValue()[1] - 1); sheet.addMergedRegion(region); cellPosition += entry.getValue()[1]; } } public List dataBachHandel(List> list) { List result = new ArrayList(); int i = 0; for (Map data : list) { i = 0; Object[] objs = new Object[21]; objs[i++] = data.get("username"); objs[i++] = data.get("UID"); objs[i++] = data.get("reco_member"); objs[i++] = data.get("reco_agent"); objs[i++] = data.get("recharge_usdt"); objs[i++] = data.get("recharge_eth"); objs[i++] = data.get("recharge_btc"); objs[i++] = data.get("recharge"); objs[i++] = data.get("gift_money"); objs[i++] = data.get("withdraw"); objs[i++] = data.get("recharge_withdrawal_fee"); double recharge_usdt = 0D; double withdraw = 0D; if (null != data.get("recharge_usdt")) { recharge_usdt = Double.parseDouble(data.get("recharge_usdt").toString()); } if (null != data.get("withdraw")) { withdraw = Double.parseDouble(data.get("withdraw").toString()); } objs[i++] = Arith.sub(recharge_usdt, withdraw); objs[i++] = data.get("balance_amount"); // objs[i++] = data.get("amount"); objs[i++] = data.get("fee"); objs[i++] = data.get("order_income"); // objs[i++] = data.get("finance_amount"); objs[i++] = data.get("finance_income"); // objs[i++] = data.get("exchange_amount"); objs[i++] = data.get("exchange_fee"); objs[i++] = data.get("exchange_income"); // objs[i++] = data.get("coin_income"); // objs[i++] = data.get("furtures_amount"); objs[i++] = data.get("furtures_fee"); objs[i++] = data.get("furtures_income"); objs[i++] = data.get("totle_income"); result.add(objs); } return result; } /** * 获取用户推荐数网络 列表(第i层用户数) * @return */ public List getRecoNumNetList(String partyId) { Map recoNumNet = getRecoNumNet(partyId); List keys = new ArrayList(recoNumNet.keySet()); Collections.sort(keys); List list = new LinkedList(); for (int i = 0; i < keys.size(); i++) { list.add(recoNumNet.get(keys.get(i))); } return list; } /** * 获取用户推荐数网络 * @return key:网络层级,value:用户数 */ public Map getRecoNumNet(String partyId){ List all = this.userRecomService.findChildren(partyId); int allSize = all.size(); int sum = 0; int level = 1; Map result = new HashMap(); findRecomsNet(partyId,level,result,sum,allSize); return result; } public void findRecomsNet(String partyId,int level,Map result,int sum,int allSize) { if(sum>=allSize) return; List users = this.userRecomService.findRecoms(partyId); if(CollectionUtils.isEmpty(users)) { return; } int num = 0; for(UserRecom user:users) { findRecomsNet(user.getPartyId().toString(),level+1,result,sum,allSize); Party party = partyService.cachePartyBy(user.getPartyId(),true); if (!Constants.SECURITY_ROLE_MEMBER.equals(party.getRolename())) {//非正式用户不统计 continue; } num++; } sum+=users.size();//总数 if(num>0) { result.put(level, result.get(level)==null?num:result.get(level)+num); } } public void setPagedQueryDao(PagedQueryDao pagedQueryDao) { this.pagedQueryDao = pagedQueryDao; } public void setUserRecomService(UserRecomService userRecomService) { this.userRecomService = userRecomService; } public void setUserDataService(UserDataService userDataService) { this.userDataService = userDataService; } public void setPartyService(PartyService partyService) { this.partyService = partyService; } }