From 5b88ce844c6394e51db6ec89bd30b8f0a9358239 Mon Sep 17 00:00:00 2001
From: zjf <1799650030@qq.com>
Date: Thu, 22 Oct 2026 15:59:00 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E5=A6=82=E9=85=92=E5=BA=97=EF=BC=8C?=
=?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BF=AE=E5=A4=8D=E9=83=A8=E9=97=A8=E7=95=8C?=
=?UTF-8?q?=E9=9D=A2=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../product/api/hotel/HotelZaxOrderApi.java | 20 +
.../product/enums/ErrorCodeConstants.java | 8 +
.../yudao-module-product-biz/pom.xml | 5 +
.../api/hotel/HotelZaxOrderApiImpl.java | 25 +
.../admin/hotel/HotelZaxController.java | 234 +++++
.../hotel/vo/HotelZaxDailyBatchReqVO.java | 42 +
.../hotel/vo/HotelZaxDailyPageReqVO.java | 27 +
.../admin/hotel/vo/HotelZaxDailyRespVO.java | 39 +
.../hotel/vo/HotelZaxDailySaveReqVO.java | 36 +
.../hotel/vo/HotelZaxOrderPageReqVO.java | 38 +
.../admin/hotel/vo/HotelZaxOrderRespVO.java | 63 ++
.../admin/hotel/vo/HotelZaxPageReqVO.java | 29 +
.../admin/hotel/vo/HotelZaxProductRespVO.java | 37 +
.../hotel/vo/HotelZaxProductSaveReqVO.java | 39 +
.../admin/hotel/vo/HotelZaxRespVO.java | 71 ++
.../admin/hotel/vo/HotelZaxRoomRespVO.java | 27 +
.../admin/hotel/vo/HotelZaxRoomSaveReqVO.java | 29 +
.../admin/hotel/vo/HotelZaxSaveReqVO.java | 50 +
.../admin/hotel/vo/HotelZaxStatusReqVO.java | 18 +
.../app/hotel/AppHotelController.java | 192 ++++
.../hotel/HotelZaxOpenCallbackController.java | 109 +++
.../dal/dataobject/hotel/HotelZaxDO.java | 77 ++
.../dal/dataobject/hotel/HotelZaxDailyDO.java | 55 ++
.../dal/dataobject/hotel/HotelZaxOrderDO.java | 83 ++
.../dataobject/hotel/HotelZaxProductDO.java | 57 ++
.../dal/dataobject/hotel/HotelZaxRoomDO.java | 47 +
.../hotel/HotelZaxSyncCursorDO.java | 36 +
.../dal/mysql/hotel/HotelZaxDailyMapper.java | 9 +
.../dal/mysql/hotel/HotelZaxMapper.java | 9 +
.../dal/mysql/hotel/HotelZaxOrderMapper.java | 9 +
.../mysql/hotel/HotelZaxProductMapper.java | 9 +
.../dal/mysql/hotel/HotelZaxRoomMapper.java | 9 +
.../mysql/hotel/HotelZaxSyncCursorMapper.java | 9 +
.../hotel/ZaxHotelOpenCallbackAuth.java | 65 ++
.../framework/hotel/ZaxHotelOpenClient.java | 86 ++
.../hotel/ZaxHotelOpenProperties.java | 51 ++
.../job/hotel/HotelZaxDailySyncJob.java | 67 ++
.../job/hotel/HotelZaxUnpaidCancelJob.java | 44 +
.../service/hotel/HotelZaxAdminService.java | 56 ++
.../hotel/HotelZaxAdminServiceImpl.java | 657 ++++++++++++++
.../service/hotel/HotelZaxLocalService.java | 36 +
.../hotel/HotelZaxLocalServiceImpl.java | 444 +++++++++
.../hotel/HotelZaxOrderCallbackService.java | 15 +
.../HotelZaxOrderCallbackServiceImpl.java | 20 +
.../service/hotel/HotelZaxSyncService.java | 35 +
.../hotel/HotelZaxSyncServiceImpl.java | 600 ++++++++++++
.../service/hotel/HotelZaxTradeService.java | 59 ++
.../hotel/HotelZaxTradeServiceImpl.java | 856 ++++++++++++++++++
.../app/order/AppTradeOrderController.java | 26 +-
.../order/vo/AppTradeOrderPageItemRespVO.java | 3 +
.../convert/order/TradeOrderConvert.java | 6 +-
.../src/main/resources/application-dev.yaml | 12 +-
.../src/main/resources/application-local.yaml | 20 +-
.../src/main/resources/application-prod.yaml | 16 +
.../src/main/resources/application.yaml | 8 +-
55 files changed, 4723 insertions(+), 6 deletions(-)
create mode 100644 yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/hotel/HotelZaxOrderApi.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/api/hotel/HotelZaxOrderApiImpl.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/HotelZaxController.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxDailyBatchReqVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxDailyPageReqVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxDailyRespVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxDailySaveReqVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxOrderPageReqVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxOrderRespVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxPageReqVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxProductRespVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxProductSaveReqVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxRespVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxRoomRespVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxRoomSaveReqVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxSaveReqVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/vo/HotelZaxStatusReqVO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/hotel/AppHotelController.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/app/hotel/HotelZaxOpenCallbackController.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/hotel/HotelZaxDO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/hotel/HotelZaxDailyDO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/hotel/HotelZaxOrderDO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/hotel/HotelZaxProductDO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/hotel/HotelZaxRoomDO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/dataobject/hotel/HotelZaxSyncCursorDO.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/hotel/HotelZaxDailyMapper.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/hotel/HotelZaxMapper.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/hotel/HotelZaxOrderMapper.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/hotel/HotelZaxProductMapper.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/hotel/HotelZaxRoomMapper.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/dal/mysql/hotel/HotelZaxSyncCursorMapper.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/framework/hotel/ZaxHotelOpenCallbackAuth.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/framework/hotel/ZaxHotelOpenClient.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/framework/hotel/ZaxHotelOpenProperties.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/job/hotel/HotelZaxDailySyncJob.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/job/hotel/HotelZaxUnpaidCancelJob.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/hotel/HotelZaxAdminService.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/hotel/HotelZaxAdminServiceImpl.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/hotel/HotelZaxLocalService.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/hotel/HotelZaxLocalServiceImpl.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/hotel/HotelZaxOrderCallbackService.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/hotel/HotelZaxOrderCallbackServiceImpl.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/hotel/HotelZaxSyncService.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/hotel/HotelZaxSyncServiceImpl.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/hotel/HotelZaxTradeService.java
create mode 100644 yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/service/hotel/HotelZaxTradeServiceImpl.java
diff --git a/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/hotel/HotelZaxOrderApi.java b/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/hotel/HotelZaxOrderApi.java
new file mode 100644
index 0000000..33f946d
--- /dev/null
+++ b/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/api/hotel/HotelZaxOrderApi.java
@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.product.api.hotel;
+
+/**
+ * 酒店订单支付回调桥接(与商城共用 mall 支付应用)。
+ * 商户单号可能与 trade_order.id 撞号,必须以支付单反查酒店单。
+ */
+public interface HotelZaxOrderApi {
+
+ /**
+ * 支付成功通知:优先按 payOrderId 匹配酒店单。
+ *
+ * @return true=已按酒店单处理;false=不是酒店单,应继续走商城订单
+ */
+ boolean handlePayNotify(String merchantOrderId, Long payOrderId);
+
+ /**
+ * @return true=已按酒店单处理;false=不是酒店单
+ */
+ boolean updatePaidIfMatch(Long merchantOrderId, Long payOrderId);
+}
diff --git a/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/ErrorCodeConstants.java b/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/ErrorCodeConstants.java
index 5da4261..22dcd17 100644
--- a/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/ErrorCodeConstants.java
+++ b/yudao-module-mall/yudao-module-product-api/src/main/java/cn/iocoder/yudao/module/product/enums/ErrorCodeConstants.java
@@ -75,4 +75,12 @@ public interface ErrorCodeConstants {
// ========== 贩卖机测试日志 1-008-013-000 ==========
ErrorCode DEVICE_LOG_NOT_EXISTS = new ErrorCode(1_008_013_000, "贩卖机测试日志不存在");
+ // ========== 资安心酒店本地库 1-008-020-000 ==========
+ ErrorCode HOTEL_ZAX_NOT_EXISTS = new ErrorCode(1_008_020_000, "本地酒店不存在");
+ ErrorCode HOTEL_ZAX_ROOM_NOT_EXISTS = new ErrorCode(1_008_020_001, "本地酒店房型不存在");
+ ErrorCode HOTEL_ZAX_PRODUCT_NOT_EXISTS = new ErrorCode(1_008_020_002, "本地酒店产品不存在");
+ ErrorCode HOTEL_ZAX_DAILY_NOT_EXISTS = new ErrorCode(1_008_020_003, "本地酒店日历不存在");
+ ErrorCode HOTEL_ZAX_ORDER_NOT_EXISTS = new ErrorCode(1_008_020_004, "本地酒店订单不存在");
+ ErrorCode HOTEL_ZAX_ORDER_CANCEL_FAIL = new ErrorCode(1_008_020_005, "酒店订单取消失败:{}");
+
}
diff --git a/yudao-module-mall/yudao-module-product-biz/pom.xml b/yudao-module-mall/yudao-module-product-biz/pom.xml
index e69e05d..ee6b9de 100644
--- a/yudao-module-mall/yudao-module-product-biz/pom.xml
+++ b/yudao-module-mall/yudao-module-product-biz/pom.xml
@@ -28,6 +28,11 @@
yudao-module-member-api
${revision}
+
+ cn.iocoder.boot
+ yudao-module-pay-api
+ ${revision}
+
diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/api/hotel/HotelZaxOrderApiImpl.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/api/hotel/HotelZaxOrderApiImpl.java
new file mode 100644
index 0000000..c106275
--- /dev/null
+++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/api/hotel/HotelZaxOrderApiImpl.java
@@ -0,0 +1,25 @@
+package cn.iocoder.yudao.module.product.api.hotel;
+
+import cn.iocoder.yudao.module.product.service.hotel.HotelZaxTradeService;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+
+@Service
+@Validated
+public class HotelZaxOrderApiImpl implements HotelZaxOrderApi {
+
+ @Resource
+ private HotelZaxTradeService hotelZaxTradeService;
+
+ @Override
+ public boolean handlePayNotify(String merchantOrderId, Long payOrderId) {
+ return hotelZaxTradeService.handlePayNotify(merchantOrderId, payOrderId);
+ }
+
+ @Override
+ public boolean updatePaidIfMatch(Long merchantOrderId, Long payOrderId) {
+ return hotelZaxTradeService.updatePaidIfMatch(merchantOrderId, payOrderId);
+ }
+}
diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/HotelZaxController.java b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/HotelZaxController.java
new file mode 100644
index 0000000..696c84b
--- /dev/null
+++ b/yudao-module-mall/yudao-module-product-biz/src/main/java/cn/iocoder/yudao/module/product/controller/admin/hotel/HotelZaxController.java
@@ -0,0 +1,234 @@
+package cn.iocoder.yudao.module.product.controller.admin.hotel;
+
+import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxDailyBatchReqVO;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxDailyPageReqVO;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxDailyRespVO;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxDailySaveReqVO;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxOrderPageReqVO;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxOrderRespVO;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxPageReqVO;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxProductRespVO;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxProductSaveReqVO;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxRespVO;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxRoomRespVO;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxRoomSaveReqVO;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxSaveReqVO;
+import cn.iocoder.yudao.module.product.controller.admin.hotel.vo.HotelZaxStatusReqVO;
+import cn.iocoder.yudao.module.product.dal.dataobject.hotel.HotelZaxDO;
+import cn.iocoder.yudao.module.product.dal.dataobject.hotel.HotelZaxSyncCursorDO;
+import cn.iocoder.yudao.module.product.dal.mysql.hotel.HotelZaxMapper;
+import cn.iocoder.yudao.module.product.dal.mysql.hotel.HotelZaxSyncCursorMapper;
+import cn.iocoder.yudao.module.product.service.hotel.HotelZaxAdminService;
+import cn.iocoder.yudao.module.product.service.hotel.HotelZaxSyncService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+@Tag(name = "管理后台 - 资安心酒店本地库")
+@RestController
+@RequestMapping("/product/hotel-zax")
+@Validated
+public class HotelZaxController {
+
+ @Resource
+ private HotelZaxMapper hotelZaxMapper;
+
+ @Resource
+ private HotelZaxSyncCursorMapper cursorMapper;
+
+ @Resource
+ private HotelZaxSyncService hotelZaxSyncService;
+
+ @Resource
+ private HotelZaxAdminService hotelZaxAdminService;
+
+ @GetMapping("/page")
+ @Operation(summary = "本地酒店分页")
+ @PreAuthorize("@ss.hasPermission('product:hotel-zax:query')")
+ public CommonResult> page(@Valid HotelZaxPageReqVO req) {
+ return success(hotelZaxAdminService.page(req));
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "本地酒店详情(含房型/产品)")
+ @Parameter(name = "id", required = true)
+ @PreAuthorize("@ss.hasPermission('product:hotel-zax:query')")
+ public CommonResult get(@RequestParam("id") Long id) {
+ return success(hotelZaxAdminService.getDetail(id));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "编辑本地酒店基础信息")
+ @PreAuthorize("@ss.hasPermission('product:hotel-zax:update')")
+ public CommonResult update(@Valid @RequestBody HotelZaxSaveReqVO req) {
+ hotelZaxAdminService.update(req);
+ return success(true);
+ }
+
+ @PutMapping("/update-status")
+ @Operation(summary = "本地上下架")
+ @PreAuthorize("@ss.hasPermission('product:hotel-zax:update')")
+ public CommonResult updateStatus(@Valid @RequestBody HotelZaxStatusReqVO req) {
+ hotelZaxAdminService.updateStatus(req);
+ return success(true);
+ }
+
+ @PostMapping("/room/save")
+ @Operation(summary = "保存房型")
+ @PreAuthorize("@ss.hasPermission('product:hotel-zax:update')")
+ public CommonResult saveRoom(@Valid @RequestBody HotelZaxRoomSaveReqVO req) {
+ return success(hotelZaxAdminService.saveRoom(req));
+ }
+
+ @DeleteMapping("/room/delete")
+ @Operation(summary = "删除房型")
+ @PreAuthorize("@ss.hasPermission('product:hotel-zax:update')")
+ public CommonResult removeRoom(@RequestParam("hotelId") Long hotelId,
+ @RequestParam("roomId") Long roomId) {
+ hotelZaxAdminService.removeRoom(hotelId, roomId);
+ return success(true);
+ }
+
+ @PostMapping("/product/save")
+ @Operation(summary = "保存产品")
+ @PreAuthorize("@ss.hasPermission('product:hotel-zax:update')")
+ public CommonResult saveProduct(@Valid @RequestBody HotelZaxProductSaveReqVO req) {
+ return success(hotelZaxAdminService.saveProduct(req));
+ }
+
+ @DeleteMapping("/product/delete")
+ @Operation(summary = "删除产品")
+ @PreAuthorize("@ss.hasPermission('product:hotel-zax:update')")
+ public CommonResult removeProduct(@RequestParam("hotelId") Long hotelId,
+ @RequestParam("productId") Long productId) {
+ hotelZaxAdminService.removeProduct(hotelId, productId);
+ return success(true);
+ }
+
+ @GetMapping("/daily/page")
+ @Operation(summary = "本地酒店日历分页")
+ @PreAuthorize("@ss.hasPermission('product:hotel-zax:query')")
+ public CommonResult> pageDaily(@Valid HotelZaxDailyPageReqVO req) {
+ return success(hotelZaxAdminService.pageDaily(req));
+ }
+
+ @PostMapping("/daily/save")
+ @Operation(summary = "保存日历")
+ @PreAuthorize("@ss.hasPermission('product:hotel-zax:update')")
+ public CommonResult saveDaily(@Valid @RequestBody HotelZaxDailySaveReqVO req) {
+ return success(hotelZaxAdminService.saveDaily(req));
+ }
+
+ @PostMapping("/daily/batch")
+ @Operation(summary = "批量生成/调价日历 FILL/ADJUST")
+ @PreAuthorize("@ss.hasPermission('product:hotel-zax:update')")
+ public CommonResult