From 7014fd76c199e676159ac30da6f4dbb91e3a137e Mon Sep 17 00:00:00 2001
From: fengxiang <110431245@qq.com>
Date: Tue, 06 Feb 2018 16:50:31 +0800
Subject: [PATCH] 地图相关

---
 src/main/resources/mapper/DeviceMapper.xml                        |   59 +++++-
 src/main/java/com/moral/common/bean/JsonData.java                 |  124 +++++++++++++
 src/main/webapp/js/moralmap.js                                    |   13 
 src/main/webapp/view/map.jsp                                      |   17 -
 src/main/java/com/moral/service/impl/DeviceServiceImpl.java       |  118 +++++++++++++
 src/main/java/com/moral/entity/Device.java                        |    3 
 src/main/java/com/moral/service/DeviceService.java                |    6 
 src/main/resources/system/sysConfig.properties                    |    3 
 src/main/java/com/moral/common/bean/Constants.java                |   34 +++
 src/main/java/com/moral/mapper/DeviceMapper.java                  |    4 
 src/main/java/com/moral/service/MonitorPointService.java          |    2 
 src/main/java/com/moral/controller/ScreenController.java          |   81 ++++++++-
 src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java |   28 ++
 src/main/java/com/moral/common/exception/Exceptions.java          |   45 +++++
 14 files changed, 493 insertions(+), 44 deletions(-)

diff --git a/src/main/java/com/moral/common/bean/Constants.java b/src/main/java/com/moral/common/bean/Constants.java
index 01d5455..644f7d0 100644
--- a/src/main/java/com/moral/common/bean/Constants.java
+++ b/src/main/java/com/moral/common/bean/Constants.java
@@ -1,8 +1,19 @@
 package com.moral.common.bean;
 
+import com.moral.common.util.ResourceUtil;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * ������������.
  */
+@Component
 public class Constants {
 	
 	/** The Constant IS_DELETE_TRUE. */
@@ -17,16 +28,35 @@
 	public static final String IS_USED_FALSE = "0";
 
 	public static final String IS_USED_TRUE = "1";
-	private static final Integer[] specialOrgIds = new Integer[]{-1};
+	private static Integer[] specialOrgIds;
+	@PostConstruct
+    private void loadSpecialOrgIds(){
+	  String orgIds = ResourceUtil.getValue("specialOrgIds");
+	  if(!StringUtils.isBlank(orgIds)){
+		  String [] orgIdArray = orgIds.split(",");
+		  if(!ArrayUtils.isEmpty(orgIdArray)){
+			  List<Integer> orgIdList =  Arrays.asList(orgIdArray).stream().map(Integer::new).collect(Collectors.toList());
+			  specialOrgIds = orgIdList.toArray(new Integer[orgIdList.size()]);
+		  }
+	  }
 
+	}
 	public static final Boolean isNotSpecialOrgId(Integer orgId) {
+		if(ArrayUtils.isEmpty(specialOrgIds)){
+			return true;
+		}
 		for(int i = 0; i < specialOrgIds.length; ++i) {
 			if (specialOrgIds[i].equals(orgId)) {
 				return false;
 			}
 		}
-
 		return true;
 	}
+	//device ������
+	public static final String DEVICE_STATE_NORMAL ="0";
+	public static final String DEVICE_STATE_MILD = "1";
+	public static final String DEVICE_STATE_MIDDLE ="2";
+	public static final String DEVICE_STATE_SERIOUS ="3";
+	public static final String DEVICE_STATE_OFFLINE ="4";
 }
 
