Parcourir la source

디바이스 DB화 - 기기상태 조회 방식 변경

pangs il y a 6 ans
Parent
commit
6f07b097d8

+ 4 - 0
src/main/java/com/icontrols/kakao/entity/ThingsInfo.java

@@ -31,6 +31,10 @@ public class ThingsInfo implements Serializable{
 	@Column(name = "ho")
 	private String ho;
 
+	public ThingsInfo() {
+		super();
+	}
+	
 	public ThingsInfo(String endpointId, String modelId, String dong, String ho) {
 		super();
 		this.modelId = modelId;

+ 49 - 60
src/main/java/com/icontrols/kakao/service/impl/KakaoExtensionServiceImpl.java

@@ -20,7 +20,9 @@ import com.icontrols.kakao.common.utils.CommonUtil;
 import com.icontrols.kakao.common.utils.JWTUtils2;
 import com.icontrols.kakao.config.AsyncConfig;
 import com.icontrols.kakao.entity.DonghoInfo;
+import com.icontrols.kakao.entity.ThingsInfo;
 import com.icontrols.kakao.repo.DonghoInfoRepository;
+import com.icontrols.kakao.repo.ThingsInfoRepository;
 import com.icontrols.kakao.service.KakaoExtensionService;
 import com.icontrols.kakao.socket.wallpad.KakaoMsgHandler;
 import com.icontrols.kakao.socket.wallpad.WallpadMsgSender;
@@ -41,6 +43,9 @@ public class KakaoExtensionServiceImpl implements KakaoExtensionService {
 	@Autowired
 	DonghoInfoRepository donghoRepository;
 	
+	@Autowired
+	ThingsInfoRepository thingsInfoRepository;
+	
 	@Override
 	public Map<String, Object> request_grantAuthorization(Map<String, Object> param) throws Exception {
 		String dong_ho = JWTUtils2.getHomeIdFromToken((String)param.get(KEY_INFO.HTTP_KEY_AUTHORIZATION));
@@ -109,73 +114,52 @@ public class KakaoExtensionServiceImpl implements KakaoExtensionService {
 		
 		int dong = 802;
 		int ho = 1103;
+		
 		Map <String, Object> body = (HashMap)param.get(KEY_INFO.HTTP_KEY_BODY);
 		
 		List<String> endpointIds = (ArrayList)body.get(KEY_INFO.BODY_KEY_ENDPOINT_IDS);
 		List<String> unreachableIds = new ArrayList<String>();
+		Map<String, Object> allDeviceMap = (Map<String, Object>) kMsgHandler.getDevicesStatusList(dong, ho).get(KEY_INFO.HTTP_KEY_BODY);
 		
-		List<CompletableFuture<Map<String, Object>>> fList = new ArrayList<>();
-		
-		body.clear();
-		for(String endpointId:endpointIds) {
-			while(true) {
-    			if(asyncConfig.isTaskExecute()) {
-    				fList.add(wallpadMsgSender.getDeviceStatus(dong, ho, endpointId));
-    				break;
-    			}
-    			Thread.sleep(1000);
-    		}
-		}
-		
+		Map<String, Object> retMap = new HashMap<String, Object>();
 		
-		CompletableFuture.allOf(fList.toArray(new CompletableFuture[fList.size()])).join();
-		
-		logger.debug("******************************************************************************");
-        logger.debug("								ASYNC D END");
-        logger.debug("******************************************************************************");
-		
-        
-        boolean isError = false;
-		for(CompletableFuture<Map<String, Object>> future:fList) {
-        	Map<String, Object> retMap = future.get();
-        	
-        	String endpointId = (String)retMap.get(KEY_INFO.BODY_KEY_ENDPOINT_ID);
-        	logger.debug(endpointId + "-------->" + retMap.toString());
-        	
-        	if(retMap.containsKey(KEY_INFO.HTTP_KEY_ERROR)) {
-        		Map<String, Object> errMap = (Map<String, Object>)retMap.get(KEY_INFO.HTTP_KEY_ERROR);
-        		
-        		int errorCode = Integer.parseInt((String)errMap.get(KEY_INFO.ERROR_KEY_CODE));
-        		logger.error("errror code == " + errorCode);
-        		
-        		if(errorCode == KAKAO_RESULT.FAIL_UNREACHABLE) {
-        			unreachableIds.add(endpointId);
-        			
-        			HashMap<String, Object> tmpMap = new HashMap<String, Object>();
-        			tmpMap.put("power", "off");
-
-        			retMap.clear();
-        			retMap.put(endpointId, tmpMap);
-        			
-        			retMap.remove(KEY_INFO.BODY_KEY_ENDPOINT_ID);
-                	body.putAll(retMap);
-        		} else {
-        			isError = true;
-        			
-        			retMap.remove(KEY_INFO.BODY_KEY_ENDPOINT_ID);
-        			body = retMap;
-        			break;
-        		}
+		logger.info(allDeviceMap.toString());
+		try {
+			for(String endpointId:endpointIds) {
+				// 1. db 에서 해당 endpointId가 존재하는지 확인한다.
+				// 없으면 endpointId가 잘못된것 -203 에러를 뱉자.
+				List<ThingsInfo> thingsInfoList = thingsInfoRepository.findByDongAndHoAndEndpointId(Integer.toString(dong), Integer.toString(ho), endpointId);
+				if(thingsInfoList == null || thingsInfoList.size() == 0) {
+					param.putAll(KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_NONEXIST));
+					param.remove(KEY_INFO.HTTP_KEY_BODY);
+					
+					return param;
+				}
+				
+				// 2. allDeviceMap에서 해당 endpointId 를 조회하자.
+				// 없으면 연결이 해제된것 unreachable 배열에 추가하자
+				Map<String, Object> state = new HashMap<String, Object>();
+				
+				if(!allDeviceMap.containsKey(endpointId)) {
+					unreachableIds.add(endpointId);
+					state.put("power", "off");
+					logger.info("[" + endpointId + "] - unreachableId");
+				}else {
+					state = (Map<String, Object>)((Map<String, Object>)allDeviceMap.get(endpointId)).get("state");
+					logger.info("["+endpointId+"] - state = " + state );
+				}
+				
+				retMap.put(endpointId, state);
 			}
-        }
-		
-		if(!isError) {
-			param.put(KEY_INFO.HTTP_KEY_UNREACHABLEIDS, unreachableIds);
 			
-			param.put(KEY_INFO.HTTP_KEY_BODY, body);
-		}else {
+			body.remove(KEY_INFO.BODY_KEY_ENDPOINT_IDS);
+			body.putAll(retMap);
+			param.put(KEY_INFO.HTTP_KEY_UNREACHABLEIDS, unreachableIds);
+		}catch(Exception e) {
+			param.putAll(KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_INTERNAL));
 			param.remove(KEY_INFO.HTTP_KEY_BODY);
-			param.putAll(body);
+			e.printStackTrace();
+			return param;
 		}
 		
 		return param;
@@ -196,11 +180,16 @@ public class KakaoExtensionServiceImpl implements KakaoExtensionService {
 		
 		@SuppressWarnings("unchecked")
 		Map<String, Object> desired = (HashMap<String, Object>)body.get(KEY_INFO.BODY_KEY_DESIRED);
-		
+		Map<String, Object> retMap = null;
 		String endpointId = (String)body.get(KEY_INFO.BODY_KEY_ENDPOINT_ID);
 		String capabilityName = (String)body.get(KEY_INFO.BODY_KEY_CAPABILITY_NAME);
 		
-		Map<String, Object> retMap = kMsgHandler.sendDeviceAction(dong, ho, endpointId, capabilityName, desired);
+		List<ThingsInfo> thingsInfoList = thingsInfoRepository.findByDongAndHoAndEndpointId(Integer.toString(dong), Integer.toString(ho), endpointId);
+		if(thingsInfoList == null || thingsInfoList.size() == 0) {
+			retMap = KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_NONEXIST);
+		}else {
+			retMap = kMsgHandler.sendDeviceAction(dong, ho, endpointId, capabilityName, desired);
+		}
 		
 		if(retMap.containsKey(KEY_INFO.HTTP_KEY_ERROR)) {
 			param.putAll(retMap);

+ 1 - 1
src/main/java/com/icontrols/kakao/socket/wallpad/WallpadMsgSender.java

@@ -274,7 +274,7 @@ public class WallpadMsgSender {
 			.append(XMLGenerator.MakeXMLTail());			
 		}else {
 			sb.append(XMLGenerator.MakeXMLHeader(dong, ho, REMOTE_KIND.msg_home_device_set_control.getContents()))
-			.append("      <req_company>UPLUS</req_company>\r\n")
+			.append("      <req_company>kakao</req_company>\r\n")
 			.append("      <model_id>").append(modelId).append("</model_id>\r\n")
 			.append("      <dev_num>").append(devNum).append( "</dev_num>\r\n")
 			.append("      <action>").append(action).append("</action>\r\n")