OfflineServiceImpl.java 9.41 KB
package com.bsth.service.excep.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;

import com.bsth.data.BasicData;
import com.bsth.entity.excep.Offline;
import com.bsth.service.excep.OfflineService;
import com.bsth.util.EchartConver;
import com.bsth.util.PageHelper;
import com.bsth.util.PageObject;
import com.bsth.util.db.DBUtils_MS;
import com.github.abel533.echarts.Option;
import com.google.gson.Gson;

@Service
public class OfflineServiceImpl implements OfflineService {

 //	@Override
	static List<Offline> findAll(Map<String, Object> map) {
		// TODO Auto-generated method stub
		
		//查询条件
		
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		int page=Integer.parseInt(map.get("page").toString());
		List<Offline> list=new ArrayList<Offline>();
		/*
		String sql="SELECT * FROM (SELECT A.*,ROWNUM R FROM (  "
				+ "select * from bsth_c_offline) A "
				+ "WHERE ROWNUM <= ? ) B WHERE R >?";*/
		String sql="select * from bsth_c_offline where 1=1 ";
		Object line=map.get("line");
		Object nbbm=map.get("nbbm");
		Object updown=map.get("updown");
		

		if(line!=null){
			 if(line.toString()!="")
				 sql +=" and line="+line;
		}
		
		if(nbbm!=null){
			if(nbbm.toString()!="")
			sql +=" and vehicle like '%"+nbbm+"%'";
		}
		
		if(updown!=null){
			if(updown.toString() !="")
			sql +="and up_down ="+updown;
		}
		
		sql +=" order by id limit ?,?";

		try {
			conn = DBUtils_MS.getConnection();
			ps = conn.prepareStatement(sql);
			ps.setInt(1, page*10); // O-最大条数  -- M-起始条数
			ps.setInt(2, 10); // O-最小条数 -- M-显示条数
			rs = ps.executeQuery();
			list = resultSet2Set(rs);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			DBUtils_MS.close(rs, ps, conn);
		}
		
		return list;
	}

