package com.xcgl.middleware.service.impl; import java.net.SocketTimeoutException; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.CoreConnectionPNames; import org.apache.http.util.EntityUtils; import org.apache.log4j.Logger; import org.jeecgframework.web.system.service.SystemService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.xcgl.cloud.entity.TSProject; import com.xcgl.device.entity.DeviceEntity; import com.xcgl.devicetype.entity.DeviceTypeEntity; import com.xcgl.middleware.MiddleWareInfo; import com.xcgl.middleware.dao.MiddlewareSyncDao; import com.xcgl.middleware.service.MiddlewareDataServiceI; import com.xcgl.sensormonitorpoint.entity.SensorMonitorPointEntity; import com.xcgl.sensortype.entity.SensorTypeEntity; import com.xcgl.utils.DateMorpher; import net.sf.json.JSONArray; import net.sf.json.JsonConfig; import net.sf.json.util.JSONUtils; @Service("middlewareDataService") @Transactional public class MiddlewareDataServiceImpl implements MiddlewareDataServiceI{ // @Autowired // private SensorRecordServiceI sensorRecordService; @Autowired private SystemService systemService; @Autowired private MiddlewareSyncDao mwSyncDao; private static final Logger logger = Logger.getLogger(MiddlewareDataServiceImpl.class); @Override public void syncBaseDataFromCloud() { // 同步项目档案表 logger.info("开始同步项目档案...."); // syncProjectData(); logger.info("同步项目档案结束...."); // 同步设备类型档案 logger.info("开始同步设备类型档案...."); syncDevicetypeData(); logger.info("同步设备类型档案结束...."); // 同步设备档案 logger.info("开始同步设备档案...."); syncDeviceData(); logger.info("同步设备档案结束...."); // 同步传感器类型档案 logger.info("开始同步传感器类型档案...."); syncSensortypeData(); logger.info("同步传感器类型档案结束...."); // 同步传感器档案 logger.info("开始同步传感器档案...."); syncSensorData(); logger.info("同步传感器档案结束...."); } private void syncSensortypeData() { JSONArray jarray = syncBaseData("p_sensor_type") ; List gasList = JSONArray.toList(jarray, new SensorTypeEntity(), new JsonConfig()); systemService.executeSql("delete from p_sensor_type "); for (SensorTypeEntity sensortype :gasList) { mwSyncDao.insertSensorType(sensortype); } } private void syncSensorData() { JSONArray jarray = syncBaseData("p_sensor_monitor_point") ; List gasList = JSONArray.toList(jarray, new SensorMonitorPointEntity(), new JsonConfig()); systemService.executeSql("delete from p_sensor_monitor_point "); for (SensorMonitorPointEntity sensorpoint :gasList) { mwSyncDao.insertSensor(sensorpoint); } } private void syncProjectData() { JSONArray jarray = syncBaseData("t_s_depart") ; List gasList = JSONArray.toList(jarray, new TSProject(), new JsonConfig()); // systemService.executeSql("delete from t_s_depart where id = '"+MiddleWareInfo.getInstance().projectid+"' "+ // " or parentdepartid = '"+MiddleWareInfo.getInstance().projectid+"'"); for (TSProject tsp :gasList) { mwSyncDao.insertProject(tsp); } // systemService.batchSave(gasList); } private void syncDevicetypeData() { JSONArray jarray = syncBaseData("p_device_type") ; List gasList = JSONArray.toList(jarray, new DeviceTypeEntity(), new JsonConfig()); systemService.executeSql("delete from p_device_type "); for (DeviceTypeEntity deviceType : gasList) { mwSyncDao.insertDeviceType(deviceType); } } private void syncDeviceData() { JSONArray jarray = syncBaseData("p_device") ; List gasList = JSONArray.toList(jarray, new DeviceEntity(),new JsonConfig()); systemService.executeSql("delete from p_device "); for (DeviceEntity device : gasList) { mwSyncDao.insertDevice(device); } } private JSONArray syncBaseData(String tablename) { HttpClient httpclient = new DefaultHttpClient(); HttpEntity entity = null; String jsonContent = ""; HttpGet httpGet = null; String dmSrvURL = ""; switch ( tablename ) { case "p_device": dmSrvURL = MiddleWareInfo.getInstance().cloudIPAndPort+"/api/dscloud/device/"+MiddleWareInfo.getInstance().projectid; break; case "p_device_type": dmSrvURL = MiddleWareInfo.getInstance().cloudIPAndPort+"/api/dscloud/devicetype/"; break; case "p_sensor_type": dmSrvURL = MiddleWareInfo.getInstance().cloudIPAndPort+"/api/dscloud/sensortype/"; break; case "p_sensor_monitor_point": dmSrvURL = MiddleWareInfo.getInstance().cloudIPAndPort+"/api/dscloud/sensor/"+MiddleWareInfo.getInstance().projectid; break; case "t_s_depart": dmSrvURL = MiddleWareInfo.getInstance().cloudIPAndPort+"/api/dscloud/project/"+MiddleWareInfo.getInstance().projectid; break; } try { // 设置超时时间 httpclient.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 20000); httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 20000); httpGet = new HttpGet(dmSrvURL); HttpResponse response = httpclient.execute(httpGet); // 检验返回码 int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != HttpStatus.SC_OK) { logger.error("中间件同步基础档案基础数据"+tablename+"请求出错: "+statusCode); } else { // 获取服务器返回页面的值 entity = response.getEntity(); jsonContent = EntityUtils.toString(entity); logger.info("中间件同步设备档案基础数据"+tablename+"返回结果:"+jsonContent); httpGet.abort(); } } catch (SocketTimeoutException e) { logger.error("中间件同步设备档案基础数据"+tablename+"请求出错: "+e); } catch (Exception ex) { ex.printStackTrace(); logger.error("中间件同步设备档案基础数据"+tablename+"请求出错: "+ex); } finally { if (httpGet != null) { try { httpGet.releaseConnection(); Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } logger.info("中间件同步项目档案基础数据"+tablename+":"+jsonContent); JsonConfig jsonConfig = new JsonConfig(); JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher()); JSONArray allRetArray = JSONArray.fromObject(jsonContent,jsonConfig); return allRetArray; } }