package com.mgm.mcrm.common.services; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.mgm.mcrm.booking.dtos.search.DateRange; import com.mgm.mcrm.common.constants.SysCommon; import com.mgm.mcrm.common.dtos.http_util.HttpRequestDefine; import com.mgm.mcrm.common.dtos.http_util.HttpResponseResult; import com.mgm.mcrm.common.utils.DateTimeUtil; import com.mgm.mcrm.common.utils.HttpUtil; import com.mgm.mcrm.common.utils.LogUtil; import com.mgm.mcrm.common.utils.mockup.HttpUtilMockup; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Strings; import org.springframework.stereotype.Service; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @Service public class MGMApiService { public static String ESB_APP_ID = ""; public static String ESB_APP_SECRET = ""; public static String ESB_Server = ""; public static String ESB_ACCESS_TOKEN = null; public static Date ESB_EXPIRED_TIME = new Date(); private static final String API_GET_ACCESS_TOKEN = "/RequestAccessToken"; private static final String API_GET_PLAYER_PROFILE = "/GetReportingLinePlayerInfo"; private static final String API_CHECK_PLAYER_TPD = "/GetRoomBookingQualificationStatus"; private static final String API_GET_USER_INFO = "/GetLoginUserInfo"; private static final String API_NON_MGM_BOOKING = "/GetNonMGMRoomBookingRecord"; private static final String API_WAITLIST_BOOKING = "/GetRoomBookingWaitList"; private static final String API_CHECK_SECOND_ROOM_TPD = "/GetMultiRoomBookingQualificationStatus"; private static final String API_CHECK_APPROVER = "/CheckApprover"; private static final String API_WAITLIST_DATA = "/GetWaitlistData"; private static final String API_GET_ALL_PLAYER_PROFILE = "/GetPlayerInfo"; private static final String API_GET_TODO_DASHBOARD = "/GetDashboardData"; private static final String API_GET_TODO_DETAIL = "/GetTodolistDetails"; private static final String API_GET_APPROVER_DATA="/RequestWaitlistData"; private static final String API_GET_APPROVER="/RequestRoomBookingApprovalRouting"; private static final String API_GET_TODO_LIST = "/GetTodolist"; private static final String API_REQUEST_ROOM_CALENDAR = "/RequestRoomCalendar"; public HttpResponseResult invokeRequestRoomCalendar( String playerId, String property, String roomType, String startDate, String endDate) throws Exception { return invokeRequestRoomCalendar(playerId, property, roomType, startDate, endDate, 0); } public HttpResponseResult invokeRequestRoomCalendar( String playerId, String property, String roomType, String startDate, String endDate, int type) throws Exception { JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); requestHeader.put("Authorization", getAccessToken()); if (StringUtils.isNotBlank(playerId)) { requestObj.put("PlayerId", playerId); } requestObj.put("Property", property); requestObj.put("RoomType", roomType); requestObj.put("StartDate", startDate); requestObj.put("EndDate", endDate); return invokeESBAPI(ESB_Server, API_REQUEST_ROOM_CALENDAR, requestObj, "POST", requestHeader, type); } public HttpResponseResult invokeGetPlayerProfile( String playerId, String userId) throws Exception { HttpResponseResult result; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); String token = getAccessToken(); requestHeader.put("Authorization", token); requestHeader.put("PlayerId", playerId); requestHeader.put("UserId", userId); requestObj.put("playerId", playerId); requestObj.put("userId", userId); result = this.invokeESBAPI(ESB_Server, API_GET_PLAYER_PROFILE, requestObj, "GET", requestHeader); return result; } public HttpResponseResult invokeGetAllPlayerProfile(String playerId) throws Exception { HttpResponseResult result; String apiLink = SysCommon.mgmApiMockup ? API_GET_PLAYER_PROFILE : API_GET_ALL_PLAYER_PROFILE; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); String token = getAccessToken(); requestHeader.put("Authorization", token); requestHeader.put("PlayerId", playerId); requestObj.put("playerId", playerId); result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "GET", requestHeader); return result; } public HttpResponseResult invokeCheckPlayerTPD( String playerId, String roomCate, List dates, String bookingType, String property) throws Exception { HttpResponseResult result; String apiLink = API_CHECK_PLAYER_TPD; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); String token = getAccessToken(); requestHeader.put("Authorization", token); requestHeader.put("PlayerId", playerId); requestHeader.put("RoomCategory", roomCate); requestHeader.put("BookingType", bookingType); requestHeader.put("Property", property); requestHeader.put("StartDate", dates.getFirst()); requestHeader.put("EndDate", dates.getLast()); requestObj.put("playerId", playerId); requestObj.put("roomCategory", roomCate); requestObj.put("startDate", dates.getFirst()); requestObj.put("endDate", dates.getLast()); result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "GET", requestHeader, 1); return result; } public HttpResponseResult invokeGetApprover(String playerId,String bookingType,String property,String roomCategory,String checkInDate,String checkOutDate,String userId) throws Exception { HttpResponseResult result = null; String apiLink =API_GET_APPROVER; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap(); String token = getAccessToken(); requestHeader.put("Authorization", token); requestObj.put("PlayerId", playerId); requestObj.put("BookingType", bookingType); requestObj.put("Property", property); requestObj.put("RoomCategory", roomCategory); requestObj.put("StartDate", checkInDate); requestObj.put("EndDate", checkOutDate); requestObj.put("UserId", userId); result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "POST", requestHeader); return result; } public HttpResponseResult invokeGetApprovalData(String bookingId) throws Exception { HttpResponseResult result = null; String apiLink =API_GET_APPROVER_DATA; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap(); String token = getAccessToken(); requestHeader.put("Authorization", token); requestObj.put("BookingId", bookingId); result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "POST", requestHeader); return result; } public HttpResponseResult invokeCheckApprover( String userId, String userName, String roomType, String property) throws Exception { HttpResponseResult result; String apiLink = API_CHECK_APPROVER; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); String token = getAccessToken(); requestHeader.put("Authorization", token); if (!StringUtils.isEmpty(userId)) { requestObj.put("UserId", userId); } if (!StringUtils.isEmpty(userName)) { requestObj.put("UserName", userName); } requestObj.put("RoomCategory", roomType); requestObj.put("Property", property); result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "POST", requestHeader); return result; } public HttpResponseResult invokeGetUserInfo(String userId, String userName) throws Exception { HttpResponseResult result; String apiLink = API_GET_USER_INFO; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); String token = getAccessToken(); requestHeader.put("Authorization", token); if (!StringUtils.isEmpty(userId)) { requestHeader.put("UserId", userId); requestObj.put("userId", userId); } if (!StringUtils.isEmpty(userName)) { requestHeader.put("UserName", userName); requestObj.put("userName", userName); } result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "GET", requestHeader); return result; } public HttpResponseResult invokeNonMGMBooking(String playerId) throws Exception { HttpResponseResult result; String apiLink = API_NON_MGM_BOOKING; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); String token = getAccessToken(); requestHeader.put("Authorization", token); requestHeader.put("PlayerId", playerId); requestObj.put("playerId", playerId); result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "GET", requestHeader); return result; } public HttpResponseResult invokeWaitlistBooking(String playerId) throws Exception { HttpResponseResult result; String apiLink = API_WAITLIST_BOOKING; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); String token = getAccessToken(); requestHeader.put("Authorization", token); requestHeader.put("PlayerId", playerId); result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "GET", requestHeader); return result; } public HttpResponseResult invokeWaitlistData(String bookIds, int categoryType) throws Exception { HttpResponseResult result; String apiLink = API_WAITLIST_DATA; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); String token = getAccessToken(); requestHeader.put("Authorization", token); requestObj.put("BookingId", bookIds); result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "POST", requestHeader, categoryType); return result; } public HttpResponseResult invokeCheckPlayerSecondTPD( String playerId, String roomCate, List dateRange, String bookingType, String property) throws Exception { HttpResponseResult result; String apiLink = API_CHECK_SECOND_ROOM_TPD; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); String token = getAccessToken(); requestHeader.put("Authorization", token); requestObj.put("PlayerId", playerId); requestObj.put("RoomCategory", roomCate); requestObj.put("BookingType", bookingType); requestObj.put("Property", property); requestObj.put("DateRange", dateRange); result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "POST", requestHeader); return result; } public String getAccessToken() throws Exception { String token = ESB_ACCESS_TOKEN; if (SysCommon.mgmApiMockup) return token; ESB_APP_ID = SysCommon.apiConfig.getApiKey_ESB(); ESB_APP_SECRET = SysCommon.apiConfig.getApiSecret_ESB(); ESB_Server = SysCommon.apiConfig.getServerUrl_ESB(); if (token == null || ESB_EXPIRED_TIME.getTime() < new Date().getTime()) { String apiLink = API_GET_ACCESS_TOKEN; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); requestObj.put("AppId", ESB_APP_ID); requestObj.put("AppSecret", ESB_APP_SECRET); HttpResponseResult result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "POST", requestHeader); if (result.getStatusCode() == 200) { JSONObject resultObj = JSONObject.parseObject(result.getResponseContent()); String status = resultObj.getString("StatusCode"); if (Strings.CS.equals("OK", status)) { token = resultObj.getString("Token"); ESB_EXPIRED_TIME = DateTimeUtil.getDateFromString(resultObj.getString("ExpireTime"), "yyyy-MM-dd HH:mm:ss"); ESB_ACCESS_TOKEN = token; } else { token = null; ESB_ACCESS_TOKEN = null; ESB_EXPIRED_TIME = new Date(); } } } return token; } public HttpResponseResult invokeGetTodoDashboard( String userId, int categoryType) throws Exception { HttpResponseResult result; String apiLink = API_GET_TODO_DASHBOARD; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); String token = getAccessToken(); requestHeader.put("Authorization", token); requestObj.put("UserId", userId); result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "POST", requestHeader, categoryType); return result; } public HttpResponseResult invokeGetTodoDetail( String playerId, String todoCategory, String todoSegment, String date, int categoryType) throws Exception { HttpResponseResult result; String apiLink = API_GET_TODO_DETAIL; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); String token = getAccessToken(); requestHeader.put("Authorization", token); requestObj.put("PlayerId", playerId); requestObj.put("TodoCategory", todoCategory); requestObj.put("TodoSegment", todoSegment); requestObj.put("Date", date); result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "POST", requestHeader, categoryType); return result; } public HttpResponseResult invokeGetTodoList( String userId, String category, String type, Date startDate, Date endDate, int categoryType) throws Exception { HttpResponseResult result; String apiLink = API_GET_TODO_LIST; JSONObject requestObj = new JSONObject(); Map requestHeader = new HashMap<>(); String token = getAccessToken(); requestHeader.put("Authorization", token); requestObj.put("UserId", userId); requestObj.put("TodoCategory", category); requestObj.put("TodoSegment", type); requestObj.put("StartDate", startDate); requestObj.put("EndDate", endDate); result = this.invokeESBAPI(ESB_Server, apiLink, requestObj, "POST", requestHeader, categoryType); return result; } // 如果不设置type,默认call opera public HttpResponseResult invokeESBAPI( String serverType, String requestLink, JSONObject requestContent, String requestMethod, Map requestHeader) throws Exception { return invokeESBAPI(serverType, requestLink, requestContent, requestMethod, requestHeader, 0); } /** * * @param serverType n * @param requestLink n * @param requestContent n * @param requestMethod n * @param requestHeader n * @param type 0 - opera, 1 - daylight * @return n * @throws Exception e */ public HttpResponseResult invokeESBAPI( String serverType, String requestLink, JSONObject requestContent, String requestMethod, Map requestHeader, int type) throws Exception { String serverUrl; int timeoutTime; if (Strings.CS.equals(serverType, ESB_Server)) { serverUrl = SysCommon.apiConfig.getServerUrl_ESB(); timeoutTime = SysCommon.apiConfig.getTimeout_ESB(); } else { throw new Exception("Invalid server type"); } if (type == 1) { requestLink = "/Daylight" + requestLink; } HttpRequestDefine requestDef = new HttpRequestDefine(); String requestUrl = serverUrl + requestLink; requestDef.setRequestUrl(requestUrl); requestDef.setRequestMethod(requestMethod); requestDef.setTimeout(timeoutTime); requestHeader.put("Content-type", "application/json;charset=utf-8"); requestDef.setHeaders(requestHeader); if (requestContent != null) { requestDef.setEntityContent(requestContent.toString()); } else { requestDef.setEntityContent(""); } // -- //Get Start,EndTime long spanTime; Date startTime = new Date(); Date endTime; LogUtil.info(MGMApiService.class, "[invokeESBAPI] start request:"); HttpResponseResult httpResult = SysCommon.mgmApiMockup ? HttpUtilMockup.processHttpRequest(requestDef) : HttpUtil.processHttpRequest(requestDef); httpResult.setRequestContent(requestDef.getEntityContent()); //RefreshEndTime endTime = new Date(); //Get Spend Time Gson gson = new Gson(); spanTime = DateTimeUtil.getTimeSpanSSS(startTime, endTime); LogUtil.info(MGMApiService.class, "[invokeESBAPI]getRequestUrl:" + gson.toJson(requestDef.getRequestUrl())); LogUtil.info(MGMApiService.class, "[invokeESBAPI]getHeaders:" + gson.toJson(requestDef.getHeaders())); LogUtil.info(MGMApiService.class, "[invokeESBAPI]getRequestMethod:" + gson.toJson(requestDef.getRequestMethod())); LogUtil.info(MGMApiService.class, "[invokeESBAPI]getEntityContent:" + gson.toJson(requestContent)); LogUtil.info(MGMApiService.class, "[invokeESBAPI]getStatusCode:" + gson.toJson(httpResult.getStatusCode())); LogUtil.info(MGMApiService.class, "[invokeESBAPI]getErrorMessage:" + gson.toJson(httpResult.getErrorMessage())); LogUtil.info(MGMApiService.class, "[invokeESBAPI]getResponseContent:" + gson.toJson(httpResult.getResponseContent())); //Log Spend Time LogUtil.info(MGMApiService.class, "[invokeESBAPI]SpendTime:" + spanTime + "ms"); return httpResult; } }