package cn.com.usky.iot.data.service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import cn.com.usky.iot.admin.dao.YtiotTAdminDao;
import cn.com.usky.iot.admin.dao.YtiotVUserCompanyDao;
import cn.com.usky.iot.alarm.dao.YtiotVAlarmDao;
import cn.com.usky.iot.company.dao.YtiotVCompanyDao;
import cn.com.usky.iot.data.dao.YtiotVDataDao;
import cn.com.usky.iot.entity.YtiotTAdmin;
import cn.com.usky.iot.entity.YtiotTArea;
import cn.com.usky.iot.entity.YtiotVCompany;
import cn.com.usky.iot.entity.YtiotVCompanyId;
import cn.com.usky.iot.entity.YtiotVHj;
import cn.com.usky.iot.entity.YtiotVHjId;
import cn.com.usky.iot.entity.YtiotVRtu;
import cn.com.usky.iot.entity.YtiotVRtuId;
import cn.com.usky.iot.entity.YtiotVSj;
import cn.com.usky.iot.entity.YtiotVSjId;
import cn.com.usky.iot.entity.YtiotVSync;
import cn.com.usky.iot.entity.YtiotVSyncData;
import cn.com.usky.iot.entity.YtiotVSyncDataId;
import cn.com.usky.iot.entity.YtiotVSyncId;
import cn.com.usky.iot.entity.YtiotVSyncStatus;
import cn.com.usky.iot.entity.YtiotVSyncStatusId;
import cn.com.usky.iot.entity.YtiotVUsercompany;
import cn.com.usky.iot.entity.YtiotVUsercompanyId;
import cn.com.usky.utils.MD5Util;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import java.util.Calendar;

public class YtiotVDataServiceImpl implements YtiotVDataService {
	private YtiotVDataDao ytiotVDataDao;
	private YtiotVCompanyDao ytiotVCompanyDao; 
	private YtiotVUserCompanyDao ytiotVUserCompanyDao;
	private YtiotVAlarmDao ytiotVAlarmDao;
	private YtiotTAdminDao ytiotTAdminDao;
	public YtiotVDataDao getYtiotVDataDao() {
		return ytiotVDataDao;
	}

	public void setYtiotVDataDao(YtiotVDataDao ytiotVDataDao) {
		this.ytiotVDataDao = ytiotVDataDao;
	}

	public YtiotVCompanyDao getYtiotVCompanyDao() {
		return ytiotVCompanyDao;
	}

	public void setYtiotVCompanyDao(YtiotVCompanyDao ytiotVCompanyDao) {
		this.ytiotVCompanyDao = ytiotVCompanyDao;
	}

	public YtiotVUserCompanyDao getYtiotVUserCompanyDao() {
		return ytiotVUserCompanyDao;
	}

	public void setYtiotVUserCompanyDao(YtiotVUserCompanyDao ytiotVUserCompanyDao) {
		this.ytiotVUserCompanyDao = ytiotVUserCompanyDao;
	}

	public YtiotTAdminDao getYtiotTAdminDao() {
		return ytiotTAdminDao;
	}

	public void setYtiotTAdminDao(YtiotTAdminDao ytiotTAdminDao) {
		this.ytiotTAdminDao = ytiotTAdminDao;
	}

	public YtiotVAlarmDao getYtiotVAlarmDao() {
		return ytiotVAlarmDao;
	}

	public void setYtiotVAlarmDao(YtiotVAlarmDao ytiotVAlarmDao) {
		this.ytiotVAlarmDao = ytiotVAlarmDao;
	}

	public boolean chk_string_param(String param) {
		if(param==null)
			return true;
		if(param.indexOf("=")>=0)
			return false;
		if(param.indexOf("\'")>=0)
			return false;
		if(param.indexOf("\"")>=0)
			return false;
		return true;
	}
	public String chkhw(String hqlwhere){
		if(hqlwhere==null)
			return " where ";
		else
			return hqlwhere+" and ";
	}
	public String fieldname(String name) {
		if(name.equals("company_code"))
			return "companyCode";
		if(name.equals("device_id"))
			return "deviceId";
		if(name.equals("device_name"))
			return "deviceName";
		if(name.equals("install_time"))
			return "installTime";
		if(name.equals("sync_id"))
			return "syncId";
		if(name.equals("table_name"))
			return "tableName";
		if(name.equals("data_time"))
			return "dataTime";
		if(name.equals("native_id"))
			return "nativeId";
		if(name.equals("point_code"))
			return "pointCode";
		if(name.equals("point_data"))
			return "pointData";
		if(name.equals("owner_name"))
			return "ownerName";
		if(name.equals("owner_id"))
			return "ownerId";
		return name;
	}
	