diff --git a/src/main/java/com/moral/common/bean/JsonData.java b/src/main/java/com/moral/common/bean/JsonData.java
new file mode 100644
index 0000000..0d9c792
--- /dev/null
+++ b/src/main/java/com/moral/common/bean/JsonData.java
@@ -0,0 +1,124 @@
+package com.moral.common.bean;
+
+import com.moral.common.exception.Exceptions;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by dgw on 2017/4/10.
+ */
+public class JsonData {
+    private Integer total;//���������������������
+    private List rows = new ArrayList();// ������
+    private boolean success = true;//������������������
+    private String msg = "";//������������
+    private String errorTrace;//���������������������
+    private Object extData ;//������������
+
+    /**
+     * ���������������
+     * @return
+     */
+    public Integer getTotal() {
+        return total;
+    }
+
+    /**
+     * ���������������
+     * @return
+     */
+    public void setTotal(Integer total) {
+        this.total = total;
+    }
+
+    /**
+     * ������������������
+     * @return
+     */
+    public List getRows() {
+        return rows;
+    }
+
+    /**
+     * ������������������
+     * @return
+     */
+    public void setRows(List rows) {
+        this.rows = rows;
+    }
+
+    /**
+     * ������������������
+     * @param success
+     */
+    public void setSuccess(boolean success){
+        this.success = success;
+    }
+
+    /**
+     * ������������������
+     * @param
+     */
+    public boolean getSuccess(){
+        return success;
+    }
+
+
+    /**
+     * ������������
+     * @param msg
+     */
+    public void setMsg(String msg){
+        this.msg = msg;
+    }
+
+    /**
+     * ������������
+     * @param
+     */
+    public String getMsg() {
+        return msg;
+    }
+
+    /**
+     * ������������������
+     * @return
+     */
+    public String getErrorTrace() {
+        return errorTrace;
+    }
+
+    /**
+     * ������������������
+     * @return
+     */
+    public void setErrorTrace(String errorTrace) {
+        this.errorTrace = errorTrace;
+    }
+
+    /**
+     * ������������
+     * @return
+     */
+    public Object getExtData() {
+        return extData;
+    }
+
+    /**
+     * ������������
+     * @return
+     */
+    public void setExtData(Object extData) {
+        this.extData = extData;
+    }
+
+    /**
+     * ���������������������������������������������������������������������errorTrace
+     * @param e
+     */
+    public void setException(Exception e){
+        this.errorTrace =   Exceptions.getStackTraceAsString(e);
+    }
+
+}
diff --git a/src/main/java/com/moral/common/exception/Exceptions.java b/src/main/java/com/moral/common/exception/Exceptions.java
new file mode 100644
index 0000000..cb2b5d5
--- /dev/null
+++ b/src/main/java/com/moral/common/exception/Exceptions.java
@@ -0,0 +1,45 @@
+package com.moral.common.exception;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+/**
+ * Created by dgw on 2017/4/10.
+ */
+public class Exceptions {
+    /**
+     * ���CheckedException���������UncheckedException.
+     */
+    public static RuntimeException unchecked(Exception e) {
+        if (e instanceof RuntimeException) {
+            return (RuntimeException) e;
+        } else {
+            return new RuntimeException(e);
+        }
+    }
+
+    /**
+     * ���ErrorStack���������String.
+     */
+    public static String getStackTraceAsString(Exception e) {
+        StringWriter stringWriter = new StringWriter();
+        e.printStackTrace(new PrintWriter(stringWriter));
+        return stringWriter.toString();
+    }
+
+    /**
+     * ������������������������������������������������.
+     */
+    public static boolean isCausedBy(Exception ex, Class<? extends Exception>... causeExceptionClasses) {
+        Throwable cause = ex.getCause();
+        while (cause != null) {
+            for (Class<? extends Exception> causeClass : causeExceptionClasses) {
+                if (causeClass.isInstance(cause)) {
+                    return true;
+                }
+            }
+            cause = cause.getCause();
+        }
+        return false;
+    }
+}
diff --git a/src/main/java/com/moral/controller/ScreenController.java b/src/main/java/com/moral/controller/ScreenController.java
index 86f52d9..c1c9fdb 100644
--- a/src/main/java/com/moral/controller/ScreenController.java
+++ b/src/main/java/com/moral/controller/ScreenController.java
@@ -6,21 +6,22 @@
 import static com.moral.common.util.WebUtils.getParametersStartingWith;
 
 import java.io.*;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 
-import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.*;
+import com.moral.common.bean.JsonData;
 import com.moral.common.bean.PageResult;
 import com.moral.common.xml.Version;
 import com.moral.entity.Account;
+import com.moral.entity.Device;
 import com.moral.entity.MapBounds;
 import com.moral.entity.MonitorPoint;
 import com.moral.service.*;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.net.ftp.FTPClient;
 import org.apache.log4j.Logger;
 import org.dom4j.Document;
