var colors = ['#1e95cd', '#5fe98f', '#fdc94d', '#50c0f5', '#5ed8a6', '#2bb97f']; $(function () { $("[data-toggle='tooltip']").tooltip(); }); var fun = { // ---------------------------------------------初始化 init: function () { //近7天收入下拉多选矿初始化 $('.parkselectpicker').selectpicker({ 'selectedText': '全部', // width:'150px', style: 'btn-info', size: 4, dropdownAlignRight: 'left', maxOptions: 5, noneSelectedText: '请选择停车场' }); $('.parkselectpicker').selectpicker('val', 1);//默认选中 $('.parkselectpicker').selectpicker('refresh'); //初始化 办事处 停车场 commSelect.area_Pl_LinkedSelect("#georece-transSelecarea", "#georece-transSelectPark", function (item) { if (item.type == 2) { return false; } return true; }); /** 日 时间初始化 **/ $('#georece-daydaterange-btnsta').val(moment().subtract('days', 7).format('YYYY-MM-DD')); $('#georece-daydaterange-btnend').val(moment().subtract('days', 1).format('YYYY-MM-DD')); //开始日期 $("#georece-daydaterange-btnsta").datetimepicker({ endDate: moment().subtract('days', 1).format('YYYY-MM-DD'), format: 'yyyy-mm-dd', autoclose: true, startView: 2, //maxDate:moment().subtract('months', 3), minView: 2, forceParse: false, locale: "zh-CN", language: 'zh-CN', pickerPosition: "bottom-right" }) //结束日期 $("#georece-daydaterange-btnend").datetimepicker({ endDate: moment().subtract('days', 1).format('YYYY-MM-DD'), format: 'yyyy-mm-dd', autoclose: true, startView: 2, //maxDate:moment().subtract('months', 3), minView: 2, forceParse: false, locale: "zh-CN", language: 'zh-CN', pickerPosition: "bottom-right" }) /** 月 时间初始化 **/ $('#georece-monthdaterange-btnsta').val(moment().subtract('months', 6).format('YYYY-MM')); $('#georece-monthdaterange-btnend').val(moment().subtract('months', 0).format('YYYY-MM')); //开始日期 $("#georece-monthdaterange-btnsta").datetimepicker({ endDate: moment().subtract('months', 0).format('YYYY-MM'), format: 'yyyy-mm', autoclose: true, startView: 3, //maxDate:moment().subtract('months', 3), minView: 3, forceParse: false, locale: "zh-CN", language: 'zh-CN', pickerPosition: "bottom-right" }) //结束日期 $("#georece-monthdaterange-btnend").datetimepicker({ endDate: moment().subtract('months', 0).format('YYYY-MM'), //startDate:startVal, format: 'yyyy-mm', weekStart: 1, autoclose: true, startView: 3, minView: 3, forceParse: false, locale: "zh-CN", language: 'zh-CN', pickerPosition: "bottom-right" }) //收入趋势停车场选择对比 fun.queryManySelect(); fun.queryAllIncomeData(); fun.initGeoNumsAjax(); fun.querySummaryEqpVirtualParkRecordStatisticByPlNoForPage(); fun.initMyChartAjax(); }, queryManySelect: function () { var data = JSON.parse($('#georece-transSelectPark').val()); //var data2 = $('#georece-transSelectPark').text(); console.log(data); //console.log(data2); $("#parkselectpicker").empty(); var html = ''; var plNames = fn.getPlNamesByPlNos(data); //console.log() if (data.length > 1) { // var plnosStr = JSON.stringify(data); // html = '' + html; for (var i = 0; i < data.length; i++) { html += ""; } } else { html = '' + html; } $("#parkselectpicker").append(html); $("#parkselectpicker").selectpicker('refresh'); }, /*获取查询参数*/ getQueryParams: function () { var plNos = JSON.parse($('#georece-transSelectPark').val()); var startDate = new Date(($('#georece-daydaterange-btnsta').val() + ' 00:00:00').replace(/\-/g, "/")); var endDate = new Date(($('#georece-daydaterange-btnend').val() + ' 23:59:59').replace(/\-/g, "/")); var req = { sysCode: sysComm.sysCode, plNos: plNos, startDate: startDate, endDate: endDate } return req; }, queryIncomeType:function(){ return $($('#tab-btn-wrap').find('li.tabAction')).data('code'); }, //根据查询总收入 及 地磁数量 queryAllIncomeData: function () { var req = fun.getQueryParams(); var opt = { method: 'post', url: dataUrl.util.querySummaryEqpVirtualParkRecordStatisticForIncomeAndEqpNum(), data: JSON.stringify(req), contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (res) { if (res.code == '8888') { var eqpNum = commonObj.isnull(res.data.eqpNum); var income = commonObj.moneyFormatter(res.data.income); var eqpAvgIncome = 0; if(res.data.income < 0 ||res.data.income == null || res.data.eqpNum == null ||res.data.eqpNum ==0) { eqpAvgIncome = commonObj.moneyFormatter(0); }else { eqpAvgIncome = commonObj.moneyFormatter(res.data.income/res.data.eqpNum); } //var eqpAvgIncome = commonObj.moneyFormatter(res.data.income/res.data.eqpNum); $('#incomeAllAmount').text(income); $('#incomeOpenAmount').text(eqpAvgIncome); $('#incomeAllBerthNum').text(eqpNum); $('#incomeOpenBerthNum').text(eqpNum); } } } sysAjax(opt); }, //查询设备信息 initGeoNumsAjax: function () { var reqs = fun.getQueryParams(); var req = { plNos: reqs.plNos, faultNumTimes: 1,//失败次数大于1次即为异常 beginTime: DateUtils.long2String(reqs.startDate.getTime(), 1), endTime: DateUtils.long2String(reqs.endDate.getTime(), 1), sysCode: sysComm.sysCode }; var easyUIOps = { method: "POST", url: dataUrl.util.statisticsGeoNumsByStatus(), data: JSON.stringify(req), contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (res) { //console.log(res); if (res.code == '8888') { var data = res.data; //console.log("地磁数量统计:",data); console.log(data.normalNum) console.log(data.allNum) if (data.allNum == 0) { var per = 0; } else { var per = ((data.normalNum) / data.allNum * 100).toFixed(0); } var dczxData = [ {value: per, name: '地磁在线', selected: true}, {value: 100 - per, name: '总计',}, ]; fun.drawPie('dczxEcharts', '#1890FF', '地磁在线', data.normalNum, dczxData, '地磁在线'); var dzzxData = [ {value: 0, name: '道闸在线', selected: true}, {value: 100, name: '总计',}, ]; fun.drawPie('dzzxEcharts', '#FACC14', '道闸在线', '0', dzzxData, '道闸在线'); } } }; sysAjax(easyUIOps); }, //查询停车场收入折线图 initMyChartAjax: function (plNos,queryType) { var req = fun.getQueryParams(); if(queryType != undefined && queryType !=null ){ req.queryType = queryType; }else{ req.queryType = 1; } if(plNos != undefined && plNos !=null && plNos.length >0){ req.plNos = plNos; } req.plNos = getPlNosByPlType(req.plNos, 1); req.sysCode = sysComm.sysCode; var opt = { method: "POST", url: dataUrl.util.querySummaryEqpVirtualParkRecordStatisticByDate(), data: JSON.stringify(req), contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (res) { if (res.code == '8888') { fun.lineSyEcharts(res.data,req); } } }; sysAjax(opt); }, //生成汇总表格数据按时间 querySummaryEqpVirtualParkRecordStatisticByPlNoForPage: function () { /** 按时**/ $('#georeceTable').bootstrapTable('destroy').bootstrapTable({ striped: true,//表格显示条纹 rownumbers: true, pagination: true, //启动分页 pageNumber: 1, //当前第几页 pageSize: 10, //每页显示的记录数 pageList: [10, 15], //记录数可选列表 sidePagination: 'server',//表示服务端分页 queryParamsType: 'limit', singleSelect: false, method: 'POST',//请求方法 sortable: true, //是否启用排序 sortOrder: "asc", paginationPreText: '<', paginationNextText: '>', ajax: querySummaryEqpVirtualParkRecordStatisticByPlNoForPage, //自定义ajax加载数据 uniqueId: 'id', columns: [ { field: 'plName', title: ' 车场名称', width: '5%', align: 'left', formatter: fun.incomeOperFormatter }, { field: 'eqpNum', title: ' 泊位数量', width: '5%', align: 'left', sortable: true, formatter: commonObj.replacenull }, { field: 'income', title: ' 应收', width: '8%', align: 'left', sortable: true, formatter: commonObj.moneyFormatter }, { field: 'eqpAvgIncome', title: ' 泊位平均收益', width: '5%', align: 'left', sortable: true, formatter: commonObj.moneyFormatter }, { field: 'parkNum', title: ' 总停车次数', width: '8%', align: 'left', formatter: commonObj.replacenull }, { field: 'freeParkNum', title: ' 免费停车次数', width: '8%', align: 'left', formatter: commonObj.replacenull } ] }); }, //操作显示 incomeOperFormatter: function (value, row, index) { var operStr = '' + (value == null ? '-' : value) + ''; return operStr; }, incomeLookOper: function (element) { $('#popAreaname').text(''); var plName = $(element).attr('plname'); $('#popAreaname').text(plName); var plNo = $(element).attr('plno'); $('#incometable').bootstrapTable('destroy').bootstrapTable({ striped: true,//表格显示条纹 rownumbers: true, pagination: true, //启动分页 pageNumber: 1, //当前第几页 pageSize: 10, //每页显示的记录数 pageList: [10, 15], //记录数可选列表 sidePagination: 'server',//表示服务端分页 queryParamsType: 'limit', queryParams: function (params) { params.plNo = plNo; return params; }, singleSelect: false, method: 'POST',//请求方法 paginationPreText: '<', paginationNextText: '>', ajax: queryEqpVirtualParkRecordStatisticForPage, //自定义ajax加载数据 uniqueId: 'id', columns: [ { field: 'statisticDate', title: ' 周期', width: '5%', align: 'left', formatter: commonObj.timeOneFormatter }, { field: 'eqpNum', title: ' 泊位数量', width: '5%', align: 'left' }, { field: 'income', title: ' 应收', width: '8%', align: 'left', formatter: commonObj.moneyFormatter }, { field: 'eqpAvgIncome', title: ' 泊位平均收益', width: '5%', align: 'left', formatter: commonObj.moneyFormatter }, { field: 'parkNum', title: ' 总停车次数', width: '8%', align: 'left' }, { field: 'freeParkNum', title: ' 免费停车次数', width: '8%', align: 'left' } ] }); $('#income_myModal').modal('show'); }, // ---------------------------------------------图例 drawPie: function (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.45)', fontSize: '14', align: 'middle', verticalAlign: 'middle', }, subtextStyle: { color: '#000', fontSize: '24', align: 'middle', verticalAlign: 'middle', }, left: 'center', top: '40', }, tooltip: { trigger: 'item', show: false, formatter: "{a}
{b}: {c} ({d}%)" }, series: [ { name: seriesName, hoverAnimation: false, legendHoverLink: false, type: 'pie', hoverOffset: 5, selectedOffset: 3, radius: ['78%', '88%'], avoidLabelOverlap: false, label: { normal: { show: false, position: 'left' }, emphasis: { show: false, textStyle: { fontSize: '30', fontweight: 'bold' } } }, labelLine: { normal: { show: false } }, data: seriesData } ] } ); }, lineSyEcharts: function (mapData,req) { var type = fun.queryIncomeType(); var xData = []; var startDate = req.startDate; var endDate = req.endDate; while (true){ if(startDate.getTime() >endDate.getTime()){ break; } xData.push(commonObj.timeOneFormatter(startDate)); startDate.setDate(startDate.getDate()+1); } var seriseData = []; for (var key in mapData) { var seriseItem = { type: 'line' }; seriseItemName = ''; seriseItemData = []; $.each(mapData[key], function (index, item) { if (key == 'all') { seriseItemName = '全部'; } else { seriseItemName = item.plName; } if(type =='all'){ seriseItemData.push(commonObj.moneyFormatter(item.income)); } if(type == 'avg'){ seriseItemData.push(commonObj.moneyFormatter(item.income/item.eqpNum)); } }) seriseItem.name=seriseItemName; seriseItem.data = seriseItemData; seriseData.push(seriseItem); } var chart = echarts.init(document.getElementById('georeceEcharts')); var option = { color: colors, tooltip: { trigger: 'axis' }, legend: { top: '0', right: '24', }, grid: { top: '13%', left: '1%', right: '5%', bottom: '2%', containLabel: true }, xAxis: { type: 'category', boundaryGap: false, data: xData, axisLabel: { //interval: 0, show: true, textStyle: { color: 'rgba(0,0,0,0.5)', fontSize: '12px', fontFamily: '微软雅黑' } }, // splitNumber:10, // minInterval:2, axisTick: { show: false, }, splitLine: { lineStyle: { color: 'rgba(0,0,0,0.1)', } }, axisLine: { show: true, lineStyle: { color: 'rgba(0,0,0,0.1)', // width: 1,//这里是为了突出显示加上的 } }, }, yAxis: { type: 'value', axisLabel: { show: true, textStyle: { color: 'rgba(0,0,0,0.5)', fontSize: '12px', fontFamily: '微软雅黑' } }, axisTick: { show: false, }, splitLine: { lineStyle: { color: 'rgba(0,0,0,0.1)', } }, axisLine: { show: true, lineStyle: { color: 'rgba(0,0,0,0.1)', // width: 1,//这里是为了突出显示加上的 } }, }, series: seriseData }; chart.setOption(option, true); } }; //点击搜索 documentBindFunc.on('click', '#georece-billQueryBtn', function () { //汇总收入新 fun.queryAllIncomeData(); //详细记录表格 fun.querySummaryEqpVirtualParkRecordStatisticByPlNoForPage(); fun.initMyChartAjax(); fun.initGeoNumsAjax(); fun.queryManySelect(); }); //点击详情弹框 documentBindFunc.on('click', '[incomeLookOper]', function () { fun.incomeLookOper(this); }); //点击导出 var InterValObj; //timer变量,控制时间 var count = 8; //间隔函数,1秒执行 var curCount;//当前剩余秒数 function sendMessage() { curCount = count; //设置button效果,开始计时 $("#reportBtn").attr("disabled", "true"); $(".ITD-export-btn").css("width", "138px"); $("#reportBtn").val(curCount + "秒后可再次导出"); InterValObj = window.setInterval(SetRemainTime, 1000); //启动计时器,1秒执行一次 } //timer处理函数 function SetRemainTime() { if (curCount == 0) { window.clearInterval(InterValObj);//停止计时器 $("#reportBtn").removeAttr("disabled");//启用按钮 $(".ITD-export-btn").css("width", "72px"); $("#reportBtn").val("导出"); } else { curCount--; $("#reportBtn").val(curCount + "秒后可再次导出"); } } //导出excle documentBindFunc.on('click', '#reportBtn', function () { //获取table所有行数据 var parkLot = $("#georeceTable").bootstrapTable('getData'); //获取table总条数 var numTotal = $("#georeceTable").bootstrapTable('getOptions').totalRows; //提示 无数据不导出 if (parkLot.length < 1) { $('.ITD-alertmodel-contentmsg').text('无数据可导出!'); $('#ITD-tipsmodel').modal('show'); setTimeout(function () { $('.ITD-alertmodel-contentmsg').text(''); $('#ITD-tipsmodel').modal('hide'); }, 3000); return false; } //超1万条 缩短查询范围 if (numTotal > 10000) { $('.ITD-alertmodel-contentmsg').text('数据量过大,请缩小查询范围!'); $('#ITD-tipsmodel').modal('show'); setTimeout(function () { $('.ITD-alertmodel-contentmsg').text(''); $('#ITD-tipsmodel').modal('hide'); }, 3000); return false; } //执行倒计时函数 sendMessage(); var req = fun.getQueryParams(); var startDate = commonObj.timeFormatter(req.startDate.getTime()); var endDate = commonObj.timeFormatter(req.endDate.getTime()) var url = dataUrl.util.exportEqpVirtualParkRecord(); req.plNos = getPlNosByPlType(req.plNos, 1); var forms = exportIncomeDetailForm(url, startDate, endDate, req.plNos); forms.submit(); }); //泊位军收益 总收入切换 $('#tab-btn-wrap li').on('click', function () { var _index = $(this).index(); $("#incomeindex").val(_index); fun.initMyChartAjax(); $(this).addClass('tabAction').siblings().removeClass('tabAction'); }) $('#parkselectpicker').on('hidden.bs.select', function (e) { var manyPlNos = []; var shopIdsNodes = $('#parkselectpicker option:selected'); shopIdsNodes.each(function () { var plNo = $(this).val(); if (plNo.indexOf(",") != -1) { manyPlNos = JSON.parse($(this).val()); } else { if (manyPlNos.indexOf(plNo) == -1) { manyPlNos.push(plNo); } } }) fun.initMyChartAjax(manyPlNos,2); }); // ---------------------------------------------图例 fun.init(); function queryEqpVirtualParkRecordStatisticForPage(params) { var req = fun.getQueryParams(); var pageNum = (params.data.offset / params.data.limit) + 1; //条件查询 req.baseRequest = { pageNum: pageNum, pageSize: params.data.limit }; req.plNos = [params.data.plNo] var opt = { method: 'post', url: dataUrl.util.queryEqpVirtualParkRecordStatisticForPage(), data: JSON.stringify(req), contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (res) { console.log(res); if (res.code == '8888') { params.success(res.data); } } }; sysAjax(opt); } //停车场服务 function querySummaryEqpVirtualParkRecordStatisticByPlNoForPage(params) { var req = fun.getQueryParams(); var pageNum = (params.data.offset / params.data.limit) + 1; //条件查询 req.baseRequest = { pageNum: pageNum, pageSize: params.data.limit, sortOrder:params.data.order,//排序 sortName:params.data.sort,//排序字段 }; req.queryType = 1; var opt = { method: 'post', url: dataUrl.util.querySummaryEqpVirtualParkRecordStatisticByPlNoForPage(), data: JSON.stringify(req), contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (res) { console.log(res); if (res.code == '8888') { params.success(res.data); } } }; sysAjax(opt); } function exportIncomeDetailForm(url, beginTime, endTime, plNos) { var form = document.createElement("form"); form.style.display = 'none'; form.action = url; form.method = "post"; document.body.appendChild(form); var input = document.createElement("input"); //input.type = "hidden"; input.name = "startDate"; input.value = beginTime; form.appendChild(input); var input2 = document.createElement("input"); input2.name = "endDate"; input2.value = endTime; form.appendChild(input2); var input3 = document.createElement("input"); //input2.type = "hidden"; input3.name = "plNos"; input3.value = plNos; form.appendChild(input3); return form; }; // 日期,在原有日期基础上,增加days天数,默认增加1天 function addDate(date, days) { if (days == undefined || days == '') { days = 1; } date.setDate(date.getDate() + days); var month = date.getMonth() + 1; var day = date.getDate(); return date.getFullYear() + '-' + getFormatDate(month) + '-' + getFormatDate(day); } //计算天数差 function getDayNumber(date1, date2) { //默认格式为"20030303",根据自己需要改格式和方法 var year1 = date1.substr(0, 4); var year2 = date2.substr(0, 4); var month1 = date1.substr(4, 2); var month2 = date2.substr(4, 2); // www.jquerycn.cn var day1 = date1.substr(6, 2); var day2 = date2.substr(6, 2); temp1 = year1 + "/" + month1 + "/" + day1; temp2 = year2 + "/" + month2 + "/" + day2; var dateaa = new Date(temp1); var datebb = new Date(temp2); var date = datebb.getTime() - dateaa.getTime(); var time = Math.floor(date / (1000 * 60 * 60 * 24)); return time; } //计算月数差 function getMonthNumber(date1, date2) { //默认格式为"20030303",根据自己需要改格式和方法 var year1 = date1.substr(0, 4); var year2 = date2.substr(0, 4); var month1 = date1.substr(4, 2); var month2 = date2.substr(4, 2); var len = (year2 - year1) * 12 + (month2 - month1); return len; } // 日期,在原有日期基础上,增加days天数,默认增加1天 function addMonth(date, months) { if (months == undefined || months == '') { months = 1; } date.setMonth(date.getMonth() + months); var month = date.getMonth() + 1; var day = date.getDate(); return date.getFullYear() + '-' + getFormatDate(month) + '-' + getFormatDate(day); } // 日期月份/天的显示,如果是1位数,则在前面加上'0' function getFormatDate(arg) { if (arg == undefined || arg == '') { return ''; } var re = arg + ''; if (re.length < 2) { re = '0' + re; } return re; } function getxSeriesData(data, req, StringBeginTime, StringEndTime, queryType) { var xStringData = []; var seriseDataValue = []; var returnData = { xStringData: xStringData, seriseDataValue: seriseDataValue }; var beginTimeArray = StringBeginTime.split("-"); var endTimeArray = StringEndTime.split("-"); if (queryType == 1) { xStringData.push(StringBeginTime); seriseDataValue.push(0); //按天的页面 var length = getDayNumber(beginTimeArray[0] + beginTimeArray[1] + beginTimeArray[2], endTimeArray[0] + endTimeArray[1] + endTimeArray[2]) + 1 for (var i = 1; i < length; i++) { xStringData.push(addDate(req.beginTime, 1)); seriseDataValue.push(0); } } else if (queryType == 3) { xStringData.push(beginTimeArray[0] + '-' + beginTimeArray[1]); seriseDataValue.push(0); //按月的页面 var length = getMonthNumber(beginTimeArray[0] + beginTimeArray[1] + beginTimeArray[2], endTimeArray[0] + endTimeArray[1] + endTimeArray[2]) + 1 for (var i = 0; i < length; i++) { for (var i = 1; i < length; i++) { var tempDate = new Date(addMonth(req.beginTime, 1).replace(/-/g, "/")); tempDate = tempDate.getFullYear() + '-' + getFormatDate(tempDate.getMonth() + 1); xStringData.push(tempDate); seriseDataValue.push(0); } } } else { var weekArray = getYearWeekByRemote(StringBeginTime, StringEndTime); console.log(weekArray); var beginweek = weekArray[0]; var endweek = weekArray[1]; //按周的页面 // var beginweek = getYearWeek(beginTimeArray[0], beginTimeArray[1], beginTimeArray[2]); // var endweek = getYearWeek(endTimeArray[0], endTimeArray[1], endTimeArray[2]); for (var i = beginweek; i <= endweek; i++) { xStringData.push(i + "周"); seriseDataValue.push(0); } } return returnData; }; function getYearWeekByRemote(beginStr, endStr) { var weekArray = []; var times = [] times.push(beginStr); times.push(endStr); var req = { times: times, sysCode: sysComm.sysCode }; var easyUIOps = { method: "POST", async: false, url: dataUrl.util.timeToWeek(), data: JSON.stringify(req), contentType: 'application/json; charset=utf-8', dataType: 'json', success: function (res) { weekArray = res.data; console.log(weekArray); } }; sysAjax(easyUIOps); return weekArray; } //判断当前日期为当年第几周 var getYearWeek = function (a, b, c) { //date1是当前日期 //date2是当年第一天 //d是当前日期是今年第多少天 //用d + 当前年的第一天的周差距的和在除以7就是本年第几周 var date1 = new Date(a, parseInt(b) - 1, c), date2 = new Date(a, 0, 1), d = Math.round((date1.valueOf() - date2.valueOf()) / 86400000); return Math.ceil((d + ((date2.getDay() + 1) - 1)) / 7); }; //判断当前日期为当月第几周 var getMonthWeek = function (a, b, c) { //a = d = 当前日期 //b = 6 - w = 当前周的还有几天过完(不算今天) //a + b 的和在除以7 就是当天是当前月份的第几周 var date = new Date(a, parseInt(b) - 1, c), w = date.getDay(), d = date.getDate(); return Math.ceil((d + 6 - w) / 7); }; function getPlNosByPlType(plNos, plType) { var newPlNos = []; var data = fn.getParkLot(); for (var index in plNos) { for (var indexTwo in data) { if (plNos[index] == data[indexTwo].code && parseInt(plType) == parseInt(data[indexTwo].type)) { newPlNos.push(plNos[index]); } } } return newPlNos; }