From 909b9684c7d1e99442f72f6d039278c3e32d1ef7 Mon Sep 17 00:00:00 2001 From: Mauve Date: Mon, 26 Oct 2026 09:31:45 +0800 Subject: [PATCH] update --- .../excel_define/export/export_room_type.json | 6 + .../excel_define/import/import_property.json | 23 ++- .../excel_define/import/import_room_type.json | 16 +- pom.xml | 28 ++- .../mcrm/admin/services/PlayerService.java | 12 +- .../admin/services/SysSettingService.java | 4 +- .../services/RoomCriteriaDaylightService.java | 91 +++++++++ .../controllers/RequestReasonController.java | 10 +- .../authorization/utils/JwtTokenUtil.java | 8 +- .../opera/services/ExceptionOperaService.java | 19 +- .../opera/services/OperaService.java | 176 +++++++----------- .../property/repositories/PropertyDao.java | 2 + .../property/services/PropertyService.java | 24 ++- .../room/services/RoomTypeService.java | 4 + .../appsetting/PropertyImportRow.java | 18 +- .../appsetting/RoomTypeImportRow.java | 8 + .../common/httpclient/HttpSslSupport.java | 34 ---- .../services/SysLogBookingService.java | 68 ++++--- .../mcrm/reservation/dtos/BookingsDto.java | 2 + .../mgm/mcrm/reservation/models/Bookings.java | 2 + .../services/OtherBookingService.java | 6 + .../reservation/services/WaitlistService.java | 6 +- 22 files changed, 356 insertions(+), 211 deletions(-) diff --git a/crm_runtime/excel_define/export/export_room_type.json b/crm_runtime/excel_define/export/export_room_type.json index 8dd7b36..8912d5c 100644 --- a/crm_runtime/excel_define/export/export_room_type.json +++ b/crm_runtime/excel_define/export/export_room_type.json @@ -27,6 +27,12 @@ "dataType": "String", "columnWidth":30 }, + { + "columnHeader":"Category", + "attrName": "category", + "dataType": "String", + "columnWidth":30 + }, { "columnHeader":"Created Time", "attrName": "createdAt", diff --git a/crm_runtime/excel_define/import/import_property.json b/crm_runtime/excel_define/import/import_property.json index 40823ed..99f58c8 100644 --- a/crm_runtime/excel_define/import/import_property.json +++ b/crm_runtime/excel_define/import/import_property.json @@ -20,20 +20,13 @@ "attrName": "emailName", "dataType": "String" }, - { - "columnHeader":"Hotel Code", - "checkHeader":true, - "headerRowIdx":0, - "attrName": "hotelCode", - "dataType": "String" - }, { "columnHeader":"Property Code", "checkHeader":true, "headerRowIdx":0, "attrName": "code", "dataType": "String" - }, + }, { "columnHeader":"Category", "checkHeader":true, @@ -47,6 +40,20 @@ "headerRowIdx":0, "attrName": "sortOrderVal", "dataType": "String" + }, + { + "columnHeader":"Created Time", + "checkHeader":true, + "headerRowIdx":0, + "attrName": "createdTime", + "dataType": "String" + }, + { + "columnHeader":"Updated Time", + "checkHeader":true, + "headerRowIdx":0, + "attrName": "updatedTime", + "dataType": "String" } ] }] diff --git a/crm_runtime/excel_define/import/import_room_type.json b/crm_runtime/excel_define/import/import_room_type.json index aafd3c5..0c4ce27 100644 --- a/crm_runtime/excel_define/import/import_room_type.json +++ b/crm_runtime/excel_define/import/import_room_type.json @@ -6,8 +6,9 @@ "offsetRow": 1, "offsetCol": 0, "objClassName": "com.mgm.mcrm.common.dtos.dataimport.appsetting.RoomTypeImportRow", - "columnDefs": [{ - "columnHeader":"Room Type", + "columnDefs": [ + { + "columnHeader":"Code", "checkHeader":true, "headerRowIdx":0, "attrName": "name", @@ -19,8 +20,17 @@ "headerRowIdx":0, "attrName": "nameCN", "dataType": "String" + }, + { + "columnHeader":"Category", + "checkHeader":true, + "optionalHeader":true, + "headerRowIdx":0, + "attrName": "category", + "dataType": "String", + "columnWidth":30 } ] }] }] -} \ No newline at end of file +} diff --git a/pom.xml b/pom.xml index 22b8f08..254b116 100644 --- a/pom.xml +++ b/pom.xml @@ -20,15 +20,15 @@ UTF-8 21 - 11.0.25 + 11.0.26 4.2.18.Final 5.6.4 5.2.3 5.4.3 - 6.2.7 2.22.3 3.2.3 2.26.1 + 9.2.0.Beta1 ${java.version} ${java.version} 6.3.1 @@ -94,6 +94,11 @@ org.springframework.boot spring-boot-starter-mail + + jakarta.validation + jakarta.validation-api + 4.0.0-M1 + org.springframework.boot spring-boot-starter-validation @@ -176,7 +181,7 @@ com.auth0 java-jwt - 4.5.0 + 4.6.2 org.jsmpp @@ -251,6 +256,23 @@ ${java.version} ${java.version} UTF-8 + + + org.projectlombok + lombok + ${lombok.version} + + + org.projectlombok + lombok-mapstruct-binding + 0.2.0 + + + org.mapstruct + mapstruct-processor + 1.6.3 + + diff --git a/src/main/java/com/mgm/mcrm/admin/services/PlayerService.java b/src/main/java/com/mgm/mcrm/admin/services/PlayerService.java index 2dc5885..bccff1e 100644 --- a/src/main/java/com/mgm/mcrm/admin/services/PlayerService.java +++ b/src/main/java/com/mgm/mcrm/admin/services/PlayerService.java @@ -141,22 +141,22 @@ public class PlayerService { ServiceResult result = new ServiceResult(); JSONObject requestObj = new JSONObject(); if(!StringUtils.isEmpty(playerId)) { - requestObj.put("playerId", playerId); + requestObj.put("PlayerId", playerId); } if(!StringUtils.isEmpty(roomCate)) { - requestObj.put("roomCat", roomCate); + requestObj.put("RoomCat", roomCate); } if(dateRange != null) { - requestObj.put("dateRange", dateRange); + requestObj.put("DateRange", dateRange); } if(dates != null) { - requestObj.put("dates", dates); + requestObj.put("Dates", dates); } if(!StringUtils.isEmpty(bookingType)) { - requestObj.put("bookingType", bookingType); + requestObj.put("BookingType", bookingType); } if(!StringUtils.isEmpty(property)) { - requestObj.put("property", property); + requestObj.put("Property", property); } HttpResponseResult httpResult = HttpUtil.invokeWebAPI(requestObj, "POST", request, null); String content = httpResult.getResponseContent(); diff --git a/src/main/java/com/mgm/mcrm/admin/services/SysSettingService.java b/src/main/java/com/mgm/mcrm/admin/services/SysSettingService.java index cff51bc..52c03f2 100644 --- a/src/main/java/com/mgm/mcrm/admin/services/SysSettingService.java +++ b/src/main/java/com/mgm/mcrm/admin/services/SysSettingService.java @@ -30,8 +30,8 @@ public class SysSettingService { public Boolean isAPPMock() { SysSetting sysSetting = new SysSetting(); -// sysSetting = sysSettingDao.getBySettingKey("APP_MOCK"); - sysSetting.setSettingValue("1"); + sysSetting = sysSettingDao.getBySettingKey("APP_MOCK"); +// sysSetting.setSettingValue("1"); Boolean isMock = Strings.CS.equals(sysSetting.getSettingValue(), "1"); return isMock; } diff --git a/src/main/java/com/mgm/mcrm/allotment/services/RoomCriteriaDaylightService.java b/src/main/java/com/mgm/mcrm/allotment/services/RoomCriteriaDaylightService.java index 7137829..b1bdae4 100644 --- a/src/main/java/com/mgm/mcrm/allotment/services/RoomCriteriaDaylightService.java +++ b/src/main/java/com/mgm/mcrm/allotment/services/RoomCriteriaDaylightService.java @@ -134,6 +134,8 @@ public class RoomCriteriaDaylightService { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; + private static final int AUTO_SYNC_ALLOTMENT_DAYS = 15; + public ServiceResult createRoomCriteria(CfgRoomCriteriaDaylightRequest criteriaRequest) { ServiceResult processResult = new ServiceResult(); LocalDateTime createDate = LocalDateTime.now(); @@ -1521,4 +1523,93 @@ public class RoomCriteriaDaylightService { return calculateRequests; } + /** + * 自动同步入口:当 cfg_room_criteria_daylight 完全为空时触发。 + * 遍历所有 category=DAYLIGHT 的物业,逐个以"今天 ~ 今天+15天"拉取其全部 block 的 allotment; + * 单个物业出错或无 block 则跳过该物业,继续处理下一个。 + */ + public AjaxResult syncAllDaylightAllotmentIfEmpty() { + AjaxResult result = new AjaxResult(); + try { + if (criteriaDaylightDao.count() > 0) { + result.setSuccess(true); + result.setMessage("Allotment already has data, skip auto sync"); + return result; + } + + List daylightProperties = propertyDao.findByCategory("DAYLIGHT"); + if (daylightProperties == null || daylightProperties.isEmpty()) { + result.setSuccess(false); + result.setMessage("No DAYLIGHT property found for auto allotment sync"); + return result; + } + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + LocalDate today = LocalDate.now(); + String fromDate = today.format(formatter); + String toDate = today.plusDays(AUTO_SYNC_ALLOTMENT_DAYS).format(formatter); + + int successCount = 0; + int skipCount = 0; + List failedProperties = new ArrayList<>(); + for (CfgProperties property : daylightProperties) { + String dlPropertyId = property.getDlPropertyId(); + Long propertyId = property.getId(); + if (StringUtils.isBlank(dlPropertyId) || propertyId == null) { + skipCount++; + continue; + } + + List blockCodes = blockCodeDao.findAllByPropertyIdAndDlBlockIdIsNotNull(propertyId); + if (blockCodes == null || blockCodes.isEmpty()) { + log.warn("[AUTO_SYNC]No Daylight block code found for property[{}], skip", dlPropertyId); + skipCount++; + continue; + } + List dlBlockCodeIds = new ArrayList<>(); + for (CfgBlockCodes blockCode : blockCodes) { + dlBlockCodeIds.add(blockCode.getDlBlockId()); + } + + SyncDaylightAllotmentRequest syncRequest = new SyncDaylightAllotmentRequest(); + syncRequest.setDlPropertyId(dlPropertyId); + syncRequest.setFromDate(fromDate); + syncRequest.setToDate(toDate); + syncRequest.setDlBlockCodeIds(dlBlockCodeIds); + + try { + AjaxResult syncResult = this.syncCalendarAllotment(syncRequest); + if (syncResult != null && syncResult.isSuccess()) { + successCount++; + log.info("[AUTO_SYNC]Property[{}] allotment sync done: {}", dlPropertyId, syncResult.getMessage()); + } else { + failedProperties.add(dlPropertyId); + log.warn("[AUTO_SYNC]Property[{}] allotment sync failed: {}", dlPropertyId, + syncResult != null ? syncResult.getMessage() : "null result"); + } + } catch (Exception e) { + failedProperties.add(dlPropertyId); + log.error("[AUTO_SYNC]Property[{}] allotment sync error, skip this property: {}", dlPropertyId, e.getMessage()); + } + } + + StringBuilder message = new StringBuilder(); + message.append("Auto allotment sync finished. dateRange=").append(fromDate) + .append("~").append(toDate) + .append(", success=").append(successCount) + .append(", skip=").append(skipCount) + .append(", fail=").append(failedProperties.size()); + if (!failedProperties.isEmpty()) { + message.append(", failed properties=[").append(StringUtils.join(failedProperties, ",")).append("]"); + } + result.setSuccess(failedProperties.isEmpty() && successCount > 0); + result.setMessage(message.toString()); + } catch (Exception err) { + result.setSuccess(false); + result.setMessage("Failed to auto sync Daylight allotment:" + err.getMessage()); + log.error("Failed to auto sync Daylight allotment :{}", err.getMessage()); + } + return result; + } + } diff --git a/src/main/java/com/mgm/mcrm/approval/controllers/RequestReasonController.java b/src/main/java/com/mgm/mcrm/approval/controllers/RequestReasonController.java index 9684d15..ad51eab 100644 --- a/src/main/java/com/mgm/mcrm/approval/controllers/RequestReasonController.java +++ b/src/main/java/com/mgm/mcrm/approval/controllers/RequestReasonController.java @@ -30,7 +30,7 @@ public class RequestReasonController { @Resource private SysLogOperationService sysAuditLogService; - @CheckPermission(routerId="00502",permissionCode="ADD") + @CheckPermission(routerId="00602",permissionCode="ADD") @OperationLog(eventCode = "request_reason_create") @RequestMapping(value = "/approval/request_reason/create", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) public AjaxResult createRequestReason(HttpServletRequest request, @RequestBody CfgRequestReason requestReason) { @@ -69,7 +69,7 @@ public class RequestReasonController { return processResult; } - @CheckPermission(routerId="00502",permissionCode="MODIFY") + @CheckPermission(routerId="00602",permissionCode="MODIFY") @OperationLog(eventCode="request_reason_update") @RequestMapping(value = "/approval/request_reason/update", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) public AjaxResult updateRequestReason(HttpServletRequest request, @RequestBody CfgRequestReason requestReason) { @@ -114,7 +114,7 @@ public class RequestReasonController { return processResult; } - @CheckPermission(routerId="00502",permissionCode="VIEW") + @CheckPermission(routerId="00602",permissionCode="VIEW") @RequestMapping(value = "/approval/request_reason/get", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) public AjaxResult getRequestReasonById(HttpServletRequest request, @RequestBody(required=false) Map queryParas) { boolean isSuccess = false; @@ -140,7 +140,7 @@ public class RequestReasonController { return processResult; } - @CheckPermission(routerId="00502",permissionCode="REMOVE") + @CheckPermission(routerId="00602",permissionCode="REMOVE") @OperationLog(eventCode="request_reason_delete") @RequestMapping(value = "/approval/request_reason/delete", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) public AjaxResult deleteRequestReason(HttpServletRequest request, @RequestBody CfgRequestReason requestReason) { @@ -184,7 +184,7 @@ public class RequestReasonController { return processResult; } - @CheckPermission(routerId="00502",permissionCode="VIEW") + @CheckPermission(routerId="00602",permissionCode="VIEW") @RequestMapping(value = "/approval/request_reason/get_page", produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) public AjaxResult getRequestReasonByPage(HttpServletRequest request,@RequestBody(required=false) Map queryParas) throws Exception { QueryFilter queryFilter = (queryParas!=null?new QueryFilter(queryParas):new QueryFilter(request)); diff --git a/src/main/java/com/mgm/mcrm/authorization/utils/JwtTokenUtil.java b/src/main/java/com/mgm/mcrm/authorization/utils/JwtTokenUtil.java index 071d825..c0c0a09 100644 --- a/src/main/java/com/mgm/mcrm/authorization/utils/JwtTokenUtil.java +++ b/src/main/java/com/mgm/mcrm/authorization/utils/JwtTokenUtil.java @@ -13,6 +13,7 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.Getter; import lombok.Setter; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Strings; import java.time.Duration; import java.time.Instant; @@ -54,7 +55,12 @@ public class JwtTokenUtil { Instant now = Instant.now(); Instant expDate = now.plus(Duration.ofMinutes(tokeExpiration)); String uuid = UUID.randomUUID().toString().replace("-",""); - + + //在Gen Token之前 將@mgm.mo 後綴去掉 + if (user.getLoginId() != null){ + user.setLoginId(Strings.CI.replace(user.getLoginId(),"@mgm.mo", "")); + } + String tokenString = JWT.create() .withIssuer(issueSource) .withIssuedAt(now).withNotBefore(now).withExpiresAt(expDate).withJWTId(uuid) diff --git a/src/main/java/com/mgm/mcrm/basesetting/opera/services/ExceptionOperaService.java b/src/main/java/com/mgm/mcrm/basesetting/opera/services/ExceptionOperaService.java index 3c90cf8..890308b 100644 --- a/src/main/java/com/mgm/mcrm/basesetting/opera/services/ExceptionOperaService.java +++ b/src/main/java/com/mgm/mcrm/basesetting/opera/services/ExceptionOperaService.java @@ -23,7 +23,6 @@ import com.mgm.mcrm.common.dtos.dataimport.ValidateResult; import com.mgm.mcrm.common.dtos.dataimport.appsetting.ExceptionOperaImportRow; import com.mgm.mcrm.common.dtos.excelmodel.ImportDefine; import com.mgm.mcrm.common.utils.DaoUtil; -import com.mgm.mcrm.common.utils.DateTimeUtil; import com.mgm.mcrm.common.utils.ExcelUtils; import jakarta.annotation.Resource; import jakarta.persistence.criteria.Predicate; @@ -37,6 +36,8 @@ import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.*; @Service @@ -191,6 +192,7 @@ public class ExceptionOperaService { } private Specification buildSpecificationByQueryFilter(QueryFilter queryfilter) { + LocalDate today = LocalDate.now(); return (root, criteriaQuery, cb) -> { List list = new ArrayList<>(); if (StringUtils.isNotBlank(queryfilter.getString("searchName"))) { @@ -202,14 +204,10 @@ public class ExceptionOperaService { "%" + queryfilter.getString("searchId").trim().toUpperCase() + "%")); } - List availableBlockCodes = blockCodeDao.getAvailableBlockCodes(DateTimeUtil.getCurrentDateTime("yyyy-MM-dd")); - if (availableBlockCodes == null) { - availableBlockCodes = new ArrayList<>(); - } - if (availableBlockCodes.isEmpty()) { - availableBlockCodes.add(-1L); - } -// list.add(root.get("blockCodeId").in(availableBlockCodes)); + List availableBlockCodes = blockCodeDao.getAvailableBlockCodes(today.atStartOfDay()); + list.add(availableBlockCodes == null || availableBlockCodes.isEmpty() + ? cb.disjunction() + : root.get("blockCodeId").in(availableBlockCodes)); Predicate[] predicates = new Predicate[list.size()]; criteriaQuery.where(list.toArray(predicates)); return cb.and(list.toArray(predicates)); @@ -217,6 +215,7 @@ public class ExceptionOperaService { } private Specification buildSpecificationViewByQueryFilter(QueryFilter queryfilter) { + Date today = Date.from(LocalDate.now().atStartOfDay(ZoneId.systemDefault()).toInstant()); return (root, criteriaQuery, cb) -> { List list = new ArrayList<>(); if (StringUtils.isNotBlank(queryfilter.getString("searchName"))) { @@ -227,7 +226,7 @@ public class ExceptionOperaService { list.add(cb.like(cb.upper(root.get("userId")), "%" + queryfilter.getString("searchId").trim().toUpperCase() + "%")); } - list.add(cb.greaterThanOrEqualTo(root.get("endDate"), new Date())); + list.add(cb.greaterThanOrEqualTo(root.get("endDate"), today)); if (queryfilter.getParaObject("pageIds") != null) { List pageIds = (List) queryfilter.getParaObject("pageIds"); list.add(root.get("id").in(pageIds)); diff --git a/src/main/java/com/mgm/mcrm/basesetting/opera/services/OperaService.java b/src/main/java/com/mgm/mcrm/basesetting/opera/services/OperaService.java index dadc7a8..553d621 100644 --- a/src/main/java/com/mgm/mcrm/basesetting/opera/services/OperaService.java +++ b/src/main/java/com/mgm/mcrm/basesetting/opera/services/OperaService.java @@ -29,11 +29,11 @@ import com.mgm.mcrm.common.dtos.dataimport.ValidateResult; import com.mgm.mcrm.common.dtos.dataimport.appsetting.OperaMappingImportRow; import com.mgm.mcrm.common.dtos.excelmodel.ImportDefine; import com.mgm.mcrm.common.utils.DaoUtil; -import com.mgm.mcrm.common.utils.DateTimeUtil; import com.mgm.mcrm.common.utils.ExcelUtils; import jakarta.annotation.Resource; import jakarta.persistence.criteria.CriteriaBuilder; import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Strings; import org.springframework.beans.BeanUtils; @@ -145,8 +145,6 @@ public class OperaService { } public DataTableResult getOperaViewByPage(OperaPageRequest pageRequest) { - //--先主表找分页,然后再按照分页结果找View的对象 - Specification listSpec = buildSpecification(pageRequest); int pageSize = pageRequest.getPageSize(); int pageStart = pageRequest.getStartRow() / pageSize; String sortProperties = pageRequest.getSortOrder(); @@ -159,29 +157,16 @@ public class OperaService { sortProperties = sortProperties.replace("marketCode-", "marketCodeId-"); sortProperties = sortProperties.replace("sourceCode-", "sourceCodeId-"); sortProperties = sortProperties.replace("bookingType-", "bookingTypeId-"); - String viewSortProperties = sortProperties; sortProperties = sortProperties.replace("operaRoomType-asc", ""); sortProperties = sortProperties.replace("operaRoomType-desc", ""); pageRequest.setSortOrder(sortProperties); Sort sort = DaoUtil.buildSortByString(pageRequest.getSortOrder(), "id"); Pageable pageable = PageRequest.of(pageStart, pageSize, sort); - Page resultPage = operaDao.findAll(listSpec, pageable); + Page resultPage = operaViewDao.findAll(buildSpecificationView(pageRequest), pageable); DataTableResult dataResult = new DataTableResult<>(); dataResult.setTotalRecords(resultPage.getTotalElements()); dataResult.setPageSize(pageSize); - List resultList = new ArrayList<>(); - List masterPageData = resultPage.getContent(); - if (masterPageData != null && !masterPageData.isEmpty()) { - List ids = new ArrayList<>(); - for (CfgOpera item : masterPageData) { - ids.add(item.getId()); - } - - pageRequest.setPageIds(ids); - pageRequest.setSortOrder(viewSortProperties); - resultList = this.listOperaView(pageRequest); - } - dataResult.setRowData(resultList); + dataResult.setRowData(resultPage.getContent()); return dataResult; } @@ -191,106 +176,81 @@ public class OperaService { return operaViewDao.findAll(listSpec, sort); } - private Specification buildSpecification(OperaPageRequest pageRequest) { - return (root, criteriaQuery, cb) -> { - List list = new ArrayList<>(); -// if (StringUtils.isNotBlank(queryfilter.getString("searchName"))) { -// list.add(cb.like(cb.upper(root.get("opera_id")), -// "%" + queryfilter.getString("searchName").toUpperCase() + "%")); -// } - if (StringUtils.isNotBlank(pageRequest.getSearchBlockCode())) { - CriteriaBuilder.In in = cb.in(root.get("blockCodeId")); - List blockCode = blockCodeDao.getLikeByCode(pageRequest.getSearchBlockCode()); - if (!blockCode.isEmpty()) { - for (CfgBlockCodes b : blockCode) { - in.value(b.getId()); - } - list.add(in); - } - } - if (StringUtils.isNotBlank(pageRequest.getSearchMarketCode())) { - CriteriaBuilder.In in = cb.in(root.get("marketCodeId")); - List marketCode = marketCodeDao.getLikeByCode(pageRequest.getSearchMarketCode().trim()); - if (!marketCode.isEmpty()) { - for (CfgMarketCodes b : marketCode) { - in.value(b.getId()); - } - list.add(in); - } - } - if (StringUtils.isNotBlank(pageRequest.getSearchRateCode())) { - CriteriaBuilder.In in = cb.in(root.get("rateCodeId")); - List rateCode = rateCodeDao.getLikeByCode(pageRequest.getSearchRateCode().trim()); - if (!rateCode.isEmpty()) { - for (CfgRateCodes b : rateCode) { - in.value(b.getId()); - } - list.add(in); - } - } - if (StringUtils.isNotBlank(pageRequest.getSearchDivision())) { - CriteriaBuilder.In in = cb.in(root.get("divisionId")); - List division = divisionDao.getLikeByName(pageRequest.getSearchDivision().trim()); - if (!division.isEmpty()) { - for (CfgDivisions b : division) { - in.value(b.getId()); - } - list.add(in); - } - } - if (StringUtils.isNotBlank(pageRequest.getSearchDepartment())) { - CriteriaBuilder.In in = cb.in(root.get("departmentId")); - List department = departmentDao.getLikeByName(pageRequest.getSearchDepartment().trim()); - if (!department.isEmpty()) { - for (CfgDepartments b : department) { - in.value(b.getId()); - } - list.add(in); - } - } - if (StringUtils.isNotBlank(pageRequest.getSearchSection())) { - CriteriaBuilder.In in = cb.in(root.get("sectionId")); - List section = sectionDao.getLikeByName(pageRequest.getSearchSection().trim()); - if (!section.isEmpty()) { - for (CfgSections b : section) { - in.value(b.getId()); - } - list.add(in); - } - } - List availableBlockCodes = blockCodeDao.getAvailableBlockCodes(DateTimeUtil.getCurrentDateTime("yyyy-MM-dd HH:mm:ss")); - if (availableBlockCodes == null) { - availableBlockCodes = new ArrayList<>(); - } - if (availableBlockCodes.isEmpty()) { - availableBlockCodes.add(-1L); - } -// list.add(root.get("blockCodeId").in(availableBlockCodes)); - Predicate[] predicates = new Predicate[list.size()]; - criteriaQuery.where(list.toArray(predicates)); - return cb.and(list.toArray(predicates)); - }; - } - private Specification buildSpecificationView(OperaPageRequest pageRequest) { return (root, criteriaQuery, cb) -> { List list = new ArrayList<>(); -// if (StringUtils.isNotBlank(queryfilter.getString("searchName"))) { -// list.add(cb.like(cb.upper(root.get("opera_id")), -// "%" + queryfilter.getString("searchName").toUpperCase() + "%")); -// } list.add(cb.greaterThanOrEqualTo(root.get("endDate"), new Date())); - + appendOperaSearchPredicates(list, cb, root, pageRequest); if (pageRequest.getPageIds() != null) { list.add(root.get("id").in(pageRequest.getPageIds())); } - - Predicate[] predicates = new Predicate[list.size()]; - criteriaQuery.where(list.toArray(predicates)); - return cb.and(list.toArray(predicates)); + return cb.and(list.toArray(new Predicate[0])); }; } + private void appendOperaSearchPredicates(List list, CriteriaBuilder cb, Root root, OperaPageRequest pageRequest) { + if (StringUtils.isNotBlank(pageRequest.getSearchBlockCode())) { + CriteriaBuilder.In in = cb.in(root.get("blockCodeId")); + List blockCode = blockCodeDao.getLikeByCode(pageRequest.getSearchBlockCode()); + if (!blockCode.isEmpty()) { + for (CfgBlockCodes b : blockCode) { + in.value(b.getId()); + } + list.add(in); + } + } + if (StringUtils.isNotBlank(pageRequest.getSearchMarketCode())) { + CriteriaBuilder.In in = cb.in(root.get("marketCodeId")); + List marketCode = marketCodeDao.getLikeByCode(pageRequest.getSearchMarketCode().trim()); + if (!marketCode.isEmpty()) { + for (CfgMarketCodes b : marketCode) { + in.value(b.getId()); + } + list.add(in); + } + } + if (StringUtils.isNotBlank(pageRequest.getSearchRateCode())) { + CriteriaBuilder.In in = cb.in(root.get("rateCodeId")); + List rateCode = rateCodeDao.getLikeByCode(pageRequest.getSearchRateCode().trim()); + if (!rateCode.isEmpty()) { + for (CfgRateCodes b : rateCode) { + in.value(b.getId()); + } + list.add(in); + } + } + if (StringUtils.isNotBlank(pageRequest.getSearchDivision())) { + CriteriaBuilder.In in = cb.in(root.get("divisionId")); + List division = divisionDao.getLikeByName(pageRequest.getSearchDivision().trim()); + if (!division.isEmpty()) { + for (CfgDivisions b : division) { + in.value(b.getId()); + } + list.add(in); + } + } + if (StringUtils.isNotBlank(pageRequest.getSearchDepartment())) { + CriteriaBuilder.In in = cb.in(root.get("departmentId")); + List department = departmentDao.getLikeByName(pageRequest.getSearchDepartment().trim()); + if (!department.isEmpty()) { + for (CfgDepartments b : department) { + in.value(b.getId()); + } + list.add(in); + } + } + if (StringUtils.isNotBlank(pageRequest.getSearchSection())) { + CriteriaBuilder.In in = cb.in(root.get("sectionId")); + List section = sectionDao.getLikeByName(pageRequest.getSearchSection().trim()); + if (!section.isEmpty()) { + for (CfgSections b : section) { + in.value(b.getId()); + } + list.add(in); + } + } + } + public boolean deleteOpera(DeleteOperaRequest deleteOperaRequest) { operaDao.deleteById(deleteOperaRequest.getId()); diff --git a/src/main/java/com/mgm/mcrm/basesetting/property/repositories/PropertyDao.java b/src/main/java/com/mgm/mcrm/basesetting/property/repositories/PropertyDao.java index 379aa12..91d968c 100644 --- a/src/main/java/com/mgm/mcrm/basesetting/property/repositories/PropertyDao.java +++ b/src/main/java/com/mgm/mcrm/basesetting/property/repositories/PropertyDao.java @@ -41,4 +41,6 @@ public interface PropertyDao extends JpaRepository { CfgProperties getByName(String name); CfgProperties findByDlPropertyId(String dlPropertyId); + + List findByCategory(String category); } diff --git a/src/main/java/com/mgm/mcrm/basesetting/property/services/PropertyService.java b/src/main/java/com/mgm/mcrm/basesetting/property/services/PropertyService.java index 6d9edab..0409ea3 100644 --- a/src/main/java/com/mgm/mcrm/basesetting/property/services/PropertyService.java +++ b/src/main/java/com/mgm/mcrm/basesetting/property/services/PropertyService.java @@ -33,6 +33,7 @@ import org.springframework.data.domain.Sort.Direction; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import com.mgm.mcrm.common.utils.DaoUtil; +import com.mgm.mcrm.common.utils.DateTimeUtil; import com.mgm.mcrm.common.utils.ExcelUtils; @Slf4j @@ -327,14 +328,19 @@ public class PropertyService { for (int i = 0; i < importRows.size(); i++) { PropertyImportRow pItem = importRows.get(i); CfgProperties newProperty = new CfgProperties(); + newProperty.setShowCalendar(1); + newProperty.setStatus(1); + newProperty.setDisplayType(1); newProperty.setName(pItem.getName()); newProperty.setEmailName(pItem.getEmailName()); newProperty.setCategory(pItem.getCategory()); newProperty.setCode(pItem.getCode()); newProperty.setHotelCode(pItem.getHotelCode()); newProperty.setSortOrder(Integer.valueOf(pItem.getSortOrder())); - newProperty.setCreatedAt(currentTime); - newProperty.setUpdatedAt(currentTime); + LocalDateTime createdAt = parseImportDateTime(pItem.getCreatedTime()); + LocalDateTime updatedAt = parseImportDateTime(pItem.getUpdatedTime()); + newProperty.setCreatedAt(createdAt != null ? createdAt : currentTime); + newProperty.setUpdatedAt(updatedAt != null ? updatedAt : currentTime); newPropertyList.add(newProperty); } propertyDao.saveAll(newPropertyList); @@ -350,4 +356,18 @@ public class PropertyService { } return result; } + + private LocalDateTime parseImportDateTime(String value) { + if (StringUtils.isBlank(value)) { + return null; + } + LocalDateTime parsed = DateTimeUtil.getDateFromString(value, "yyyy-MM-dd'T'HH:mm:ss.SSS"); + if (parsed == null) { + parsed = DateTimeUtil.getDateFromString(value, "yyyy-MM-dd'T'HH:mm:ss"); + } + if (parsed == null) { + parsed = DateTimeUtil.getDateFromString(value, "yyyy-MM-dd HH:mm:ss"); + } + return parsed; + } } diff --git a/src/main/java/com/mgm/mcrm/basesetting/room/services/RoomTypeService.java b/src/main/java/com/mgm/mcrm/basesetting/room/services/RoomTypeService.java index ec3a166..b03d20b 100644 --- a/src/main/java/com/mgm/mcrm/basesetting/room/services/RoomTypeService.java +++ b/src/main/java/com/mgm/mcrm/basesetting/room/services/RoomTypeService.java @@ -177,6 +177,9 @@ public class RoomTypeService { if (!roomTypeList.isEmpty()) { totalRows = roomTypeList.size(); for (RoomTypeImportRow roomTypeImportRow : roomTypeList) { + if (StringUtils.isBlank(roomTypeImportRow.getCategory())) { + roomTypeImportRow.setCategory("OPERA"); + } String errMsg = ""; boolean isPassed = true; if (StringUtils.isBlank(roomTypeImportRow.getName())) { @@ -267,6 +270,7 @@ public class RoomTypeService { CfgRoomTypes newRoomType = new CfgRoomTypes(); newRoomType.setCode(pItem.getName()); newRoomType.setNameCN(pItem.getNameCN()); + newRoomType.setCategory(pItem.getCategory()); newRoomType.setCreatedAt(currentTime); newRoomType.setUpdatedAt(currentTime); newRoomTypeList.add(newRoomType); diff --git a/src/main/java/com/mgm/mcrm/common/dtos/dataimport/appsetting/PropertyImportRow.java b/src/main/java/com/mgm/mcrm/common/dtos/dataimport/appsetting/PropertyImportRow.java index 73e5737..6bfa0c8 100644 --- a/src/main/java/com/mgm/mcrm/common/dtos/dataimport/appsetting/PropertyImportRow.java +++ b/src/main/java/com/mgm/mcrm/common/dtos/dataimport/appsetting/PropertyImportRow.java @@ -10,6 +10,8 @@ public class PropertyImportRow { private String category; private String hotelCode; private String sortOrderVal; + private String createdTime; + private String updatedTime; private int sortOrder=0; public String getName() { @@ -65,6 +67,18 @@ public class PropertyImportRow { } public void setSortOrder(int sortOrder) { this.sortOrder = sortOrder; - } - + } + public String getCreatedTime() { + return createdTime; + } + public void setCreatedTime(String createdTime) { + this.createdTime = createdTime; + } + public String getUpdatedTime() { + return updatedTime; + } + public void setUpdatedTime(String updatedTime) { + this.updatedTime = updatedTime; + } + } diff --git a/src/main/java/com/mgm/mcrm/common/dtos/dataimport/appsetting/RoomTypeImportRow.java b/src/main/java/com/mgm/mcrm/common/dtos/dataimport/appsetting/RoomTypeImportRow.java index 54bef7c..95bcb33 100644 --- a/src/main/java/com/mgm/mcrm/common/dtos/dataimport/appsetting/RoomTypeImportRow.java +++ b/src/main/java/com/mgm/mcrm/common/dtos/dataimport/appsetting/RoomTypeImportRow.java @@ -6,6 +6,14 @@ public class RoomTypeImportRow { private String errorMessage; private String name; private String nameCN; + private String category; + + public String getCategory() { + return category; + } + public void setCategory(String category) { + this.category = category; + } public String getName() { return name; diff --git a/src/main/java/com/mgm/mcrm/common/httpclient/HttpSslSupport.java b/src/main/java/com/mgm/mcrm/common/httpclient/HttpSslSupport.java index 6479096..f88cde1 100644 --- a/src/main/java/com/mgm/mcrm/common/httpclient/HttpSslSupport.java +++ b/src/main/java/com/mgm/mcrm/common/httpclient/HttpSslSupport.java @@ -5,17 +5,10 @@ import com.mgm.mcrm.common.services.ConfigurableTrustHandler; import lombok.Getter; import lombok.Setter; import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; -import org.apache.hc.core5.ssl.SSLContexts; import javax.net.ssl.*; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; import java.security.KeyManagementException; -import java.security.KeyStore; -import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; -import java.security.cert.CertificateException; public class HttpSslSupport { @@ -91,33 +84,6 @@ public class HttpSslSupport { } } - /** - * 使用自定义证书(trustStore)初始化 SSLContext - */ - public HttpSslSupport customSSL(String keyStorePath, String keyStorepass) { - FileInputStream instream = null; - try { - KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); - instream = new FileInputStream(new File(keyStorePath)); - trustStore.load(instream, keyStorepass.toCharArray()); - // 相信自己的 CA 和所有自签名证书 - this.sc = SSLContexts.custom() - .loadTrustMaterial(trustStore, (chain, authType) -> true) - .build(); - return this; - } catch (KeyManagementException | KeyStoreException | - NoSuchAlgorithmException | CertificateException | IOException e) { - throw new RuntimeException("初始化自定义 SSLContext 失败", e); - } finally { - if (instream != null) { - try { - instream.close(); - } catch (IOException ignore) { - // ignore - } - } - } - } /** * 获取(或创建)指定协议版本的 {@link SSLContext} diff --git a/src/main/java/com/mgm/mcrm/logging/services/SysLogBookingService.java b/src/main/java/com/mgm/mcrm/logging/services/SysLogBookingService.java index 6b7e87d..24fa86b 100644 --- a/src/main/java/com/mgm/mcrm/logging/services/SysLogBookingService.java +++ b/src/main/java/com/mgm/mcrm/logging/services/SysLogBookingService.java @@ -116,7 +116,7 @@ public class SysLogBookingService { } sysLogBooking.setChangeTo(changeTo); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } sysLogBookingDao.saveAll(sysLogBookingMapper.toSysLogBookingList(addList)); @@ -126,6 +126,22 @@ public class SysLogBookingService { } + // 每条变更记录都必须使用独立实例,避免同一个引用被后续分支反复覆盖/重复入库 + private SysLogBookingDto cloneLog(SysLogBookingDto src) { + SysLogBookingDto copy = new SysLogBookingDto(); + copy.setId(src.getId()); + copy.setOccurTime(src.getOccurTime()); + copy.setEventCode(src.getEventCode()); + copy.setChangeFrom(src.getChangeFrom()); + copy.setChangeTo(src.getChangeTo()); + copy.setLoginName(src.getLoginName()); + copy.setLoginId(src.getLoginId()); + copy.setBookId(src.getBookId()); + copy.setSortOccurtime(src.getSortOccurtime()); + copy.setIpAddress(src.getIpAddress()); + return copy; + } + public ArrayList saveEditLogBooking(BookingsDto book, HttpServletRequest request, BookingsDto originBook) { ArrayList addList = new ArrayList<>(); SysLogBookingDto sysLogBooking = new SysLogBookingDto(); @@ -148,13 +164,13 @@ public class SysLogBookingService { sysLogBooking.setEventCode("Player"); sysLogBooking.setChangeFrom(originBook.getPlayerId()); sysLogBooking.setChangeTo(book.getPlayerId()); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } if(!Strings.CS.equals(book.getConfirmationNo(), originBook.getConfirmationNo())) { sysLogBooking.setEventCode("Confirmation No"); sysLogBooking.setChangeFrom(originBook.getConfirmationNo()); sysLogBooking.setChangeTo(book.getConfirmationNo()); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } if(!Objects.equals(book.getPropertyId(), originBook.getPropertyId())) { sysLogBooking.setEventCode("Property"); @@ -162,7 +178,7 @@ public class SysLogBookingService { CfgProperties property = propertyService.getById(book.getPropertyId()); sysLogBooking.setChangeFrom(originProperty.getName()); sysLogBooking.setChangeTo(property.getName()); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } if(!Objects.equals(book.getRoomId(), originBook.getRoomId())) { sysLogBooking.setEventCode("Room Type"); @@ -170,7 +186,7 @@ public class SysLogBookingService { CfgRooms room = roomService.getRoomById(book.getRoomId()); sysLogBooking.setChangeFrom(originRoom.getName()); sysLogBooking.setChangeTo(room.getName()); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } if(!Objects.equals(book.getOtherFollowUpStatusId(), originBook.getOtherFollowUpStatusId())) { sysLogBooking.setEventCode("Follow Up Status"); @@ -187,7 +203,7 @@ public class SysLogBookingService { sysLogBooking.setChangeFrom(originFollowStatusName); sysLogBooking.setChangeTo(followStatusName); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } if (!Objects.equals(book.getOtherRoomStatusId(), originBook.getOtherRoomStatusId())) { sysLogBooking.setEventCode("Room Status"); @@ -197,14 +213,14 @@ public class SysLogBookingService { CfgOtherRoomStatus originRoomStatus = roomStatusDao.findById(Long.parseLong(String.valueOf(originBook.getOtherRoomStatusId()))); originRoomStatusName = originRoomStatus.getStatusName(); } - sysLogBooking.setChangeTo(roomStatusName); if(book.getOtherRoomStatusId()!=null) { CfgOtherRoomStatus roomStatus = roomStatusDao.findById(Long.parseLong(String.valueOf(book.getOtherRoomStatusId()))); roomStatusName = roomStatus.getStatusName(); } sysLogBooking.setChangeFrom(originRoomStatusName); - addList.add(sysLogBooking); + sysLogBooking.setChangeTo(roomStatusName); + addList.add(cloneLog(sysLogBooking)); } if(book.getSegmentId() != null && !book.getSegmentId().equals(originBook.getSegmentId()) &&originBook.getSegmentId()!=null) { sysLogBooking.setEventCode("Segment"); @@ -220,25 +236,25 @@ public class SysLogBookingService { } sysLogBooking.setChangeFrom(originSegmentName); sysLogBooking.setChangeTo(segmentName); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } - if(!book.getCheckinDate().equals(originBook.getCheckinDate())) { + if(!Objects.equals(book.getCheckinDate(), originBook.getCheckinDate())) { sysLogBooking.setEventCode("Check In Date"); sysLogBooking.setChangeFrom(DateTimeUtil.getDateByFormat(originBook.getCheckinDate(), "yyyy-MM-dd")); sysLogBooking.setChangeTo(DateTimeUtil.getDateByFormat(book.getCheckinDate(), "yyyy-MM-dd")); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } - if(!book.getCheckoutDate().equals(originBook.getCheckoutDate())) { + if(!Objects.equals(book.getCheckoutDate(), originBook.getCheckoutDate())) { sysLogBooking.setEventCode("Check Out Date"); sysLogBooking.setChangeFrom(DateTimeUtil.getDateByFormat(originBook.getCheckoutDate(), "yyyy-MM-dd")); sysLogBooking.setChangeTo(DateTimeUtil.getDateByFormat(book.getCheckoutDate(), "yyyy-MM-dd")); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } if(!Objects.equals(book.getRequestedCoDate(), originBook.getRequestedCoDate())){ sysLogBooking.setEventCode("Requested C/O date"); sysLogBooking.setChangeFrom(DateTimeUtil.getDateByFormat(originBook.getRequestedCoDate(), "yyyy-MM-dd")); sysLogBooking.setChangeTo(DateTimeUtil.getDateByFormat(book.getRequestedCoDate(), "yyyy-MM-dd")); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } if (!Objects.equals(book.getBookingTypeId(), originBook.getBookingTypeId())) { sysLogBooking.setEventCode("Booking Type"); @@ -254,49 +270,49 @@ public class SysLogBookingService { } sysLogBooking.setChangeFrom(oBookingTypeName); sysLogBooking.setChangeTo(bookingTypeName); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } - if(!book.getMarketCode().equals(originBook.getMarketCode())) { + if(!Objects.equals(book.getMarketCode(), originBook.getMarketCode())) { sysLogBooking.setEventCode("Market Code"); sysLogBooking.setChangeFrom(originBook.getMarketCode()); sysLogBooking.setChangeTo(book.getMarketCode()); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } - if(!book.getBooker().equals(originBook.getBooker())) { + if(!Objects.equals(book.getBooker(), originBook.getBooker())) { sysLogBooking.setEventCode("Booker"); sysLogBooking.setChangeFrom(originBook.getBooker()); sysLogBooking.setChangeTo(book.getBooker()); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } if(!Objects.equals(book.getApprovedBy(), originBook.getApprovedBy())) { sysLogBooking.setEventCode("Approver"); sysLogBooking.setChangeFrom(originBook.getApprovedBy()); sysLogBooking.setChangeTo(book.getApprovedBy()); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } if(!Objects.equals(book.getApprovalRemark(), originBook.getApprovalRemark())) { sysLogBooking.setEventCode("Approval Remark"); sysLogBooking.setChangeFrom(originBook.getApprovalRemark()); sysLogBooking.setChangeTo(book.getApprovalRemark()); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } if(!Objects.equals(book.getRemark(), originBook.getRemark())) { sysLogBooking.setEventCode("Remark"); sysLogBooking.setChangeFrom(originBook.getRemark()); sysLogBooking.setChangeTo(book.getRemark()); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } if(!Objects.equals(book.getFeatureCode(), originBook.getFeatureCode())) { sysLogBooking.setEventCode("Special Request"); sysLogBooking.setChangeFrom(originBook.getFeatureCode()); sysLogBooking.setChangeTo(book.getFeatureCode()); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } if(!Objects.equals(book.getSharer(), originBook.getSharer())) { sysLogBooking.setEventCode("Sharer"); JSONArray originSharerArr = JSONArray.parseArray(originBook.getSharer()); ArrayList originSharerName = new ArrayList(); - if(!originSharerArr.isEmpty()) { + if(originSharerArr != null && !originSharerArr.isEmpty()) { for(Object sharer : originSharerArr) { JSONObject sharerObj = (JSONObject) sharer; if(sharerObj.containsKey("name")) { @@ -317,11 +333,11 @@ public class SysLogBookingService { } } String getOriginSharerName = String.join(";", originSharerName); - String getSharerName= String.join(";", String.join(";", sharerName)); + String getSharerName= String.join(";", sharerName); if(!Objects.equals(getOriginSharerName, getSharerName)) { sysLogBooking.setChangeFrom(getOriginSharerName); sysLogBooking.setChangeTo(getSharerName); - addList.add(sysLogBooking); + addList.add(cloneLog(sysLogBooking)); } } diff --git a/src/main/java/com/mgm/mcrm/reservation/dtos/BookingsDto.java b/src/main/java/com/mgm/mcrm/reservation/dtos/BookingsDto.java index 2408360..bd004df 100644 --- a/src/main/java/com/mgm/mcrm/reservation/dtos/BookingsDto.java +++ b/src/main/java/com/mgm/mcrm/reservation/dtos/BookingsDto.java @@ -280,4 +280,6 @@ public class BookingsDto implements Serializable { private String dlProfileId; private String dlBlockId; + + private Long approvalBookingId; } diff --git a/src/main/java/com/mgm/mcrm/reservation/models/Bookings.java b/src/main/java/com/mgm/mcrm/reservation/models/Bookings.java index 3ae9fc6..d5668f8 100644 --- a/src/main/java/com/mgm/mcrm/reservation/models/Bookings.java +++ b/src/main/java/com/mgm/mcrm/reservation/models/Bookings.java @@ -182,6 +182,8 @@ public class Bookings implements Serializable { private String dlPurchaseElementId; @Column(name = "block_code") private String blockCode; + @Column(name = "approval_booking_id") + private Long approvalBookingId; //-- For export @Transient diff --git a/src/main/java/com/mgm/mcrm/reservation/services/OtherBookingService.java b/src/main/java/com/mgm/mcrm/reservation/services/OtherBookingService.java index 2098675..2f195af 100644 --- a/src/main/java/com/mgm/mcrm/reservation/services/OtherBookingService.java +++ b/src/main/java/com/mgm/mcrm/reservation/services/OtherBookingService.java @@ -470,6 +470,7 @@ public class OtherBookingService { BookingsDto booking = new BookingsDto(); BookingsDto originBooking = new BookingsDto(); BookingsDto waitListBooking = new BookingsDto(); + //BookingsDto approvalBooking = new BookingsDto(); // 使用request对象直接获取值 Long bookId = otherPropertyCreateUpdateRequest.getId(); // 需要添加id字段到request对象 @@ -706,6 +707,11 @@ public class OtherBookingService { waitListBooking.setConfirmationNo(confirmationNo); bookingDao.save(bookingMapper.toBooking(waitListBooking)); } + //if(originBooking.getApprovalBookingId()!=null) { + // approvalBooking = bookingMapper.toBookingDto(bookingDao.getById(originBooking.getApprovalBookingId())); + // approvalBooking.setConfirmationNo(confirmationNo); + // bookingDao.save(bookingMapper.toBooking(approvalBooking)); + //} SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String ciDate = selectDate.get(0); String coDate = selectDate.get(1); diff --git a/src/main/java/com/mgm/mcrm/reservation/services/WaitlistService.java b/src/main/java/com/mgm/mcrm/reservation/services/WaitlistService.java index bdd1ba6..f74ced8 100644 --- a/src/main/java/com/mgm/mcrm/reservation/services/WaitlistService.java +++ b/src/main/java/com/mgm/mcrm/reservation/services/WaitlistService.java @@ -137,6 +137,7 @@ public class WaitlistService { String bookType = param.get("bookType")!=null? String.valueOf(param.get("bookType")):null; String confirmationNo = param.get("confirmationNo")!=null? String.valueOf(param.get("confirmationNo")):null; Long sectionId = param.get("sectionId")!=null? Long.valueOf(String.valueOf(param.get("sectionId"))):null; + String section = param.get("userSection")!=null? String.valueOf(param.get("userSection")):null; Map member = null; if (param.get("member") instanceof Map) { member = (Map) param.get("member"); @@ -267,6 +268,7 @@ public class WaitlistService { booking.setCreatedAt(createDate); booking.setCreatedBy(userId); booking.setSectionId(sectionId); + booking.setSectionName(section); booking.setRoomId(roomId); @@ -366,7 +368,7 @@ public class WaitlistService { ArrayList booksList = new ArrayList<>(); booksList.add(booking); - sysLogBookingService.saveLogBooking(booksList, request, "", "", "Create Booking Test waitlist", ""); + sysLogBookingService.saveLogBooking(booksList, request, "", "", "Create Booking waitlist", ""); } processResult.setSuccess(true); @@ -389,6 +391,7 @@ public class WaitlistService { String bookType = param.get("bookType")!=null? String.valueOf(param.get("bookType")):null; String confirmationNo = param.get("confirmationNo")!=null? String.valueOf(param.get("confirmationNo")):null; Long sectionId = param.get("sectionId")!=null? Long.valueOf(String.valueOf(param.get("sectionId"))):null; + String section = param.get("userSection")!=null? String.valueOf(param.get("userSection")):null; String remarks = param.get("remarks")!=null? String.valueOf(param.get("remarks")):null; Map member = null; @@ -519,6 +522,7 @@ public class WaitlistService { booking.setCreatedAt(createDate); booking.setCreatedBy(userId); booking.setSectionId(sectionId); + booking.setSectionName(section); booking.setRoomId(roomId); booking.setCategory("DAYLIGHT");