@@ -32,9 +33,6 @@
 import org.springframework.ui.Model;
 import org.springframework.web.bind.annotation.*;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONReader;
-import com.alibaba.fastjson.TypeReference;
 import com.moral.common.bean.ResultBean;
 import com.moral.common.util.ValidateUtil;
 import org.springframework.web.servlet.ModelAndView;
@@ -277,7 +275,17 @@
 		}
 		return version;
 	}
-
+	/**
+	 * ������������
+	 * ������
+	 */
+	/**
+	 * ������������
+	 * @param model
+	 * @param code
+	 * @param accountId
+	 * @return
+	 */
 	@RequestMapping(value = "/map-page", method = RequestMethod.GET)
 	public ModelAndView map(ModelAndView model, @RequestParam("areaCode")int code, @RequestParam("accountId")int accountId){
 		Account account = accountService.getAccountById(accountId);
@@ -317,6 +325,18 @@
 		resultBean.setCode(ResultBean.SUCCESS);
 		return resultBean;
 	}
+	@RequestMapping(value="/get-devices",method = RequestMethod.GET)
+	@ResponseBody
+	public ResultBean getDevices(@RequestParam("orgId")Integer orgId,MapBounds mapBounds){
+		ResultBean<List<Device>> resultBean = new ResultBean();
+		Map<String,Object> paramMap = new HashMap<String, Object>();
+		paramMap.put("orgId", orgId);
+		paramMap.put("mapBounds",mapBounds);
+		List<Device> list = deviceService.query(paramMap);
+		resultBean.setData(list);
+		resultBean.setCode(ResultBean.SUCCESS);
+		return resultBean;
+	}
 	@RequestMapping(value = "get-devices-for-popup",method = RequestMethod.GET)
 	@ResponseBody
 	public PageResult getDevicesForPopup(
@@ -327,4 +347,47 @@
 	){
 		return  deviceService.query(orgId,name,pageSize,pageNo);
 	}
+	@RequestMapping(value = "get-devices-by-mid-oid",method = RequestMethod.GET)
+	@ResponseBody
+	public PageResult getDevicesByMidOid(
+			@RequestParam("orgId")Integer orgId,
+			@RequestParam("mpId")Integer mpId,
+			Integer pageSize,
+			Integer pageNo
+	){
+	   return deviceService.query(orgId,mpId,pageSize,pageNo);
+	}
+	@RequestMapping(value="/get-real-state-data",method = RequestMethod.POST)
+	@ResponseBody
+	public JsonData getRealStateAndData(@RequestBody JSONObject paramMap){
+		JsonData jsonData = new JsonData();
+		Map<String,Object> returnMap = new HashMap<String, Object>();
+		returnMap.put("layer", paramMap.getString("layer"));
+		//���������������������������
+		if(!CollectionUtils.isEmpty(paramMap.getJSONArray("markerKeys"))) {
+			JSONArray markerKeys = paramMap.getJSONArray("markerKeys");
+			List<Map<String, String>> markers = null;
+			if("equipments".equals(paramMap.getString("layer"))) {
+				markers = deviceService.queryDevicesState(markerKeys.toJavaList(String.class),true);
+			}else {//���������������id���state
+				String orgId= paramMap.getString("orgId");
+				String areaCode= paramMap.getString("areaCode");
+				for(Object mPointId:markerKeys) {
+					markers = monitorPointService.queryMonitroPointsState(markerKeys.toJavaList(Integer.class));
+				}
+			}
+			returnMap.put("markers", markers);
+		}
+		if(paramMap.getJSONArray("popupEquMacs")!=null&&paramMap.getJSONArray("popupEquMacs").size()>0) {
+			JSONArray popupEquMacs = paramMap.getJSONArray("popupEquMacs");
+			List<Map<String, String>> popupEquWithStates = null;
+			for(Object mac:popupEquMacs) {
+				popupEquWithStates = deviceService.queryDevicesState(popupEquMacs.toJavaList(String.class),false);
+			}
+			//���������������������������
+			returnMap.put("popupEquStates", popupEquWithStates);
+		}
+		jsonData.setExtData(returnMap);
+		return jsonData;
+	}
 }
