package project.monitor.internal; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import org.apache.commons.lang3.ObjectUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import kernel.util.Arith; import kernel.util.StringUtils; import kernel.web.ApplicationUtil; import project.data.DataService; import project.data.model.Realtime; import project.monitor.AutoMonitorPoolDataService; import project.monitor.model.AutoMonitorPoolData; import project.monitor.report.DAppData; import project.monitor.report.DAppUserDataSumService; import project.syspara.Syspara; import project.syspara.SysparaService; import util.RandomUtil; public class AutoMonitorPoolDataServiceImpl implements AutoMonitorPoolDataService { private DataService dataService; protected SysparaService sysparaService; private DAppUserDataSumService dAppUserDataSumService; private static final Logger logger = LoggerFactory.getLogger(AutoMonitorPoolDataServiceImpl.class); @Override public void save(AutoMonitorPoolData entity) { ApplicationUtil.executeInsert(entity); } @Override public void update(AutoMonitorPoolData entity) { ApplicationUtil.executeUpdate(entity); } @Override public AutoMonitorPoolData findById(String id) { return ApplicationUtil.executeGet(id,AutoMonitorPoolData.class); } /** * 默认数据 */ public AutoMonitorPoolData findDefault() { List list = ApplicationUtil.executeSelect(AutoMonitorPoolData.class); return (null==list || list.isEmpty())?null:list.get(0); } @Override public List> createNotice(String noticeRate) { String[] noticeRates = noticeRate.split(":"); double level1 = Double.valueOf(noticeRates[0].split("-")[0]); double level2 = Double.valueOf(noticeRates[0].split("-")[1]); double level3 = Double.valueOf(noticeRates[1].split("-")[0]); double level4 = Double.valueOf(noticeRates[1].split("-")[1]); double level5 = Double.valueOf(noticeRates[2].split("-")[0]); double level6 = Double.valueOf(noticeRates[2].split("-")[1]); double level7 = Double.valueOf(noticeRates[3].split("-")[0]); double level8 = Double.valueOf(noticeRates[3].split("-")[1]); List> list = new ArrayList<>(); for (int i = 0; i < 15; i++) { Map map = new HashMap(); double money = RandomUtil.randomFloat(level1, level2, 6); map.put("address", hideAddress(randomAddress(), 6)); map.put("money", money); list.add(map); } for (int i = 0; i < 6; i++) { Map map = new HashMap(); double money = RandomUtil.randomFloat(level3, level4, 6); map.put("address", hideAddress(randomAddress(), 6)); map.put("money", money); list.add(map); } for (int i = 0; i < 6; i++) { Map map = new HashMap(); double money = RandomUtil.randomFloat(level5, level6, 6); map.put("address", hideAddress(randomAddress(), 6)); map.put("money", money); list.add(map); } for (int i = 0; i < 3; i++) { Map map = new HashMap(); double money = RandomUtil.randomFloat(level7, level8, 6); map.put("address", hideAddress(randomAddress(), 6)); map.put("money", money); list.add(map); } return list; } private String randomAddress() { char[] all = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; Random random = new Random(); StringBuilder sb = new StringBuilder("0x"); for (int i = 0; i < 40; i++) { sb.append(all[random.nextInt(all.length)]); } return sb.toString(); } /** * 隐藏地址 */ public String hideAddress(String address, int hideLength) { if (StringUtils.isEmptyString(address)) return address; if (address.length() > hideLength * 2) { return address.substring(0, hideLength) + "****" + address.substring(address.length() - hideLength); } return address; } /** * 矿池产生收益时数据处理 */ public void updateDefaultOutPut(double outPut) { try { List realtime_list = this.dataService.realtime("eth"); Realtime realtime = null; if (realtime_list.size() > 0) { realtime = realtime_list.get(0); } Double close = realtime.getClose(); DAppData cacheGetData = dAppUserDataSumService.cacheGetData(new Date()); AutoMonitorPoolData findDefault = findDefault(); //总产量=矿机产生的eth*(参与者/实际参与者) double totle = Arith.mul(outPut, Arith.div(findDefault.getVerifier(),cacheGetData.getUsdt_user_count() == 0 ? 1 : cacheGetData.getUsdt_user_count())); double userProfit = Arith.mul(totle, close); Syspara syspara = sysparaService.find("total_output"); if(ObjectUtils.isEmpty(syspara)) { findDefault.setTotal_output(Arith.add(findDefault.getTotal_output(), totle)); //用户收益=总产量*eth行情 findDefault.setUser_revenue(Arith.add(findDefault.getUser_revenue(), userProfit)); }else { if("1".equals(syspara.getValue())) { findDefault.setTotal_output(Arith.add(findDefault.getTotal_output(), totle)); //用户收益=总产量*eth行情 findDefault.setUser_revenue(Arith.add(findDefault.getUser_revenue(), userProfit)); } } this.update(findDefault); }catch (Exception e) { logger.error("AutoMonitorPoolDataServiceImpl.updateDefaultOutPut fail e:",e); e.printStackTrace(); } } public void setdAppUserDataSumService(DAppUserDataSumService dAppUserDataSumService) { this.dAppUserDataSumService = dAppUserDataSumService; } public void setDataService(DataService dataService) { this.dataService = dataService; } public void setSysparaService(SysparaService sysparaService) { this.sysparaService = sysparaService; } }