|
@@ -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);
|