diff --git a/src/main/java/com/moral/entity/Device.java b/src/main/java/com/moral/entity/Device.java
index ec0b15f..d607954 100644
--- a/src/main/java/com/moral/entity/Device.java
+++ b/src/main/java/com/moral/entity/Device.java
@@ -1,6 +1,7 @@
 package com.moral.entity;
 
 import java.util.Date;
+import java.util.List;
 
 import javax.persistence.Id;
 import javax.persistence.Transient;
@@ -117,4 +118,6 @@
 	private DeviceVersion deviceVersion;
 	@Transient
 	private MonitorPoint monitorPoint;
+	@Transient
+	private List<Integer> organizationIds;
 }
\ No newline at end of file
diff --git a/src/main/java/com/moral/mapper/DeviceMapper.java b/src/main/java/com/moral/mapper/DeviceMapper.java
index 44650c0..c96da66 100644
--- a/src/main/java/com/moral/mapper/DeviceMapper.java
+++ b/src/main/java/com/moral/mapper/DeviceMapper.java
@@ -17,5 +17,9 @@
 	List<String> getDeviceMacByMonitorPointAndDeviceVersion(@Param("monitorPointId")Integer monitorPointId,@Param("deviceVersionId")Integer deviceVersionId);
 
 	List<Map<String, Object>> getDeviceVersionIdByMonitorPoint(Integer monitorPointId);
+
 	List<Device> selectByOrgIdAndDevName(@Param("orgId")Integer orgId,@Param("devName")String devName);
+	List<Device> selectByOrgIdAndMpId(@Param("orgId")Integer orgId,@Param("mpId")Integer mpId);
+	List<Device> selectByMap(Map<String, Object> params);
+	Device selectWithOrgIdsByMac(String mac);
 }
\ No newline at end of file
diff --git a/src/main/java/com/moral/service/DeviceService.java b/src/main/java/com/moral/service/DeviceService.java
index afde4ea..a4501a4 100644
--- a/src/main/java/com/moral/service/DeviceService.java
+++ b/src/main/java/com/moral/service/DeviceService.java
@@ -4,6 +4,7 @@
 import java.util.Map;
 import com.moral.common.bean.PageBean;
 import com.moral.common.bean.PageResult;
+import com.moral.common.bean.ResultBean;
 import com.moral.entity.Device;
 
 public interface DeviceService {
@@ -16,7 +17,10 @@
 
 	Device getDeviceByMac(String mac);
 
+	List<Device> query(Map<String,Object> map);
     PageResult query(Integer orgId, String deviceName,Integer pageSize,Integer pageNo);
+
+    PageResult query(Integer orgId, Integer mpId, Integer pageSize, Integer pageNo);
 
     PageBean queryByPageBean(PageBean pageBean);
 
@@ -25,4 +29,6 @@
     void addOrModify(Device device);
 
 	List<Device> getDevicesByMonitorPointId(Integer monitorPointId);
+
+	List<Map<String,String>> queryDevicesState(List<String> macList,Boolean withData);
 }
diff --git a/src/main/java/com/moral/service/MonitorPointService.java b/src/main/java/com/moral/service/MonitorPointService.java
index 5d8905f..992091b 100644
--- a/src/main/java/com/moral/service/MonitorPointService.java
+++ b/src/main/java/com/moral/service/MonitorPointService.java
@@ -21,5 +21,5 @@
 	public void deleteByIds(Integer... ids);
 	
 	List<MonitorPoint> getMonitorPointsByName(String name);
-
+    List<Map<String,String>> queryMonitroPointsState(List<Integer> idList);
 }
diff --git a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
index 0462992..e8c755f 100644
--- a/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/DeviceServiceImpl.java
@@ -1,14 +1,19 @@
 package com.moral.service.impl;
 
 import java.util.*;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
+import com.alibaba.fastjson.TypeReference;
 import com.github.pagehelper.Page;
 import com.moral.common.bean.Constants;
 import com.moral.common.bean.PageBean;
 import com.moral.common.bean.PageResult;
 import com.moral.common.util.ExampleUtil;
