Ver Fonte

버그수정, 기기명 한글로 변경

pangs há 6 anos atrás
pai
commit
aeb9241f95

+ 69 - 2
src/main/java/com/icontrols/kakao/common/THINGS_INFO.java

@@ -12,9 +12,10 @@ public final class THINGS_INFO {
 	
 	public enum THINGS_CAPABILITY{
 		LIGHT("light","{\"capabilities\" : [ { \"name\" : \"Power\" } ]}"),
-		TEMPER("temper", "{\"capabilities\" : [ { \"name\" : \"Power\" }, { \"name\" : \"Temperature\" }, { \"name\" : \"TemperatureSetPoint\" } ]}"),
+		TEMPER("temper", "{\"capabilities\" : [ { \"name\" : \"Power\" }, { \"name\" : \"Temperature\" }, { \"name\" : \"TemperatureSetpoint\" } ]}"),
 		VENTIL("ventil","{\"capabilities\" : [ { \"name\" : \"Power\" }, { \"name\" : \"AirFlow\" } ]}"),
-		GAS("gas","{\"capabilities\" : [ { \"name\" : \"Lock\" } ] }");
+		GAS("gas","{\"capabilities\" : [ { \"name\" : \"Lock\" } ] }"),
+		ELEVATOR("elevator", "{\"capabilities\" : [ { \"name\" : \"ElevatorCall\" } ] }");
 		
 		private String thingsName;
 		private String capJsonStr;
@@ -35,7 +36,61 @@ public final class THINGS_INFO {
 		public void setCapJsonStr(String capJsonStr) {
 			this.capJsonStr = capJsonStr;
 		}
+	}
+	
+	public enum DEVICE_DETAIL{
+		LIVINGLIGHT	("livinglight", 	"Light", 			"거실조명"),
+		LIGHT01		("light01",			"Light",			"안방조명"),
+		LIGHT02		("light02",			"Light",			"서재조명"),
+		LIGHT03		("light03",			"Light",			"작은방조명"),
+		LIGHT04		("light04",			"Light",			"주방조명"),
+		VENTIL		("ventil",			"AirVentilator",	"환기"),
+		GAS			("gas",				"GasValve",			"가스밸브"),
+		ELEVATOR	("ElevatorCaller",	"ElevatorCaller",	"엘리베이터"),
+		TEMPER1		("temper_1",		"FloorHeater",		"거실난방"),
+		TEMPER2		("temper_2",		"FloorHeater",		"안방난방"),
+		TEMPER3		("temper_3",		"FloorHeater",		"서재난방"),
+		TEMPER4		("temper_4",		"FloorHeater",		"작은방난방"),
+		TEMPER5		("temper_5",		"FloorHeater",		"주방난방")
+		;
+		
+		
+		private String modelId;
+		
+		private String displayType;
+		
+		private String displayName;
+
 		
+		private DEVICE_DETAIL(String modelId, String displayType, String displayName) {
+			this.modelId = modelId;
+			this.displayType = displayType;
+			this.displayName = displayName;
+		}
+
+		public String getModelId() {
+			return modelId;
+		}
+
+		public void setModelId(String modelId) {
+			this.modelId = modelId;
+		}
+
+		public String getDisplayType() {
+			return displayType;
+		}
+
+		public void setDisplayType(String displayType) {
+			this.displayType = displayType;
+		}
+
+		public String getDisplayName() {
+			return displayName;
+		}
+
+		public void setDisplayName(String displayName) {
+			this.displayName = displayName;
+		}
 		
 	}
 	public enum THINGS{
@@ -111,6 +166,18 @@ public final class THINGS_INFO {
 		return things == null ? false:true;
 	}
 	
+	public static THINGS_INFO.DEVICE_DETAIL getDeviceInfo(String modelId){
+		THINGS_INFO.DEVICE_DETAIL[] list = THINGS_INFO.DEVICE_DETAIL.values();
+		
+		for(THINGS_INFO.DEVICE_DETAIL deviceDetail : list) {
+			if(deviceDetail.getModelId().equals(modelId)) {
+				return deviceDetail;
+			}
+		}
+		
+		return null;
+	}
+	
 	public static THINGS_INFO.THINGS getThingsType(String modelId){    
 		
 		ThingsInfoRepository repo = (ThingsInfoRepository)BeanUtils.getBean("thingsInfoRepository");

+ 16 - 13
src/main/java/com/icontrols/kakao/controller/KakaoDanziController.java

@@ -66,19 +66,6 @@ public class KakaoDanziController {
 			e.printStackTrace();
 		}
 		
-//		if(!header.containsKey(SERVERINFO.HEADER_AUTH)) {
-//			params.put(KEY_INFO.HTTP_KEY_ERROR, KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_INVALID_CLIENT));
-//			return params;
-//		}else {
-//			String authorization =  request.getHeader(SERVERINFO.HEADER_AUTH);
-//			logger.info(authorization);
-//			int validation_auth = CommonUtil.validateHeaderAuth(authorization);
-//			if(validation_auth != KAKAO_RESULT.SUCCESS) {
-//				params.put(KEY_INFO.HTTP_KEY_ERROR, KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_INVALID_CLIENT));
-//				return params;
-//			}
-//		}
-		
 		logger.debug("KAKAO/DANZI %s"+ params.toString());
 		
 		// 인증은 여기서 해야하나??  Interceptor에서 해야하나?? 일단 그부분은 고민을 해보자.
@@ -120,6 +107,21 @@ public class KakaoDanziController {
 			logger.info("[REQUEST INBOUD] reqType = " + reqType);
 			
 			if(reqType.equals(TYPE.REQ_TYPE.GRANTAUTH.getTypeName())) {
+				// grantauth 인 경우에만 헤더의 인증 필드를 검증한다.
+				
+				if(!header.containsKey(SERVERINFO.HEADER_AUTH)) {
+					params.put(KEY_INFO.HTTP_KEY_ERROR, KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_INVALID_CLIENT));
+					return params;
+				}else {
+					String authorization =  request.getHeader(SERVERINFO.HEADER_AUTH);
+					logger.info(authorization);
+					int validation_auth = CommonUtil.validateHeaderAuth(authorization);
+					if(validation_auth != KAKAO_RESULT.SUCCESS) {
+						params.put(KEY_INFO.HTTP_KEY_ERROR, KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_INVALID_CLIENT));
+						return params;
+					}
+				}
+				
 				// 카카오 홈과 유저의 인증 완료시 카카오에서 전송해주는 API TYPE
 				// 건내받은 토큰 정보를 DB에 저장해야 한다.
 				retMap = kakaoService.request_grantAuthorization(params);
@@ -130,6 +132,7 @@ public class KakaoDanziController {
 				// 월패드와 연결된 기기중 endpointIds에 포함된 기기의 상태값을 확인한다.
 				retMap = kakaoService.request_queryState(params);
 			} else if(reqType.equals(TYPE.REQ_TYPE.UPDATESTATE.getTypeName())) {
+				logger.info("Update_state --> params \r\n" + params.toString());
 				// 월패드와 연결된 기기의 상태를 번경한다. 
 				retMap = kakaoService.request_updateState(params);
 			}else {

+ 20 - 7
src/main/java/com/icontrols/kakao/service/impl/KakaoExtensionServiceImpl.java

@@ -103,6 +103,8 @@ public class KakaoExtensionServiceImpl implements KakaoExtensionService {
 		
 		Map<String, Object> listMap = kMsgHandler.getDevicesStatusList(dong, ho);
 		param.putAll(listMap);
+		
+		logger.info("[request_discover] - result = \r\n" + param);
 		return param;
 	}
 	
@@ -117,7 +119,7 @@ public class KakaoExtensionServiceImpl implements KakaoExtensionService {
 		
 		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> endpointIds = body.containsKey(KEY_INFO.BODY_KEY_ENDPOINT_IDS)?(ArrayList)body.get(KEY_INFO.BODY_KEY_ENDPOINT_IDS):null;
 		List<String> unreachableIds = new ArrayList<String>();
 		Map<String, Object> allDeviceMap = (Map<String, Object>) kMsgHandler.getDevicesStatusList(dong, ho).get(KEY_INFO.HTTP_KEY_BODY);
 		
@@ -125,13 +127,22 @@ public class KakaoExtensionServiceImpl implements KakaoExtensionService {
 		
 		logger.info(allDeviceMap.toString());
 		try {
+			if(endpointIds == null) {
+				body.clear();
+				body.put(KEY_INFO.HTTP_KEY_ERROR,KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_INVALID_REQ));
+				param.put(KEY_INFO.HTTP_KEY_BODY, body);
+				
+				return param;
+			}
+			
 			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);
+					body.clear();
+					body.put(KEY_INFO.HTTP_KEY_ERROR,KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_NONEXIST));
+					param.put(KEY_INFO.HTTP_KEY_BODY, body);
 					
 					return param;
 				}
@@ -156,8 +167,9 @@ public class KakaoExtensionServiceImpl implements KakaoExtensionService {
 			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);
+			body.clear();
+			body.put(KEY_INFO.HTTP_KEY_ERROR,KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_INTERNAL));
+			param.put(KEY_INFO.HTTP_KEY_BODY, body);
 			e.printStackTrace();
 			return param;
 		}
@@ -186,14 +198,15 @@ public class KakaoExtensionServiceImpl implements KakaoExtensionService {
 		
 		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);
+			retMap = new HashMap<String, Object>();
+			retMap.put(KEY_INFO.HTTP_KEY_ERROR, 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);
 			param.remove(KEY_INFO.HTTP_KEY_BODY);
+			param.put(KEY_INFO.HTTP_KEY_BODY, retMap);
 		}
 		else
 			param.put(KEY_INFO.HTTP_KEY_BODY, kMsgHandler.sendDeviceAction(dong, ho, endpointId, capabilityName, desired));

+ 21 - 6
src/main/java/com/icontrols/kakao/socket/wallpad/KakaoMsgHandler.java

@@ -206,10 +206,18 @@ public class KakaoMsgHandler {
 		}catch(Exception e) {
 			retMap.put(KEY_INFO.HTTP_KEY_ERROR, KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_INTERNAL));
 			logger.error("[ERROR] - " + e.getMessage());
-		}finally {
-			retMap.put(KEY_INFO.HTTP_KEY_UNREACHABLEIDS, unreachableIds);
-			retMap.put(KEY_INFO.HTTP_KEY_BODY, body);
 		}
