package project.data; import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import org.springframework.util.CollectionUtils; import kernel.exception.BusinessException; import kernel.util.Arith; import kernel.util.DateUtils; import kernel.web.ApplicationUtil; import kernel.web.Page; import project.Constants; import project.contract.ContractOrder; import project.data.DataService; import project.data.model.Realtime; import project.exchange.ExchangeApplyOrder; import project.finance.FinanceOrder; import project.futures.FuturesOrder; import project.miner.model.MinerOrder; import project.party.PartyService; import project.party.model.Party; import project.party.model.UserRecom; import project.party.recom.UserRecomService; import project.user.ChildrenLever; import project.user.UserData; import project.user.UserDataService; import project.user.UserDataSum; import security.Role; import security.SecUser; import security.internal.SecUserService; public class UserDataServiceImpl implements UserDataService { private DataService dataService; private PartyService partyService; private SecUserService secUserService; private UserRecomService userRecomService; private Map> cache = new ConcurrentHashMap>(); public Map cacheByPartyId(String partyId) { return cache.get(partyId); } public List> cacheByPartyIds(List partyIds) { if(CollectionUtils.isEmpty(partyIds)) return new LinkedList>(); List> result = new LinkedList>(); for(String id:partyIds) result.add(cache.get(id)); return result; } public void init() { List all = getAll(); for (int i = 0; i < all.size(); setCache(all.get(i++))); } public List getAll() { return ApplicationUtil.executeSelect(UserData.class); } private UserData findBydate(String partyId, Date date) { Date createTime_begin = null; Date createTime_end = null; if (date != null) { createTime_begin = DateUtils.toDate(DateUtils.format(date, "yyyy-MM-dd")); createTime_end = DateUtils.addDate(createTime_begin, 1); } List list = ApplicationUtil.executeSelect(UserData.class,"WHERE PARTY_ID=? AND CREATE_TIME>=? AND CREATE_TIME list = ApplicationUtil.executeSelect(UserDataSum.class,"WHERE PARTY_ID=?",new Object[] {partyId}); if (list.size()>0) return list.get(0); UserDataSum userDataSum = new UserDataSum(); userDataSum.setPartyId(partyId); ApplicationUtil.executeInsert(userDataSum); return userDataSum; } public void setCache(UserData entity) { Map map_party = cache.get(entity.getPartyId().toString()); if (map_party == null) cache.put(entity.getPartyId().toString(),map_party=new ConcurrentHashMap()); map_party.put(DateUtils.format(entity.getCreateTime(), DateUtils.DEFAULT_DATE_FORMAT), entity); } public void save(UserData entity) { UserData db = findBydate(entity.getPartyId().toString(), entity.getCreateTime()); if (db != null) { db.setRecharge_dapp(Arith.add(db.getRecharge_dapp(), entity.getRecharge_dapp())); db.setWithdraw_dapp(Arith.add(db.getWithdraw_dapp(), entity.getWithdraw_dapp())); db.setRecharge(Arith.add(db.getRecharge(), entity.getRecharge())); db.setRecharge_eth(Arith.add(db.getRecharge_eth(), entity.getRecharge_eth())); db.setRecharge_usdt(Arith.add(db.getRecharge_usdt(), entity.getRecharge_usdt())); db.setRecharge_usdc(Arith.add(db.getRecharge_usdc(), entity.getRecharge_usdc())); db.setRecharge_btc(Arith.add(db.getRecharge_btc(), entity.getRecharge_btc())); db.setRecharge_ht(Arith.add(db.getRecharge_ht(), entity.getRecharge_ht())); db.setRecharge_ltc(Arith.add(db.getRecharge_ltc(), entity.getRecharge_ltc())); // 充值返佣 db.setRechargeRecom(Arith.add(db.getRechargeRecom(), entity.getRechargeRecom())); db.setWithdraw_all(Arith.add(db.getWithdraw_all(), entity.getWithdraw_all())); db.setWithdraw(Arith.add(db.getWithdraw(), entity.getWithdraw())); db.setWithdraw_eth(Arith.add(db.getWithdraw_eth(), entity.getWithdraw_eth())); db.setWithdraw_btc(Arith.add(db.getWithdraw_btc(), entity.getWithdraw_btc())); db.setAmount(Arith.add(db.getAmount(), entity.getAmount())); db.setFee(Arith.add(db.getFee(), entity.getFee())); db.setOrder_income(Arith.add(db.getOrder_income(), entity.getOrder_income())); db.setFinance_amount(Arith.add(db.getFinance_amount(), entity.getFinance_amount())); db.setFinance_income(Arith.add(db.getFinance_income(), entity.getFinance_income())); db.setExchange_amount(Arith.add(db.getExchange_amount(), entity.getExchange_amount())); db.setExchange_fee(Arith.add(db.getExchange_fee(), entity.getExchange_fee())); db.setExchange_income(Arith.add(db.getExchange_income(), entity.getExchange_income())); db.setCoin_income(Arith.add(db.getCoin_income(), entity.getCoin_income())); db.setFurtures_amount(Arith.add(db.getFurtures_amount(), entity.getFurtures_amount())); db.setFurtures_fee(Arith.add(db.getFurtures_fee(), entity.getFurtures_fee())); db.setFurtures_income(Arith.add(db.getFurtures_income(), entity.getFurtures_income())); db.setReco_num(db.getReco_num() + entity.getReco_num()); db.setRecharge_withdrawal_fee( Arith.add(db.getRecharge_withdrawal_fee(), entity.getRecharge_withdrawal_fee())); db.setGift_money(Arith.add(db.getGift_money(), entity.getGift_money())); db.setMiner_amount(Arith.add(db.getMiner_amount(), entity.getMiner_amount())); db.setMiner_income(Arith.add(db.getMiner_income(), entity.getMiner_income())); // 质押2.0 db.setGalaxy_amount(Arith.add(db.getGalaxy_amount(), entity.getGalaxy_amount())); db.setGalaxy_income(Arith.add(db.getGalaxy_income(), entity.getGalaxy_income())); db.setThird_recharge_amount(Arith.add(db.getThird_recharge_amount(), entity.getThird_recharge_amount())); db.setHolding_money(Arith.add(db.getHolding_money(), entity.getHolding_money())); db.setTransfer_in_money(Arith.add(db.getTransfer_in_money(), entity.getTransfer_in_money())); db.setTransfer_out_money(Arith.add(db.getTransfer_out_money(), entity.getTransfer_out_money())); db.setExchange_lever_amount(Arith.add(db.getExchange_lever_amount(), entity.getExchange_lever_amount())); db.setExchange_lever_fee(Arith.add(db.getExchange_lever_fee(), entity.getExchange_lever_fee())); db.setExchange_lever_order_income(Arith.add(db.getExchange_lever_order_income(), entity.getExchange_lever_order_income())); ApplicationUtil.executeUpdate(db); setCache(db); } else { ApplicationUtil.executeInsert(entity); setCache(entity); } } public void saveRechargeHandle(Serializable partyId, double amount, String symbol) { if ("USDT_DAPP".equals(symbol)) { Party party = this.partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); userData.setRecharge_dapp(amount); save(userData); return; } SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = this.partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); if ("usdt".equals(symbol)) { userData.setRecharge(amount); userData.setRecharge_usdt(amount); } else { List realtime_list = this.dataService.realtime(symbol); Realtime realtime = null; if (realtime_list.size() > 0) { realtime = realtime_list.get(0); } else { throw new BusinessException("系统错误,请稍后重试"); } if ("usdc".equals(symbol)) { userData.setRecharge(Arith.mul(amount, realtime.getClose())); userData.setRecharge_usdc(amount); } if ("btc".equals(symbol)) { userData.setRecharge(Arith.mul(amount, realtime.getClose())); userData.setRecharge_btc(amount); } if ("eth".equals(symbol)) { userData.setRecharge(Arith.mul(amount, realtime.getClose())); userData.setRecharge_eth(amount); } if ("ht".equals(symbol)) { userData.setRecharge(Arith.mul(amount, realtime.getClose())); userData.setRecharge_ht(amount); } if ("ltc".equals(symbol)) { userData.setRecharge(Arith.mul(amount, realtime.getClose())); userData.setRecharge_ltc(amount); } } save(userData); } public void saveRechargeHandleDapp(Serializable partyId, double amount,String symbol) { SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); if ("usdt".equals(symbol)) userData.setRecharge_dapp(amount); save(userData); } /** * 更新充值返佣 */ public void saveUserDataForRechargeRecom(String partyId, double amount) { SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); userData.setRechargeRecom(amount); save(userData); } public void saveWithdrawHandle(Serializable partyId, double amount, double amount_fee,String symbol) { System.out.println("saveWithdrawHandle -> partyId:" + partyId); SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); if (StringUtils.isEmpty(symbol)||"usdt".equals(symbol)) { userData.setWithdraw(amount); userData.setRecharge_withdrawal_fee(amount_fee); userData.setWithdraw_all(amount); } else { List realtime_list = this.dataService.realtime(symbol); Realtime realtime = null; if (realtime_list.size() > 0) { realtime = realtime_list.get(0); } else { throw new BusinessException("系统错误,请稍后重试"); } if ("btc".equals(symbol)) { userData.setRecharge_withdrawal_fee(Arith.mul(amount_fee, realtime.getClose())); userData.setWithdraw_btc(amount); userData.setWithdraw_all(Arith.mul(amount, realtime.getClose())); } if ("eth".equals(symbol)) { userData.setRecharge_withdrawal_fee(Arith.mul(amount_fee, realtime.getClose())); userData.setWithdraw_eth(amount); userData.setWithdraw_all(Arith.mul(amount, realtime.getClose())); } } save(userData); } public void saveWithdrawHandleDapp(Serializable partyId, double amount, double amount_fee,String symbol) { System.out.println("saveWithdrawHandleDapp -> partyId:" + partyId); SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); if (StringUtils.isEmpty(symbol) || "usdt".equals(symbol)) { userData.setWithdraw_dapp(amount); } save(userData); } public void saveClose(ContractOrder order) { SecUser user = this.secUserService.findUserByPartyId(order.getPartyId()); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())||Constants.SECURITY_ROLE_TEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(order.getPartyId(), false); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(order.getPartyId()); userData.setAmount(order.getDeposit_open()); userData.setFee(order.getFee()); if(order.getAmount_close()< 0) order.setAmount_close(0); userData.setOrder_income(Arith.sub(order.getAmount_close(), order.getDeposit_open())); save(userData); } /** * 交割奖励 * @param partyId * @param profit */ public void saveFuturesProfit(String partyId,double profit) { SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); userData.setFurtures_income(profit); save(userData); } /** * 矿机买入 */ @Override public void saveMinerBuy(MinerOrder order) { SecUser user = this.secUserService.findUserByPartyId(order.getPartyId()); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())||Constants.SECURITY_ROLE_TEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(order.getPartyId(), false); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(order.getPartyId()); userData.setMiner_amount(order.getAmount()); save(userData); } /** * 矿机赎回 */ @Override public void saveMinerClose(MinerOrder order) { SecUser user = this.secUserService.findUserByPartyId(order.getPartyId()); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())||Constants.SECURITY_ROLE_TEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(order.getPartyId(), false); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(order.getPartyId()); userData.setMiner_amount(Arith.sub(0, order.getAmount())); save(userData); } /** * 矿机利息 * * @param partyId 获利人 * @param profit 利息 */ @Override public void saveMinerProfit(String partyId, double profit) { SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); userData.setMiner_income(profit); save(userData); } /** * 质押2.0收益 */ public void saveUserDataForGalaxy(String partyId, double amount, boolean ifIncome) { SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); if (ifIncome) { System.out.println("质押2.0 更新userdata 收益 " + amount); userData.setGalaxy_income(amount); }else { System.out.println("质押2.0 更新userdata 下单金额 " + amount); userData.setGalaxy_amount(amount); } save(userData); } /** * 矿机利息 * @param partyId 获利人 * @param profit 利息 */ @Override public void saveGiftMoneyHandle(Serializable partyId, double amount) { SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); userData.setGift_money(amount); save(userData); } public void setUserRecomService(UserRecomService userRecomService) { this.userRecomService = userRecomService; } public void setSecUserService(SecUserService secUserService) { this.secUserService = secUserService; } @Override public ChildrenLever cacheChildrenLever4(Serializable partyId) { ChildrenLever childrenLever = new ChildrenLever(); /** * lever1 */ List userrecom_lever1 = userRecomService.findRecoms(partyId); for (int i = 0; i < userrecom_lever1.size(); i++) { UserRecom userRecom = userrecom_lever1.get(i); childrenLever.getLever1().add(userRecom.getPartyId().toString()); } /** * lever2 */ if (childrenLever.getLever1().size() == 0) return childrenLever; for (int i = 0; i < childrenLever.getLever1().size(); i++) { List userrecom_lever2 = userRecomService.findRecoms(childrenLever.getLever1().get(i)); for (int j = 0; j < userrecom_lever2.size(); j++) { UserRecom userRecom = userrecom_lever2.get(j); childrenLever.getLever2().add(userRecom.getPartyId().toString()); } } /** * lever3 */ if (childrenLever.getLever2().size() == 0) return childrenLever; for (int i = 0; i < childrenLever.getLever2().size(); i++) { List userrecom_lever3 = userRecomService.findRecoms(childrenLever.getLever2().get(i)); for (int j = 0; j < userrecom_lever3.size(); j++) { childrenLever.getLever3().add(userrecom_lever3.get(j).getPartyId().toString()); } } return childrenLever; } @Override public void saveRegister(Serializable partyId) { SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; UserRecom userRecom = this.userRecomService.findByPartyId(partyId); if (userRecom == null) return; List parents = this.userRecomService.getParents(userRecom.getPartyId()); int loop = 4; for (int i = 0; i < parents.size(); i++) { Party party_parent = partyService.cachePartyBy(parents.get(i).getReco_id(), true); if (Constants.SECURITY_ROLE_MEMBER.equals(party_parent.getRolename()) && loop > 0) { UserData userData_reco = new UserData(); userData_reco.setRolename(party_parent.getRolename()); userData_reco.setCreateTime(new Date()); userData_reco.setPartyId(parents.get(i).getReco_id()); userData_reco.setReco_num(1); save(userData_reco); UserDataSum userDataSum = this.saveBySum(parents.get(i).getReco_id().toString()); userDataSum.setReco_num(userDataSum.getReco_num() + 1); this.updateSum(userDataSum); loop--; } } } /** * 资金盘定制化需求,等盘口下架可以删除 */ public List> getChildrenLevelPagedForGalaxy(int pageNo, int pageSize, String partyId, Integer levelNum) { if (pageNo <= 0) pageNo = 1; Page page = new Page(pageNo, pageSize, Integer.MAX_VALUE); List> list = new ArrayList>(); ChildrenLever children = cacheChildrenLever4(partyId); // 获取子代partyId List level = new ArrayList(); if (levelNum == 1) { level = children.getLever1(); } if (levelNum == 2) { level = children.getLever2(); } if (levelNum == 3) { level = children.getLever3(); } if (level == null || level.isEmpty()) { return list; } String inSubStatement=level.stream().filter(le->null!=le&&!le.trim().isEmpty()).map(le->"'"+le.trim()+"'").collect(Collectors.joining(",","(",") LIMIT ?,?")); String partySql=new StringBuilder("SELECT UUID partyId,USERNAME username FROM PAT_PARTY WHERE UUID IN").append(inSubStatement).toString(); List element=ApplicationUtil.executeDQL(partySql,new Object[] {page.getFirstElementNumber(),pageSize},Map.class); page.setElements(element); Map element_map = new HashMap(); for (int i = 0; i < element.size(); i++) { element_map = (Map) element.get(i); String childrenPartyId = element_map.get("partyId").toString(); ChildrenLever childrenLever = cacheChildrenLever4(childrenPartyId); element_map.put("reco_sum", childrenLever.getLever1().size()); // list里面的总业绩 Map map = cacheByPartyId(childrenPartyId); double sum = 0; if (null != map && map.size() > 0) { for (UserData userData : map.values()) { sum += userData.getGalaxy_income(); } } element_map.put("recharge_sum", sum); list.add(element_map); } return list; } /** * 交易所 */ public List> getChildrenLevelPaged(int pageNo, int pageSize, String partyId, Integer levelNum) { if (pageNo <= 0) pageNo = 1; Page page = new Page(pageNo, pageSize, Integer.MAX_VALUE); List> list = new ArrayList>(); ChildrenLever children = cacheChildrenLever4(partyId); // 获取子代partyId List level = new ArrayList(); if (levelNum == 1) { level = children.getLever1(); } if (levelNum == 2) { level = children.getLever2(); } if (levelNum == 3) { level = children.getLever3(); } if (level == null || level.isEmpty()) { return list; } String inSubStatement=level.stream().filter(le->null!=le&&!le.trim().isEmpty()).map(le->"'"+le.trim()+"'").collect(Collectors.joining(",","(",") LIMIT ?,?")); String partySql=new StringBuilder("SELECT UUID partyId,USERNAME username,KYC_AUTHORITY kyc_authority FROM PAT_PARTY WHERE UUID IN").append(inSubStatement).toString(); List element=ApplicationUtil.executeDQL(partySql,new Object[] {page.getFirstElementNumber(),pageSize},Map.class); page.setElements(element); Map element_map = new HashMap(); for (int i = 0; i < element.size(); i++) { element_map = (Map) element.get(i); String childrenPartyId = element_map.get("partyId").toString(); ChildrenLever childrenLever = cacheChildrenLever4(childrenPartyId); // 获取子代partyId List level_children = new ArrayList(); if (levelNum == 1) { level_children = childrenLever.getLever1(); } if (levelNum == 2) { level_children = childrenLever.getLever2(); } if (levelNum == 3) { level_children = childrenLever.getLever3(); } element_map.put("reco_sum", level_children.size()); // list里面的总业绩 Map map = cacheByPartyId(childrenPartyId); double sum = 0; if (null != map && map.size() > 0) { for (UserData userData : map.values()) { sum += userData.getRecharge(); } } element_map.put("recharge_sum", sum); list.add(element_map); } return list; } /** * 获取所有下级列表 - IoeAi定制需求 */ public List> getAllChildrenPaged(int pageNo, int pageSize, String partyId){ if (pageNo <= 0) pageNo = 1; Page page = new Page(pageNo, pageSize, Integer.MAX_VALUE); List> list = new ArrayList>(); List childrens = userRecomService.findChildren(partyId); if (null == childrens || childrens.isEmpty()) return list; String inSubStatement=childrens.stream().filter(le->null!=le&&!le.trim().isEmpty()).map(le->"'"+le.trim()+"'").collect(Collectors.joining(",","(",") LIMIT ?,?")); String partySql=new StringBuilder("SELECT USERNAME username,UUID partyId FROM PAT_PARTY WHERE UUID IN").append(inSubStatement).toString(); List element=ApplicationUtil.executeDQL(partySql,new Object[] {page.getFirstElementNumber(),pageSize},Map.class); page.setElements(element); Map element_map = new HashMap(); for (int i = 0; i < element.size(); i++) { element_map = (Map) element.get(i); String levelPartyId = element_map.get("partyId").toString(); List levelChildrens = userRecomService.findChildren(levelPartyId); // list里面的总业绩 - 所有下级的 收益之和 double sum = 0; for (String id : levelChildrens) { Map map = cacheByPartyId(id); if (null != map && map.size() > 0) { for (UserData userData : map.values()) { sum += userData.getGalaxy_income(); } } } element_map.put("reco_sum", levelChildrens.size()); element_map.put("recharge_sum", sum); list.add(element_map); } return list; } /** * 交易所-推广数据汇总 */ public Map getPromoteData(String partyId, Map data, Date startTime, Date endTime) { ChildrenLever children = cacheChildrenLever4(partyId); // 获取子代partyId List level1 = new ArrayList(); List level2 = new ArrayList(); List level3 = new ArrayList(); level1 = children.getLever1(); level2 = children.getLever2(); level3 = children.getLever3(); Map peoples = new HashMap<>(); double rechangeAmount = 0; for (String value1 : level1) { Map map = cacheByPartyId(value1); if (null != map && map.size() > 0) { for (UserData userData : map.values()) { if (userData.getRecharge() <= 0) { continue; } if (null != startTime && null != endTime) { Date createTime = userData.getCreateTime(); if (createTime.after(endTime) && createTime.before(startTime)) { rechangeAmount += userData.getRecharge(); peoples.put(String.valueOf(userData.getPartyId()), ""); } } else { rechangeAmount += userData.getRecharge(); peoples.put(String.valueOf(userData.getPartyId()), ""); } } } } for (String value2 : level2) { Map map = cacheByPartyId(value2); if (null != map && map.size() > 0) { for (UserData userData : map.values()) { if (userData.getRecharge() <= 0) { continue; } if (null != startTime && null != endTime) { Date createTime = userData.getCreateTime(); if (createTime.after(endTime) && createTime.before(startTime)) { rechangeAmount += userData.getRecharge(); peoples.put(String.valueOf(userData.getPartyId()), ""); } } else { rechangeAmount += userData.getRecharge(); peoples.put(String.valueOf(userData.getPartyId()), ""); } } } } for (String value3 : level3) { Map map = cacheByPartyId(value3); if (null != map && map.size() > 0) { for (UserData userData : map.values()) { if (userData.getRecharge() <= 0) { continue; } if (null != startTime && null != endTime) { Date createTime = userData.getCreateTime(); if (createTime.after(endTime) && createTime.before(startTime)) { rechangeAmount += userData.getRecharge(); peoples.put(String.valueOf(userData.getPartyId()), ""); } } else { rechangeAmount += userData.getRecharge(); peoples.put(String.valueOf(userData.getPartyId()), ""); } } } } data.put("peopleNum", String.valueOf(peoples.size())); data.put("rechangeAmount", String.valueOf(rechangeAmount)); return data; } /** * 三方充值 */ public void saveThirdRechargeMoneyHandle(Serializable partyId, double amount) { SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); userData.setThird_recharge_amount(amount); userData.setRecharge(amount); save(userData); } /** * 持有金额(钱包+扩展钱包) * @param partyId * @param amount */ public void saveHodingMoneyHandle(Serializable partyId, double amount) { SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); userData.setHolding_money(amount); save(userData); } /** * 根据日期获取当日充值数 * @param date 字符串日期,"2020-01-01" * @return */ public int filterRechargeByDate(String date) { int sum = 0; List> list = new ArrayList<>(cache.values()); for(Map ud:list) { UserData userData = ud.get(date); if(userData!=null&&userData.getRecharge()>0) {//当日有充值 sum++; } } return sum; } /** * 转账 * @param byPartyId 转出用户id * @param toPartyId 转入用户id * @param outAmountToUsdt 转出金额(USDT计价) * @param inAmountToUsdt 转入金额(USDT计价) */ public void saveTransferMoneyHandle(String byPartyId,String toPartyId, double outAmountToUsdt, double inAmountToUsdt) { saveTransferOutMoneyHandle(byPartyId,outAmountToUsdt); saveTransferInMoneyHandle(toPartyId,inAmountToUsdt); } /** * 转入金额 * @param partyId * @param amountToUsdt */ public void saveTransferInMoneyHandle(String partyId, double amountToUsdt) { SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); userData.setTransfer_in_money(amountToUsdt); save(userData); } /** * 转出金额 * @param partyId * @param amountToUsdt */ public void saveTransferOutMoneyHandle(String partyId, double amountToUsdt) { SecUser user = this.secUserService.findUserByPartyId(partyId); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(partyId, true); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(partyId); userData.setTransfer_out_money(amountToUsdt); save(userData); } public void setPartyService(PartyService partyService) { this.partyService = partyService; } public void setDataService(DataService dataService) { this.dataService = dataService; } @Override public void saveBuy(ExchangeApplyOrder order) { SecUser user = this.secUserService.findUserByPartyId(order.getPartyId()); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())||Constants.SECURITY_ROLE_TEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(order.getPartyId(), false); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(order.getPartyId()); userData.setExchange_amount(order.getVolume()); userData.setExchange_fee(0); save(userData); } public void saveSell(ExchangeApplyOrder order) { SecUser user = this.secUserService.findUserByPartyId(order.getPartyId()); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())||Constants.SECURITY_ROLE_TEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; List realtime_list = this.dataService.realtime(order.getSymbol()); Realtime realtime = null; if (realtime_list.size() > 0) { realtime = realtime_list.get(0); } else { throw new BusinessException("系统错误,请稍后重试"); } Party party = partyService.cachePartyBy(order.getPartyId(), false); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(order.getPartyId()); userData.setExchange_amount(Arith.mul(realtime.getClose(), order.getVolume())); userData.setExchange_fee(Arith.mul(realtime.getClose(), order.getFee())); userData.setExchange_income(0); save(userData); } /** * 理财产品平仓 */ public void saveSellFinance(FinanceOrder order) { SecUser user = this.secUserService.findUserByPartyId(order.getPartyId()); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())||Constants.SECURITY_ROLE_TEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(order.getPartyId(), false); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(order.getPartyId()); userData.setFinance_amount(order.getAmount()); userData.setFinance_income(order.getProfit()); save(userData); } /** * 交割合约平仓 */ @Override public void saveFuturesClose(FuturesOrder order) { SecUser user = this.secUserService.findUserByPartyId(order.getPartyId()); user.getRoles(); boolean guest = false; for (Role role : user.getRoles()) { if (Constants.SECURITY_ROLE_GUEST.equals(role.getRoleName())||Constants.SECURITY_ROLE_TEST.equals(role.getRoleName())) { guest = true; } } if (guest) return; Party party = partyService.cachePartyBy(order.getPartyId(), false); UserData userData = new UserData(); userData.setRolename(party.getRolename()); userData.setCreateTime(new Date()); userData.setPartyId(order.getPartyId()); userData.setFurtures_amount(order.getVolume()); userData.setFurtures_fee(order.getFee()); userData.setFurtures_income(order.getProfit()); save(userData); } }