/** * 默认从缓存读的实时数据 */ //时间初始化 /*进场时间筛选框*/ $('#incomeprofile-dateTime input').val(moment().subtract('days', 1).format('YYYY-MM-DD')+ ' - ' + moment().subtract('days', 1).format('YYYY-MM-DD')); $('#incomeprofile-dateTime').daterangepicker({ // timePicker: true, // timePickerIncrement: 20, // minDate: moment().subtract('months', 2), startDate: moment().subtract('days', 1), endDate: moment().subtract('days', 1), opens: 'left', //日期选择框的弹出位置 // dateLimit : { // days : 6 // }, locale: { applyLabel: '确定', cancelLabel: '取消', customRangeLabel: '自定义', daysOfWeek: ['日', '一', '二', '三', '四', '五', '六'], monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], // format: 'MM/DD/YYYY HH:mm:ss' }, ranges: { '昨天': [moment().subtract('days', 1), moment().subtract('days', 1)], '最近一周': [moment().subtract('days', 6), moment().subtract('days', 0)], // '最近一个月': [moment().subtract('months', 1), moment().subtract('days', 1)], // '最近三个月': [moment().subtract('months', 2), moment().subtract('days', 1)], }, maxDate: moment().subtract('days', 0), //最大时间 }, function (start, end) { $('#incomeprofile-dateTime input').val(start.format('YYYY-MM-DD') + ' - ' + end.format('YYYY-MM-DD')); } ); //地图 部分 var map; //Map实例 //后台传过来 var currentLat = 118.922316; var currentLon = 42.25953; var clear_flag=false; //收益-按收益程度计数 var incomeArray=[0,0,0,0,0]; //数据 mapData=[ { parkNo:"001", plname:"万达广场", lat:"118.973744", lot:"42.275538", allnum:"3000", ltnum:"1000", vipnum:"1000", bjnum:"1000" }, { parkNo:"002", plname:"万达广场西街", lat:"118.971157", lot:"42.28429", allnum:"600", ltnum:"200", vipnum:"200", bjnum:"200" }, { parkNo:"003", plname:"万达广场北街", lat:"118.98668", lot:"42.275324", allnum:"300", ltnum:"100", vipnum:"100", bjnum:"100" }, { parkNo:"004", plname:"万达广场东街", lat:"118.944999", lot:"42.272762", allnum:"90", ltnum:"10", vipnum:"10", bjnum:"70" }, ]; var mapFun={ init:function () { map = new BMap.Map("allmap", {enableMapClick: false}); //设置地图中心点,当前城市 var point = new BMap.Point(currentLat,currentLon); //初始化地图,设置中心点坐标和地图级别。 map.centerAndZoom(point, 13); //启用滚轮放大缩小 map.enableScrollWheelZoom(true); //检测浏览器兼容 if (typeof(Worker) === "undefined") { if (navigator.userAgent.indexOf("MSIE 9.0") <= 0) { alert("定制个性地图示例:IE9以下不兼容,推荐使用百度浏览器、chrome、firefox、safari、IE10"); } } //添加朦层 /*var bdary = new BMap.Boundary(); bdary.get("中华人民共和国", function(rs){ //获取行政区域 map.clearOverlays(); //清除地图覆盖物 var count = rs.boundaries.length; //行政区域的点有多少个 if (count === 0) { alert('未能获取当前输入行政区域'); return ; } var pointArray = []; for (var i = 0; i < count; i++) { var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 0, strokeColor: "#C5E3FF",fillColor:"#C5E3FF",fillOpacity: 0.3, }); map.addOverlay(ply); //添加覆盖物 } });*/ mapFun.drawMarker(mapData); incomeStatic(); }, drawMarker:function (mapData) { //清除以前的点位 map.clearOverlays(); //第7步:绘制点 var marker = []; var poilat = null;//坐标 var poilot = null; var parkNo = null;//编号 var popAllnum = null;//总计 var popltnum = null;//临停 var popvipnum = null;//会员卡 var popbjnum = null;//补缴 var plname = null;//停车场名称 incomeArray=[0,0,0,0,0]; for (var i = 0; i < mapData.length; i++) { poilat = mapData[i].lat; poilot = mapData[i].lot; parkNo = mapData[i].parkNo; popAllnum = mapData[i].allnum; popltnum = mapData[i].ltnum; popvipnum = mapData[i].vipnum; popbjnum = mapData[i].bjnum; plname = mapData[i].plname; var point = new BMap.Point(poilat, poilot); incomeArray[4]++; if (popAllnum>1000) { incomeArray[3]++; var myIcon = new BMap.Icon("../../assets/pages/img/mmap/its-park1.png",new BMap.Size(30, 40),{ offset: new BMap.Size(10, 40), textColor: '#fff' }); marker[i] = new BMap.Marker(point, {icon: myIcon}); map.addOverlay(marker[i]); } else if (popAllnum>500 && popAllnum<=1000) { incomeArray[2]++; var myIcon2 = new BMap.Icon("../../assets/pages/img/mmap/its-park2.png", new BMap.Size(30,40),{ offset: new BMap.Size(10, 40), textColor: '#fff' }); marker[i] = new BMap.Marker(point, {icon: myIcon2}); map.addOverlay(marker[i]); } else if (popAllnum>100&&popAllnum<=500) { incomeArray[1]++; var myIcon3 = new BMap.Icon("../../assets/pages/img/mmap/its-park3.png", new BMap.Size(30,40),{ offset: new BMap.Size(10, 40), textColor: '#fff' }); marker[i] = new BMap.Marker(point, {icon: myIcon3}); map.addOverlay(marker[i]); }else if (popAllnum<100 ||popAllnum==undefined || popAllnum=="" ||popAllnum==null) { incomeArray[0]++; var myIcon4 = new BMap.Icon("../../assets/pages/img/mmap/its-park4.png", new BMap.Size(30,40),{ offset: new BMap.Size(10, 40), textColor: '#fff' }); marker[i] = new BMap.Marker(point, {icon: myIcon4}); map.addOverlay(marker[i]); } marker[i].poilat = mapData[i].lat; marker[i].poilot = mapData[i].lot; marker[i].parkNo = mapData[i].parkNo; marker[i].popAllnum = mapData[i].allnum; marker[i].popltnum = mapData[i].ltnum; marker[i].popvipnum = mapData[i].vipnum; marker[i].popbjnum = mapData[i].bjnum; marker[i].plname = mapData[i].plname; marker[i].addEventListener("mouseover", function (n) { var poilat = n.target.poilat; var parkNo = n.target.parkNo; var plname = n.target.plname; var poilot = n.target.poilot; var popAllnum = Number(n.target.popAllnum); var popltnum = Number(n.target.popltnum); var popvipnum = Number(n.target.popvipnum); var popbjnum = Number(n.target.popbjnum); /*var req = { sysCode: sysComm.sysCode, cityId: sysComm.cityId, plNos: [parkNo] } var opt = { method: "post", data: JSON.stringify(req), url: dataUrl.util.queryParkFreeBerthsByPkNos(), success: function (res, xhr, status) { if (res.code == '8888') { freepop = res.data[parkNo]; addInfoWindow(parkNo, newpoiX, newpoiY,parkName, freepop, allnumpop) } } } sysAjax(opt); */ addInfoWindow(poilat,parkNo,plname,poilot,popAllnum,popltnum,popvipnum,popbjnum); }); marker[i].addEventListener("mouseout", function () { closeInfoWindow(); }) } //removeCluster(marker); } }; //mapFun.init(); //占用率统计条 function incomeStatic(){ var t1=(incomeArray[0]*100/incomeArray[4]).toFixed(2)+'%'; var t2=(incomeArray[1]*100/incomeArray[4]).toFixed(2)+'%'; var t3=(incomeArray[2]*100/incomeArray[4]).toFixed(2)+'%'; var t4=(incomeArray[3]*100/incomeArray[4]).toFixed(2)+'%'; $(".incomeprofile-per-main").find('li').eq(0).css("width",t1); $(".incomeprofile-per-main").find('li').eq(1).css("width",t2); $(".incomeprofile-per-main").find('li').eq(2).css("width",t3); $(".incomeprofile-per-main").find('li').eq(3).css("width",t4); $(".incomeprofile-per-area").find('span').eq(1).html(t1); $(".incomeprofile-per-area").find('span').eq(3).html(t2); $(".incomeprofile-per-area").find('span').eq(5).html(t3); $(".incomeprofile-per-area").find('span').eq(7).html(t4); }; function removeCluster(marker) { if (clear_flag) { markerClusterer.clearMarkers(); //此步骤需要 } markerClusterer = new BMapLib.MarkerClusterer(map, { markers: marker, styles: [{ url: '../../assets/pages/img/mmap/parkicon_culter.png', size: new BMap.Size(68, 67), zIndex:0 }], }); markerClusterer.setMaxZoom(13); clear_flag = true; } //close pop弹窗 function closeInfoWindow() { $(".pop_models").css('display', 'none'); } //停车场信息弹窗 function addInfoWindow(poilat,parkNo,plname,poilot,popAllnum,popltnum,popvipnum,popbjnum) { $('.BMapLabel').empty(); var parkNo = parkNo; var poilat = poilat; var poilot = poilot; var plname = plname; var popAllnum = popAllnum; var popltnum = popltnum; var popvipnum = popvipnum; var popbjnum = popbjnum; var point = new BMap.Point(poilat, poilot); var myLabel = new BMap.Label('
' + '
'+plname+'
' + '
总计:'+popAllnum+'
' + '
临停:'+popltnum+'
' + '
会员卡:'+popvipnum+'
' + '
补缴:'+popbjnum+'
' + '
', { offset: new BMap.Size(30, -85), //label的偏移量,为了让label的中心显示在点上 position: point }); myLabel.setStyle({ color: "#F0F0F0", fontSize: "12px", padding: "5px", whiteSpace: "normal", backgroundColor: "rgba(0, 0, 0, 0)", border: "0px", zIndex: "1000" } ); map.addOverlay(myLabel); $('.pop_models').parent().parent().css('z-index',99999999) } //地图分割线 //var zfbData = [ // {value:50, name:'支付宝',selected:true}, // {value:100-50, name:'总计'}, //]; //var zfbName = '支付宝'; //drawPie('zfbMoney','#1890FF','支付宝','50%',zfbData,zfbName); // //var wxData = [ // {value:20, name:'微信',selected:true}, // {value:100-20, name:'总计'}, //]; //var wxName = '现金'; //drawPie('wxMoney','#2FC25B','微信','20%',wxData,wxName); // //var xjData = [ // {value:20, name:'现金',selected:true}, // {value:100-20, name:'总计'}, //]; //var wxName = '现金'; //drawPie('xjMoney','#FACC14','现金','20%',wxData,wxName); // //var qtData = [ // {value:10, name:'其他',selected:true}, // {value:100-10, name:'总计',}, //]; //var qtName = '其他'; //drawPie('qtMoney','#37CBCB','其他','10%',qtData,qtName); function drawPie(id,color,subtext,text,seriesData,seriesName) { var chart = echarts.init(document.getElementById(id)); chart.setOption( { color:[color,'#D7D7D7'], title:{ subtext:text, text:subtext, textStyle:{ color:'rgba(0,0,0,0.5)', fontSize:'12', align:'middle', verticalAlign:'middle', }, subtextStyle:{ color:'#000', fontSize:'18', align:'middle', verticalAlign:'middle', }, left:'center', top:'50', }, tooltip: { trigger: 'item', show:false, formatter: "{a}
{b}: {c} ({d}%)" }, series: [ { name:seriesName, hoverAnimation:false, legendHoverLink:false, type:'pie', hoverOffset:5, selectedOffset:3, radius: ['70%', '88%'], avoidLabelOverlap: false, label: { normal: { show: false, position: 'center' }, emphasis: { show: false, textStyle: { fontSize: '30', fontWeight: 'bold' } } }, labelLine: { normal: { show: false } }, data:seriesData } ] } ); }; var chart = echarts.init(document.getElementById('tytj-echarts')); var option = { series: [{ type: 'liquidFill', color: ['#63BBFF'], radius: '80%', data: [0.4], outline: { show: true, borderDistance: 3, itemStyle: { color: 'none', borderColor: '#38A2FF', borderWidth: 3, shadowBlur: 0, shadowColor: 'rgba(255, 255, 255, 0)' } }, backgroundStyle: { color: '#fff' }, label: { normal: { formatter: '', textStyle: { fontSize: 98 } } } // label: { // // normal: { // // formatter: '{a}\n{b}\nValue: {c}', // textStyle: { // color: 'red', // insideColor: 'yellow', // fontSize: 50 // } // } // }, }] }; var plNos=[]; chart.setOption(option); var fun={ //时间处理 datetimeFormatter: function(value, row, index) { if(value == null) { return ""; } else { return DateUtils.long2String(value, 7); } }, getQueryParams:function(){ var times=($('#incomeprofile-dateTime input').val()).split(" - "); var beginTime = times[0]+" 00:00:00"; var endTime = times[1]+" 23:59:59"; beginTime = new Date(beginTime.replace(new RegExp(/-/gm) ,"/")); endTime = new Date(endTime.replace(new RegExp(/-/gm) ,"/")); var req={ baseRequest :{ pageNum: 1, pageSize: 0 }, plNos:plNos, beginTime: beginTime, endTime: endTime, sysCode:sysComm.sysCode }; return req; }, initPark:function(){ var data = fn.getParkLot(); mapData=[]; for (var i = 0; i < data.length; i++) { plNos.push(data[i].code); //填充mapData var mapItem={ parkNo:"", plname:"", lat:"0", lot:"0", allnum:"0", ltnum:"0", vipnum:"0", bjnum:"0" }; mapItem.parkNo=data[i].code; mapItem.plname=data[i].name; mapItem.lat=data[i].lonId; mapItem.lot=data[i].latId; mapData.push(mapItem); } }, drawParkIncomeDatas:function(data){ var allIncomeFee = 0; var vipIncomeFee = 0; var backIncomeFee = 0; var tempIncomeFee = 0; if(data.length>0){ $.each(data, function(index,item) { allIncomeFee+=item.allIncome; vipIncomeFee+=item.vipCardIncome; backIncomeFee+=item.backIncome; tempIncomeFee+=item.parkIncome; }); } //tempIncomeFee = allIncomeFee-vipIncomeFee-tempIncomeFee; $("#allIncome").html(fun.moneyFomatter(allIncomeFee)); $("#tempIncome").html(fun.moneyFomatter(tempIncomeFee)); $("#vipIncome").html(fun.moneyFomatter(vipIncomeFee)); $("#backIncome").html(fun.moneyFomatter(backIncomeFee)); }, drawParkIncomeList:function(data){ var html=''; var i=1; if(data.length>0){ $.each(data, function(index,item) { $.each(mapData, function(_index,_item) { if(item.plNo==_item.parkNo){ item.plName=_item.plname; } }); }); //收入相同的情况下,按中文排序 data.sort(function(a,b){ if(b.allIncome == a.allIncome){ return(a.plName).localeCompare(b.plName,'zh'); }else{ return b.allIncome - a.allIncome; } }); $.each(data, function(index,item) { html+='
  • '+(index+1)+''+item.plName+''+fun.moneyFomatter(item.allIncome)+'
  • '; }); } else{ //按中文排序 mapData.sort(function(a,b){ return(a.plname).localeCompare(b.plname,'zh'); }); $.each(mapData, function(index,item) { if(index<10){ html+='
  • '+(index+1)+''+item.plname+''+fun.moneyFomatter(0)+'
  • '; } }); } $(".incomeprofile-ranking").html(html); }, drawParkIncomeMap:function(data){ //mapData初始化 $.each(mapData, function(_index,_item) { //开始填充mapData _item.allnum=fun.moneyFomatter(0); _item.ltnum=fun.moneyFomatter(0); _item.vipnum=fun.moneyFomatter(0); _item.bjnum=fun.moneyFomatter(0); }); if (data != null && data.length>0) { $.each(data, function(index,item) { $.each(mapData, function(_index,_item) { //开始填充mapData if(item.plNo==_item.parkNo){ _item.allnum=fun.moneyFomatter(item.allIncome); // _item.ltnum=fun.moneyFomatter(item.allIncomeFee-item.vipIncomeFee-item.backIncomeFee); _item.ltnum=fun.moneyFomatter(item.parkIncome); _item.vipnum=fun.moneyFomatter(item.vipCardIncome); _item.bjnum=fun.moneyFomatter(item.backIncome); } }); }); currentLon=mapData[0].lot; currentLat=mapData[0].lat; } //加载地图 mapFun.init(); }, queryIncomeStatistic:function(plNos){ var req = fun.getQueryParams(); var commonAjax = { method: "post", url: dataUrl.util.queryParkRealTimeListByPlNos(), async:false, data: JSON.stringify(req), contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (res) { console.log(res); if (res.code == '8888') { if(res.data!=null){ var data = res.data; //停车收入概况 fun.drawParkIncomeDatas(data); //停车排行榜 fun.drawParkIncomeList(data); //停车收入地图数据 fun.drawParkIncomeMap(data); } } else { console.log(res); } } }; sysAjax(commonAjax); }, drawIncomeStatisticForPayType:function(data){ var aliFee = data.parkAliIncome; var wxFee = data.parkWxIncome; var cashFee = data.parkCashIncome; var aliFee = data.parkBalanceIncome; var actFee = data.parkIncome; var arrearageFee = data.escapeFee; var aliRate = ((aliFee*100)/(actFee<1?1:actFee)).toFixed(2); var wxRate = ((wxFee*100)/(actFee<1?1:actFee)).toFixed(2); var cashRate = ((cashFee*100)/(actFee<1?1:actFee)).toFixed(2); var otherRate = 100-aliRate-wxRate-cashRate; if(actFee<1){ otherRate=(0).toFixed(2); } var arrearageRate = ((arrearageFee==null?0:arrearageFee)/(actFee<1?1:actFee)).toFixed(4); var zfbData = [ {value:aliRate, name:'支付宝',selected:true}, {value:100-aliRate, name:'总计'}, ]; var zfbName = '支付宝'; drawPie('zfbMoney','#1890FF','支付宝',aliRate+'%',zfbData,zfbName); var wxData = [ {value:wxRate, name:'微信',selected:true}, {value:100-wxRate, name:'总计'}, ]; var wxName = '现金'; drawPie('wxMoney','#5fe98f','微信',wxRate+'%',wxData,wxName); var xjData = [ {value:cashRate, name:'现金',selected:true}, {value:100-cashRate, name:'总计'}, ]; var wxName = '现金'; drawPie('xjMoney','#FACC14','现金',cashRate+'%',wxData,wxName); var qtData = [ {value:otherRate, name:'其他',selected:true}, {value:100-otherRate, name:'总计',}, ]; var qtName = '其他'; drawPie('qtMoney','#37CBCB','其他',otherRate+'%',qtData,qtName); //逃逸金额 $("#arrearageRate").html((arrearageRate*100).toFixed(2)+'%'); option.series[0].data[0] = arrearageRate; chart.setOption(option); }, queryIncomeStatisticForPayType:function(plNos){ var req = fun.getQueryParams(); var commonAjax = { method: "post", url: dataUrl.util.queryParkRealTimeDatasByPlNos(), async:false, data: JSON.stringify(req), contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (res) { console.log(res); if (res.code == '8888') { if(res.data!=null){ var data = res.data; //收入占比、逃逸统计 fun.drawIncomeStatisticForPayType(data); } } else { console.log(res); } } }; sysAjax(commonAjax); }, moneyFomatter:function(value){ if(value==null){ return "0.00"; } else{ return (value/100).toFixed(2); } }, }; fun.initPark(); fun.queryIncomeStatisticForPayType(plNos); fun.queryIncomeStatistic(plNos);