	@Override
	public String getSyncPointVList(String queryJson, String page, String start, String limit, String sort)
			throws Exception {
		// TODO Auto-generated method stub
		String company_code = null;
		String company_code_list = null;
		String device_id = null;
		String device_id_list = null;
		String device_name = null;
		String dwtype = null;
		String dwtype_list = null;
		String id = null;
		String id_list = null;
		String install_time_start = null;
		String install_time_end = null;
		String Company_Code_List = null;
		String V_LOGINNAME = null;
		String unitinfo = null;
		String hqlwhere = null;
		String order = null;
		String dir = null;
		String Start = null;
		String Limit = null;
		String Page = null;
		String order_str = null;
		JSONObject q_json = null;
		JSONArray Sort = null;
		JSONArray jSONArray = new JSONArray();
		JSONObject json = new JSONObject();
		json.put("action", "getSyncPointVList");
		if(queryJson!=null) {
			q_json = JSONObject.fromObject(queryJson);
			if(q_json.has("company_code")) {
				if(q_json.getJSONObject("company_code").isArray()) {
					JSONArray j_tmp = q_json.getJSONArray("company_code");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							company_code_list = j_tmp.getString(i);
						else
							company_code_list += ","+j_tmp.getString(i);
					}
				}else
					company_code = q_json.getString("company_code");
			}
			if(q_json.has("device_id")) {
				if(q_json.getJSONObject("device_id").isArray()) {
					JSONArray j_tmp = q_json.getJSONArray("device_id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							device_id_list = j_tmp.getString(i);
						else
							device_id_list += ","+j_tmp.getString(i);
					}
				}else
					device_id = q_json.getString("device_id");
			}
			device_name = q_json.has("device_name")?q_json.getString("device_name"):null;
			if(q_json.has("dwtype")) {
				if(q_json.getJSONObject("dwtype").isArray()) {
					JSONArray j_tmp = q_json.getJSONArray("dwtype");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							dwtype_list = j_tmp.getString(i);
						else
							dwtype_list += ","+j_tmp.getString(i);
					}
				}else
					dwtype = q_json.getString("dwtype");
			}
			if(q_json.has("id")) {
				if(q_json.getJSONObject("id").isArray()) {
					JSONArray j_tmp = q_json.getJSONArray("id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							id_list = j_tmp.getString(i);
						else
							id_list += ","+j_tmp.getString(i);
					}
				}else
					id = q_json.getString("id");
			}
			V_LOGINNAME = q_json.has("V_LOGINNAME")?q_json.getString("V_LOGINNAME"):null;
			unitinfo = q_json.has("unitinfo")?q_json.getString("unitinfo"):null;
			install_time_start = q_json.has("install_time_start")?q_json.getString("install_time_start"):null;
			install_time_end = q_json.has("install_time_end")?q_json.getString("install_time_end"):null;
		}
		if(sort!=null) {
			Sort = JSONArray.fromObject(sort);
			if((Sort.isArray())&&(Sort.size()>0)) {
				JSONObject s_json = Sort.getJSONObject(0);
				order = s_json.has("property")?s_json.getString("property"):order;
				dir = s_json.has("direction")?s_json.getString("direction"):dir;
			}
			json.put("sort", sort);
		}
		Start = start;
		Limit = limit;
		Page = page;
		if(V_LOGINNAME!=null) {
			String where = " where u.id.agentid='"+V_LOGINNAME+"' ";
			List list = ytiotVUserCompanyDao.query(where, null, null, null, null);
			if(list.size()>0) {
				for(int i=0;i<list.size();i++) {
					YtiotVUsercompany o = (YtiotVUsercompany)list.get(i);
					YtiotVUsercompanyId oid = o.getId();
					if(i==0)
						Company_Code_List = oid.getOwnerCode();
					else
						Company_Code_List += ","+oid.getOwnerCode();
				}
			}
		}
		
		if(Company_Code_List!=null)
			hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+Company_Code_List+") ";
		else {
			if(company_code!=null)
				hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" like '%"+company_code+"%' ";
			if(company_code_list!=null)
				hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+company_code_list+") ";
		}
		if(device_id!=null)
			hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("device_id")+" like '%"+device_id+"%' ";
		if(device_id_list!=null)
			hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("device_id")+" in ("+device_id_list+") ";
		if(device_name!=null)
			hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("device_name")+" like '%"+device_name+"%' ";
		if(dwtype!=null)
			hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("dwtype")+" = "+dwtype+" ";
		if(dwtype_list!=null)
			hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("dwtype")+" in ("+dwtype_list+") ";
		if(id!=null)
			hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("id")+" = "+id+" ";
		if(id_list!=null)
			hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("id")+" in ("+id_list+") ";
		if(install_time_start!=null)
			hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("install_time")+" >='"+install_time_start+"' ";
		if(install_time_end!=null)
			hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("install_time")+" <='"+install_time_end+"' ";
		if(unitinfo!=null)
			hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("unitinfo")+" like '%"+unitinfo+"%' ";
		int totalCount = ytiotVDataDao.getSyncPointCount(hqlwhere);
		json.put("totalCount", totalCount);
		if(Start!=null){
			if(Integer.parseInt(Start)>totalCount){
				Start = "0";
				Page = "0";
			}else if(page==null)
				Page="0";
		}else{
			Start = "0";
			Page = "0";
		}
		json.put("page", Page);
		json.put("start", Start);
		json.put("limit", Limit);
		if(totalCount>0) {
			List<?> list = ytiotVDataDao.SyncPointQuery(hqlwhere, order_str, dir, Start, Limit);
			if(list.size()>0) {
				SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				for(int i=0;i<list.size();i++) {
					YtiotVSync o = (YtiotVSync)list.get(i);
					YtiotVSyncId oid = o.getId();
					@SuppressWarnings("rawtypes")
					Map<String, Comparable> map = new HashMap<String, Comparable>();
					map.put("company_code", oid.getCompanyCode());
					map.put("device_id", oid.getDeviceId());
					map.put("device_name", oid.getDeviceName());
					map.put("dwtype", oid.getDwtype());
					map.put("id", oid.getId());
					map.put("install_time", df.format(oid.getInstallTime()));
					map.put("rtmp", oid.getRtmp());
					map.put("sync_id", oid.getSyncId());
					map.put("tablename", oid.getTableName());
					map.put("unitinfo", oid.getUnitinfo());
					JSONObject jSONObject = JSONObject.fromObject(map);
					jSONArray.add(jSONObject);
				}
				json.put("RESULT", jSONArray);
			}
		}
		return json.toString();
	}
	@Override
	public String getSyncDataList(String queryJson)
			throws Exception {
		// TODO Auto-generated method stub
		String company_code = null;
		String company_code_list = null;
		String device_id = null;
		String device_id_list = null;
		String dwtype = null;
		String dwtype_list = null;
		String point_code = null;
		String point_code_list = null;
		String id = null;
		String id_list = null;
		String company = null;
		String data_time_start = null;
		String data_time_end = null;
		String name = null;
		String Company_Code_List = null;
		String V_LOGINNAME = null;
		String hqlwhere = null;
		String order = null;
		String dir = null;
		String Start = null;
		String Limit = null;
		String Page = null;
		String order_str = null;
		JSONObject q_json = null;
		JSONArray Sort = null;
		JSONArray jSONArray = new JSONArray();
		JSONObject json = new JSONObject();
		json.put("action", "getSyncDataVList");
		if(queryJson!=null) {
			q_json = JSONObject.fromObject(queryJson);
			if(q_json.has("company_code")) {
				if((q_json.optJSONObject("company_code")!=null)&&(q_json.optJSONObject("company_code").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("company_code");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							company_code_list = j_tmp.getString(i);
						else
							company_code_list += ","+j_tmp.getString(i);
					}
				}else
					company_code = q_json.getString("company_code");
			}
			if(q_json.has("device_id")) {
				if((q_json.optJSONObject("device_id")!=null)&&(q_json.optJSONObject("device_id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("device_id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							device_id_list = j_tmp.getString(i);
						else
							device_id_list += ","+j_tmp.getString(i);
					}
				}else
					device_id = q_json.getString("device_id");
			}
			if(q_json.has("dwtype")) {
				if((q_json.optJSONObject("dwtype")!=null)&&(q_json.optJSONObject("dwtype").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("dwtype");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							dwtype_list = j_tmp.getString(i);
						else
							dwtype_list += ","+j_tmp.getString(i);
					}
				}else
					dwtype = q_json.getString("dwtype");
			}
			if(q_json.has("point_code")) {
				if((q_json.optJSONObject("point_code")!=null)&&(q_json.optJSONObject("point_code").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("point_code");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							point_code_list = j_tmp.getString(i);
						else
							point_code_list += ","+j_tmp.getString(i);
					}
				}else
					point_code = q_json.getString("point_code");
			}
			if(q_json.has("id")) {
				if((q_json.optJSONObject("id")!=null)&&(q_json.optJSONObject("id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							id_list = j_tmp.getString(i);
						else
							id_list += ","+j_tmp.getString(i);
					}
				}else
					id = q_json.getString("id");
			}
			company = q_json.has("company")?q_json.getString("company"):null;
			data_time_start = q_json.has("data_time_start")?q_json.getString("data_time_start"):null;
			data_time_end = q_json.has("data_time_end")?q_json.getString("data_time_end"):null;
			name = q_json.has("name")?q_json.getString("name"):null;
			V_LOGINNAME = q_json.has("V_LOGINNAME")?q_json.getString("V_LOGINNAME"):null;
		}
//		if(sort!=null) {
//			Sort = JSONArray.fromObject(sort);
//			if((Sort.isArray())&&(Sort.size()>0)) {
//				JSONObject s_json = Sort.getJSONObject(0);
//				order = s_json.has("property")?s_json.getString("property"):order;
//				dir = s_json.has("direction")?s_json.getString("direction"):dir;
//			}
//			json.put("sort", sort);
//		}
//		Start = start;
//		Limit = limit;
//		Page = page;
		if((V_LOGINNAME!=null)&&(company_code==null)&&(Company_Code_List==null)) {
			String where = " where u.id.agentid='"+V_LOGINNAME+"' ";
			List list = ytiotVUserCompanyDao.query(where, null, null, null, null);
			if(list.size()>0) {
				for(int i=0;i<list.size();i++) {
					YtiotVUsercompany o = (YtiotVUsercompany)list.get(i);
					YtiotVUsercompanyId oid = o.getId();
					if(i==0)
						Company_Code_List = oid.getOwnerCode();
					else
						Company_Code_List += ","+oid.getOwnerCode();
				}
			}
		}
		if(device_id!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("device_id")+" = '"+device_id+"' ";
		else {
			if(company!=null) {
				hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("owner_name")+" like '%"+company+"%' ";
			}
			if(Company_Code_List!=null)
				hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+Company_Code_List+") ";
			else {
				if(company_code!=null)
					hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" like '%"+company_code+"%' ";
				if(company_code_list!=null)
					hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+company_code_list+") ";
			}			
		}
		if(device_id_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("device_id")+" in ("+device_id+") ";
		if(dwtype!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("dwtype")+" = "+dwtype+" ";
		if(dwtype_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("dwtype")+" in ("+dwtype_list+") ";
		if(point_code!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("point_code")+" in ("+point_code+") ";
		if(point_code_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("point_code")+" in ("+point_code_list+") ";
		if(id!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("id")+" = "+id+" ";
		if(id_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("id")+" in ("+id_list+") ";
		if(data_time_start!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("data_time")+" >= '"+data_time_start+"' ";
		if(data_time_end!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("data_time")+" <= '"+data_time_end+"' ";
		if(name!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("name")+" like '%"+name+"%' ";
		int totalCount = ytiotVDataDao.getSyncDataCount(hqlwhere);
		json.put("totalCount", totalCount);
		if(order!=null) {
			order_str = " order by "+fieldname(order)+" ";
			
		} else {
			order_str = " order by data_time ";
			dir = "DESC";
		}
		if(totalCount>0) {
			List<?> list = ytiotVDataDao.SyncDataQuery(hqlwhere, order_str, dir, Start, Limit);
			if(list.size()>0) {
				SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				for(int i=0;i<list.size();i++) {
					YtiotVSyncData o = (YtiotVSyncData)list.get(i);
					YtiotVSyncDataId oid = o.getId();
					@SuppressWarnings("rawtypes")
					Map<String, Comparable> map = new HashMap<String, Comparable>();
					map.put("orderIdx", Integer.parseInt(Start)+i+1);
					map.put("company", oid.getCompany());
					map.put("company_code", oid.getCompanyCode());
					map.put("content", oid.getContent());
					map.put("data_time", df.format(oid.getDataTime()));
					map.put("device_id", oid.getDeviceId());
					map.put("dwtype", oid.getDwtype());
					map.put("id", oid.getId());
					map.put("name", oid.getName());
					map.put("native_id", oid.getNativeId());
					map.put("point_code", oid.getPointCode());
					map.put("point_data", oid.getPointData());
					JSONObject jSONObject = JSONObject.fromObject(map);
					jSONArray.add(jSONObject);
				}
				json.put("RESULT", jSONArray);
			}
			
		}
		return json.toString();
	}

	@Override
	public String getSyncDataVList(String queryJson, String page, String start, String limit, String sort)
			throws Exception {
		// TODO Auto-generated method stub
		String company_code = null;
		String company_code_list = null;
		String device_id = null;
		String device_id_list = null;
		String dwtype = null;
		String dwtype_list = null;
		String point_code = null;
		String point_code_list = null;
		String id = null;
		String id_list = null;
		String company = null;
		String data_time_start = null;
		String data_time_end = null;
		String name = null;
		String Company_Code_List = null;
		String V_LOGINNAME = null;
		String hqlwhere = null;
		String order = null;
		String dir = null;
		String Start = null;
		String Limit = null;
		String Page = null;
		String order_str = null;
		JSONObject q_json = null;
		JSONArray Sort = null;
		JSONArray jSONArray = new JSONArray();
		JSONObject json = new JSONObject();
		json.put("action", "getSyncDataVList");
		if(queryJson!=null) {
			q_json = JSONObject.fromObject(queryJson);
			if(q_json.has("company_code")) {
				if((q_json.optJSONObject("company_code")!=null)&&(q_json.optJSONObject("company_code").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("company_code");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							company_code_list = j_tmp.getString(i);
						else
							company_code_list += ","+j_tmp.getString(i);
					}
				}else
					company_code = q_json.getString("company_code");
			}
			if(q_json.has("device_id")) {
				if((q_json.optJSONObject("device_id")!=null)&&(q_json.optJSONObject("device_id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("device_id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							device_id_list = j_tmp.getString(i);
						else
							device_id_list += ","+j_tmp.getString(i);
					}
				}else
					device_id = q_json.getString("device_id");
			}
			if(q_json.has("dwtype")) {
				if((q_json.optJSONObject("dwtype")!=null)&&(q_json.optJSONObject("dwtype").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("dwtype");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							dwtype_list = j_tmp.getString(i);
						else
							dwtype_list += ","+j_tmp.getString(i);
					}
				}else
					dwtype = q_json.getString("dwtype");
			}
			if(q_json.has("point_code")) {
				if((q_json.optJSONObject("point_code")!=null)&&(q_json.optJSONObject("point_code").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("point_code");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							point_code_list = j_tmp.getString(i);
						else
							point_code_list += ","+j_tmp.getString(i);
					}
				}else
					point_code = q_json.getString("point_code");
			}
			if(q_json.has("id")) {
				if((q_json.optJSONObject("id")!=null)&&(q_json.optJSONObject("id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							id_list = j_tmp.getString(i);
						else
							id_list += ","+j_tmp.getString(i);
					}
				}else
					id = q_json.getString("id");
			}
			company = q_json.has("company")?q_json.getString("company"):null;
			data_time_start = q_json.has("data_time_start")?q_json.getString("data_time_start"):null;
			data_time_end = q_json.has("data_time_end")?q_json.getString("data_time_end"):null;
			name = q_json.has("name")?q_json.getString("name"):null;
			V_LOGINNAME = q_json.has("V_LOGINNAME")?q_json.getString("V_LOGINNAME"):null;
		}
		if(sort!=null) {
			Sort = JSONArray.fromObject(sort);
			if((Sort.isArray())&&(Sort.size()>0)) {
				JSONObject s_json = Sort.getJSONObject(0);
				order = s_json.has("property")?s_json.getString("property"):order;
				dir = s_json.has("direction")?s_json.getString("direction"):dir;
			}
			json.put("sort", sort);
		}
		Start = start;
		Limit = limit;
		Page = page;
		if((V_LOGINNAME!=null)&&(company_code==null)&&(Company_Code_List==null)) {
			String where = " where u.id.agentid='"+V_LOGINNAME+"' ";
			List list = ytiotVUserCompanyDao.query(where, null, null, null, null);
			if(list.size()>0) {
				for(int i=0;i<list.size();i++) {
					YtiotVUsercompany o = (YtiotVUsercompany)list.get(i);
					YtiotVUsercompanyId oid = o.getId();
					if(i==0)
						Company_Code_List = oid.getOwnerCode();
					else
						Company_Code_List += ","+oid.getOwnerCode();
				}
			}
		}
		if(device_id!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("device_id")+" = '"+device_id+"' ";
		else {
			if(company!=null) {
				hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("owner_name")+" like '%"+company+"%' ";
			}
			if(Company_Code_List!=null)
				hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+Company_Code_List+") ";
			else {
				if(company_code!=null)
					hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" like '%"+company_code+"%' ";
				if(company_code_list!=null)
					hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+company_code_list+") ";
			}			
		}
		if(device_id_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("device_id")+" in ("+device_id+") ";
		if(dwtype!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("dwtype")+" = "+dwtype+" ";
		if(dwtype_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("dwtype")+" in ("+dwtype_list+") ";
		if(point_code!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("point_code")+" in ("+point_code+") ";
		if(point_code_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("point_code")+" in ("+point_code_list+") ";
		if(id!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("id")+" = "+id+" ";
		if(id_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("id")+" in ("+id_list+") ";
		if(data_time_start!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("data_time")+" >= '"+data_time_start+"' ";
		if(data_time_end!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("data_time")+" <= '"+data_time_end+"' ";
		if(name!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("name")+" like '%"+name+"%' ";
		int totalCount = ytiotVDataDao.getSyncDataCount(hqlwhere);
		json.put("totalCount", totalCount);
		if(Start!=null){
			if(Integer.parseInt(Start)>totalCount){
				Start = "0";
				Page = "0";
			}else if(page==null)
				Page="0";
		}else{
			Start = "0";
			Page = "0";
		}
		json.put("page", Page);
		json.put("start", Start);
		json.put("limit", Limit);
		if(order!=null) {
			order_str = " order by "+fieldname(order)+" ";
			
		} else {
			order_str = " order by data_time ";
			dir = "DESC";
		}
		if(totalCount>0) {
			List<?> list = ytiotVDataDao.SyncDataQuery(hqlwhere, order_str, dir, Start, Limit);
			if(list.size()>0) {
				SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				for(int i=0;i<list.size();i++) {
					YtiotVSyncData o = (YtiotVSyncData)list.get(i);
					YtiotVSyncDataId oid = o.getId();
					@SuppressWarnings("rawtypes")
					Map<String, Comparable> map = new HashMap<String, Comparable>();
					map.put("company", oid.getCompany());
					map.put("company_code", oid.getCompanyCode());
					map.put("content", oid.getContent());
					map.put("data_time", df.format(oid.getDataTime()));
					map.put("device_id", oid.getDeviceId());
					map.put("dwtype", oid.getDwtype());
					map.put("id", oid.getId());
					map.put("name", oid.getName());
					map.put("native_id", oid.getNativeId());
					map.put("point_code", oid.getPointCode());
					map.put("point_data", oid.getPointData());
					JSONObject jSONObject = JSONObject.fromObject(map);
					jSONArray.add(jSONObject);
				}
				json.put("RESULT", jSONArray);
			}
			
		}
		return json.toString();
	}
	@Override
	public String getSyncDataQList(String queryJson, String page, String start, String limit, String sort)
			throws Exception {
		// TODO Auto-generated method stub
		String company_code = null;
		String company_code_list = null;
		String device_id = null;
		String device_id_list = null;
		String dwtype = null;
		String dwtype_list = null;
		String point_code = null;
		String point_code_list = null;
		String id = null;
		String id_list = null;
		String company = null;
		String data_time_start = null;
		String data_time_end = null;
		String name = null;
		String Company_Code_List = null;
		String V_LOGINNAME = null;
		String hqlwhere = null;
		String order = null;
		String dir = null;
		String Start = null;
		String Limit = null;
		String Page = null;
		String order_str = null;
		JSONObject q_json = null;
		JSONArray Sort = null;
		JSONArray jSONArray = new JSONArray();
		JSONObject json = new JSONObject();
		json.put("action", "getSyncDataVList");
		if(queryJson!=null) {
			q_json = JSONObject.fromObject(queryJson);
			if(q_json.has("company_code")) {
				if((q_json.optJSONObject("company_code")!=null)&&(q_json.optJSONObject("company_code").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("company_code");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							company_code_list = j_tmp.getString(i);
						else
							company_code_list += ","+j_tmp.getString(i);
					}
				}else
					company_code = q_json.getString("company_code");
			}
			if(q_json.has("device_id")) {
				if((q_json.optJSONObject("device_id")!=null)&&(q_json.optJSONObject("device_id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("device_id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							device_id_list = j_tmp.getString(i);
						else
							device_id_list += ","+j_tmp.getString(i);
					}
				}else
					device_id = q_json.getString("device_id");
			}
			if(dwtype!=null) {
				if((dwtype.equals("2"))||(dwtype.equals("4"))||(dwtype.equals("5")))
				{
					dwtype_list = "2,4,5";
					dwtype=null;
				}
//				for(int i=0;i<2;i++) {
//					if(i==0)
//						dwtype_list = "2";
//					else
//						dwtype_list += ","+"5";
//				}
			}
			if(q_json.has("point_code")) {
				if((q_json.optJSONObject("point_code")!=null)&&(q_json.optJSONObject("point_code").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("point_code");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							point_code_list = j_tmp.getString(i);
						else
							point_code_list += ","+j_tmp.getString(i);
					}
				}else
					point_code = q_json.getString("point_code");
			}
			if(q_json.has("id")) {
				if((q_json.optJSONObject("id")!=null)&&(q_json.optJSONObject("id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							id_list = j_tmp.getString(i);
						else
							id_list += ","+j_tmp.getString(i);
					}
				}else
					id = q_json.getString("id");
			}
			company = q_json.has("company")?q_json.getString("company"):null;
			data_time_start = q_json.has("data_time_start")?q_json.getString("data_time_start"):null;
			data_time_end = q_json.has("data_time_end")?q_json.getString("data_time_end"):null;
			name = q_json.has("name")?q_json.getString("name"):null;
			V_LOGINNAME = q_json.has("V_LOGINNAME")?q_json.getString("V_LOGINNAME"):null;
		}
		if(sort!=null) {
			Sort = JSONArray.fromObject(sort);
			if((Sort.isArray())&&(Sort.size()>0)) {
				JSONObject s_json = Sort.getJSONObject(0);
				order = s_json.has("property")?s_json.getString("property"):order;
				dir = s_json.has("direction")?s_json.getString("direction"):dir;
			}
			json.put("sort", sort);
		}
		Start = start;
		Limit = limit;
		Page = page;
		if((V_LOGINNAME!=null)&&(company_code==null)&&(Company_Code_List==null)) {
			String where = " where u.id.agentid='"+V_LOGINNAME+"' ";
			List list = ytiotVUserCompanyDao.query(where, null, null, null, null);
			if(list.size()>0) {
				for(int i=0;i<list.size();i++) {
					YtiotVUsercompany o = (YtiotVUsercompany)list.get(i);
					YtiotVUsercompanyId oid = o.getId();
					if(i==0)
						Company_Code_List = oid.getOwnerCode();
					else
						Company_Code_List += ","+oid.getOwnerCode();
				}
			}
		}
		if(device_id!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("device_id")+" = '"+device_id+"' ";
		else {
			if(company!=null) {
				hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("owner_name")+" like '%"+company+"%' ";
			}
			if(Company_Code_List!=null)
				hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+Company_Code_List+") ";
			else {
				if(company_code!=null)
					hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" like '%"+company_code+"%' ";
				if(company_code_list!=null)
					hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+company_code_list+") ";
			}			
		}
		if(device_id_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("device_id")+" in ("+device_id+") ";
		if(dwtype!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("dwtype")+" = "+dwtype+" ";
		if(dwtype_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("dwtype")+" in ("+dwtype_list+") ";
		if(point_code!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("point_code")+" in ("+point_code+") ";
		if(point_code_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("point_code")+" in ("+point_code_list+") ";
		if(id!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("id")+" = "+id+" ";
		if(id_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("id")+" in ("+id_list+") ";
		if(data_time_start!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("data_time")+" >= '"+data_time_start+"' ";
		if(data_time_end!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("data_time")+" <= '"+data_time_end+"' ";
		if(name!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("name")+" like '%"+name+"%' ";
		int totalCount = ytiotVDataDao.getSyncDataCount(hqlwhere);
		json.put("totalCount", totalCount);
		if(Start!=null){
			if(Integer.parseInt(Start)>totalCount){
				Start = "0";
				Page = "0";
			}else if(page==null)
				Page="0";
		}else{
			Start = "0";
			Page = "0";
		}
		json.put("page", Page);
		json.put("start", Start);
		json.put("limit", Limit);
		if(order!=null) {
			order_str = " order by "+fieldname(order)+" ";
			
		} else {
			order_str = " order by data_time ";
			dir = "DESC";
		}
		if(totalCount>0) {
			List<?> list = ytiotVDataDao.SyncDataQuery(hqlwhere, order_str, dir, Start, Limit);
			if(list.size()>0) {
				SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				for(int i=0;i<list.size();i++) {
					YtiotVSyncData o = (YtiotVSyncData)list.get(i);
					YtiotVSyncDataId oid = o.getId();
					@SuppressWarnings("rawtypes")
					Map<String, Comparable> map = new HashMap<String, Comparable>();
					map.put("company", oid.getCompany());
					map.put("company_code", oid.getCompanyCode());
					map.put("content", oid.getContent());
					map.put("data_time", df.format(oid.getDataTime()));
					map.put("device_id", oid.getDeviceId());
					map.put("dwtype", oid.getDwtype());
					map.put("id", oid.getId());
					map.put("name", oid.getName());
					map.put("native_id", oid.getNativeId());
					map.put("point_code", oid.getPointCode());
					map.put("point_data", oid.getPointData());
					JSONObject jSONObject = JSONObject.fromObject(map);
					jSONArray.add(jSONObject);
				}
				json.put("RESULT", jSONArray);
			}
			
		}
		return json.toString();
	}
	@Override
	public String getSyncwaterDataVList(String queryJson, String page, String start, String limit, String sort)
			throws Exception {
		// TODO Auto-generated method stub
		String company_code = null;
		String company_code_list = null;
		String device_id = null;
		String device_id_list = null;
		String device_type = null;
		String dwtype = null;
		String dwtype_list = null;
		String point_code = null;
		String point_code_list = null;
		String id = null;
		String id_list = null;
		String company = null;
		String data_time_start = null;
		String data_time_end = null;
		String name = null;
		String Company_Code_List = null;
		String V_LOGINNAME = null;
		String hqlwhere = null;
		String order = null;
		String dir = null;
		String Start = null;
		String Limit = null;
		String Page = null;
		String order_str = null;
		JSONObject q_json = null;
		JSONArray Sort = null;
		JSONArray jSONArray = new JSONArray();
		JSONObject json = new JSONObject();
		json.put("action", "getSyncDataVList");
		if(queryJson!=null) {
			q_json = JSONObject.fromObject(queryJson);
			if(q_json.has("company_code")) {
				if((q_json.optJSONObject("company_code")!=null)&&(q_json.optJSONObject("company_code").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("company_code");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							company_code_list = j_tmp.getString(i);
						else
							company_code_list += ","+j_tmp.getString(i);
					}
				}else
					company_code = q_json.getString("company_code");
			}
			if(q_json.has("device_id")) {
				if((q_json.optJSONObject("device_id")!=null)&&(q_json.optJSONObject("device_id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("device_id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							device_id_list = j_tmp.getString(i);
						else
							device_id_list += ","+j_tmp.getString(i);
					}
				}else
					device_id = q_json.getString("device_id");
			}

					for(int i=0;i<2;i++) {
						if(i==0)
							dwtype_list = "2";
						else
							dwtype_list += ","+"5";
					}
			
					for(int i=0;i<2;i++) {
						if(i==0)
							point_code_list = "2";
						else
							point_code_list += ","+"3"+","+"4";
					}
				
			if(q_json.has("id")) {
				if((q_json.optJSONObject("id")!=null)&&(q_json.optJSONObject("id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							id_list = j_tmp.getString(i);
						else
							id_list += ","+j_tmp.getString(i);
					}
				}else
					id = q_json.getString("id");
			}
			company = q_json.has("company")?q_json.getString("company"):null;
			data_time_start = q_json.has("time_start")?q_json.getString("time_start"):null;
			data_time_end = q_json.has("time_end")?q_json.getString("time_end"):null;
			name = q_json.has("name")?q_json.getString("name"):null;
			V_LOGINNAME = q_json.has("V_LOGINNAME")?q_json.getString("V_LOGINNAME"):null;
		}
		if(sort!=null) {
			Sort = JSONArray.fromObject(sort);
			if((Sort.isArray())&&(Sort.size()>0)) {
				JSONObject s_json = Sort.getJSONObject(0);
				order = s_json.has("property")?s_json.getString("property"):order;
				dir = s_json.has("direction")?s_json.getString("direction"):dir;
			}
			json.put("sort", sort);
		}
		Start = start;
		Limit = limit;
		Page = page;
		if((V_LOGINNAME!=null)&&(!V_LOGINNAME.equals("admin"))&&(company_code==null)&&(company_code_list==null)) {
			String where = " where u.id.agentid='"+V_LOGINNAME+"' ";
			List list = ytiotVUserCompanyDao.query(where, null, null, null, null);
			if(list.size()>0) {
				for(int i=0;i<list.size();i++) {
					YtiotVUsercompany o = (YtiotVUsercompany)list.get(i);
					YtiotVUsercompanyId oid = o.getId();
					if(i==0)
						Company_Code_List = oid.getOwnerCode();
					else
						Company_Code_List += ","+oid.getOwnerCode();
				}
			}
		}
		if(device_id!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("device_id")+" = '"+device_id+"' ";
		else {
			if(company!=null) {
				hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("owner_name")+" like '%"+company+"%' ";
			}
			if(Company_Code_List!=null)
				hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+Company_Code_List+") ";
			else {
				if(company_code!=null)
					hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" like '%"+company_code+"%' ";
				if(company_code_list!=null)
					hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+company_code_list+") ";
			}			
		}
		if(device_id_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("device_id")+" in ("+device_id_list+") ";
		if(dwtype!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("dwtype")+" = "+dwtype+" ";
		if(dwtype_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("dwtype")+" in ("+dwtype_list+") ";
		if(point_code!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("point_code")+" in ("+point_code+") ";
		if(point_code_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("point_code")+" in ("+point_code_list+") ";
		if(id!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("id")+" = "+id+" ";
		if(id_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("id")+" in ("+id_list+") ";
		if(data_time_start!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("data_time")+" >= '"+data_time_start+"' ";
		if(data_time_end!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("data_time")+" <= '"+data_time_end+"' ";
		if(name!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("name")+" like '%"+name+"%' ";
		int totalCount = ytiotVDataDao.getSyncStatusCount(hqlwhere);
		json.put("totalCount", totalCount);
		if(Start!=null){
			if(Integer.parseInt(Start)>totalCount){
				Start = "0";
				Page = "0";
			}else if(page==null)
				Page="0";
		}else{
			Start = "0";
			Page = "0";
		}
		json.put("page", Page);
		json.put("start", Start);
		json.put("limit", Limit);
		if(order!=null) {
			order_str = " order by data_time ";
			
		} else {
			order_str = " order by device_id ";
			dir = "DESC";
		}
		if(totalCount>0) {
			List<?> list = ytiotVDataDao.SyncStatusQuery(hqlwhere, order_str, dir, Start, Limit);
			if(list.size()>0) {
				SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				for(int i=0;i<list.size();i++) {
					YtiotVSyncStatus o = (YtiotVSyncStatus)list.get(i);
					YtiotVSyncStatusId oid = o.getId();
					@SuppressWarnings("rawtypes")
					Map<String, Comparable> map = new HashMap<String, Comparable>();
					if(oid.getDwtype()==2) {
						map.put("device_type", "水表");
					}else {
						map.put("device_type", "液位");
					}
					map.put("orderIdx", Integer.parseInt(Start)+i+1);
					map.put("company", oid.getCompany());
					map.put("company_code", oid.getCompanyCode());
					map.put("data_time", df.format(oid.getDataTime()));
					map.put("device_id", oid.getDeviceId());
					map.put("dwtype", oid.getDwtype());
					map.put("id", oid.getId());
					map.put("name", oid.getName());
//					map.put("native_id", oid.getNativeId());
					map.put("point_code", oid.getPointCode());
					map.put("point_name", oid.getPointName());
					map.put("point_data", oid.getPointData());
					JSONObject jSONObject = JSONObject.fromObject(map);
					jSONArray.add(jSONObject);
				}
				json.put("RESULT", jSONArray);
			}
			
		}
		return json.toString();
	}
	@Override
	public String getSyncDataRList(String queryJson, String page, String start, String limit, String sort)
			throws Exception {
		// TODO Auto-generated method stub
		String company_code = null;
		String company_code_list = null;
		String device_id = null;
		String device_id_list = null;
		String dwtype = null;
		String dwtype_list = null;
		String point_code = null;
		String point_code_list = null;
		String id = null;
		String id_list = null;
		String company = null;
		String data_time_start = null;
		String data_time_end = null;
		String name = null;
		String Company_Code_List = null;
		String V_LOGINNAME = null;
		String hqlwhere = null;
		String order = null;
		String dir = null;
		String Start = null;
		String Limit = null;
		String Page = null;
		String order_str = null;
		JSONObject q_json = null;
		JSONArray Sort = null;
		JSONArray jSONArray = new JSONArray();
		JSONObject json = new JSONObject();
		json.put("action", "getSyncDataVList");
		if(queryJson!=null) {
			q_json = JSONObject.fromObject(queryJson);
			if(q_json.has("company_code")) {
				if((q_json.optJSONObject("company_code")!=null)&&(q_json.optJSONObject("company_code").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("company_code");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							company_code_list = j_tmp.getString(i);
						else
							company_code_list += ","+j_tmp.getString(i);
					}
				}else
					company_code = q_json.getString("company_code");
			}
			if(q_json.has("device_id")) {
				if((q_json.optJSONObject("device_id")!=null)&&(q_json.optJSONObject("device_id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("device_id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							device_id_list = j_tmp.getString(i);
						else
							device_id_list += ","+j_tmp.getString(i);
					}
				}else
					device_id = q_json.getString("device_id");
			}
			
					dwtype= "6";
			
			if(q_json.has("point_code")) {
				if((q_json.optJSONObject("point_code")!=null)&&(q_json.optJSONObject("point_code").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("point_code");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							point_code_list = j_tmp.getString(i);
						else
							point_code_list += ","+j_tmp.getString(i);
					}
				}else
					point_code = q_json.getString("point_code");
			}
			if(q_json.has("id")) {
				if((q_json.optJSONObject("id")!=null)&&(q_json.optJSONObject("id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							id_list = j_tmp.getString(i);
						else
							id_list += ","+j_tmp.getString(i);
					}
				}else
					id = q_json.getString("id");
			}
			company = q_json.has("company")?q_json.getString("company"):null;
			data_time_start = q_json.has("data_time_start")?q_json.getString("data_time_start"):null;
			data_time_end = q_json.has("data_time_end")?q_json.getString("data_time_end"):null;
			name = q_json.has("name")?q_json.getString("name"):null;
			V_LOGINNAME = q_json.has("V_LOGINNAME")?q_json.getString("V_LOGINNAME"):null;
		}
		if(sort!=null) {
			Sort = JSONArray.fromObject(sort);
			if((Sort.isArray())&&(Sort.size()>0)) {
				JSONObject s_json = Sort.getJSONObject(0);
				order = s_json.has("property")?s_json.getString("property"):order;
				dir = s_json.has("direction")?s_json.getString("direction"):dir;
			}
			json.put("sort", sort);
		}
		Start = start;
		Limit = limit;
		Page = page;
		if((V_LOGINNAME!=null)&&(company_code==null)&&(Company_Code_List==null)) {
			String where = " where u.id.agentid='"+V_LOGINNAME+"' ";
			List list = ytiotVUserCompanyDao.query(where, null, null, null, null);
			if(list.size()>0) {
				for(int i=0;i<list.size();i++) {
					YtiotVUsercompany o = (YtiotVUsercompany)list.get(i);
					YtiotVUsercompanyId oid = o.getId();
					if(i==0)
						Company_Code_List = oid.getOwnerCode();
					else
						Company_Code_List += ","+oid.getOwnerCode();
				}
			}
		}
		if(device_id!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("device_id")+" = '"+device_id+"' ";
		else {
			if(company!=null) {
				hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("owner_name")+" like '%"+company+"%' ";
			}
			if(Company_Code_List!=null)
				hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+Company_Code_List+") ";
			else {
				if(company_code!=null)
					hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" like '%"+company_code+"%' ";
				if(company_code_list!=null)
					hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+company_code_list+") ";
			}			
		}
		if(device_id_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("device_id")+" in ("+device_id+") ";
		if(dwtype!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("dwtype")+" = "+dwtype+" ";
		if(dwtype_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("dwtype")+" in ("+dwtype_list+") ";
		if(point_code!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("point_code")+" in ("+point_code+") ";
		if(point_code_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("point_code")+" in ("+point_code_list+") ";
		if(id!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("id")+" = "+id+" ";
		if(id_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("id")+" in ("+id_list+") ";
		if(data_time_start!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("data_time")+" >= '"+data_time_start+"' ";
		if(data_time_end!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("data_time")+" <= '"+data_time_end+"' ";
		if(name!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("name")+" like '%"+name+"%' ";
		int totalCount = ytiotVDataDao.getSyncDataCount(hqlwhere);
		json.put("totalCount", totalCount);
		if(Start!=null){
			if(Integer.parseInt(Start)>totalCount){
				Start = "0";
				Page = "0";
			}else if(page==null)
				Page="0";
		}else{
			Start = "0";
			Page = "0";
		}
		json.put("page", Page);
		json.put("start", Start);
		json.put("limit", Limit);
		if(order!=null) {
			order_str = " order by "+fieldname(order)+" ";
			
		} else {
			order_str = " order by data_time ";
			dir = "DESC";
		}
		if(totalCount>0) {
			List<?> list = ytiotVDataDao.SyncDataQuery(hqlwhere, order_str, dir, Start, Limit);
			if(list.size()>0) {
				SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				for(int i=0;i<list.size();i++) {
					YtiotVSyncData o = (YtiotVSyncData)list.get(i);
					YtiotVSyncDataId oid = o.getId();
					@SuppressWarnings("rawtypes")
					Map<String, Comparable> map = new HashMap<String, Comparable>();
					map.put("company", oid.getCompany());
					map.put("company_code", oid.getCompanyCode());
					map.put("content", oid.getContent());
					map.put("data_time", df.format(oid.getDataTime()));
					map.put("device_id", oid.getDeviceId());
					map.put("dwtype", oid.getDwtype());
					map.put("id", oid.getId());
					map.put("name", oid.getName());
					map.put("native_id", oid.getNativeId());
					map.put("point_code", oid.getPointCode());
					map.put("point_data", oid.getPointData());
					JSONObject jSONObject = JSONObject.fromObject(map);
					jSONArray.add(jSONObject);
				}
				json.put("RESULT", jSONArray);
			}
			
		}
		return json.toString();
	}
	@Override
	public String getSyncrtuDataVList(String queryJson, String page, String start, String limit, String sort)
			throws Exception {
		// TODO Auto-generated method stub
		String company_code = null;
		String company_code_list = null;
		String device_id = null;
		String device_id_list = null;
		String device_type = null;
		String dwtype = null;
		String dwtype_list = null;
		String point_code = null;
		String point_code_list = null;
		String id = null;
		String id_list = null;
		String company = null;
		String data_time_start = null;
		String data_time_end = null;
		String name = null;
		String Company_Code_List = null;
		String V_LOGINNAME = null;
		String hqlwhere = null;
		String order = null;
		String dir = null;
		String Start = null;
		String Limit = null;
		String Page = null;
		String order_str = null;
		JSONObject q_json = null;
		JSONArray Sort = null;
		JSONArray jSONArray = new JSONArray();
		JSONObject json = new JSONObject();
		json.put("action", "getSyncDataVList");
		if(queryJson!=null) {
			q_json = JSONObject.fromObject(queryJson);
			if(q_json.has("company_code")) {
				if((q_json.optJSONObject("company_code")!=null)&&(q_json.optJSONObject("company_code").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("company_code");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							company_code_list = j_tmp.getString(i);
						else
							company_code_list += ","+j_tmp.getString(i);
					}
				}else
					company_code = q_json.getString("company_code");
			}
			if(q_json.has("device_id")) {
				if((q_json.optJSONObject("device_id")!=null)&&(q_json.optJSONObject("device_id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("device_id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							device_id_list = j_tmp.getString(i);
						else
							device_id_list += ","+j_tmp.getString(i);
					}
				}else
					device_id = q_json.getString("device_id");
			}

//					for(int i=0;i<2;i++) {
//						if(i==0)
//							dwtype_list = "2";
//						else
//							dwtype_list += ","+"5";
//					}
			dwtype = "6";
			point_code = "64";
					
				
			if(q_json.has("id")) {
				if((q_json.optJSONObject("id")!=null)&&(q_json.optJSONObject("id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							id_list = j_tmp.getString(i);
						else
							id_list += ","+j_tmp.getString(i);
					}
				}else
					id = q_json.getString("id");
			}
			company = q_json.has("company")?q_json.getString("company"):null;
			data_time_start = q_json.has("time_start")?q_json.getString("time_start"):null;
			data_time_end = q_json.has("time_end")?q_json.getString("time_end"):null;
			name = q_json.has("name")?q_json.getString("name"):null;
			V_LOGINNAME = q_json.has("V_LOGINNAME")?q_json.getString("V_LOGINNAME"):null;
		}
		if(sort!=null) {
			Sort = JSONArray.fromObject(sort);
			if((Sort.isArray())&&(Sort.size()>0)) {
				JSONObject s_json = Sort.getJSONObject(0);
				order = s_json.has("property")?s_json.getString("property"):order;
				dir = s_json.has("direction")?s_json.getString("direction"):dir;
			}
			json.put("sort", sort);
		}
		Start = start;
		Limit = limit;
		Page = page;
		if((V_LOGINNAME!=null)&&(!V_LOGINNAME.equals("admin"))&&(company_code==null)&&(company_code_list==null)) {
			String where = " where u.id.agentid='"+V_LOGINNAME+"' ";
			List list = ytiotVUserCompanyDao.query(where, null, null, null, null);
			if(list.size()>0) {
				for(int i=0;i<list.size();i++) {
					YtiotVUsercompany o = (YtiotVUsercompany)list.get(i);
					YtiotVUsercompanyId oid = o.getId();
					if(i==0)
						Company_Code_List = oid.getOwnerCode();
					else
						Company_Code_List += ","+oid.getOwnerCode();
				}
			}
		}
		if(device_id!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("device_id")+" = '"+device_id+"' ";
		else {
			if(company!=null) {
				hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("owner_name")+" like '%"+company+"%' ";
			}
			if(Company_Code_List!=null)
				hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+Company_Code_List+") ";
			else {
				if(company_code!=null)
					hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" like '%"+company_code+"%' ";
				if(company_code_list!=null)
					hqlwhere = chkhw(hqlwhere) + " u.id."+fieldname("company_code")+" in ("+company_code_list+") ";
			}			
		}
		if(device_id_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("device_id")+" in ("+device_id_list+") ";
		if(dwtype!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("dwtype")+" = "+dwtype+" ";
		if(dwtype_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("dwtype")+" in ("+dwtype_list+") ";
		if(point_code!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("point_code")+" > ("+point_code+") ";
		if(point_code_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("point_code")+" in ("+point_code_list+") ";
		if(id!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("id")+" = "+id+" ";
		if(id_list!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("id")+" in ("+id_list+") ";
		if(data_time_start!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("data_time")+" >= '"+data_time_start+"' ";
		if(data_time_end!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("data_time")+" <= '"+data_time_end+"' ";
		if(name!=null)
			hqlwhere = chkhw(hqlwhere)+" u.id."+fieldname("name")+" like '%"+name+"%' ";
		int totalCount = ytiotVDataDao.getSyncStatusCount(hqlwhere);
		json.put("totalCount", totalCount);
		if(Start!=null){
			if(Integer.parseInt(Start)>totalCount){
				Start = "0";
				Page = "0";
			}else if(page==null)
				Page="0";
		}else{
			Start = "0";
			Page = "0";
		}
		json.put("page", Page);
		json.put("start", Start);
		json.put("limit", Limit);
		if(order!=null) {
			order_str = " order by data_time ";
			
		} else {
			order_str = " order by device_id ";
			dir = "DESC";
		}
		if(totalCount>0) {
			List<?> list = ytiotVDataDao.SyncStatusQuery(hqlwhere, order_str, dir, Start, Limit);
			if(list.size()>0) {
				SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				for(int i=0;i<list.size();i++) {
					YtiotVSyncStatus o = (YtiotVSyncStatus)list.get(i);
					YtiotVSyncStatusId oid = o.getId();
					@SuppressWarnings("rawtypes")
					Map<String, Comparable> map = new HashMap<String, Comparable>();
					map.put("device_type", "RTU");
					map.put("orderIdx", Integer.parseInt(Start)+i+1);
					map.put("company", oid.getCompany());
					map.put("company_code", oid.getCompanyCode());
					map.put("data_time", df.format(oid.getDataTime()));
					map.put("device_id", oid.getDeviceId());
					map.put("dwtype", oid.getDwtype());
					map.put("id", oid.getId());
					map.put("name", oid.getName());
//					map.put("native_id", oid.getNativeId());
					map.put("point_code", oid.getPointCode());
					map.put("point_name", oid.getPointName());
					map.put("point_data", oid.getPointData());
					JSONObject jSONObject = JSONObject.fromObject(map);
					jSONArray.add(jSONObject);
				}
				json.put("RESULT", jSONArray);
			}
			
		}
		return json.toString();
	}
	
	@Override
	public String getSyncDataFList(String queryJson, String page, String start, String limit, String sort)
			throws Exception {
		// TODO Auto-generated method stub
		String company_code = null;
		String company_code_list = null;
		String device_id = null;
		String device_id_list = null;
		String dwtype = null;
		String dwtype_list = null;
		String point_code = null;
		String point_code_list = null;
		String id = null;
		String id_list = null;
		String company = null;
		String data_time_start = null;
		String data_time_end = null;
		String name = null;
		String Company_Code_List = null;
		String V_LOGINNAME = null;
		String hqlwhere = null;
		String order = null;
		String dir = null;
		String Start = null;
		String Limit = null;
		String Page = null;
		String order_str = null;
		JSONObject q_json = null;
		JSONArray Sort = null;
		JSONArray jSONArray = new JSONArray();
		JSONObject json = new JSONObject();
		json.put("action", "getSyncDataVList");
		if(queryJson!=null) {
			q_json = JSONObject.fromObject(queryJson);
			if(q_json.has("company_code")) {
				if((q_json.optJSONObject("company_code")!=null)&&(q_json.optJSONObject("company_code").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("company_code");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							company_code_list = j_tmp.getString(i);
						else
							company_code_list += ","+j_tmp.getString(i);
					}
				}else
					company_code = q_json.getString("company_code");
			}
			if(q_json.has("device_id")) {
				if((q_json.optJSONObject("device_id")!=null)&&(q_json.optJSONObject("device_id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("device_id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							device_id_list = j_tmp.getString(i);
						else
							device_id_list += ","+j_tmp.getString(i);
					}
				}else
					device_id = q_json.getString("device_id");
			}
			
					dwtype= "7";
			
			if(q_json.has("point_code")) {
				if((q_json.optJSONObject("point_code")!=null)&&(q_json.optJSONObject("point_code").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("point_code");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							point_code_list = j_tmp.getString(i);
						else
							point_code_list += ","+j_tmp.getString(i);
					}
				}else
					point_code = q_json.getString("point_code");
			}
			if(q_json.has("id")) {
				if((q_json.optJSONObject("id")!=null)&&(q_json.optJSONObject("id").isArray())) {
					JSONArray j_tmp = q_json.getJSONArray("id");
					for(int i=0;i<j_tmp.size();i++) {
						if(i==0)
							id_list = j_tmp.getString(i);
						else
							id_list += ","+j_tmp.getString(i);
					}
				}else
					id = q_json.getString("id");
			}
			company = q_json.has("company")?q_json.getString("company"):null;
			data_time_start = q_json.has("data_time_start")?q_json.getString("data_time_start"):null;
			data_time_end = q_json.has("data_time_end")?q_json.getString("data_time_end"):null;
			name = q_json.has("name")?q_json.getString("name"):null;
			V_LOGINNAME = q_json.has("V_LOGINNAME")?q_json.getString("V_LOGINNAME"):null;
		}
		if(sort!=null) {
			Sort = JSONArray.fromObject(sort);
			if((Sort.isArray())&&(Sort.size()>0)) {
				JSONObject s_json = Sort.getJSONObject(0);
				order = s_json.has("property")?s_json.getString("property"):order;
				dir = s_json.has("direction")?s_json.getString("direction"):dir;
			}
			json.put("sort", sort);
		}
		Start = start;
		Limit = limit;
		Page = page;
		if((V_LOGINNAME!=null)&&(company_code==null)&&(Company_Code_List==null)) {
			String where = " where u.id.agentid='"+V_LOGINNAME+"' ";
			List list = ytiotVUserCompanyDao.query(where, null, null, null, null);