+import com.moral.common.util.RedisUtils;
+import org.apache.commons.collections.MapUtils;
+import org.apache.commons.lang3.BooleanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.ObjectUtils;
@@ -30,6 +35,8 @@
 	@Resource
 	private AccountService accountService;
     private Class ENTITY_CLASS = Device.class;
+	@Resource
+	RedisUtils redisUtils;
 	@Override
 	public Map<String, Object> getDeviceStatesByAccount(Map<String, Object> parameters) {
 		ValidateUtil.notNull(parameters.get("accountId"), "param.is.null");
@@ -98,16 +105,96 @@
 		return device;
 	}
 
+	/**
+	 *
+	 * @param map
+	 * map��� ������ ������id���4������������
+	 * @return
+	 */
+	@Override
+	public List<Device> query(Map<String, Object> map) {
+		List <Device> list = deviceMapper.selectByMap(map);
+		loadDeviceState(list);
+		return list;
+	}
+
+	/**
+	 *  ������������id��������������� ������������������
+	 * @param orgId
+	 * @param deviceName
+	 * @param pageSize
+	 * @param pageNo
+	 * @return
+	 */
 	@Override
 	public PageResult query(Integer orgId, String deviceName, Integer pageSize, Integer pageNo) {
 		if(!ObjectUtils.isEmpty(pageSize)&&!ObjectUtils.isEmpty(pageNo)){
 			PageHelper.startPage(pageNo,pageSize);
 		}
-		List list = deviceMapper.selectByOrgIdAndDevName(orgId,deviceName);
+		List<Device> list = deviceMapper.selectByOrgIdAndDevName(orgId,deviceName);
+		//���redis������������
+		loadDeviceState(list);
 		if(list instanceof Page){
 			return new PageResult(((Page) list).getTotal(),list);
 		}
 		return new PageResult(null,list);
+	}
+
+	/**
+	 * ������������id������������id ������������������
+	 * @param orgId
+	 * @param mpId
+	 * @param pageSize
+	 * @param pageNo
+	 * @return
+	 */
+	@Override
+	public PageResult query(Integer orgId, Integer mpId, Integer pageSize, Integer pageNo) {
+		if(!ObjectUtils.isEmpty(pageSize)&&!ObjectUtils.isEmpty(pageNo)){
+			PageHelper.startPage(pageNo,pageSize);
+		}
+		List<Device> list = deviceMapper.selectByOrgIdAndMpId(orgId,mpId);
+		//���redis������������
+		loadDeviceState(list);
+		if(list instanceof Page){
+			return new PageResult(((Page) list).getTotal(),list);
+		}
+		return new PageResult(null,list);
+	}
+	private void loadDeviceState(List<Device> list){
+		//���redis������������
+		list.stream().map( device -> {
+			String state = getSateFromRedis(device.getMonitorPointId(),device.getMac());
+			device.setState(state);
+			return device;
+		}).count();
+	}
+	private String getSateFromRedis(Integer mpId,String mac){
+
+		Map<String,String> states  = getStateMapFromRedis(mpId,mac);
+		String state = null;
+		if(states != null){
+			state  = states.get("state");
+		}
+		state = state == null ?Constants.DEVICE_STATE_OFFLINE:state;
+		return  state;
+	}
+	public Map<String,String> getStateMapFromRedis(Integer mpId,String mac){
+		StringBuilder key = new StringBuilder();
+		//������key
+		key.append("state_").append(mpId).append("_").append(mac);
+		return   redisUtils.get(key.toString(),new TypeReference<Map<String,String>>(){});
+	}
+	private Device getDeviceWithOrgIdsByMac(String mac) {
+		String key = "device_"+mac;
+		Device device = redisUtils.get(key,Device.class);
+		if(device==null) {
+			device = deviceMapper.selectWithOrgIdsByMac(mac);
+			if(device!=null){
+				redisUtils.set(key,device);
+			}
+		}
+		return device;
 	}
 
 	@Override
@@ -168,4 +255,33 @@
 		return deviceMapper.select(device);
 	}
 