+		// elevator는 하드코딩.
+		Map<String, Object> eleMap = new HashMap<String, Object>();
+		eleMap.put("displayType", THINGS_INFO.THINGS.ELEVATOR.getKakaoDisplayName());
+		eleMap.putAll(getDeviceCapabilities(THINGS_INFO.THINGS.ELEVATOR.getThingsName()));
+		eleMap.put("endpointId", THINGS_INFO.THINGS.ELEVATOR.getKakaoDisplayName());
+		eleMap.put("name", THINGS_INFO.THINGS.ELEVATOR.getKakaoDisplayName());
+		eleMap.put("state", new HashMap<String, Object>());
+		
+		body.put(THINGS_INFO.THINGS.ELEVATOR.getKakaoDisplayName(), eleMap);
+		retMap.put(KEY_INFO.HTTP_KEY_UNREACHABLEIDS, unreachableIds);
+		retMap.put(KEY_INFO.HTTP_KEY_BODY, body);
 		
 		return retMap;
 	}
@@ -422,6 +430,9 @@ public class KakaoMsgHandler {
 		case THINGS_INFO.THINGS_VENTIL:
 			jsonString = THINGS_INFO.THINGS_CAPABILITY.VENTIL.getCapJsonStr();
 			break;
+		case THINGS_INFO.THINGS_ELEVATOR:
+			jsonString = THINGS_INFO.THINGS_CAPABILITY.ELEVATOR.getCapJsonStr();
+			break;
 		case THINGS_INFO.THINGS_ELECPLUG:
 			break;
 		}
