This commit is contained in:
Mauve
2026-10-26 09:31:05 +08:00
parent 3a8a438668
commit 90cc47b14b
20 changed files with 576 additions and 233 deletions
+17 -2
View File
@@ -3,6 +3,21 @@ package com.mgm.mcrm;
public class TestRun {
public static void main(String[] args) {
Object[] arr = {"asdas", "null", 23, "asd", 's', 90L, 3.4F, 3.3};
System.out.println(nonNullAll(arr));
}
}
static boolean nonNullAll(Object ...arr) {
if (arr == null) return false;
if (arr.length == 0) return false;
for (Object o : arr) {
if (o == null) return false;
}
return true;
}
}
@@ -2,6 +2,7 @@ package com.mgm.mcrm.adfs.controllers;
import com.mgm.mcrm.adfs.config.HttpClientContextRequestFactory;
import com.mgm.mcrm.common.constants.SysCommon;
import com.mgm.mcrm.common.services.ConfigurableTrustHandler;
import com.mgm.mcrm.common.utils.AESUtil;
import com.mgm.mcrm.common.utils.LogUtil;
import com.mgm.mcrm.common.utils.NetworkUtil;
@@ -45,6 +46,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.util.HtmlUtils;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import java.io.*;
import java.net.InetAddress;
import java.net.URI;
@@ -75,6 +77,8 @@ public class SSORestProcessController {
private String adfsDomain;
@Value("${adfs_secret_key}")
private String adfsSecretKey;
@Value("${adfs_skip_ssl_validation:true}")
private boolean skipSslValidation=true;
@Value("${adfs_request_timeout}")
private int adfsRequestTimeout=10000;
@@ -208,11 +212,15 @@ public class SSORestProcessController {
credentials = createNtlmCredentials(adUserName, password, adDomain, null);
credentialsProvider.setCredentials(authScope, credentials);
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial((chain, authType) -> true) // 信任所有证书
.build();
NoopHostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
DefaultClientTlsStrategy tlsStrategy = new DefaultClientTlsStrategy(sslContext, hostnameVerifier);
ConfigurableTrustHandler trustHandler = new ConfigurableTrustHandler(skipSslValidation, SysCommon.getDefaultTrustManager(), SysCommon.getHttpApiServers());
SSLContext sslContext = null;
try {
sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{trustHandler}, null);
} catch (Exception ignored) {
}
DefaultClientTlsStrategy tlsStrategy = new DefaultClientTlsStrategy(sslContext, trustHandler);
PoolingHttpClientConnectionManager connectionManager =
PoolingHttpClientConnectionManagerBuilder.create()
.setTlsSocketStrategy(tlsStrategy)
@@ -828,19 +828,46 @@ public class ApprovalService {
if ("DAYLIGHT".equalsIgnoreCase(bookingView.getPropertyCategory())) {
isOverBook = false;
} else {
isOverBook = this.checkIsOverbook(bookingView.getRoomId(), bookingView.getCheckinDate(),
bookingView.getCheckoutDate(), bookingView.getPropertyId(), bookingView.getBlockId());
isOverBook = this.checkIsOverbook(bookingView.getRoomId(), originBooking.getCheckinDate(),
originBooking.getCheckoutDate(), bookingView.getPropertyId(), bookingView.getBlockId());
}
Boolean isOtherOverBook = this.checkOtherIsOverbook(Math.toIntExact(originBooking.getRoomId()), originBooking.getCheckoutDate(),
originBooking.getCheckinDate(), originBooking.getPropertyId(), originBooking.getSegmentId());
if (bookingView != null) {
bookingView.setCheckinDate(originBooking.getCheckinDate());
bookingView.setCheckoutDate(originBooking.getCheckoutDate());
Integer numOfNight = Integer.valueOf(DateTimeUtil.getDiffDate(
bookingView.getCheckinDate(), bookingView.getCheckoutDate(), "day"));
List<String> dates = new ArrayList<>();
List<JSONObject> dateList = new ArrayList<>();
JSONObject obj = new JSONObject();
for (int j = 0; j < numOfNight + 1; j++) {
dates.add(DateTimeUtil.getDateByFormat(DateTimeUtil.addDay(bookingView.getCheckinDate(), j), "yyyy-MM-dd"));
}
obj.put("date", dates);
obj.put("numOfNight", numOfNight);
obj.put("numOfRoom", 1);
obj.put("checked", true);
dateList.add(obj);
bookingView.setDateList(dateList);
bookingView.setNumOfNight(numOfNight);
originBooking.setDateList(JSONArray.toJSONString(dateList));
originBooking.setNumOfNight(numOfNight);
bookingView.setApproveStatus(originBooking.getApproveStatus());
bookingView.setApprovedAt(originBooking.getApprovedAt());
bookingView.setApprovedBy(originBooking.getApprovedBy());
bookingView.setApprovedId(originBooking.getApprovedId());
}
bookingDao.saveAndFlush(originBooking);
LogUtil.info(ApprovalService.class,"Submitting Approval.BookingID:"+bookingId+"|Save CheckinDate = "+originBooking.getCheckinDate()+" Save CheckoutDate = "+originBooking.getCheckoutDate());
if (Strings.CS.equals(originBooking.getBookType(),"0")){
//create 的情况
LogUtil.info(ApprovalService.class,"Submitting Approval.BookingID:"+bookingId+"|bookingType:Create");
bookingDao.save(originBooking);
BookingsView originBookingView = bookingViewDao.findById(Long.parseLong(bookingId));
BookingsView originBookingView = bookingView;
originBookingView = this.getEmailInfo(originBookingView,originBookingView.getCreatedBy()).getData();
// 判断是OPETA或OTHER Property
@@ -567,7 +567,7 @@ public class ConfigService {
while(checkInDate.getTime()<checkOutDate.getTime()) {
String getDate = DateTimeUtil.getDateByFormat(checkInDate, "yyyy-MM-dd");
if(checkMode==2&&!resultList.containsKey(getDate)) {
if(checkMode==2 && !resultList.containsKey(getDate) && checkInDate.getTime()>=today.getTime()) {
resultList.put(getDate,newCalendarEntry(getDate));
}
if(resultList.containsKey(getDate)){
@@ -613,7 +613,7 @@ public class ConfigService {
}
for(Date period:protectionPeriod) {
String date = DateTimeUtil.getDateByFormat(period, "yyyy-MM-dd");
if(checkMode==2&&!resultList.containsKey(date)) {
if(checkMode==2 && !resultList.containsKey(date) && period.getTime()>=today.getTime()) {
resultList.put(date,newCalendarEntry(date));
}
if(resultList.containsKey(date)){
@@ -169,7 +169,7 @@ public class DaylightApiService {
}
}
JSONObject jsonObject = this.daylightCallOperationUrl(operationUrl, dlPropertyId);
JSONObject jsonObject = this.daylightCallMultiOperationUrl(operationUrl, dlPropertyId);
if (jsonObject.isEmpty()) {
result.setSuccess(false);
@@ -502,9 +502,6 @@ public class DaylightApiService {
BaseApiResponse<String> result = new BaseApiResponse<>();
try {
if (CollectionUtils.isNotEmpty(dlSharerIds)) {
daylightRemoveAccompanyingGuest(dlReservationId, dlPropertyId, dlSharerIds, version);
}
String url = "/api-gateway/aggregator/v1/integrations/reservation/multiroom/cancel";
@@ -538,7 +535,7 @@ public class DaylightApiService {
}
}
JSONObject jsonObject = this.daylightCallOperationUrl(operationUrl, dlPropertyId);
JSONObject jsonObject = this.daylightCallMultiOperationUrl(operationUrl, dlPropertyId);
if (jsonObject.isEmpty()) {
result.setSuccess(false);
@@ -585,7 +582,7 @@ public class DaylightApiService {
return result;
}
private JSONObject daylightCallOperationUrl(String operationUrl, String dlPropertyId) {
private JSONObject daylightCallMultiOperationUrl(String operationUrl, String dlPropertyId) {
JSONObject jsonObject = new JSONObject();
try {
@@ -599,6 +596,9 @@ public class DaylightApiService {
int notRunCount = 0;
int inProgressCount = 0;
do {
// 让进程暂停1.5秒 by Mauve 20260909
TimeUnit.MILLISECONDS.sleep(2000L);
responseData = httpService.sslGet(operationUrl, headers, new HashMap<>());
JSONObject jsonObject1 = JSON.parseObject(responseData);
@@ -616,9 +616,6 @@ public class DaylightApiService {
if (string.contains("InProgress")) {
inProgressCount++;
}
// 让进程暂停1.5秒 by Mauve 20260909
TimeUnit.MILLISECONDS.sleep(1500L);
} while ((responseData.contains("InProgress") || responseData.contains("NotRun")) && notRunCount < 20 && inProgressCount < 50);
jsonObject = JSON.parseObject(responseData);
@@ -630,6 +627,60 @@ public class DaylightApiService {
return jsonObject;
}
private Boolean daylightCallOperationUrl(String operationUrl, String dlPropertyId) {
try {
Header[] headers = HttpHeaderBuilder.custom()
.contentType("application/json")
.ac_property_id(dlPropertyId)
.build();
String responseData;
Boolean result = false;
int notRunCount = 0;
int inProgressCount = 0;
do {
// 让进程暂停2秒 by Mauve 20260909
TimeUnit.MILLISECONDS.sleep(2000);
responseData = httpService.sslGet(operationUrl, headers, new HashMap<>());
JSONObject jsonObject1 = JSON.parseObject(responseData);
String string =
jsonObject1.getJSONObject("status").getString("operationStatus");
if (string.contains("Completed")) {
String string1 = jsonObject1.getJSONObject("data").getString("result");
if (string1.equals("Succeeded")) {
result = true;
}
break;
}
if (string.contains("Fail")) break;
if (string.contains("NotRun")) {
notRunCount++;
continue;
}
if (string.contains("InProgress")) {
inProgressCount++;
}
} while ((responseData.contains("InProgress") || responseData.contains("NotRun")) && notRunCount < 20 && inProgressCount < 50);
return result;
} catch (Exception e) {
log.error("Call operation url failed: {}", operationUrl, e);
}
return false;
}
private JSONObject buildCancelReservationRequest(String dlReservationId, String dlPropertyId) {
JSONObject json = new JSONObject();
@@ -679,13 +730,18 @@ public class DaylightApiService {
public DaylightReservationResponse getDaylightReservationByDlId(
String dlReservationId,
String dlPropertyId
String dlPropertyId,
boolean needExtend
) {
DaylightReservationResponse resultResponse;
try {
String url = "/api-gateway/booking/v1/reservations/" + dlReservationId
+ "?extend=PurchaseElements,CustomFields";
String url = "/api-gateway/booking/v1/reservations/" + dlReservationId;
if (needExtend) {
url = url + "?extend=PurchaseElements,CustomFields";
}
// 获取对应的值
Header[] headers = HttpHeaderBuilder.custom()
.contentType("application/json")
@@ -698,6 +754,8 @@ public class DaylightApiService {
resultResponse = JSON.parseObject(responseData, DaylightReservationResponse.class);
} catch (Exception e) {
log.error("[DL-RESV-DEBUG] getDaylightReservationByDlId exception, dlReservationId={}, dlPropertyId={}",
dlReservationId, dlPropertyId, e);
throw new RuntimeException(e);
}
@@ -1065,12 +1123,15 @@ public class DaylightApiService {
}
log.info("[getBookingRecordByProfileId_Optimize] totalProperties={}, profileId={}", properties.size(), profileId);
// String currentDate = DateTimeUtil.getCurrentDate("yyyy-MM-dd");
String month3 = DateTimeUtil.addDay(new Date(), -90, "yyyy-MM-dd");
String currentDate = DateTimeUtil.getCurrentDate("yyyy-MM-dd");
String url = "/api-gateway/aggregator/v1/reservations?pageNumber=1&pageSize=40&filter=profileId==" + profileId
+ ";(statusCode.code==DI,statusCode.code==RS,statusCode.code==DO,statusCode.code==IH,statusCode.code==CX)"
// + ";departureDate=ge=" + currentDate
String url = "/api-gateway/aggregator/v1/reservations?pageNumber=1&pageSize=50&filter=profileId==" + profileId
+ ";(statusCode.code==DI,statusCode.code==RS,statusCode.code==DO,statusCode.code==IH,statusCode.code==NS,"
+ "statusCode.code==CX"+ ";arrivalDate=ge=" + month3+ ")"
+ ";departureDate=ge=" + currentDate
+ "&extend=PurchaseElements,CustomFields,Breakdown,DoorKeys,Notes&sort=-createdAt";
Map<String, Object> map = new HashMap<>();
try {
for (CfgProperties property : properties) {
@@ -1370,66 +1431,6 @@ public class DaylightApiService {
return result;
}
public BaseApiResponse<String> updateDaylightCompRule(
String dlAccountId,
String dlPropertyId,
String dlCompRuleId,
String version,
UpdateCompRuleRequest request
) {
try {
String url = "/api-gateway/cashiering/v1/accounts/" + dlAccountId + "/complimentary-rules/" + dlCompRuleId;
Header[] headers = HttpHeaderBuilder.custom()
.contentType("application/json")
.ac_property_id(dlPropertyId)
.ifMatch(String.valueOf(version))
.build();
return updateCompRule(url, headers, request);
} catch (Exception e) {
BaseApiResponse<String> response = new BaseApiResponse<>();
response.setSuccess(false);
response.setMessage(e.getMessage());
LogUtil.error(DaylightApiService.class, e.getMessage());
return response;
}
}
public BaseApiResponse<CompRuleResponse> getDaylightCompRule(
String dlPropertyId,
String dlAccountId,
String dlCompRuleId
) {
BaseApiResponse<CompRuleResponse> response = new BaseApiResponse<>();
try {
String url = "/api-gateway/cashiering/v1/accounts/" + dlAccountId + "/complimentary-rules/" + dlCompRuleId;
Header[] headers = HttpHeaderBuilder.custom()
.contentType("application/json")
.ac_property_id(dlPropertyId)
.build();
Map<String, Object> map = new HashMap<>();
HttpResult httpResult = httpService.sslGetHttpResult(url, headers, map);
if (httpResult.getStatusCode() == 200) {
CompRuleResponse crr = JSON.parseObject(httpResult.getResult(), CompRuleResponse.class);
response.setSuccess(true);
response.setData(crr);
}
} catch (Exception e) {
response.setSuccess(false);
response.setMessage(e.getMessage());
LogUtil.error(DaylightApiService.class, e.getMessage());
}
return response;
}
public BaseApiResponse<String> updateDaylightCompRule(
String dlAccountId,
String dlPropertyId,
@@ -1520,7 +1521,7 @@ public class DaylightApiService {
return result;
}
public BaseApiResponse<String> createDaylightCompRule(
public BaseApiResponse<List<String>> createDaylightCompRule(
String dlAccountId,
String profileId,
String dlPropertyId,
@@ -1532,8 +1533,29 @@ public class DaylightApiService {
List<CfgExceptionDaylightView> exceptionDaylightViewList,
String miscCharge
) {
return createDaylightCompRule(dlAccountId, profileId, dlPropertyId, userId, roomName,
startDate, endDate, daylightViewList, exceptionDaylightViewList, miscCharge, false);
}
BaseApiResponse<String> result = new BaseApiResponse<>();
/**
* @param isNewBooking true only for the first comp rule initialization after booking creation
*/
public BaseApiResponse<List<String>> createDaylightCompRule(
String dlAccountId,
String profileId,
String dlPropertyId,
String userId,
String roomName,
String startDate,
String endDate,
List<CfgDaylightView> daylightViewList,
List<CfgExceptionDaylightView> exceptionDaylightViewList,
String miscCharge,
boolean isNewBooking
) {
BaseApiResponse<List<String>> result = new BaseApiResponse<>();
result.setData(new ArrayList<>());
log.info("Start to create complimentary rule");
@@ -1553,15 +1575,20 @@ public class DaylightApiService {
return result;
}
BaseApiResponse<JSONArray> jsonArrayBaseApiResponse = daylightGetCompRulesByAccount(dlPropertyId, dlAccountId);
if (!jsonArrayBaseApiResponse.isSuccess() || jsonArrayBaseApiResponse.getData() == null) {
result.setSuccess(false);
result.setMessage(jsonArrayBaseApiResponse.getMessage());
return result;
int compRuleCount = 0;
if (isNewBooking) {
log.info("Skip comp rule query for newly created booking, accountId={}", dlAccountId);
} else {
BaseApiResponse<JSONArray> jsonArrayBaseApiResponse = daylightGetCompRulesByAccount(dlPropertyId, dlAccountId);
if (!jsonArrayBaseApiResponse.isSuccess() || jsonArrayBaseApiResponse.getData() == null) {
result.setSuccess(false);
result.setMessage(jsonArrayBaseApiResponse.getMessage());
return result;
}
compRuleCount = jsonArrayBaseApiResponse.getData().size();
}
int compRuleCount = jsonArrayBaseApiResponse.getData().size();
boolean hasMiscCharge = miscCharge != null;
boolean hasMiscCharge = StringUtils.isNotBlank(miscCharge);
boolean createRoomOnlyCompRule = compRuleCount == 0;
boolean createDaylightViewCompRule = hasMiscCharge && compRuleCount <= 1;
@@ -1601,8 +1628,14 @@ public class DaylightApiService {
if (compRuleCount >= 2) {
try {
return updateDaylightCompRule(dlAccountId, dlPropertyId, startDate, endDate,
BaseApiResponse<String> response
= updateDaylightCompRule(dlAccountId, dlPropertyId, startDate, endDate,
daylightView, exceptionDaylightView, miscCharge);
result.setMessage(response.getMessage());
result.setSuccess(response.isSuccess());
return result;
} catch (Exception e) {
result.setSuccess(false);
result.setMessage(e.getMessage());
@@ -1660,8 +1693,13 @@ public class DaylightApiService {
daylightViewRoomOnly, exceptionDaylightViewRoomOnly, false);
BaseApiResponse<String> createDefaultResult = createCompRule(url, headers, roomOnlyCompRuleRequest);
if (!createDefaultResult.isSuccess()) {
return createDefaultResult;
result.setSuccess(false);
result.setMessage(createDefaultResult.getMessage());
return result;
}
result.getData().add(createDefaultResult.getData());
}
if (createDaylightViewCompRule) {
@@ -1675,8 +1713,14 @@ public class DaylightApiService {
BaseApiResponse<String> createDaylightViewResult = createCompRule(url, headers, daylightViewCompRuleRequest.getData());
if (!createDaylightViewResult.isSuccess()) {
return createDaylightViewResult;
result.setSuccess(false);
result.setMessage(createDaylightViewResult.getMessage());
return result;
}
result.getData().add(createDaylightViewResult.getData());
}
result.setSuccess(true);
@@ -1757,6 +1801,7 @@ public class DaylightApiService {
result.setSuccess(true);
result.setMessage("Create CompRule success");
result.setData(createDefaultResult.getData());
} catch (Exception e) {
result.setSuccess(false);
@@ -1947,6 +1992,16 @@ public class DaylightApiService {
if (httpResult.getStatusCode() == 201) {
result.setSuccess(true);
result.setMessage("Create CompRule success");
Header[] respHeaders = httpResult.getRespHeaders();
for (Header header : respHeaders) {
String name = header.getName();
if ("Location".equalsIgnoreCase(name)) {
String[] split = header.getValue().split("/");
String compRuleId = split[split.length - 1];
result.setData(compRuleId);
}
}
} else {
result.setSuccess(false);
result.setMessage("Create CompRule failed");
@@ -2021,32 +2076,41 @@ public class DaylightApiService {
log.info("getDaylightRequestorApproverByUserId, propertyId: {}, userId: {}", propertyId, userId);
try {
String url = "/api-gateway/resource-management/v1/resource?filter=(isActive==true;code==" + userId + ")";
// 获取对应的值
Header[] headers = HttpHeaderBuilder.custom()
.contentType("application/json")
.ac_property_id(propertyId)
.build();
// 参数设置
Map<String, Object> map = new HashMap<>();
String responseData = httpService.sslGet(url, headers, map);
JSONObject res = JSON.parseObject(responseData);
JSONArray raJson = res.getJSONArray("results");
CfgDaylightConfiguration requestor = dlConfigurationDao.findByDlPropertyIdAndConfigName(propertyId, "ResourceRequestor");
RequestorApproverResponse result = convertRequestorApprover(raJson);
String configValue = requestor.getConfigValue();
if (result != null) {
serviceResult.setSuccess(true);
serviceResult.setData(result);
} else {
serviceResult.setSuccess(false);
serviceResult.setMessage("Convert failed");
JSONArray object = JSONArray.parseArray(configValue);
for (int i = 0; i < object.size(); i++) {
JSONObject jsonObject = object.getJSONObject(i);
boolean isActive = jsonObject.getBoolean("isActive");
if (!isActive) {
continue;
}
} catch (Exception e) {
String code = jsonObject.getString("code");
if (Objects.equals(code, userId)) {
RequestorApproverResponse resp = new RequestorApproverResponse();
resp.setVersion(jsonObject.getInteger("version"));
resp.setCode(code);
resp.setId(jsonObject.getString("id"));
resp.setFirstName(jsonObject.getString("firstName"));
resp.setLastName(jsonObject.getString("lastName"));
serviceResult.setData(resp);
serviceResult.setSuccess(true);
return serviceResult;
}
}
if (Objects.isNull(serviceResult.getData())) {
serviceResult.setSuccess(false);
serviceResult.setMessage("Get requestor approver by userId failed");
LogUtil.error(DaylightApiService.class, e.getMessage());
serviceResult.setMessage("Requestor data is empty");
}
return serviceResult;
@@ -2085,7 +2149,7 @@ public class DaylightApiService {
.ac_property_id(propertyId)
.build();
DaylightReservationResponse daylightReservationByDlId = getDaylightReservationByDlId(reservationId, propertyId);
DaylightReservationResponse daylightReservationByDlId = getDaylightReservationByDlId(reservationId, propertyId, false);
Long version = daylightReservationByDlId.getVersion();
Map<String, Object> map = new HashMap<>();
@@ -2273,9 +2337,11 @@ public class DaylightApiService {
if (responseData.getStatusCode() >= 200 && responseData.getStatusCode() < 300) {
response.setSuccess(true);
response.setMessage("Set post success");
log.info("Set post success");
} else {
response.setSuccess(false);
response.setMessage("Set post failed");
log.warn("Set post failed: {}", responseData.getResult());
}
} catch (Exception e) {
@@ -2343,7 +2409,7 @@ public class DaylightApiService {
String dlReservationId = bookings.getDlReservationId();
String url = "/api-gateway/booking/v1/reservations/" + dlReservationId + "/change-dates";
DaylightReservationResponse daylightReservationByDlId = getDaylightReservationByDlId(dlReservationId, dlPropertyId);
DaylightReservationResponse daylightReservationByDlId = getDaylightReservationByDlId(dlReservationId, dlPropertyId, false);
Long version = daylightReservationByDlId.getVersion();
Breakdown breakdown = new Breakdown();
@@ -2398,6 +2464,24 @@ public class DaylightApiService {
result.setData(bookings);
} else if (submitResult.getStatusCode() == 202) {
String operationUrl = "";
Header[] changeDateHeader = submitResult.getRespHeaders();
for (Header header : changeDateHeader) {
if (header.getName().equals("Location")) {
operationUrl = header.getValue();
break;
}
}
Boolean b = daylightCallOperationUrl(operationUrl, dlPropertyId);
if (b) {
result.setSuccess(true);
result.setData(bookings);
} else {
result.setSuccess(false);
result.setMessage("Change date failed, reservationId=" + dlReservationId);
log.warn("Change date failed, reservationId={}", dlReservationId);
}
} else {
JSONObject rootNode = JSON.parseObject(responseBody);
String errorStr;
@@ -167,6 +167,7 @@ public class BookingController {
@RequestBody GetOperaBookingRequest params) throws Exception {
LoginUserInfo loginUser = SysCommon.parseUserFromToken(request);
String conf = params.getConf();
Boolean isRefresh = Boolean.TRUE.equals(params.getRefresh());
BaseApiResponse<List<BookingsView>> result = new BaseApiResponse<>();
@@ -177,7 +178,7 @@ public class BookingController {
sysGroupPermissionService.checkGroupPermission(groupName, SysConstants.PERMISSION_APP_VIEW_BOOKING);
List<BookingsView> list;
list = bookingService.getBookingByConfirmationNo(conf);
list = bookingService.getBookingByConfirmationNo(conf,isRefresh);
if(!list.isEmpty() && StringUtils.isNotEmpty(userId)) {
BaseApiResponse<PlayerProfileEntry> findPlayerResult =
playerService.findPlayerProfileByPlayerIdAndUserId(list.getFirst().getPlayerId(), userId);
@@ -399,7 +400,9 @@ public class BookingController {
processResult.setData(processResult.getData());
}else {
processResult.setSuccess(false);
processResult.setMessage("Change MiscCharge Failed");
// processResult.setMessage("Change MiscCharge Failed");
processResult.setCode(serviceResult.getCode());
processResult.setMessage(serviceResult.getMessage());
}
return processResult;
}
@@ -465,7 +468,6 @@ public class BookingController {
String checkOutDate = bookingService.getSearchRecordCheckOutDate(currentDay);
List<BookingDto> operaResult = new ArrayList<>();
List<BookingDto> daylightResult = new ArrayList<>();
boolean isLoadDaylightFromCache = sysBookingCacheService.isDaylightBookingCacheValid(playerId);
String daylightProfileId = sysBookingCacheService.getDaylightProfileMappingFromCache(playerId);
if(StringUtils.isBlank(daylightProfileId)){
//去Daylight查ProfileId
@@ -483,14 +485,9 @@ public class BookingController {
LogUtil.warn(BookingService.class, "[recordSearch] Daylight profile lookup failed, message=" + profileResult.getMessage() + ", playerId=" + playerId);
}
}
if(StringUtils.isNotBlank(daylightProfileId) && !isLoadDaylightFromCache){
if(StringUtils.isNotBlank(daylightProfileId)){
LogUtil.info(BookingService.class, "[recordSearch] Load Daylight booking by call API, playerId=" + playerId +" profile Id:"+daylightProfileId);
daylightResult = daylightApiService.getBookingRecordByProfileId_Optimize(daylightProfileId, playerId);
sysBookingCacheService.updateDaylightBookingCacheLog(playerId);
}else if(isLoadDaylightFromCache){
//-- 查找出user 在DB 里的所有daylight类型的 DB booking
LogUtil.info(BookingService.class, "[recordSearch] Load Daylight booking from cache DB, playerId=" + playerId +" profile Id:"+daylightProfileId);
daylightResult = bookingService.getSearchPlayerDaylightDbRecord(startDate, checkOutDate, playerId);
}
LogUtil.info(BookingService.class, "[recordSearch] getBookingsByNameID:");
LogUtil.info(BookingController.class, "[recordSearch] getDaylightBookings resultSize:" + daylightResult.size() + " spendTime:" + (System.currentTimeMillis() - stepStartTime) + "ms");
@@ -512,21 +509,17 @@ public class BookingController {
LogUtil.info(BookingController.class, "[recordSearch] getBookingsByNameID resultSize:" + operaResult.size() + " spendTime:" + (System.currentTimeMillis() - stepStartTime) + "ms");
if (!daylightResult.isEmpty()) {
if(!isLoadDaylightFromCache){
//将Daylight Result 合并至DB
LogUtil.info(BookingService.class,"[recordSearch] before mergeDaylightRecordFromDB_Optimize, playerId="
+ playerId + ", daylightResult.size=" + daylightResult.size());
stepStartTime = System.currentTimeMillis();
List<BookingDto> dbDaylightResults = bookingService.mergeDaylightRecordFromDB_Optimize(daylightResult,memberInfo,userId);
LogUtil.info(BookingController.class, "[recordSearch] mergeDaylightDatabaseInfo resultSize:" + dbDaylightResults.size() + " spendTime:" + (System.currentTimeMillis() - stepStartTime) + "ms");
stepStartTime = System.currentTimeMillis();
bookingService.syncDaylightMergeBookingToDbAndPopulateIds_Optimize(dbDaylightResults);
LogUtil.info(BookingController.class, "[recordSearch] syncDaylightDatabase resultSize:" + dbDaylightResults.size() + " spendTime:" + (System.currentTimeMillis() - stepStartTime) + "ms");
dbDaylightResults.removeIf(item -> "CANCELED".equalsIgnoreCase(item.getLastOperaStatus()));
allPropertiesResults.addAll(dbDaylightResults);
} else{
allPropertiesResults.addAll(daylightResult);
}
//将Daylight Result 合并至DB
LogUtil.info(BookingService.class,"[recordSearch] before mergeDaylightRecordFromDB_Optimize, playerId="
+ playerId + ", daylightResult.size=" + daylightResult.size());
stepStartTime = System.currentTimeMillis();
List<BookingDto> dbDaylightResults = bookingService.mergeDaylightRecordFromDB_Optimize(daylightResult,memberInfo,userId);
LogUtil.info(BookingController.class, "[recordSearch] mergeDaylightDatabaseInfo resultSize:" + dbDaylightResults.size() + " spendTime:" + (System.currentTimeMillis() - stepStartTime) + "ms");
stepStartTime = System.currentTimeMillis();
bookingService.syncDaylightMergeBookingToDbAndPopulateIds_Optimize(dbDaylightResults);
LogUtil.info(BookingController.class, "[recordSearch] syncDaylightDatabase resultSize:" + dbDaylightResults.size() + " spendTime:" + (System.currentTimeMillis() - stepStartTime) + "ms");
dbDaylightResults.removeIf(item -> "CANCELED".equalsIgnoreCase(item.getLastOperaStatus()));
allPropertiesResults.addAll(dbDaylightResults);
} else {
LogUtil.warn(BookingService.class,"[recordSearch] daylightResult is empty, skipping Daylight merge");
}
@@ -724,7 +717,7 @@ public class BookingController {
return allPropertiesResults;
}
@VerifyPermission(permissionId = {"00501_01", "00401_01"})
@VerifyPermission(permissionId = {"00401_01", "00601_01"})
@RequestMapping(value = "/web/booking/get_page", produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<BaseApiResponse<DataTableResult<BookingsView>>> getBookingByPage(
HttpServletRequest request,
@@ -5,4 +5,5 @@ import lombok.Data;
@Data
public class GetOperaBookingRequest {
private String conf;
private Boolean refresh;
}
@@ -98,7 +98,7 @@ public interface BookingViewDao extends JpaRepository<BookingsView, Long> {
@Query(value="update bookings set last_opera_status='DUE_IN' where cast(checkin_date as date)=cast(getdate() as date) "
+ " and CAST(GETDATE() AS TIME) <'12:00:00'"
+ " and cast(checkout_date as date)>cast(getdate() as date) "
+ " and (last_opera_status is null or last_opera_status='RESERVED') and approve_status='N'",nativeQuery=true)
+ " and (last_opera_status is null or last_opera_status='RESERVED') and approve_status='N' and category != 'DAYLIGHT'",nativeQuery=true)
void changeDueIn();
@Transactional
@@ -106,25 +106,25 @@ public interface BookingViewDao extends JpaRepository<BookingsView, Long> {
@Query(value="update bookings set last_opera_status='CHECKED_IN' where cast(checkin_date as date)=cast(getdate() as date) "
+ " and CAST(GETDATE() AS TIME) >= '12:00:00'"
+ " and cast(checkout_date as date)>cast(getdate() as date) "
+ " and (last_opera_status is null or last_opera_status='DUE_IN' or last_opera_status='RESERVED') and approve_status='N'",nativeQuery=true)
+ " and (last_opera_status is null or last_opera_status='DUE_IN' or last_opera_status='RESERVED') and approve_status='N' and category != 'DAYLIGHT'",nativeQuery=true)
void changeCheckedIn();
@Transactional
@Modifying
@Query(value="update bookings set last_opera_status='DUE_OUT' where cast(checkout_date as date)=cast(getdate() as date)"
+ " and (last_opera_status is null or last_opera_status='CHECKED_IN') and approve_status='N'",nativeQuery=true)
+ " and (last_opera_status is null or last_opera_status='CHECKED_IN') and approve_status='N' and category != 'DAYLIGHT'",nativeQuery=true)
void changeDueOut();
@Transactional
@Modifying
@Query(value="update bookings set last_opera_status='CHECKED_OUT' where cast(checkout_date as date)<cast(getdate() as date)"
+ " and (last_opera_status is null or last_opera_status='DUE_OUT') and approve_status='N'",nativeQuery=true)
+ " and (last_opera_status is null or last_opera_status='DUE_OUT') and approve_status='N' and category != 'DAYLIGHT'",nativeQuery=true)
void changeCheckedOut();
@Transactional
@Modifying
@Query(value="update bookings set last_opera_status='NO_SHOW' where cast(checkout_date as date)<cast(getdate() as date)"
+ " and last_opera_status!='CHECKED_OUT' and approve_status='N'",nativeQuery=true)
+ " and last_opera_status!='CHECKED_OUT' and approve_status='N' and category != 'DAYLIGHT'",nativeQuery=true)
void changeNoShow();
@Query(value="select * from view_booking where property_category='OPERA' and approve_status='W'",nativeQuery=true)
@@ -56,10 +56,12 @@ import com.mgm.mcrm.common.dtos.mgm_api.ApproverRecordResult;
import com.mgm.mcrm.common.dtos.mgm_api.ApproverResult;
import com.mgm.mcrm.common.dtos.mgm_api.PlayerProfileEntry;
import com.mgm.mcrm.common.dtos.mgm_api.UserInfoApiRecord;
import com.mgm.mcrm.common.enums.EnumBookingStatus;
import com.mgm.mcrm.common.jms.BookingControlMsgSender;
import com.mgm.mcrm.common.utils.DaoUtil;
import com.mgm.mcrm.common.utils.DateTimeUtil;
import com.mgm.mcrm.common.utils.LogUtil;
import com.mgm.mcrm.logging.services.SysBookingCacheService;
import com.mgm.mcrm.logging.services.SysLogBookingService;
import com.mgm.mcrm.notification.models.Email;
import com.mgm.mcrm.notification.repositories.EmailDao;
@@ -74,6 +76,7 @@ import jakarta.persistence.criteria.CriteriaQuery;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.constraints.NotNull;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@@ -176,6 +179,8 @@ public class BookingService {
private CfgCompRuleDao cfgCompRuleDao;
@Resource
private SendEmailService sendEmailService;
@Resource
private SysBookingCacheService sysBookingCacheService;
@Autowired
private BookingMapper bookingMapper;
@@ -1325,6 +1330,21 @@ public class BookingService {
String sharerId = sharer.getString("playerId");
String daylightProfileId = sysBookingCacheService.getDaylightProfileMappingFromCache(sharerId);
if (StringUtils.isNotBlank(daylightProfileId)) {
AccompanyingGuestDTO accompanyingGuest = new AccompanyingGuestDTO();
accompanyingGuest.setProfileId(daylightProfileId);
dlSharers.add(accompanyingGuest);
continue;
}
// 走到这里说明 这个sharer 没有在本地的缓存,需要去daylight那边查
BaseApiResponse<List<ProfileDetailResponse>> serviceResult = dlService.dayLightGetProfileByPlayerId(sharerId);
List<ProfileDetailResponse> returnData = serviceResult.getData();
@@ -1504,12 +1524,16 @@ public class BookingService {
String confirmationNumber = createResponse.getData().getString("confirmationNumber");
DaylightReservationResponse daylightReservationByDlId =
dlService.getDaylightReservationByDlId(reservationId, property.getDlPropertyId());
dlService.getDaylightReservationByDlId(reservationId, property.getDlPropertyId(), false);
booking.setDlAccountId(daylightReservationByDlId.getAccountId());
booking.setDlReservationId(reservationId);
booking.setConfirmationNo(confirmationNumber);
booking.setLastOperaStatus("RESERVED");
String description = daylightReservationByDlId.getStatusCode().getDescription();
String statusByDaylightStatus = EnumBookingStatus.getStatusByDaylightStatus(description);
booking.setLastOperaStatus(statusByDaylightStatus);
booking.setApproveStatus("N");
//
bookingDao.save(booking);
@@ -1537,7 +1561,7 @@ public class BookingService {
}
}
dlService.createDaylightCompRule(
BaseApiResponse<List<String>> daylightCompRule = dlService.createDaylightCompRule(
daylightReservationByDlId.getAccountId(),
daylightReservationByDlId.getProfileId(),
property.getDlPropertyId(),
@@ -1547,24 +1571,11 @@ public class BookingService {
checkoutDateStr,
daylightViewList,
exceptionDaylightViewList,
booking.getMiscCharge()
booking.getMiscCharge(),
true
);
//1.通过AC Id 拿到Comp rule ids 拿到compRuleIds 之后只需要复制给compRuleIds即可,后面逻辑已经写完
List<String> compRuleIds = new ArrayList<>();
BaseApiResponse<JSONArray> compRuleListResponse =
dlService.daylightGetCompRulesByAccount(property.getDlPropertyId(), daylightReservationByDlId.getAccountId());
if (compRuleListResponse.isSuccess()) {
JSONArray compRules = compRuleListResponse.getData();
for (int i = 0; i < compRules.size(); i++) {
JSONObject compRule = compRules.getJSONObject(i);
compRuleIds.add(compRule.getString("id"));
}
}
List<String> compRuleIds = daylightCompRule.getData();
//2.循环Comp rule ids 插入每一条comp rule
for (String compRuleId :compRuleIds){
@@ -1632,6 +1643,19 @@ public class BookingService {
processResult.setMessage("Change date fail");
log.warn("Change date fail");
}
} else if ("SET_POST".equalsIgnoreCase(type)) {
BaseApiResponse<JSONObject> createResponse =
dlService.daylightUpsertReservationNew(reservationRequestDTO, property.getDlPropertyId());
if (createResponse.isSuccess()) {
processResult.setSuccess(true);
processResult.setMessage("Set post success");
log.info("Set post success");
} else {
processResult.setSuccess(false);
processResult.setMessage("Set post fail");
log.warn("Set post fail");
}
}
return processResult;
@@ -2730,7 +2754,7 @@ public class BookingService {
}
DaylightReservationResponse daylightReservationByDlId =
dlService.getDaylightReservationByDlId(booking.getDlReservationId(), property.getDlPropertyId());
dlService.getDaylightReservationByDlId(booking.getDlReservationId(), property.getDlPropertyId(), false);
BaseApiResponse<JSONArray> compRuleListResponse = dlService.daylightGetCompRulesByAccount(property.getDlPropertyId(),daylightReservationByDlId.getAccountId());
if(compRuleListResponse.isSuccess()&&daylightViewRoomOnly!=null&&userId!=null){
@@ -2756,6 +2780,10 @@ public class BookingService {
}
}
if (!isExtend && result.isSuccess()) {
booking.setCheckinDate(checkinDate);
newBooking.setCheckinDate(checkinDate);
}
bookingDao.save(booking);
if (result.isSuccess()) {
@@ -3544,8 +3572,7 @@ public class BookingService {
return list;
}
public List<BookingsView> getBookingByConfirmationNo(String conf) throws Exception {
public List<BookingsView> getBookingByConfirmationNo(String conf,Boolean isRefresh) throws Exception {
List<BookingsView> list = bookingViewDao.findBookingByConfirmationNo(conf);
if (CollectionUtils.isEmpty(list)) {
@@ -3553,13 +3580,17 @@ public class BookingService {
}
if ("DAYLIGHT".equalsIgnoreCase(list.getFirst().getPropertyCategory())) {
return getBookingDaylight(list);
if(isRefresh){
return getBookingDaylight(list);
}else{
return getBookingDaylightFromDB(list);
}
}
return getBookingOperaOther(list, conf);
}
private List<BookingsView> getBookingOperaOther(List<BookingsView> list, String conf) {
private List<BookingsView> getBookingOperaOther(List<BookingsView> list, String conf) throws Exception {
List<BookingsView> operaList = operaDBService.getBookingsByConfirmationNo(conf);
for(int i=0;i<list.size();i++) {
@@ -3639,6 +3670,46 @@ public class BookingService {
// }
// }
boolean hasShare = false;
List shareConfList = new ArrayList();
JSONObject fetchResponse = new JSONObject();
FetchBookingRequest owsReq = new FetchBookingRequest();
owsReq.setConfirmationNo(booking.getConfirmationNo());
fetchResponse = operaService.fetchBooking(owsReq);
if(fetchResponse.containsKey("shareConfList")) {
shareConfList = (List) fetchResponse.get("shareConfList");
hasShare = true;
}
if (shareConfList!=null && hasShare) {
for (Object o : shareConfList) {
String shareConfirmationNoFromOws = String.valueOf(o);
if (!StringUtils.isEmpty(shareConfirmationNoFromOws)) {
List<BookingsView> shareOperaList = operaDBService.getBookingsByConfirmationNo(shareConfirmationNoFromOws);
if (shareOperaList != null && shareOperaList.size() > 0) {
BookingsView sharerOperaBooking = shareOperaList.get(0);
String shareProfileExpDate = sharerOperaBooking.getProfieExpDate();
LogUtil.info(BookingService.class,
"[getBookingByConfirmationNo] shareProfileExpDate " + sharerOperaBooking.getProfieExpDate());
if (StringUtils.isEmpty(shareProfileExpDate)) {
expDate = shareProfileExpDate;
} else if (StringUtils.contains(shareProfileExpDate, "FORM")) {
} else {
if (!StringUtils.isEmpty(expDate) && !StringUtils.contains(expDate, "FORM")) {
Date edateTime = DateTimeUtil.getDateFromString(expDate, "yyyy-MM-dd");
Date proShareEdateTime = DateTimeUtil.getDateFromString(shareProfileExpDate, "yyyy-MM-dd");
if (proShareEdateTime.getTime() < edateTime.getTime())
expDate = shareProfileExpDate;
} else if (StringUtils.contains(expDate, "FORM")) {
expDate = shareProfileExpDate;
}
}
}
}
}
}
if(booking.getSharer()!=null && !booking.getSharer().equals("") && !booking.getSharer().equals("[]")) {
booking.setSharerList(JSONArray.parseArray(booking.getSharer()));
@@ -3706,28 +3777,25 @@ public class BookingService {
return list;
}
String dlReservationId = list.stream()
.map(BookingsView::getDlReservationId)
.filter(Objects::nonNull)
BookingsView dlView = list.stream()
.filter(view -> view.getDlReservationId() != null)
.findFirst()
.orElse(null);
propertyCache.refresh();
String dlReservationId = dlView == null ? null : dlView.getDlReservationId();
DaylightReservationResponse daylightResultBooking = null;
String dlPropertyId = null;
if (dlReservationId != null) {
for (CfgProperties cfgProperties : propertyCache.getProperties()) {
CfgProperties cfgProperties = propertyDao.findById(dlView.getPropertyId()).orElse(null);
if (cfgProperties != null) {
dlPropertyId = cfgProperties.getDlPropertyId();
daylightResultBooking = dlService.getDaylightReservationByDlId(
dlReservationId,
cfgProperties.getDlPropertyId()
cfgProperties.getDlPropertyId(),
false
);
if (daylightResultBooking != null) {
dlPropertyId = cfgProperties.getDlPropertyId();
break;
}
}
}
@@ -3736,14 +3804,14 @@ public class BookingService {
}
if (CollectionUtils.isEmpty(daylightResultBooking.getExternalIds())) {
String dlExternalNo = "UP2-" + UUID.randomUUID().toString().replace("-", "");
// String dlExternalNo = "UP2-" + UUID.randomUUID().toString().replace("-", "");
dlService.daylightSetExternalNo(
dlPropertyId,
dlReservationId,
dlExternalNo,
daylightResultBooking.getVersion()
);
// dlService.daylightSetExternalNo(
// dlPropertyId,
// dlReservationId,
// dlExternalNo,
// daylightResultBooking.getVersion()
// );
}
for (BookingsView view : list) {
@@ -3795,9 +3863,8 @@ public class BookingService {
}
}
if (StringUtils.isNotBlank(expDate)
&& hasSharer
&& CollectionUtils.isNotEmpty(view.getDlSharerIds())) {
if (StringUtils.isNotBlank(expDate)&&
CollectionUtils.isNotEmpty(view.getDlSharerIds())) {
for (String dlSharerId : view.getDlSharerIds()) {
ProfileDetailResponse profileDetailResponse
= dlService.dayLightGetProfileByProfileId(dlSharerId);
@@ -3858,6 +3925,65 @@ public class BookingService {
return list;
}
private List<BookingsView> getBookingDaylightFromDB(List<BookingsView> list) {
if (list == null || list.isEmpty()) {
return list;
}
for (BookingsView view : list) {
if ("FC".equals(view.getApproveStatus()) && view.getConfirmationNo() != null) {
view.setApproveStatus("N");
}
if (StringUtils.isNotBlank(view.getFeatureCode())) {
String specialName = Arrays.stream(view.getFeatureCode().split(","))
.filter(StringUtils::isNotBlank)
.map(roomFeatureDao::getByDaylightCode)
.filter(Objects::nonNull)
.map(CfgRoomFeatures::getDescription)
.collect(Collectors.joining(", "));
view.setSpecialName(specialName);
}
boolean hasSharer = StringUtils.isNotBlank(view.getSharer())
&& !"[]".equals(view.getSharer());
if (hasSharer) {
JSONArray sharerList = JSONArray.parseArray(view.getSharer());
view.setSharerList(sharerList);
}
int numOfNight = Integer.parseInt(
DateTimeUtil.getDiffDate(
view.getCheckinDate(),
view.getCheckoutDate(),
"day"
)
);
view.setNumOfNight(numOfNight);
ArrayList<String> dates = new ArrayList<>();
for (int j = 0; j <= numOfNight; j++) {
dates.add(DateTimeUtil.getDateByFormat(
DateTimeUtil.addDay(view.getCheckinDate(), j),
"yyyy-MM-dd"
));
}
JSONObject dateObj = new JSONObject();
dateObj.put("date", dates);
dateObj.put("numOfNight", numOfNight);
dateObj.put("numOfRoom", 1);
dateObj.put("checked", true);
ArrayList<JSONObject> dateList = new ArrayList<>();
dateList.add(dateObj);
view.setDateList(dateList);
}
return list;
}
public List<BookingsView> getBookingById(long id) {
List<BookingsView> list = bookingViewDao.findBookingById(id);
@@ -5669,6 +5795,7 @@ public class BookingService {
view.setDlAccountId(booking.getDlAccountId());
view.setDlReservationId(booking.getDlReservationId());
view.setDlExternalNo(booking.getDlExternalNo());
view.setApproveStatus(booking.getApproveStatus());
if (Objects.isNull(properties.get(booking.getPropertyId()))) {
propertyDao.findById(booking.getPropertyId()).ifPresent(
@@ -6231,19 +6358,25 @@ public class BookingService {
checkoutDate, nowStr));
}
public BaseApiResponse<Bookings> changeMiscCharge(Long bookingId, String miscCharge, String userId) throws Exception {
public BaseApiResponse<Bookings> changeMiscCharge(Long bookingId, @NotNull String miscCharge, String userId) throws Exception {
BaseApiResponse<Bookings> processResult = new BaseApiResponse<>();
// 1. 基础数据获取与准备
Bookings bookings = bookingDao.findById(bookingId).orElse(null);
boolean needSetPost = StringUtils.isNotEmpty(miscCharge) && StringUtils.isEmpty(bookings.getMiscCharge());
if (bookings == null) {
processResult.setMessage("Misc charge not found");
processResult.setSuccess(false);
return processResult;
}
boolean needSetPost = StringUtils.isEmpty(bookings.getMiscCharge());
if (bookings.getBookingTypeId() == null) {
processResult.setMessage("Booking type id not found");
processResult.setSuccess(false);
return processResult;
}
CfgBookingTypes cfgBookingTypes = bookingTypeDao.findById(bookings.getBookingTypeId()).orElse(null);
String bookingTypeName = cfgBookingTypes.getName();
@@ -6266,6 +6399,30 @@ public class BookingService {
String comment = response.getData().getContent();
comment = comment.replaceAll("(?i)<br\\s*/?>", "\n");
bookings.setOperaComment(comment);
Matcher miscChargeMatcher = Pattern
.compile("(?:\\$|&#x24;)\\s*([0-9]+(?:\\.[0-9]+)?)", Pattern.CASE_INSENSITIVE)
.matcher(comment);
if (miscChargeMatcher.find()) {
String miscChargeFromDaylight = miscChargeMatcher.group(1);
if ("CHECKED_IN".equalsIgnoreCase(bookings.getLastOperaStatus())) {
int newMisc = Integer.parseInt(miscCharge);
int fromDaylight = Integer.parseInt(miscChargeFromDaylight);
if (fromDaylight > newMisc) {
bookings.setMiscCharge(miscChargeFromDaylight);
bookingDao.save(bookings);
processResult.setMessage("Amount cannot be less than original:" + miscChargeFromDaylight);
processResult.setSuccess(false);
processResult.setLogMessage("Amount cannot be less than original:" + miscChargeFromDaylight);
return processResult;
}
}
}
}
ReservationNoteResponse noteResponse = response.getData();
@@ -6305,8 +6462,8 @@ public class BookingService {
Date checkOutDate = bookings.getCheckoutDate();
String checkinDateStr = DateTimeUtil.getDateByFormat(checkInDate, "yyyy-MM-dd");
String checkoutDateStr = DateTimeUtil.getDateByFormat(checkOutDate, "yyyy-MM-dd");
DaylightReservationResponse daylightReservationByDlId =
dlService.getDaylightReservationByDlId(bookings.getDlReservationId(), property.getDlPropertyId());
// DaylightReservationResponse daylightReservationByDlId =
// dlService.getDaylightReservationByDlId(bookings.getDlReservationId(), property.getDlPropertyId());
List<CfgExceptionDaylightView> exceptionDaylightViewList = exceptionDaylightViewDao.findByUserPropertyBookingTypeRoomType(
bookings.getCreatedBy(), bookings.getPropertyId(), bookings.getBookingTypeId(), bookings.getRoomTypeId()
);
@@ -6319,8 +6476,8 @@ public class BookingService {
if (CollectionUtils.isNotEmpty(exceptionDaylightViewList) || CollectionUtils.isNotEmpty(daylightViewList)) {
dlService.createDaylightCompRule(
daylightReservationByDlId.getAccountId(),
daylightReservationByDlId.getProfileId(),
bookings.getDlAccountId(),
bookings.getDlProfileId(),
property.getDlPropertyId(),
userId,
bookings.getRoom(),
@@ -6914,10 +7071,23 @@ public class BookingService {
String playerId) {
List<BookingsView> bookingsViews = bookingViewDao.findDaylightDbRecord(playerId, checkinDate,checkoutDate);
List<BookingDto> bookingDtos = bookingMapper.viewToBookingDtoList(bookingsViews);
Map<Long, CfgProperties> propertiesMap = new HashMap<>();
Date currentTime = new Date();
for(BookingDto booking:bookingDtos){
Long propertyId = booking.getPropertyId();
if (!propertiesMap.containsKey(propertyId)) {
propertyDao.findById(propertyId).ifPresent(byId -> propertiesMap.put(propertyId, byId));
}
booking.setDataTime(currentTime);
}
bookingDtos.removeIf(item -> item.getPropertyId() != null && Objects.equals(propertiesMap.get(item.getPropertyId()).getDisplayType(), 0));
return bookingDtos;
}
}
@@ -441,7 +441,7 @@ public class WaitlistBookingService {
email.setCreatedAt(creatdDate);
email.setCreatedBy(originBooking.getCreatedBy());
email = sendEmailService.sendApprovalExtendEmail(originBooking, originBookingView,email,userId,userName,bookingView,isOtherOverBook,emailAddress.getKeyValues());
email = sendEmailService.sendApprovalExtendEmail(originBooking, originBookingView,email,userId,userName,bookingView,false,emailAddress.getKeyValues());
if(email.getStatus()==1) {
emailDao.save(email);
}
@@ -15,7 +15,11 @@ public enum EumnApprovalStatus {
WReject("Reject","WR"),
WApproved("Approved","WA"),
WReserved("Reserved","WF"),
WCancelled("Cancelled","WC");
WCancelled("Cancelled","WC"),
AApproval("Approved","AA"),
ACancelled("Cancelled","AC"),
AReject("Reject","AR"),
APending("Pending","AP");
private String key;
private String value;
@@ -2,6 +2,8 @@ package com.mgm.mcrm.common.services;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.mgm.mcrm.basesetting.property.models.CfgProperties;
import com.mgm.mcrm.basesetting.property.repositories.PropertyDao;
import com.mgm.mcrm.booking.dtos.search.DateRange;
import com.mgm.mcrm.common.constants.SysCommon;
import com.mgm.mcrm.common.dtos.config.ApiGatewaySetting;
@@ -49,6 +51,20 @@ public class MGMEsbApiService {
@Autowired
private ApiGatewaySetting apiGatewaySetting;
@Autowired
private PropertyDao propertyDao;
/**
* 根据 property 解析 ESB 调用类型:DAYLIGHT 属性返回 1,其他返回 0
*/
private int resolveTypeByProperty(String property) {
if (StringUtils.isBlank(property)) {
return 0;
}
CfgProperties properties = propertyDao.queryByName(property);
return (properties != null && "DAYLIGHT".equalsIgnoreCase(properties.getCategory())) ? 1 : 0;
}
public HttpResponseResult invokeRequestRoomCalendar(
String playerId,
@@ -125,7 +141,7 @@ public class MGMEsbApiService {
requestObj.put("roomCategory", roomCate);
requestObj.put("startDate", dates.getFirst());
requestObj.put("endDate", dates.getLast());
result = this.invokeESBAPI(ESB_MCRM_API_TYPE, API_CHECK_PLAYER_TPD, requestObj, "GET", requestHeader, 1);
result = this.invokeESBAPI(ESB_MCRM_API_TYPE, API_CHECK_PLAYER_TPD, requestObj, "GET", requestHeader, resolveTypeByProperty(property));
return result;
}
@@ -142,7 +158,7 @@ public class MGMEsbApiService {
requestObj.put("UserId", userId);
result = this.invokeESBAPI(ESB_MCRM_API_TYPE, API_GET_APPROVER, requestObj, "POST", requestHeader, 1);
result = this.invokeESBAPI(ESB_MCRM_API_TYPE, API_GET_APPROVER, requestObj, "POST", requestHeader, resolveTypeByProperty(property));
return result;
}
@@ -242,7 +258,7 @@ public class MGMEsbApiService {
requestObj.put("BookingType", bookingType);
requestObj.put("Property", property);
requestObj.put("DateRange", dateRange);
result = this.invokeESBAPI(ESB_MCRM_API_TYPE, API_CHECK_SECOND_ROOM_TPD, requestObj, "POST", requestHeader);
result = this.invokeESBAPI(ESB_MCRM_API_TYPE, API_CHECK_SECOND_ROOM_TPD, requestObj, "POST", requestHeader, resolveTypeByProperty(property));
return result;
}
@@ -127,6 +127,14 @@ public class DateTimeUtil {
Date newTime = ca.getTime();
return newTime;
}
public static String addDay(Date currdate, Integer days, String strFormat) {
if (currdate == null || days == null) {
return null;
}
return getDateByFormat(addDay(currdate, days), strFormat);
}
public static Date addMonth(Date currdate,Integer months) {
Calendar ca = Calendar.getInstance();
ca.setTime(currdate);
@@ -1,6 +1,5 @@
package com.mgm.mcrm.logging.repositories;
import com.mgm.mcrm.logging.models.SysBookingCacheLog;
import com.mgm.mcrm.logging.models.SysBookingProfileMapping;
import org.springframework.data.jpa.repository.JpaRepository;
@@ -137,8 +137,8 @@ public class TodoController {
String userId = loginUser.getLoginId();
String groupName = loginUser.getGroupName();
//--get group permissions
boolean cancelBooking = true;
List<SysRouterPermission> userPermissions = new ArrayList<SysRouterPermission>();
boolean cancelBooking = false;
List<SysRouterPermission> userPermissions;
userPermissions = sysGroupPermissionService.getRouterPermissionsByGroupName(groupName);
if(userPermissions!=null && !userPermissions.isEmpty()) {
for(SysRouterPermission per:userPermissions) {
@@ -898,8 +898,14 @@ public class TodoService {
errors = modifyBookingResponse;
booking.setUpdatedAt(newDate);
booking.setCreatedAt(newDate);
booking.setApproveStatus("F");
booking.setTryTime(5);
if (booking.getTryTime()==null){
booking.setTryTime(1);
} else if (booking.getTryTime()<4) {
booking.setTryTime(booking.getTryTime()+1);
} else {
booking.setTryTime(booking.getTryTime()+1);
booking.setApproveStatus("F");
}
booking.setErrorMessage("Cancel booking fail.Error Message [ " + errorMsg + " ] ");
bookingDao.save(booking);
processResult.setSuccess(false);
@@ -14,4 +14,5 @@ public class GetPropertyRoomTypeResponse {
private List<String> defaultRoomTypes;
private List<RoomType> roomTypes;
private List<GetPropertyRoomTypeResponse> otherProperties;
private String category;
}
@@ -41,6 +41,7 @@ public class RoomCalendarService {
String roomType;
String startDate;
String endDate;
String category = params.get("category").toString();
try {
playerId = getOptionalString(params, "playerId", "PlayerId");
@@ -67,7 +68,7 @@ public class RoomCalendarService {
return result;
}
CalendarVisibilityCheck visibility = validateCalendarVisibility(property, roomType);
CalendarVisibilityCheck visibility = validateCalendarVisibility(property, roomType, category);
if (visibility.errorCode != null) {
result.setSuccess(false);
result.setMessage(visibility.errorMessage);
@@ -131,14 +132,14 @@ public class RoomCalendarService {
return result;
}
private CalendarVisibilityCheck validateCalendarVisibility(String property, String roomType) {
private CalendarVisibilityCheck validateCalendarVisibility(String property, String roomType, String category) {
List<String> propertyNames = parseDelimitedValues(property);
List<String> roomTypeNames = parseDelimitedValues(roomType);
List<CfgProperties> properties = propertyDao.findByCalendarNameIn(propertyNames);
List<CfgProperties> visibleProperties = new ArrayList<>();
for (String propertyName : propertyNames) {
CfgProperties cfgProperty = findByCalendarName(properties, propertyName);
CfgProperties cfgProperty = findByCalendarName(properties, propertyName, category);
if (isShowCalendar(cfgProperty)) {
visibleProperties.add(cfgProperty);
}
@@ -168,14 +169,14 @@ public class RoomCalendarService {
List<String> otherIds = new ArrayList<>();
List<String> otherCodes = new ArrayList<>();
for (CfgProperties cfgProperty : visibleProperties) {
String category = cfgProperty.getCategory();
if (StringUtils.equalsIgnoreCase(category, "OPERA")) {
String propertyCategory = cfgProperty.getCategory();
if (StringUtils.equalsIgnoreCase(propertyCategory, "OPERA")) {
operaIds.add(String.valueOf(cfgProperty.getId()));
operaCodes.add(cfgProperty.getCode());
} else if (StringUtils.equalsIgnoreCase(category, "DAYLIGHT")) {
} else if (StringUtils.equalsIgnoreCase(propertyCategory, "DAYLIGHT")) {
daylightIds.add(String.valueOf(cfgProperty.getId()));
daylightCodes.add(cfgProperty.getCode());
} else if (StringUtils.equalsIgnoreCase(category, "OTHER")) {
} else if (StringUtils.equalsIgnoreCase(propertyCategory, "OTHER")) {
otherIds.add(String.valueOf(cfgProperty.getId()));
otherCodes.add(cfgProperty.getCode());
}
@@ -232,19 +233,19 @@ public class RoomCalendarService {
String calendarName = StringUtils.defaultIfBlank(property.getCalendarName(), property.getName());
if (StringUtils.equalsIgnoreCase(property.getCategory(), "OPERA")
|| StringUtils.equalsIgnoreCase(property.getCategory(), "DAYLIGHT")) {
propertyList.add(buildPropertyRoomTypeResponse(calendarName, calendarName, null, roomTypes));
propertyList.add(buildPropertyRoomTypeResponse(calendarName, calendarName, null, roomTypes, property.getCategory()));
} else if (StringUtils.equalsIgnoreCase(property.getCategory(), "OTHER")) {
otherProperties.add(buildPropertyRoomTypeResponse(
calendarName,
calendarName,
StringUtils.defaultIfBlank(property.getName(), property.getCalendarName()),
roomTypes));
roomTypes, "OTHER"));
}
}
if (!otherProperties.isEmpty()) {
GetPropertyRoomTypeResponse otherGroup = buildPropertyRoomTypeResponse(
"OTHER", "Other Property", null, new ArrayList<>());
"OTHER", "Other Property", null, new ArrayList<>(), "OTHER");
otherGroup.setDefaultRoomTypes(buildDefaultProperties(otherProperties));
otherGroup.setOtherProperties(otherProperties);
propertyList.add(otherGroup);
@@ -307,13 +308,14 @@ public class RoomCalendarService {
}
private static GetPropertyRoomTypeResponse buildPropertyRoomTypeResponse(
String code, String name, String displayName, List<RoomType> roomTypes) {
String code, String name, String displayName, List<RoomType> roomTypes, String category) {
GetPropertyRoomTypeResponse item = new GetPropertyRoomTypeResponse();
item.setCode(StringUtils.defaultString(code));
item.setName(StringUtils.defaultString(name));
item.setDisplayName(displayName);
item.setRoomTypes(roomTypes);
item.setDefaultRoomTypes(buildDefaultRoomTypes(roomTypes));
item.setCategory(category);
return item;
}
@@ -388,8 +390,11 @@ public class RoomCalendarService {
return new ArrayList<>(visible);
}
private static CfgProperties findByCalendarName(List<CfgProperties> properties, String name) {
private static CfgProperties findByCalendarName(List<CfgProperties> properties, String name, String category) {
for (CfgProperties property : properties) {
if (!property.getCategory().equals(category)) {
continue;
}
if (StringUtils.equals(property.getCalendarName(), name)) {
return property;
}
+1 -1
View File
@@ -154,7 +154,7 @@ host_name: mcrm
adfs_request_timeout: 10000
adfs_login_timeout: 60000
allow_origin: "http://localhost:5173,http://127.0.0.1:5173,http://localhost:8080,MGM_CRM_APP,MGM_CRM_CMS,https://localhost:9085,http://localhost:8081,http://127.0.0.1:8081,https://localhost:9087,https://localhost:9086,https://127.0.0.1:9086"
allow_origin: "http://localhost:5173,http://127.0.0.1:5173,http://localhost:8080,MGM_CRM_APP,MGM_MCRM_APP,MGM_CRM_CMS,https://dlahcadev.mcmsapoc.com,https://localhost:9085,http://localhost:8081,http://127.0.0.1:8081,https://localhost:9087,https://localhost:9086,https://127.0.0.1:9086"
soap_servers: "http://localhost:5173,http://127.0.0.1:5173"
http_api_servers: "http://localhost:5173,http://127.0.0.1:5173,http://localhost:9087"
allow_ip: "0:0:0:0:0:0:0:1,127.0.0.1"