+	/**
+	 *  ������map{mac������state���}
+	 * @param macList
+	 * @return
+	 */
+	@Override
+	public List<Map<String,String>> queryDevicesState(List<String> macList,Boolean withData) {
+		List<Map<String,String>> list = macList.stream().map(mac->{
+			Device device = getDeviceWithOrgIdsByMac(mac);
+			Map<String,String> resultMap = new HashMap<>();
+			Map<String,String> stateMap = getStateMapFromRedis(device.getMonitorPointId(),mac);
+			if(!MapUtils.isEmpty(stateMap)){
+				resultMap.putAll(stateMap);
+			}else{
+				resultMap.put("state",Constants.DEVICE_STATE_OFFLINE);
+			}
+			if(BooleanUtils.isTrue(withData)){
+				String dataKey = "data_"+mac;
+				Map<String,String> dataMap = redisUtils.get(dataKey,new TypeReference<Map<String,String>>(){});
+				if(!MapUtils.isEmpty(dataMap)){
+					resultMap.putAll(dataMap);
+				}
+			}else{
+				resultMap.put("mac",mac);
+			}
+			return  resultMap;
+		}).collect(Collectors.toList());
+		return list;
+	}
 }
diff --git a/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java b/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java
index 79cf204..509b9d3 100644
--- a/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java
+++ b/src/main/java/com/moral/service/impl/MonitorPointServiceImpl.java
@@ -1,8 +1,10 @@
 package com.moral.service.impl;
 
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
@@ -34,13 +36,14 @@
     public List<MonitorPoint> queryWithStateByMap(Map<String, Object> params){
         List<MonitorPoint> monitorPointList = monitorPointMapper.selectByMap(params);
         for(MonitorPoint monitorPoint:monitorPointList){
-            loadStateFromRedis(monitorPoint);
+            Integer state = getStateFromRedis(monitorPoint.getId());
+            monitorPoint.setState(state);
         }
         return monitorPointList;
     }
-    private void loadStateFromRedis(MonitorPoint monitorPoint){
+    private Integer getStateFromRedis(Integer monitorPointId){
         StringBuilder key = new StringBuilder();
-        key.append("*_").append(monitorPoint.getId()).append("_*");
+        key.append("state_").append(monitorPointId).append("_*");
         List<Map> stateList = redisUtils.getList(key.toString(),Map.class);
         int state = -1;
         if(stateList!=null){
@@ -50,7 +53,7 @@
             }
         }
         state = state==-1?4:state;
-        monitorPoint.setState(state);
+        return state;
     }
     @Override
     public PageBean queryByPageBean(PageBean pageBean) {
@@ -117,4 +120,21 @@
 		List<MonitorPoint> monitorPoints = monitorPointMapper.selectByExample(example);
 		return monitorPoints;
 	}
+
+    /**
+     *
+     * @param idList
+     * @return  {id:,state:}
+     */
+    @Override
+    public List<Map<String, String>> queryMonitroPointsState(List<Integer> idList) {
+        List<Map<String, String>> list = idList.stream().map( id -> {
+           Integer state = getStateFromRedis(id);
+           Map<String,String> stateMap = new HashMap<>();
+           stateMap.put("id",id.toString());
+           stateMap.put("state",state.toString());
+           return stateMap;
+        }).collect(Collectors.toList());
+        return list;
+    }
 }
diff --git a/src/main/resources/mapper/DeviceMapper.xml b/src/main/resources/mapper/DeviceMapper.xml
index bd99802..27f05e1 100644
--- a/src/main/resources/mapper/DeviceMapper.xml
+++ b/src/main/resources/mapper/DeviceMapper.xml
@@ -98,15 +98,6 @@
 		</if>
 		GROUP BY d.state
 	</select>
-	<select id="selectByOrgIdAndDevName" resultMap="BaseResultMap">
-        SELECT * from device dev
-        left join monitor_point mpt on dev.monitor_point_id = mpt.id
-        where
-		mpt.organization_id =  #{orgId}
-        <if test="devName!=null and ''!=devName">
-        and dev.name like #{devName}
-		</if>
-	</select>
 	<select id="getSensorsByDevice" resultType="java.util.Map">
 		SELECT
 			s.`key`,
@@ -141,4 +132,54 @@
 		monitor_point_id = #{monitorPointId}
 		AND device_version_id = #{deviceVersionId}
 	</select>