@@ -454,13 +465,17 @@ public class KakaoMsgHandler {
 			String status = cNode.getTextContent();
 			String endpointId = cNodeName+"_"+cNodeDevNum;
 			
-			THINGS_INFO.THINGS things = THINGS_INFO.getThingsType(cNodeName);
+			String tmpModelId = cNodeName.equals("temper")?endpointId:cNodeName;
+			
+			THINGS_INFO.DEVICE_DETAIL detailDev = THINGS_INFO.getDeviceInfo(tmpModelId);
+			
+//			THINGS_INFO.THINGS things = THINGS_INFO.getThingsType(cNodeName);
 			
 			Map<String, Object> deviceInfo =  new HashMap<String, Object>();
 			
 			deviceInfo.put(KEY_INFO.BODY_KEY_ENDPOINT_ID, endpointId);
-    		deviceInfo.put(KEY_INFO.BODY_KEY_NAME, cNodeName.toUpperCase() + " " + cNodeDevNum);
-    		deviceInfo.put(KEY_INFO.BODY_KEY_DISPLAY_TYPE, things.getKakaoDisplayName());
+    		deviceInfo.put(KEY_INFO.BODY_KEY_NAME, detailDev.getDisplayName()+cNodeDevNum);
+    		deviceInfo.put(KEY_INFO.BODY_KEY_DISPLAY_TYPE, detailDev.getDisplayType());
     		
     		deviceInfo.putAll(getDeviceCapabilities(endpointId));
     		deviceInfo.put(KEY_INFO.BODY_KEY_STATE, setDeviceState(endpointId, status));

+ 1 - 1
src/main/resources/logback-spring.xml

@@ -20,7 +20,7 @@
         </encoder>
     </appender>
 
-    <logger name="com.icontrols.kakao" level="DEBUG"></logger>
+    <logger name="com.icontrols.kakao" level="INFO"></logger>
 
     <root level="INFO">
         <appender-ref ref="dailyRollingFileAppender" />