	/**
	 * 数据转换
	 */
//	@Override
	static List<Offline> resultSet2Set(ResultSet rs) throws SQLException{
		// TODO Auto-generated method stub
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		List<Offline> list=new ArrayList<Offline>();
		Offline offline;
		while(rs.next()){
			offline=new Offline();
			offline.setId(Integer.valueOf(rs.getObject("id").toString()));
			offline.setLat(Float.valueOf(rs.getObject("lat").toString()));
			offline.setLine(Integer.valueOf(rs.getObject("line").toString()));
			//run 时注解
			offline.setLineName(BasicData.lineCode2NameMap.get(offline.getLine().toString()));
			offline.setLon(Float.valueOf(rs.getObject("lon").toString()));
			offline.setTimestamp(Long.valueOf(rs.getObject("timestamp").toString()));
			offline.setTimestampDate(sdf.format(new Date(offline.getTimestamp())));
			offline.setUpDown(Integer.valueOf(rs.getObject("up_down").toString()));
			offline.setVehicle(rs.getObject("vehicle").toString());
			list.add(offline);
		}
		return list;
	}
	
	
	@SuppressWarnings("unchecked")
	public PageObject <Offline> Pagequery(Map<String, Object> map) {
		// TODO Auto-generated method stub
		String sql="select count(*) record  from bsth_c_offline where 1=1 ";
		
		Object line=map.get("line");
		Object nbbm=map.get("nbbm");
		Object updown=map.get("updown");
		
		if(line!=null){
			 if(line.toString()!="")
				 sql +=" and line="+line;
		}
		
		if(nbbm!=null){
			if(nbbm.toString()!="")
			sql +=" and vehicle like '%"+nbbm+"%'";
		}
		
		if(updown!=null){
			if(updown.toString() !="")
			sql +="and up_down ="+updown;
		}
		
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		int totalData = 0;

		try {
			conn = DBUtils_MS.getConnection();
			ps = conn.prepareStatement(sql);
			rs = ps.executeQuery();
			 if(rs.next()){
				 totalData=rs.getInt("record");
			 }		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			DBUtils_MS.close(rs, ps, conn);
		}
		PageHelper pageHelper = new PageHelper(totalData, map);
//		List<T> list = this.baseDao.queryByObject(pageHelper.getMap());
		List<Offline> list=findAll(pageHelper.getMap());
		PageObject<Offline> pageObject = pageHelper.getPageObject();
		pageObject.setDataList(list);
		return pageObject;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<String, Object> map=new HashMap<String,Object>();
		map.put("pageData","20");
		map.put("curPage", "1");
				String sql="select count(*) record  from bsth_c_offline";
				Connection conn = null;
				PreparedStatement ps = null;
				ResultSet rs = null;
				int totalData = 0;

				try {
					conn = DBUtils_MS.getConnection();
					ps = conn.prepareStatement(sql);
					rs = ps.executeQuery();
					 if(rs.next()){
						 totalData=rs.getInt("record");
					 }		
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally {
					DBUtils_MS.close(rs, ps, conn);
				}
				PageHelper pageHelper = new PageHelper(totalData, map);
//				List<T> list = this.baseDao.queryByObject(pageHelper.getMap());
				List<Offline> list=findAll(pageHelper.getMap());
				PageObject<Offline> pageObject = pageHelper.getPageObject();
				pageObject.setDataList(list);
		System.out.println("");
	}

	@Override
	public Map<String, Object> getReport(Map<String, Object> map) {
		// TODO Auto-generated method stub
		String chartStr = "";
		Map<String, Object> mapValue = new HashMap<String, Object>();
		try {
			String xAxisName = map.get("xAxisName").toString();
			String legendName = map.get("legendName").toString();
			String xAxisItem = "";
			String xAxisOrderBy = "";
			String legendItem = "";
			String legendOrderBy = "";
			if(xAxisName!=null){
				String [] xaxis = xAxisName.split(":");
				if(xaxis.length>1 && xaxis[1].toLowerCase().contains("date")){					
					//本来还要判断下日期格式是否标准
					xAxisItem = "to_char("+xaxis[0]+",'"+xaxis[2]+"') ";
					xAxisOrderBy = (xaxis.length>3?xaxis[3]:"");
				}else{
					xAxisItem = xaxis[0];
				}
			}
			if(legendName!=null){
				String [] legend = legendName.split(":");
				if(legend.length>1 && legend[1].toLowerCase().contains("date")){					
					//本来还要判断下日期格式是否标准					
					legendItem = "to_char("+legend[0]+",'"+legend[2]+"') ";
					legendOrderBy = (legend[3].length()>3?legend[3]:"");
				}else{
					legendItem = legend[0];
				}
			}			
			map.put("xAxisItem", xAxisItem);
			map.put("xAxisOrderBy", xAxisOrderBy);
			map.put("legendItem", legendItem);
			map.put("legendOrderBy", legendOrderBy);
			List dataList = new ArrayList();
			dataList =getReportList(map);
			EchartConver echart = new EchartConver(map);
			Option option = echart.getOption(dataList);
			Gson gson = new Gson();
			chartStr = gson.toJsonTree(option).toString();
			mapValue.put("dataList", dataList);
			mapValue.put("option", chartStr);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return mapValue;
	}
	
	static List getReportList(Map<String, Object> map) {
		List dataList = new ArrayList();
		String times="";
		Object dataTime=map.get("dataTime");
		Object line=map.get("line");
		String addSql="";
		if(line !=null){
			if(line.toString()!=""){
				addSql =" and line =" +line;
			}
		}
		if(dataTime!=null){
			times=dataTime.toString();
		}
		if(times.equals("")){
			SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
			times=sdf.format(new Date());
		}
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String times1=times+" 00:00:01";
		String times2=times+" 23:59:59";
		
		Connection conn = null;	
		PreparedStatement ps = null;
		ResultSet rs = null;
	try {
		Long t1=simpleDateFormat.parse(times1).getTime();
		Long t2=simpleDateFormat.parse(times2).getTime();
		String sql="SELECT up_down xAxis , line legend,count(*) series"+
				 " FROM  bsth_c_offline "+
				"where timestamp>? and timestamp<? "+addSql+" group by xAxis ,legend";
		conn = DBUtils_MS.getConnection();
		ps = conn.prepareStatement(sql);
		ps.setLong(1, t1);
		ps.setLong(2, t2);
		rs = ps.executeQuery();
		while(rs.next()){
			Map<String, Object> newMap=new HashMap<String,Object>();
			if(rs.getObject("xAxis").toString().equals("0"))
				newMap.put("xAxis", "上行");
			else if(rs.getObject("xAxis").toString().equals("1"))
				newMap.put("xAxis", "下行");
			else
				newMap.put("xAxis", "无效");
			
			if(BasicData.lineCode2NameMap.get(rs.getObject("legend").toString())!=null && BasicData.lineCode2NameMap.get(rs.getObject("legend").toString())!="" )
				newMap.put("legend", BasicData.lineCode2NameMap.get(rs.getObject("legend").toString()));
			else
				newMap.put("legend", "编码"+rs.getObject("legend").toString());
			
			
			
			newMap.put("series", Integer.parseInt(rs.getObject("series").toString()));
			dataList.add(newMap);
 		}
		
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}catch (ParseException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}finally {
		DBUtils_MS.close(rs, ps, conn);
	}
	
		return dataList;
	}

}