+	<select id="selectByOrgIdAndDevName" resultMap="BaseResultMap">
+		SELECT * from device dev
+		left join monitor_point mpt on dev.monitor_point_id = mpt.id
+		<where>
+			<if test="@com.moral.common.bean.Constants@isNotSpecialOrgId(orgId)">
+				mpt.organization_id =  #{orgId}
+			</if>
+		<if test="devName!=null and ''!=devName">
+			and dev.name like CONCAT('%',#{devName},'%')
+		</if>
+		</where>
+	</select>
+	<select id="selectByOrgIdAndMpId" resultMap="BaseResultMap">
+		SELECT * from device dev
+		left join monitor_point mpt on dev.monitor_point_id = mpt.id
+		<where>
+			<if test="@com.moral.common.bean.Constants@isNotSpecialOrgId(orgId)">
+				mpt.organization_id =  #{orgId}
+			</if>
+			and dev.monitor_point_id = #{mpId}
+		</where>
+	</select>
+	<select id="selectByMap" parameterType="java.util.Map" resultMap="BaseResultMap">
+		SELECT dev.* from device dev
+		left join monitor_point  mpt on dev.monitor_point_id = mpt.id
+		<where>
+			<if test="@com.moral.common.bean.Constants@isNotSpecialOrgId(orgId)">
+				mpt.organization_id = #{orgId,jdbcType=VARCHAR}
+			</if>
+			<![CDATA[
+			AND dev.longitude < #{mapBounds.Ge,jdbcType=NUMERIC}
+            AND dev.longitude > #{mapBounds.Le,jdbcType=NUMERIC}
+            AND dev.latitude  < #{mapBounds.Fe,jdbcType=NUMERIC}
+            AND dev.latitude  > #{mapBounds.Ke,jdbcType=NUMERIC}
+     		 ]]>
+		</where>
+	</select>
+	<resultMap id="BaseResultWithOrgIdsMap" type="com.moral.entity.Device" extends="BaseResultMap">
+		<collection property="organizationIds" column="id" select="selectOrganizationIds"></collection>
+	</resultMap>
+	<!-- resultMap������ -->
+	<select id="selectOrganizationIds" resultType="INTEGER">
+		call proc_organization_id_select(#{id,jdbcType=INTEGER});
+	</select>
+	<select id="selectWithOrgIdsByMac" parameterType="java.lang.String" resultMap="BaseResultWithOrgIdsMap">
+		select
+		id,device_version_id,mac,monitor_point_id
+		from device
+		where mac = #{mac,jdbcType=VARCHAR}
+	</select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/system/sysConfig.properties b/src/main/resources/system/sysConfig.properties
index 82f508b..cae11b1 100644
--- a/src/main/resources/system/sysConfig.properties
+++ b/src/main/resources/system/sysConfig.properties
@@ -27,4 +27,5 @@
 e19-standard=50
 orgId=-1
 password=123456
-noFilters=/screen/**,/**/*.jsp,/**/*.js,/**/*.png,/**/*.ico
\ No newline at end of file
+noFilters=/screen/**,/**/*.jsp,/**/*.js,/**/*.png,/**/*.ico
+specialOrgIds=-1
\ No newline at end of file
diff --git a/src/main/webapp/js/moralmap.js b/src/main/webapp/js/moralmap.js
index c28f4b8..fd71c22 100644
--- a/src/main/webapp/js/moralmap.js
+++ b/src/main/webapp/js/moralmap.js
@@ -370,7 +370,6 @@
 					async: true,
 					success: function(res) {
 						if(res!=null&&res.total!=null) {
-							debugger;
 							var rows = res.data;
 							if(rows==null||rows.length == 0) {
 								$(option['id']).html("������������������������������");
@@ -569,7 +568,7 @@
 	//��������������� ������MoralMark������
 	moralMap.Equipment = function(option) {
 		var icon = {};
-		icon["stateIcons"] = ["img/ico_coo00.png", "img/ico_coo01.png", "img/ico_coo02.png", "img/ico_coo03.png", "img/ico_coo04.png"];
+		icon["stateIcons"] = ["/img/ico_coo00.png", "/img/ico_coo01.png", "/img/ico_coo02.png", "/img/ico_coo03.png", "/img/ico_coo04.png"];
 		icon["width"] = 50;
 		icon["height"] = 60;
 		option["icon"] = icon;
@@ -633,18 +632,22 @@
 			},
 			_getSensorState: function(data, key) {
 				var grade="grade";
+                var levels;
 				if(data["level3"]!=null){
-					  if($.inArray(key,data["level3"])!=-1){
+					levels = data["level3"] instanceof Array ? data["level3"]:JSON.parse(data["level3"]);
+					  if($.inArray(key,levels)!=-1){
 					  	 return grade+"03";
 					  }
 				} 
 				if(data["level2"] !=null){
-				   if($.inArray(key,data["level2"])!=-1){
+				    levels = data["level2"] instanceof Array ? data["level2"]:JSON.parse(data["level2"]);
+				   if($.inArray(key,levels)!=-1){
 				  	 return grade+"02";
 				   }
 				} 
 				if(data["level1"] !=null){
-					   if($.inArray(key,data["level1"])!=-1){
+                    levels = data["level1"] instanceof Array ? data["level1"]:JSON.parse(data["level1"]);
+					   if($.inArray(key,levels)!=-1){
 					  	 return grade+"01";
 					   }
 				}
diff --git a/src/main/webapp/view/map.jsp b/src/main/webapp/view/map.jsp
index 6473019..55f7a75 100644
--- a/src/main/webapp/view/map.jsp
+++ b/src/main/webapp/view/map.jsp
@@ -264,7 +264,7 @@
 	function showEqus(obj) {
 		var params = moralMap['params'];
 		var mpoint = obj.currentTarget.getOption();
-		var url = 'get-devices?mpId=' + mpoint['id'] + "&orgId=" + params['orgId'];
+		var url = 'get-devices-by-mid-oid?mpId=' + mpoint['id'] + "&orgId=" + params['orgId'];
 		listView.load(url); 
 		moralMap.showPopupbox("#popup_box");
 	}
@@ -310,7 +310,7 @@
 	}
 	function addOverEquipments(jsonData){
 		if(moralMap.layer()=="equipments"){
-		var objs = jsonData["rows"]==null?[]:jsonData["rows"];
+		var objs = jsonData = null?[]:jsonData;
 		for(var i in objs) {
 				var obj = objs[i];
 				if(moralMap.getEquipment(obj["mac"])==null){
@@ -367,13 +367,6 @@
 	});
 	//��������������������� ���������������,���������
 	moralMap.addEventListener("tilesloaded", function(type, target) {
-//	     var endZoom = this.getZoom();
-//	     if(endZoom>=moralMap.getZooMConfine()){//������������������������
-//	     		loadOverlays("getequipments",addOverEquipments);
-//	     }else{
-//				loadOverlays("get-monitorpoints",addOverMpoints);
-//	     }
-//	     moralMap.closePopupbox("#popup_box");
 	});
 	//������������������������������������������
 	moralMap.addEventListener('zoomstart', function(type) {});
@@ -381,7 +374,7 @@
 	moralMap.addEventListener('zoomend', function(type) {
 	     var endZoom = this.getZoom();
 	     if(endZoom>=moralMap.getZooMConfine()){//������������������������
-	     		loadOverlays("getequipments",addOverEquipments);
+	     		loadOverlays("get-devices",addOverEquipments);
 	     }else{
 				loadOverlays("get-monitorpoints",addOverMpoints);
 	     }
@@ -390,7 +383,7 @@
 	moralMap.addEventListener('moveend', function(type) {
 	     var endZoom = this.getZoom();
 	     if(endZoom>=moralMap.getZooMConfine()){//������������������������
-	     		loadOverlays("getequipments",addOverEquipments);
+	     		loadOverlays("get-devices",addOverEquipments);
 	     }else{
 				loadOverlays("get-monitorpoints",addOverMpoints);
 	     }
@@ -449,7 +442,7 @@
         parma["orgId"] = moralMap['params']["orgId"];
         $.ajax({
 			type: "post",
-			url: "getstatesformap",
+			url: "get-real-state-data",
 			data:JSON.stringify(parma),
 			dataType:"json",
 			contentType:"application/json;charset=utf-8",

--
Gitblit v1.8.0