chenchen 5 mesi fa
parent
commit
019f7f83cf
20 ha cambiato i file con 1838 aggiunte e 13 eliminazioni
  1. 62 0
      application-webadmin/src/main/java/com/tourism/webadmin/app/website/controller/TourismOrderController.java
  2. 2 0
      application-webadmin/src/main/java/com/tourism/webadmin/app/wechat/controller/TakeOutProjectController.java
  3. 200 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/controller/TourOderController.java
  4. 180 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/controller/TourOrderPassenageController.java
  5. 1 1
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/RestaurantInfoMapper.java
  6. 33 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourOderMapper.java
  7. 33 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourOrderPassenageMapper.java
  8. 136 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourOderMapper.xml
  9. 94 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourOrderPassenageMapper.xml
  10. 167 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourOderDto.java
  11. 76 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourOrderPassenageDto.java
  12. 12 12
      application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourismProjectDto.java
  13. 173 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourOder.java
  14. 80 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourOrderPassenage.java
  15. 68 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourOderService.java
  16. 76 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourOrderPassenageService.java
  17. 126 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourOderServiceImpl.java
  18. 127 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourOrderPassenageServiceImpl.java
  19. 130 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourOderVo.java
  20. 62 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourOrderPassenageVo.java

+ 62 - 0
application-webadmin/src/main/java/com/tourism/webadmin/app/website/controller/TourismOrderController.java

@@ -0,0 +1,62 @@
+package com.tourism.webadmin.app.website.controller;
+
+import cn.dev33.satoken.annotation.SaIgnore;
+import com.tourism.common.core.object.MyOrderParam;
+import com.tourism.common.core.object.MyPageData;
+import com.tourism.common.core.object.ResponseResult;
+import com.tourism.common.core.object.TokenData;
+import com.tourism.common.core.util.MyPageUtil;
+import com.tourism.webadmin.back.dto.TourOderDto;
+import com.tourism.webadmin.back.model.JobProject;
+import com.tourism.webadmin.back.model.TourOder;
+import com.tourism.webadmin.back.service.TourOderService;
+import com.tourism.webadmin.back.vo.TourOderVo;
+import com.tourism.webadmin.back.vo.TourismProjectVo;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 个人订单控制器类。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Tag(name = "我的订单管理接口")
+@Slf4j
+@RestController
+@RequestMapping("/website/tourism/myOrder")
+public class TourismOrderController {
+
+    @Autowired
+    private TourOderService tourOderService;
+
+    /**
+     * 列出符合过滤条件个人订单列表。
+     *
+     * @param tourOderDto 旅游订单Dto对象
+     * @return 应答结果对象,包含查询结果集。
+     */
+    @GetMapping("/list")
+    public ResponseResult<MyPageData<TourOderVo>> list(TourOderDto tourOderDto){
+        TourOder tourOder = new TourOder();
+        if(tourOderDto.getOrderStatus() != null){
+            tourOder.setOrderStatus(tourOderDto.getOrderStatus());
+        }
+        TokenData tokenData = TokenData.takeFromRequest();
+        tourOder.setChildrenNumber(Integer.parseInt(tokenData.getLoginName()));
+        MyOrderParam myOrderParam = new MyOrderParam();
+        myOrderParam.add(new MyOrderParam.OrderInfo("createTime",false,null));
+        String orderBy = MyOrderParam.buildOrderBy(myOrderParam, TourOder.class);
+        List<TourOder> tourOderList = tourOderService.getTourOderList(tourOder, orderBy);
+        MyPageData<TourOderVo> tourOderVoMyPageData = MyPageUtil.makeResponseData(tourOderList, TourOderVo.class);
+        return ResponseResult.success(tourOderVoMyPageData);
+    }
+
+
+}

+ 2 - 0
application-webadmin/src/main/java/com/tourism/webadmin/app/wechat/controller/TakeOutProjectController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.github.pagehelper.page.PageMethod;
 import com.tourism.common.additional.utils.StringUtils;
 import com.tourism.common.additional.utils.UrlConvertUtils;
+import com.tourism.common.core.annotation.DisableDataFilter;
 import com.tourism.common.core.constant.ErrorCodeEnum;
 import com.tourism.common.core.object.MyOrderParam;
 import com.tourism.common.core.object.MyPageData;
@@ -44,6 +45,7 @@ import java.util.List;
 @Slf4j
 @RestController
 @RequestMapping("/wechat/foodProject")
+@DisableDataFilter
 public class TakeOutProjectController {
 
     @Autowired

+ 200 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/controller/TourOderController.java

@@ -0,0 +1,200 @@
+package com.tourism.webadmin.back.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.tourism.common.log.annotation.OperationLog;
+import com.tourism.common.log.model.constant.SysOperationLogType;
+import com.github.pagehelper.page.PageMethod;
+import com.tourism.webadmin.back.vo.*;
+import com.tourism.webadmin.back.dto.*;
+import com.tourism.webadmin.back.model.*;
+import com.tourism.webadmin.back.service.*;
+import com.tourism.common.core.object.*;
+import com.tourism.common.core.util.*;
+import com.tourism.common.core.constant.*;
+import com.tourism.common.core.annotation.MyRequestBody;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+/**
+ * 旅游订单操作控制器类。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Tag(name = "旅游订单管理接口")
+@Slf4j
+@RestController
+@RequestMapping("/admin/app/tourOder")
+public class TourOderController {
+
+    @Autowired
+    private TourOderService tourOderService;
+
+    /**
+     * 新增旅游订单数据。
+     *
+     * @param tourOderDto 新增对象。
+     * @return 应答结果对象,包含新增对象主键Id。
+     */
+    @ApiOperationSupport(ignoreParameters = {
+            "tourOderDto.id",
+            "tourOderDto.searchString",
+            "tourOderDto.departureDateStart",
+            "tourOderDto.departureDateEnd",
+            "tourOderDto.endDateStart",
+            "tourOderDto.endDateEnd"})
+    @SaCheckPermission("tourOder.add")
+    @OperationLog(type = SysOperationLogType.ADD)
+    @PostMapping("/add")
+    public ResponseResult<Long> add(@MyRequestBody TourOderDto tourOderDto) {
+        String errorMessage = MyCommonUtil.getModelValidationError(tourOderDto, false);
+        if (errorMessage != null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
+        }
+        TourOder tourOder = MyModelUtil.copyTo(tourOderDto, TourOder.class);
+        // 验证关联Id的数据合法性
+        CallResult callResult = tourOderService.verifyRelatedData(tourOder, null);
+        if (!callResult.isSuccess()) {
+            return ResponseResult.errorFrom(callResult);
+        }
+        tourOder = tourOderService.saveNew(tourOder);
+        return ResponseResult.success(tourOder.getId());
+    }
+
+    /**
+     * 更新旅游订单数据。
+     *
+     * @param tourOderDto 更新对象。
+     * @return 应答结果对象。
+     */
+    @ApiOperationSupport(ignoreParameters = {
+            "tourOderDto.searchString",
+            "tourOderDto.departureDateStart",
+            "tourOderDto.departureDateEnd",
+            "tourOderDto.endDateStart",
+            "tourOderDto.endDateEnd"})
+    @SaCheckPermission("tourOder.update")
+    @OperationLog(type = SysOperationLogType.UPDATE)
+    @PostMapping("/update")
+    public ResponseResult<Void> update(@MyRequestBody TourOderDto tourOderDto) {
+        String errorMessage = MyCommonUtil.getModelValidationError(tourOderDto, true);
+        if (errorMessage != null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
+        }
+        TourOder tourOder = MyModelUtil.copyTo(tourOderDto, TourOder.class);
+        TourOder originalTourOder = tourOderService.getById(tourOder.getId());
+        if (originalTourOder == null) {
+            // NOTE: 修改下面方括号中的话述
+            errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        // 验证关联Id的数据合法性
+        CallResult callResult = tourOderService.verifyRelatedData(tourOder, originalTourOder);
+        if (!callResult.isSuccess()) {
+            return ResponseResult.errorFrom(callResult);
+        }
+        if (!tourOderService.update(tourOder, originalTourOder)) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
+        }
+        return ResponseResult.success();
+    }
+
+    /**
+     * 删除旅游订单数据。
+     *
+     * @param id 删除对象主键Id。
+     * @return 应答结果对象。
+     */
+    @SaCheckPermission("tourOder.delete")
+    @OperationLog(type = SysOperationLogType.DELETE)
+    @PostMapping("/delete")
+    public ResponseResult<Void> delete(@MyRequestBody Long id) {
+        if (MyCommonUtil.existBlankArgument(id)) {
+            return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
+        }
+        return this.doDelete(id);
+    }
+
+    /**
+     * 批量删除旅游订单数据。
+     *
+     * @param idList 待删除对象的主键Id列表。
+     * @return 应答结果对象。
+     */
+    @SaCheckPermission("tourOder.delete")
+    @OperationLog(type = SysOperationLogType.DELETE_BATCH)
+    @PostMapping("/deleteBatch")
+    public ResponseResult<Void> deleteBatch(@MyRequestBody List<Long> idList) {
+        if (MyCommonUtil.existBlankArgument(idList)) {
+            return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
+        }
+        for (Long id : idList) {
+            ResponseResult<Void> responseResult = this.doDelete(id);
+            if (!responseResult.isSuccess()) {
+                return responseResult;
+            }
+        }
+        return ResponseResult.success();
+    }
+
+    /**
+     * 列出符合过滤条件的旅游订单列表。
+     *
+     * @param tourOderDtoFilter 过滤对象。
+     * @param orderParam 排序参数。
+     * @param pageParam 分页参数。
+     * @return 应答结果对象,包含查询结果集。
+     */
+    @SaCheckPermission("tourOder.view")
+    @PostMapping("/list")
+    public ResponseResult<MyPageData<TourOderVo>> list(
+            @MyRequestBody TourOderDto tourOderDtoFilter,
+            @MyRequestBody MyOrderParam orderParam,
+            @MyRequestBody MyPageParam pageParam) {
+        if (pageParam != null) {
+            PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize(), pageParam.getCount());
+        }
+        TourOder tourOderFilter = MyModelUtil.copyTo(tourOderDtoFilter, TourOder.class);
+        String orderBy = MyOrderParam.buildOrderBy(orderParam, TourOder.class);
+        List<TourOder> tourOderList = tourOderService.getTourOderListWithRelation(tourOderFilter, orderBy);
+        return ResponseResult.success(MyPageUtil.makeResponseData(tourOderList, TourOderVo.class));
+    }
+
+    /**
+     * 查看指定旅游订单对象详情。
+     *
+     * @param id 指定对象主键Id。
+     * @return 应答结果对象,包含对象详情。
+     */
+    @SaCheckPermission("tourOder.view")
+    @GetMapping("/view")
+    public ResponseResult<TourOderVo> view(@RequestParam Long id) {
+        TourOder tourOder = tourOderService.getByIdWithRelation(id, MyRelationParam.full());
+        if (tourOder == null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
+        }
+        TourOderVo tourOderVo = MyModelUtil.copyTo(tourOder, TourOderVo.class);
+        return ResponseResult.success(tourOderVo);
+    }
+
+    private ResponseResult<Void> doDelete(Long id) {
+        String errorMessage;
+        // 验证关联Id的数据合法性
+        TourOder originalTourOder = tourOderService.getById(id);
+        if (originalTourOder == null) {
+            // NOTE: 修改下面方括号中的话述
+            errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        if (!tourOderService.remove(id)) {
+            errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        return ResponseResult.success();
+    }
+}

+ 180 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/controller/TourOrderPassenageController.java

@@ -0,0 +1,180 @@
+package com.tourism.webadmin.back.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.tourism.common.log.annotation.OperationLog;
+import com.tourism.common.log.model.constant.SysOperationLogType;
+import com.github.pagehelper.page.PageMethod;
+import com.tourism.webadmin.back.vo.*;
+import com.tourism.webadmin.back.dto.*;
+import com.tourism.webadmin.back.model.*;
+import com.tourism.webadmin.back.service.*;
+import com.tourism.common.core.object.*;
+import com.tourism.common.core.util.*;
+import com.tourism.common.core.constant.*;
+import com.tourism.common.core.annotation.MyRequestBody;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.*;
+
+/**
+ * 旅游订单游客操作控制器类。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Tag(name = "旅游订单游客管理接口")
+@Slf4j
+@RestController
+@RequestMapping("/admin/app/tourOrderPassenage")
+public class TourOrderPassenageController {
+
+    @Autowired
+    private TourOrderPassenageService tourOrderPassenageService;
+
+    /**
+     * 新增旅游订单游客数据。
+     *
+     * @param tourOrderPassenageDto 新增对象。
+     * @return 应答结果对象,包含新增对象主键Id。
+     */
+    @ApiOperationSupport(ignoreParameters = {"tourOrderPassenageDto.id", "tourOrderPassenageDto.searchString"})
+    @SaCheckPermission("tourOrderPassenage.add")
+    @OperationLog(type = SysOperationLogType.ADD)
+    @PostMapping("/add")
+    public ResponseResult<Long> add(@MyRequestBody TourOrderPassenageDto tourOrderPassenageDto) {
+        String errorMessage = MyCommonUtil.getModelValidationError(tourOrderPassenageDto, false);
+        if (errorMessage != null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
+        }
+        TourOrderPassenage tourOrderPassenage = MyModelUtil.copyTo(tourOrderPassenageDto, TourOrderPassenage.class);
+        tourOrderPassenage = tourOrderPassenageService.saveNew(tourOrderPassenage);
+        return ResponseResult.success(tourOrderPassenage.getId());
+    }
+
+    /**
+     * 更新旅游订单游客数据。
+     *
+     * @param tourOrderPassenageDto 更新对象。
+     * @return 应答结果对象。
+     */
+    @ApiOperationSupport(ignoreParameters = {"tourOrderPassenageDto.searchString"})
+    @SaCheckPermission("tourOrderPassenage.update")
+    @OperationLog(type = SysOperationLogType.UPDATE)
+    @PostMapping("/update")
+    public ResponseResult<Void> update(@MyRequestBody TourOrderPassenageDto tourOrderPassenageDto) {
+        String errorMessage = MyCommonUtil.getModelValidationError(tourOrderPassenageDto, true);
+        if (errorMessage != null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
+        }
+        TourOrderPassenage tourOrderPassenage = MyModelUtil.copyTo(tourOrderPassenageDto, TourOrderPassenage.class);
+        TourOrderPassenage originalTourOrderPassenage = tourOrderPassenageService.getById(tourOrderPassenage.getId());
+        if (originalTourOrderPassenage == null) {
+            // NOTE: 修改下面方括号中的话述
+            errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        if (!tourOrderPassenageService.update(tourOrderPassenage, originalTourOrderPassenage)) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
+        }
+        return ResponseResult.success();
+    }
+
+    /**
+     * 删除旅游订单游客数据。
+     *
+     * @param id 删除对象主键Id。
+     * @return 应答结果对象。
+     */
+    @SaCheckPermission("tourOrderPassenage.delete")
+    @OperationLog(type = SysOperationLogType.DELETE)
+    @PostMapping("/delete")
+    public ResponseResult<Void> delete(@MyRequestBody Long id) {
+        if (MyCommonUtil.existBlankArgument(id)) {
+            return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
+        }
+        return this.doDelete(id);
+    }
+
+    /**
+     * 批量删除旅游订单游客数据。
+     *
+     * @param idList 待删除对象的主键Id列表。
+     * @return 应答结果对象。
+     */
+    @SaCheckPermission("tourOrderPassenage.delete")
+    @OperationLog(type = SysOperationLogType.DELETE_BATCH)
+    @PostMapping("/deleteBatch")
+    public ResponseResult<Void> deleteBatch(@MyRequestBody List<Long> idList) {
+        if (MyCommonUtil.existBlankArgument(idList)) {
+            return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
+        }
+        for (Long id : idList) {
+            ResponseResult<Void> responseResult = this.doDelete(id);
+            if (!responseResult.isSuccess()) {
+                return responseResult;
+            }
+        }
+        return ResponseResult.success();
+    }
+
+    /**
+     * 列出符合过滤条件的旅游订单游客列表。
+     *
+     * @param tourOrderPassenageDtoFilter 过滤对象。
+     * @param orderParam 排序参数。
+     * @param pageParam 分页参数。
+     * @return 应答结果对象,包含查询结果集。
+     */
+    @SaCheckPermission("tourOrderPassenage.view")
+    @PostMapping("/list")
+    public ResponseResult<MyPageData<TourOrderPassenageVo>> list(
+            @MyRequestBody TourOrderPassenageDto tourOrderPassenageDtoFilter,
+            @MyRequestBody MyOrderParam orderParam,
+            @MyRequestBody MyPageParam pageParam) {
+        if (pageParam != null) {
+            PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize(), pageParam.getCount());
+        }
+        TourOrderPassenage tourOrderPassenageFilter = MyModelUtil.copyTo(tourOrderPassenageDtoFilter, TourOrderPassenage.class);
+        String orderBy = MyOrderParam.buildOrderBy(orderParam, TourOrderPassenage.class);
+        List<TourOrderPassenage> tourOrderPassenageList =
+                tourOrderPassenageService.getTourOrderPassenageListWithRelation(tourOrderPassenageFilter, orderBy);
+        return ResponseResult.success(MyPageUtil.makeResponseData(tourOrderPassenageList, TourOrderPassenageVo.class));
+    }
+
+    /**
+     * 查看指定旅游订单游客对象详情。
+     *
+     * @param id 指定对象主键Id。
+     * @return 应答结果对象,包含对象详情。
+     */
+    @SaCheckPermission("tourOrderPassenage.view")
+    @GetMapping("/view")
+    public ResponseResult<TourOrderPassenageVo> view(@RequestParam Long id) {
+        TourOrderPassenage tourOrderPassenage = tourOrderPassenageService.getByIdWithRelation(id, MyRelationParam.full());
+        if (tourOrderPassenage == null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
+        }
+        TourOrderPassenageVo tourOrderPassenageVo = MyModelUtil.copyTo(tourOrderPassenage, TourOrderPassenageVo.class);
+        return ResponseResult.success(tourOrderPassenageVo);
+    }
+
+    private ResponseResult<Void> doDelete(Long id) {
+        String errorMessage;
+        // 验证关联Id的数据合法性
+        TourOrderPassenage originalTourOrderPassenage = tourOrderPassenageService.getById(id);
+        if (originalTourOrderPassenage == null) {
+            // NOTE: 修改下面方括号中的话述
+            errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        if (!tourOrderPassenageService.remove(id)) {
+            errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        return ResponseResult.success();
+    }
+}

+ 1 - 1
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/RestaurantInfoMapper.java

@@ -13,7 +13,7 @@ import java.util.*;
  * @author 吃饭睡觉
  * @date 2024-09-06
  */
-//@EnableDataPerm
+@EnableDataPerm
 public interface RestaurantInfoMapper extends BaseDaoMapper<RestaurantInfo> {
 
     /**

+ 33 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourOderMapper.java

@@ -0,0 +1,33 @@
+package com.tourism.webadmin.back.dao;
+
+import com.tourism.common.core.base.dao.BaseDaoMapper;
+import com.tourism.webadmin.back.model.TourOder;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.*;
+
+/**
+ * 旅游订单数据操作访问接口。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+public interface TourOderMapper extends BaseDaoMapper<TourOder> {
+
+    /**
+     * 批量插入对象列表。
+     *
+     * @param tourOderList 新增对象列表。
+     */
+    void insertList(List<TourOder> tourOderList);
+
+    /**
+     * 获取过滤后的对象列表。
+     *
+     * @param tourOderFilter 主表过滤对象。
+     * @param orderBy 排序字符串,order by从句的参数。
+     * @return 对象列表。
+     */
+    List<TourOder> getTourOderList(
+            @Param("tourOderFilter") TourOder tourOderFilter, @Param("orderBy") String orderBy);
+}

+ 33 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourOrderPassenageMapper.java

@@ -0,0 +1,33 @@
+package com.tourism.webadmin.back.dao;
+
+import com.tourism.common.core.base.dao.BaseDaoMapper;
+import com.tourism.webadmin.back.model.TourOrderPassenage;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.*;
+
+/**
+ * 旅游订单游客数据操作访问接口。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+public interface TourOrderPassenageMapper extends BaseDaoMapper<TourOrderPassenage> {
+
+    /**
+     * 批量插入对象列表。
+     *
+     * @param tourOrderPassenageList 新增对象列表。
+     */
+    void insertList(List<TourOrderPassenage> tourOrderPassenageList);
+
+    /**
+     * 获取过滤后的对象列表。
+     *
+     * @param tourOrderPassenageFilter 主表过滤对象。
+     * @param orderBy 排序字符串,order by从句的参数。
+     * @return 对象列表。
+     */
+    List<TourOrderPassenage> getTourOrderPassenageList(
+            @Param("tourOrderPassenageFilter") TourOrderPassenage tourOrderPassenageFilter, @Param("orderBy") String orderBy);
+}

+ 136 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourOderMapper.xml

@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tourism.webadmin.back.dao.TourOderMapper">
+    <resultMap id="BaseResultMap" type="com.tourism.webadmin.back.model.TourOder">
+        <id column="id" jdbcType="BIGINT" property="id"/>
+        <result column="order_no" jdbcType="VARCHAR" property="orderNo"/>
+        <result column="departure_date" jdbcType="TIMESTAMP" property="departureDate"/>
+        <result column="end_date" jdbcType="TIMESTAMP" property="endDate"/>
+        <result column="adult_number" jdbcType="INTEGER" property="adultNumber"/>
+        <result column="children_number" jdbcType="INTEGER" property="childrenNumber"/>
+        <result column="currency" jdbcType="VARCHAR" property="currency"/>
+        <result column="total_amount" jdbcType="DECIMAL" property="totalAmount"/>
+        <result column="room_number" jdbcType="INTEGER" property="roomNumber"/>
+        <result column="car_id" jdbcType="BIGINT" property="carId"/>
+        <result column="car_amount" jdbcType="DECIMAL" property="carAmount"/>
+        <result column="order_date" jdbcType="TIMESTAMP" property="orderDate"/>
+        <result column="order_status" jdbcType="TINYINT" property="orderStatus"/>
+        <result column="project_id" jdbcType="BIGINT" property="projectId"/>
+        <result column="project_resume" jdbcType="VARCHAR" property="projectResume"/>
+        <result column="customer_name" jdbcType="VARCHAR" property="customerName"/>
+        <result column="customer_mobile" jdbcType="VARCHAR" property="customerMobile"/>
+        <result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
+        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
+        <result column="data_state" jdbcType="TINYINT" property="dataState"/>
+    </resultMap>
+
+    <insert id="insertList">
+        INSERT INTO tour_order
+            (id,
+            order_no,
+            departure_date,
+            end_date,
+            adult_number,
+            children_number,
+            currency,
+            total_amount,
+            room_number,
+            car_id,
+            car_amount,
+            order_date,
+            order_status,
+            project_id,
+            project_resume,
+            customer_name,
+            customer_mobile,
+            create_user_id,
+            create_time,
+            update_user_id,
+            update_time,
+            data_state)
+        VALUES
+        <foreach collection="list" index="index" item="item" separator="," >
+            (#{item.id},
+            #{item.orderNo},
+            #{item.departureDate},
+            #{item.endDate},
+            #{item.adultNumber},
+            #{item.childrenNumber},
+            #{item.currency},
+            #{item.totalAmount},
+            #{item.roomNumber},
+            #{item.carId},
+            #{item.carAmount},
+            #{item.orderDate},
+            #{item.orderStatus},
+            #{item.projectId},
+            #{item.projectResume},
+            #{item.customerName},
+            #{item.customerMobile},
+            #{item.createUserId},
+            #{item.createTime},
+            #{item.updateUserId},
+            #{item.updateTime},
+            #{item.dataState})
+        </foreach>
+    </insert>
+
+    <!-- 如果有逻辑删除字段过滤,请写到这里 -->
+    <sql id="filterRef">
+        <!-- 这里必须加上全包名,否则当filterRef被其他Mapper.xml包含引用的时候,就会调用Mapper.xml中的该SQL片段 -->
+        <include refid="com.tourism.webadmin.back.dao.TourOderMapper.inputFilterRef"/>
+        AND tour_order.data_state = ${@com.tourism.common.core.constant.GlobalDeletedFlag@NORMAL}
+    </sql>
+
+    <!-- 这里仅包含调用接口输入的主表过滤条件 -->
+    <sql id="inputFilterRef">
+        <if test="tourOderFilter != null">
+            <if test="tourOderFilter.departureDateStart != null and tourOderFilter.departureDateStart != ''">
+                AND tour_order.departure_date &gt;= #{tourOderFilter.departureDateStart}
+            </if>
+            <if test="tourOderFilter.departureDateEnd != null and tourOderFilter.departureDateEnd != ''">
+                AND tour_order.departure_date &lt;= #{tourOderFilter.departureDateEnd}
+            </if>
+            <if test="tourOderFilter.endDateStart != null and tourOderFilter.endDateStart != ''">
+                AND tour_order.end_date &gt;= #{tourOderFilter.endDateStart}
+            </if>
+            <if test="tourOderFilter.endDateEnd != null and tourOderFilter.endDateEnd != ''">
+                AND tour_order.end_date &lt;= #{tourOderFilter.endDateEnd}
+            </if>
+            <if test="tourOderFilter.orderStatus != null">
+                AND tour_order.order_status = #{tourOderFilter.orderStatus}
+            </if>
+            <if test="tourOderFilter.projectId != null">
+                AND tour_order.project_id = #{tourOderFilter.projectId}
+            </if>
+            <if test="tourOderFilter.projectResume != null and tourOderFilter.projectResume != ''">
+                <bind name = "safeTourOderProjectResume" value = "'%' + tourOderFilter.projectResume + '%'" />
+                AND tour_order.project_resume LIKE #{safeTourOderProjectResume}
+            </if>
+            <if test="tourOderFilter.customerName != null and tourOderFilter.customerName != ''">
+                <bind name = "safeTourOderCustomerName" value = "'%' + tourOderFilter.customerName + '%'" />
+                AND tour_order.customer_name LIKE #{safeTourOderCustomerName}
+            </if>
+            <if test="tourOderFilter.customerMobile != null and tourOderFilter.customerMobile != ''">
+                <bind name = "safeTourOderCustomerMobile" value = "'%' + tourOderFilter.customerMobile + '%'" />
+                AND tour_order.customer_mobile LIKE #{safeTourOderCustomerMobile}
+            </if>
+            <if test="tourOderFilter.searchString != null and tourOderFilter.searchString != ''">
+                <bind name = "safeTourOderSearchString" value = "'%' + tourOderFilter.searchString + '%'" />
+                AND CONCAT(IFNULL(tour_order.project_resume,''), IFNULL(tour_order.customer_name,''), IFNULL(tour_order.customer_mobile,'')) LIKE #{safeTourOderSearchString}
+            </if>
+        </if>
+    </sql>
+
+    <select id="getTourOderList" resultMap="BaseResultMap" parameterType="com.tourism.webadmin.back.model.TourOder">
+        SELECT * FROM tour_order
+        <where>
+            <include refid="filterRef"/>
+        </where>
+        <if test="orderBy != null and orderBy != ''">
+            ORDER BY ${orderBy}
+        </if>
+    </select>
+</mapper>

+ 94 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourOrderPassenageMapper.xml

@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.tourism.webadmin.back.dao.TourOrderPassenageMapper">
+    <resultMap id="BaseResultMap" type="com.tourism.webadmin.back.model.TourOrderPassenage">
+        <id column="id" jdbcType="BIGINT" property="id"/>
+        <result column="chinese_name" jdbcType="VARCHAR" property="chineseName"/>
+        <result column="english_name" jdbcType="VARCHAR" property="englishName"/>
+        <result column="nationality" jdbcType="VARCHAR" property="nationality"/>
+        <result column="birthday" jdbcType="DATE" property="birthday"/>
+        <result column="mobile" jdbcType="VARCHAR" property="mobile"/>
+        <result column="order_id" jdbcType="BIGINT" property="orderId"/>
+        <result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
+        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
+        <result column="data_state" jdbcType="TINYINT" property="dataState"/>
+    </resultMap>
+
+    <insert id="insertList">
+        INSERT INTO tour_order_passenger
+            (id,
+            chinese_name,
+            english_name,
+            nationality,
+            birthday,
+            mobile,
+            order_id,
+            create_user_id,
+            create_time,
+            update_user_id,
+            update_time,
+            data_state)
+        VALUES
+        <foreach collection="list" index="index" item="item" separator="," >
+            (#{item.id},
+            #{item.chineseName},
+            #{item.englishName},
+            #{item.nationality},
+            #{item.birthday},
+            #{item.mobile},
+            #{item.orderId},
+            #{item.createUserId},
+            #{item.createTime},
+            #{item.updateUserId},
+            #{item.updateTime},
+            #{item.dataState})
+        </foreach>
+    </insert>
+
+    <!-- 如果有逻辑删除字段过滤,请写到这里 -->
+    <sql id="filterRef">
+        <!-- 这里必须加上全包名,否则当filterRef被其他Mapper.xml包含引用的时候,就会调用Mapper.xml中的该SQL片段 -->
+        <include refid="com.tourism.webadmin.back.dao.TourOrderPassenageMapper.inputFilterRef"/>
+        AND tour_order_passenger.data_state = ${@com.tourism.common.core.constant.GlobalDeletedFlag@NORMAL}
+    </sql>
+
+    <!-- 这里仅包含调用接口输入的主表过滤条件 -->
+    <sql id="inputFilterRef">
+        <if test="tourOrderPassenageFilter != null">
+            <if test="tourOrderPassenageFilter.chineseName != null and tourOrderPassenageFilter.chineseName != ''">
+                <bind name = "safeTourOrderPassenageChineseName" value = "'%' + tourOrderPassenageFilter.chineseName + '%'" />
+                AND tour_order_passenger.chinese_name LIKE #{safeTourOrderPassenageChineseName}
+            </if>
+            <if test="tourOrderPassenageFilter.englishName != null and tourOrderPassenageFilter.englishName != ''">
+                <bind name = "safeTourOrderPassenageEnglishName" value = "'%' + tourOrderPassenageFilter.englishName + '%'" />
+                AND tour_order_passenger.english_name LIKE #{safeTourOrderPassenageEnglishName}
+            </if>
+            <if test="tourOrderPassenageFilter.nationality != null">
+                AND tour_order_passenger.nationality = #{tourOrderPassenageFilter.nationality}
+            </if>
+            <if test="tourOrderPassenageFilter.mobile != null and tourOrderPassenageFilter.mobile != ''">
+                <bind name = "safeTourOrderPassenageMobile" value = "'%' + tourOrderPassenageFilter.mobile + '%'" />
+                AND tour_order_passenger.mobile LIKE #{safeTourOrderPassenageMobile}
+            </if>
+            <if test="tourOrderPassenageFilter.orderId != null">
+                AND tour_order_passenger.order_id = #{tourOrderPassenageFilter.orderId}
+            </if>
+            <if test="tourOrderPassenageFilter.searchString != null and tourOrderPassenageFilter.searchString != ''">
+                <bind name = "safeTourOrderPassenageSearchString" value = "'%' + tourOrderPassenageFilter.searchString + '%'" />
+                AND CONCAT(IFNULL(tour_order_passenger.chinese_name,''), IFNULL(tour_order_passenger.english_name,''), IFNULL(tour_order_passenger.mobile,'')) LIKE #{safeTourOrderPassenageSearchString}
+            </if>
+        </if>
+    </sql>
+
+    <select id="getTourOrderPassenageList" resultMap="BaseResultMap" parameterType="com.tourism.webadmin.back.model.TourOrderPassenage">
+        SELECT * FROM tour_order_passenger
+        <where>
+            <include refid="filterRef"/>
+        </where>
+        <if test="orderBy != null and orderBy != ''">
+            ORDER BY ${orderBy}
+        </if>
+    </select>
+</mapper>

+ 167 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourOderDto.java

@@ -0,0 +1,167 @@
+package com.tourism.webadmin.back.dto;
+
+import com.tourism.common.core.validator.UpdateGroup;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import jakarta.validation.constraints.*;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 旅游订单Dto对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Schema(description = "TourOderDto对象")
+@Data
+public class TourOderDto {
+
+    /**
+     * ID主键。
+     */
+    @Schema(description = "ID主键。", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "数据验证失败,ID主键不能为空!", groups = {UpdateGroup.class})
+    private Long id;
+
+    /**
+     * 订单号。
+     */
+    @Schema(description = "订单号。")
+    private String orderNo;
+
+    /**
+     * 出发日期。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "出发日期。可支持等于操作符的列表数据过滤。")
+    private Date departureDate;
+
+    /**
+     * 结束日期。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "结束日期。可支持等于操作符的列表数据过滤。")
+    private Date endDate;
+
+    /**
+     * 成人数量。
+     */
+    @Schema(description = "成人数量。")
+    private Integer adultNumber;
+
+    /**
+     * 儿童数量。
+     */
+    @Schema(description = "儿童数量。")
+    private Integer childrenNumber;
+
+    /**
+     * 币种。
+     */
+    @Schema(description = "币种。")
+    private String currency;
+
+    /**
+     * 订单总金额。
+     */
+    @Schema(description = "订单总金额。")
+    private BigDecimal totalAmount;
+
+    /**
+     * 房间数量。
+     */
+    @Schema(description = "房间数量。")
+    private Integer roomNumber;
+
+    /**
+     * 车辆信息。
+     */
+    @Schema(description = "车辆信息。")
+    private Long carId;
+
+    /**
+     * 车辆金额。
+     */
+    @Schema(description = "车辆金额。")
+    private BigDecimal carAmount;
+
+    /**
+     * 预定日期。
+     */
+    @Schema(description = "预定日期。")
+    private Date orderDate;
+
+    /**
+     * 订单状态。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "订单状态。0未完成;1已完成。")
+    private Integer orderStatus;
+
+    /**
+     * 旅游项目。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "旅游项目。可支持等于操作符的列表数据过滤。")
+    private Long projectId;
+
+    /**
+     * 项目简述。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "项目简述。可支持等于操作符的列表数据过滤。")
+    private String projectResume;
+
+    /**
+     * 顾客姓名。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "顾客姓名。可支持等于操作符的列表数据过滤。")
+    private String customerName;
+
+    /**
+     * 顾客手机号。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "顾客手机号。可支持等于操作符的列表数据过滤。")
+    private String customerMobile;
+
+    /**
+     * departureDate 范围过滤起始值(>=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "departureDate 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
+    private String departureDateStart;
+
+    /**
+     * departureDate 范围过滤结束值(<=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "departureDate 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
+    private String departureDateEnd;
+
+    /**
+     * endDate 范围过滤起始值(>=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "endDate 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
+    private String endDateStart;
+
+    /**
+     * endDate 范围过滤结束值(<=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "endDate 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
+    private String endDateEnd;
+
+    /**
+     * project_resume / customer_name / customer_mobile LIKE搜索字符串。
+     * NOTE: 可支持LIKE操作符的列表数据过滤。
+     */
+    @Schema(description = "LIKE模糊搜索字符串")
+    private String searchString;
+}

+ 76 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourOrderPassenageDto.java

@@ -0,0 +1,76 @@
+package com.tourism.webadmin.back.dto;
+
+import com.tourism.common.core.validator.UpdateGroup;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import jakarta.validation.constraints.*;
+
+import java.util.Date;
+
+/**
+ * 旅游订单游客Dto对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Schema(description = "TourOrderPassenageDto对象")
+@Data
+public class TourOrderPassenageDto {
+
+    /**
+     * ID主键。
+     */
+    @Schema(description = "ID主键。", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "数据验证失败,ID主键不能为空!", groups = {UpdateGroup.class})
+    private Long id;
+
+    /**
+     * 中文姓名。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "中文姓名。可支持等于操作符的列表数据过滤。")
+    private String chineseName;
+
+    /**
+     * 英文姓名。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "英文姓名。可支持等于操作符的列表数据过滤。")
+    private String englishName;
+
+    /**
+     * 国籍。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "国籍。可支持等于操作符的列表数据过滤。", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "数据验证失败,国籍不能为空!")
+    private String nationality;
+
+    /**
+     * 生日。
+     */
+    @Schema(description = "生日。")
+    private Date birthday;
+
+    /**
+     * 手机号码。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "手机号码。可支持等于操作符的列表数据过滤。")
+    private String mobile;
+
+    /**
+     * 订单号信息。
+     */
+    @Schema(description = "订单号信息。")
+    private Long orderId;
+
+    /**
+     * chinese_name / english_name / mobile LIKE搜索字符串。
+     * NOTE: 可支持LIKE操作符的列表数据过滤。
+     */
+    @Schema(description = "LIKE模糊搜索字符串")
+    private String searchString;
+}

+ 12 - 12
application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourismProjectDto.java

@@ -12,7 +12,6 @@ import jakarta.validation.constraints.*;
 
 import java.math.BigDecimal;
 import java.util.Date;
-import java.util.List;
 
 /**
  * 旅游项目管理Dto对象。
@@ -40,14 +39,16 @@ public class TourismProjectDto {
 
     /**
      * 项目简述。
+     * NOTE: 可支持等于操作符的列表数据过滤。
      */
-    @Schema(description = "项目简述。")
+    @Schema(description = "项目简述。可支持等于操作符的列表数据过滤。")
     private String remarks;
 
     /**
      * 是否热点。
+     * NOTE: 可支持等于操作符的列表数据过滤。
      */
-    @Schema(description = "是否热点,0非热点,1热点。")
+    @Schema(description = "是否热点,0非热点,1热点。可支持等于操作符的列表数据过滤。")
     @ConstDictRef(constDictClass = Hotspot.class, message = "数据验证失败,是否热点为无效值!")
     private Integer isHotspot;
 
@@ -65,27 +66,31 @@ public class TourismProjectDto {
 
     /**
      * 是否启用。
+     * NOTE: 可支持等于操作符的列表数据过滤。
      */
-    @Schema(description = "是否启用,0禁用,1启用。")
+    @Schema(description = "是否启用,0禁用,1启用。可支持等于操作符的列表数据过滤。")
     @ConstDictRef(constDictClass = Enable.class, message = "数据验证失败,是否启用为无效值!")
     private Integer enable;
 
     /**
      * 所属分类。
+     * NOTE: 可支持等于操作符的列表数据过滤。
      */
-    @Schema(description = "所属分类。")
+    @Schema(description = "所属分类。可支持等于操作符的列表数据过滤。")
     private Long belongTab;
 
     /**
      * 出发地。
+     * NOTE: 可支持等于操作符的列表数据过滤。
      */
-    @Schema(description = "出发地。")
+    @Schema(description = "出发地。可支持等于操作符的列表数据过滤。")
     private String startPlace;
 
     /**
      * 目的地。
+     * NOTE: 可支持等于操作符的列表数据过滤。
      */
-    @Schema(description = "目的地。")
+    @Schema(description = "目的地。可支持等于操作符的列表数据过滤。")
     private String endPlace;
 
     /**
@@ -202,9 +207,4 @@ public class TourismProjectDto {
      */
     @Schema(description = "LIKE模糊搜索字符串")
     private String searchString;
-
-    /**
-     * 菜单id。
-     */
-    private List<Long> directoryInfoIds;
 }

+ 173 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourOder.java

@@ -0,0 +1,173 @@
+package com.tourism.webadmin.back.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.tourism.common.core.util.MyCommonUtil;
+import com.tourism.common.core.annotation.*;
+import com.tourism.common.core.base.model.BaseModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 旅游订单实体对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "tour_order")
+public class TourOder extends BaseModel {
+
+    /**
+     * ID主键。
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 订单号。
+     */
+    @TableField(value = "order_no")
+    private String orderNo;
+
+    /**
+     * 出发日期。
+     */
+    @TableField(value = "departure_date")
+    private Date departureDate;
+
+    /**
+     * 结束日期。
+     */
+    @TableField(value = "end_date")
+    private Date endDate;
+
+    /**
+     * 成人数量。
+     */
+    @TableField(value = "adult_number")
+    private Integer adultNumber;
+
+    /**
+     * 儿童数量。
+     */
+    @TableField(value = "children_number")
+    private Integer childrenNumber;
+
+    /**
+     * 币种。
+     */
+    @TableField(value = "currency")
+    private String currency;
+
+    /**
+     * 订单总金额。
+     */
+    @TableField(value = "total_amount")
+    private BigDecimal totalAmount;
+
+    /**
+     * 房间数量。
+     */
+    @TableField(value = "room_number")
+    private Integer roomNumber;
+
+    /**
+     * 车辆信息。
+     */
+    @TableField(value = "car_id")
+    private Long carId;
+
+    /**
+     * 车辆金额。
+     */
+    @TableField(value = "car_amount")
+    private BigDecimal carAmount;
+
+    /**
+     * 预定日期。
+     */
+    @TableField(value = "order_date")
+    private Date orderDate;
+
+    /**
+     * 订单状态。
+     */
+    @TableField(value = "order_status")
+    private Integer orderStatus;
+
+    /**
+     * 旅游项目。
+     */
+    @TableField(value = "project_id")
+    private Long projectId;
+
+    /**
+     * 项目简述。
+     */
+    @TableField(value = "project_resume")
+    private String projectResume;
+
+    /**
+     * 顾客姓名。
+     */
+    @TableField(value = "customer_name")
+    private String customerName;
+
+    /**
+     * 顾客手机号。
+     */
+    @TableField(value = "customer_mobile")
+    private String customerMobile;
+
+    /**
+     * 逻辑删除标记字段(1: 正常 -1: 已删除)。
+     */
+    @TableLogic
+    @TableField(value = "data_state")
+    private Integer dataState;
+
+    /**
+     * departureDate 范围过滤起始值(>=)。
+     */
+    @TableField(exist = false)
+    private String departureDateStart;
+
+    /**
+     * departureDate 范围过滤结束值(<=)。
+     */
+    @TableField(exist = false)
+    private String departureDateEnd;
+
+    /**
+     * endDate 范围过滤起始值(>=)。
+     */
+    @TableField(exist = false)
+    private String endDateStart;
+
+    /**
+     * endDate 范围过滤结束值(<=)。
+     */
+    @TableField(exist = false)
+    private String endDateEnd;
+
+    /**
+     * project_resume / customer_name / customer_mobile LIKE搜索字符串。
+     */
+    @TableField(exist = false)
+    private String searchString;
+
+    public void setSearchString(String searchString) {
+        this.searchString = MyCommonUtil.replaceSqlWildcard(searchString);
+    }
+
+    @RelationGlobalDict(
+            masterIdField = "orderStatus",
+            dictCode = "OrderStatus")
+    @TableField(exist = false)
+    private Map<String, Object> orderStatusDictMap;
+}

+ 80 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourOrderPassenage.java

@@ -0,0 +1,80 @@
+package com.tourism.webadmin.back.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.tourism.common.core.util.MyCommonUtil;
+import com.tourism.common.core.base.model.BaseModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 旅游订单游客实体对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "tour_order_passenger")
+public class TourOrderPassenage extends BaseModel {
+
+    /**
+     * ID主键。
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 中文姓名。
+     */
+    @TableField(value = "chinese_name")
+    private String chineseName;
+
+    /**
+     * 英文姓名。
+     */
+    @TableField(value = "english_name")
+    private String englishName;
+
+    /**
+     * 国籍。
+     */
+    @TableField(value = "nationality")
+    private String nationality;
+
+    /**
+     * 生日。
+     */
+    @TableField(value = "birthday")
+    private Date birthday;
+
+    /**
+     * 手机号码。
+     */
+    @TableField(value = "mobile")
+    private String mobile;
+
+    /**
+     * 订单号信息。
+     */
+    @TableField(value = "order_id")
+    private Long orderId;
+
+    /**
+     * 逻辑删除标记字段(1: 正常 -1: 已删除)。
+     */
+    @TableLogic
+    @TableField(value = "data_state")
+    private Integer dataState;
+
+    /**
+     * chinese_name / english_name / mobile LIKE搜索字符串。
+     */
+    @TableField(exist = false)
+    private String searchString;
+
+    public void setSearchString(String searchString) {
+        this.searchString = MyCommonUtil.replaceSqlWildcard(searchString);
+    }
+}

+ 68 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourOderService.java

@@ -0,0 +1,68 @@
+package com.tourism.webadmin.back.service;
+
+import com.tourism.webadmin.back.model.*;
+import com.tourism.common.core.base.service.IBaseService;
+
+import java.util.*;
+
+/**
+ * 旅游订单数据操作服务接口。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+public interface TourOderService extends IBaseService<TourOder, Long> {
+
+    /**
+     * 保存新增对象。
+     *
+     * @param tourOder 新增对象。
+     * @return 返回新增对象。
+     */
+    TourOder saveNew(TourOder tourOder);
+
+    /**
+     * 利用数据库的insertList语法,批量插入对象列表。
+     *
+     * @param tourOderList 新增对象列表。
+     */
+    void saveNewBatch(List<TourOder> tourOderList);
+
+    /**
+     * 更新数据对象。
+     *
+     * @param tourOder         更新的对象。
+     * @param originalTourOder 原有数据对象。
+     * @return 成功返回true,否则false。
+     */
+    boolean update(TourOder tourOder, TourOder originalTourOder);
+
+    /**
+     * 删除指定数据。
+     *
+     * @param id 主键Id。
+     * @return 成功返回true,否则false。
+     */
+    boolean remove(Long id);
+
+    /**
+     * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
+     * 如果需要同时获取关联数据,请移步(getTourOderListWithRelation)方法。
+     *
+     * @param filter  过滤对象。
+     * @param orderBy 排序参数。
+     * @return 查询结果集。
+     */
+    List<TourOder> getTourOderList(TourOder filter, String orderBy);
+
+    /**
+     * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
+     * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
+     * 如果仅仅需要获取主表数据,请移步(getTourOderList),以便获取更好的查询性能。
+     *
+     * @param filter 主表过滤对象。
+     * @param orderBy 排序参数。
+     * @return 查询结果集。
+     */
+    List<TourOder> getTourOderListWithRelation(TourOder filter, String orderBy);
+}

+ 76 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourOrderPassenageService.java

@@ -0,0 +1,76 @@
+package com.tourism.webadmin.back.service;
+
+import com.tourism.webadmin.back.model.*;
+import com.tourism.common.core.base.service.IBaseService;
+
+import java.util.*;
+
+/**
+ * 旅游订单游客数据操作服务接口。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+public interface TourOrderPassenageService extends IBaseService<TourOrderPassenage, Long> {
+
+    /**
+     * 保存新增对象。
+     *
+     * @param tourOrderPassenage 新增对象。
+     * @return 返回新增对象。
+     */
+    TourOrderPassenage saveNew(TourOrderPassenage tourOrderPassenage);
+
+    /**
+     * 利用数据库的insertList语法,批量插入对象列表。
+     *
+     * @param tourOrderPassenageList 新增对象列表。
+     */
+    void saveNewBatch(List<TourOrderPassenage> tourOrderPassenageList);
+
+    /**
+     * 更新数据对象。
+     *
+     * @param tourOrderPassenage         更新的对象。
+     * @param originalTourOrderPassenage 原有数据对象。
+     * @return 成功返回true,否则false。
+     */
+    boolean update(TourOrderPassenage tourOrderPassenage, TourOrderPassenage originalTourOrderPassenage);
+
+    /**
+     * 删除指定数据。
+     *
+     * @param id 主键Id。
+     * @return 成功返回true,否则false。
+     */
+    boolean remove(Long id);
+
+    /**
+     * 当前服务的支持表为从表,根据主表的关联Id,删除一对多的从表数据。
+     *
+     * @param orderId 从表关联字段。
+     * @return 删除数量。
+     */
+    int removeByOrderId(Long orderId);
+
+    /**
+     * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
+     * 如果需要同时获取关联数据,请移步(getTourOrderPassenageListWithRelation)方法。
+     *
+     * @param filter  过滤对象。
+     * @param orderBy 排序参数。
+     * @return 查询结果集。
+     */
+    List<TourOrderPassenage> getTourOrderPassenageList(TourOrderPassenage filter, String orderBy);
+
+    /**
+     * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
+     * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
+     * 如果仅仅需要获取主表数据,请移步(getTourOrderPassenageList),以便获取更好的查询性能。
+     *
+     * @param filter 主表过滤对象。
+     * @param orderBy 排序参数。
+     * @return 查询结果集。
+     */
+    List<TourOrderPassenage> getTourOrderPassenageListWithRelation(TourOrderPassenage filter, String orderBy);
+}

+ 126 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourOderServiceImpl.java

@@ -0,0 +1,126 @@
+package com.tourism.webadmin.back.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.tourism.webadmin.back.service.*;
+import com.tourism.webadmin.back.dao.*;
+import com.tourism.webadmin.back.model.*;
+import com.tourism.webadmin.config.DataSourceType;
+import com.tourism.common.core.annotation.MyDataSource;
+import com.tourism.common.core.base.dao.BaseDaoMapper;
+import com.tourism.common.core.constant.GlobalDeletedFlag;
+import com.tourism.common.core.object.MyRelationParam;
+import com.tourism.common.core.object.CallResult;
+import com.tourism.common.core.base.service.BaseService;
+import com.tourism.common.core.util.MyModelUtil;
+import com.tourism.common.sequence.wrapper.IdGeneratorWrapper;
+import com.tourism.common.dict.service.GlobalDictService;
+import com.github.pagehelper.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * 旅游订单数据操作服务类。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Slf4j
+@MyDataSource(DataSourceType.MAIN)
+@Service("tourOderService")
+public class TourOderServiceImpl extends BaseService<TourOder, Long> implements TourOderService {
+
+    @Autowired
+    private IdGeneratorWrapper idGenerator;
+    @Autowired
+    private TourOderMapper tourOderMapper;
+    @Autowired
+    private TourOrderPassenageService tourOrderPassenageService;
+    @Autowired
+    private GlobalDictService globalDictService;
+
+    /**
+     * 返回当前Service的主表Mapper对象。
+     *
+     * @return 主表Mapper对象。
+     */
+    @Override
+    protected BaseDaoMapper<TourOder> mapper() {
+        return tourOderMapper;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public TourOder saveNew(TourOder tourOder) {
+        tourOderMapper.insert(this.buildDefaultValue(tourOder));
+        return tourOder;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void saveNewBatch(List<TourOder> tourOderList) {
+        if (CollUtil.isNotEmpty(tourOderList)) {
+            tourOderList.forEach(this::buildDefaultValue);
+            tourOderMapper.insertList(tourOderList);
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean update(TourOder tourOder, TourOder originalTourOder) {
+        MyModelUtil.fillCommonsForUpdate(tourOder, originalTourOder);
+        // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
+        UpdateWrapper<TourOder> uw = this.createUpdateQueryForNullValue(tourOder, tourOder.getId());
+        return tourOderMapper.update(tourOder, uw) == 1;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean remove(Long id) {
+        if (tourOderMapper.deleteById(id) == 0) {
+            return false;
+        }
+        tourOrderPassenageService.removeByOrderId(id);
+        return true;
+    }
+
+    @Override
+    public List<TourOder> getTourOderList(TourOder filter, String orderBy) {
+        return tourOderMapper.getTourOderList(filter, orderBy);
+    }
+
+    @Override
+    public List<TourOder> getTourOderListWithRelation(TourOder filter, String orderBy) {
+        List<TourOder> resultList = tourOderMapper.getTourOderList(filter, orderBy);
+        // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
+        // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
+        int batchSize = resultList instanceof Page ? 0 : 1000;
+        this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
+        return resultList;
+    }
+
+    @Override
+    public CallResult verifyRelatedData(TourOder tourOder, TourOder originalTourOder) {
+        String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!";
+        //这里是基于字典的验证。
+        if (this.needToVerify(tourOder, originalTourOder, TourOder::getOrderStatus)
+                && !globalDictService.existDictItemFromCache("OrderStatus", tourOder.getOrderStatus())) {
+            return CallResult.error(String.format(errorMessageFormat, "订单状态"));
+        }
+        return CallResult.ok();
+    }
+
+    private TourOder buildDefaultValue(TourOder tourOder) {
+        if (tourOder.getId() == null) {
+            tourOder.setId(idGenerator.nextLongId());
+        }
+        tourOder.setOrderNo(tourOder.getId().toString());
+        MyModelUtil.fillCommonsForInsert(tourOder);
+        tourOder.setDataState(GlobalDeletedFlag.NORMAL);
+        return tourOder;
+    }
+}

+ 127 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourOrderPassenageServiceImpl.java

@@ -0,0 +1,127 @@
+package com.tourism.webadmin.back.service.impl;
+
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.*;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.tourism.webadmin.back.service.*;
+import com.tourism.webadmin.back.dao.*;
+import com.tourism.webadmin.back.model.*;
+import com.tourism.webadmin.config.DataSourceType;
+import com.tourism.common.core.annotation.MyDataSource;
+import com.tourism.common.core.base.dao.BaseDaoMapper;
+import com.tourism.common.core.constant.GlobalDeletedFlag;
+import com.tourism.common.core.object.MyRelationParam;
+import com.tourism.common.core.object.CallResult;
+import com.tourism.common.core.base.service.BaseService;
+import com.tourism.common.core.util.MyModelUtil;
+import com.tourism.common.sequence.wrapper.IdGeneratorWrapper;
+import com.github.pagehelper.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ * 旅游订单游客数据操作服务类。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Slf4j
+@MyDataSource(DataSourceType.MAIN)
+@Service("tourOrderPassenageService")
+public class TourOrderPassenageServiceImpl extends BaseService<TourOrderPassenage, Long> implements TourOrderPassenageService {
+
+    @Autowired
+    private IdGeneratorWrapper idGenerator;
+    @Autowired
+    private TourOrderPassenageMapper tourOrderPassenageMapper;
+    @Autowired
+    private TourOderService tourOderService;
+
+    /**
+     * 返回当前Service的主表Mapper对象。
+     *
+     * @return 主表Mapper对象。
+     */
+    @Override
+    protected BaseDaoMapper<TourOrderPassenage> mapper() {
+        return tourOrderPassenageMapper;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public TourOrderPassenage saveNew(TourOrderPassenage tourOrderPassenage) {
+        tourOrderPassenageMapper.insert(this.buildDefaultValue(tourOrderPassenage));
+        return tourOrderPassenage;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void saveNewBatch(List<TourOrderPassenage> tourOrderPassenageList) {
+        if (CollUtil.isNotEmpty(tourOrderPassenageList)) {
+            tourOrderPassenageList.forEach(this::buildDefaultValue);
+            tourOrderPassenageMapper.insertList(tourOrderPassenageList);
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean update(TourOrderPassenage tourOrderPassenage, TourOrderPassenage originalTourOrderPassenage) {
+        MyModelUtil.fillCommonsForUpdate(tourOrderPassenage, originalTourOrderPassenage);
+        // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
+        UpdateWrapper<TourOrderPassenage> uw = this.createUpdateQueryForNullValue(tourOrderPassenage, tourOrderPassenage.getId());
+        return tourOrderPassenageMapper.update(tourOrderPassenage, uw) == 1;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean remove(Long id) {
+        return tourOrderPassenageMapper.deleteById(id) == 1;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public int removeByOrderId(Long orderId) {
+        TourOrderPassenage deletedObject = new TourOrderPassenage();
+        deletedObject.setOrderId(orderId);
+        return tourOrderPassenageMapper.delete(new QueryWrapper<>(deletedObject));
+    }
+
+    @Override
+    public List<TourOrderPassenage> getTourOrderPassenageList(TourOrderPassenage filter, String orderBy) {
+        return tourOrderPassenageMapper.getTourOrderPassenageList(filter, orderBy);
+    }
+
+    @Override
+    public List<TourOrderPassenage> getTourOrderPassenageListWithRelation(TourOrderPassenage filter, String orderBy) {
+        List<TourOrderPassenage> resultList = tourOrderPassenageMapper.getTourOrderPassenageList(filter, orderBy);
+        // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
+        // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
+        int batchSize = resultList instanceof Page ? 0 : 1000;
+        this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
+        return resultList;
+    }
+
+    @Override
+    public CallResult verifyRelatedData(TourOrderPassenage tourOrderPassenage, TourOrderPassenage originalTourOrderPassenage) {
+        String errorMessageFormat = "数据验证失败,关联的%s并不存在,请刷新后重试!";
+        //这里是一对多的验证
+        if (this.needToVerify(tourOrderPassenage, originalTourOrderPassenage, TourOrderPassenage::getOrderId)
+                && !tourOderService.existId(tourOrderPassenage.getOrderId())) {
+            return CallResult.error(String.format(errorMessageFormat, "订单号信息"));
+        }
+        return CallResult.ok();
+    }
+
+    private TourOrderPassenage buildDefaultValue(TourOrderPassenage tourOrderPassenage) {
+        if (tourOrderPassenage.getId() == null) {
+            tourOrderPassenage.setId(idGenerator.nextLongId());
+        }
+        MyModelUtil.fillCommonsForInsert(tourOrderPassenage);
+        tourOrderPassenage.setDataState(GlobalDeletedFlag.NORMAL);
+        return tourOrderPassenage;
+    }
+}

+ 130 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourOderVo.java

@@ -0,0 +1,130 @@
+package com.tourism.webadmin.back.vo;
+
+import com.tourism.common.core.base.vo.BaseVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * 旅游订单VO视图对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Schema(description = "TourOderVO视图对象")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TourOderVo extends BaseVo {
+
+    /**
+     * ID主键。
+     */
+    @Schema(description = "ID主键")
+    private String id;
+
+    /**
+     * 订单号。
+     */
+    @Schema(description = "订单号")
+    private String orderNo;
+
+    /**
+     * 出发日期。
+     */
+    @Schema(description = "出发日期")
+    private Date departureDate;
+
+    /**
+     * 结束日期。
+     */
+    @Schema(description = "结束日期")
+    private Date endDate;
+
+    /**
+     * 成人数量。
+     */
+    @Schema(description = "成人数量")
+    private Integer adultNumber;
+
+    /**
+     * 儿童数量。
+     */
+    @Schema(description = "儿童数量")
+    private Integer childrenNumber;
+
+    /**
+     * 币种。
+     */
+    @Schema(description = "币种")
+    private String currency;
+
+    /**
+     * 订单总金额。
+     */
+    @Schema(description = "订单总金额")
+    private BigDecimal totalAmount;
+
+    /**
+     * 房间数量。
+     */
+    @Schema(description = "房间数量")
+    private Integer roomNumber;
+
+    /**
+     * 车辆信息。
+     */
+    @Schema(description = "车辆信息")
+    private Long carId;
+
+    /**
+     * 车辆金额。
+     */
+    @Schema(description = "车辆金额")
+    private BigDecimal carAmount;
+
+    /**
+     * 预定日期。
+     */
+    @Schema(description = "预定日期")
+    private Date orderDate;
+
+    /**
+     * 订单状态。
+     */
+    @Schema(description = "订单状态")
+    private Integer orderStatus;
+
+    /**
+     * 旅游项目。
+     */
+    @Schema(description = "旅游项目")
+    private Long projectId;
+
+    /**
+     * 项目简述。
+     */
+    @Schema(description = "项目简述")
+    private String projectResume;
+
+    /**
+     * 顾客姓名。
+     */
+    @Schema(description = "顾客姓名")
+    private String customerName;
+
+    /**
+     * 顾客手机号。
+     */
+    @Schema(description = "顾客手机号")
+    private String customerMobile;
+
+    /**
+     * orderStatus 全局字典关联数据。
+     */
+    @Schema(description = "orderStatus 全局字典关联数据")
+    private Map<String, Object> orderStatusDictMap;
+}

+ 62 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourOrderPassenageVo.java

@@ -0,0 +1,62 @@
+package com.tourism.webadmin.back.vo;
+
+import com.tourism.common.core.base.vo.BaseVo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 旅游订单游客VO视图对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Schema(description = "TourOrderPassenageVO视图对象")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TourOrderPassenageVo extends BaseVo {
+
+    /**
+     * ID主键。
+     */
+    @Schema(description = "ID主键")
+    private String id;
+
+    /**
+     * 中文姓名。
+     */
+    @Schema(description = "中文姓名")
+    private String chineseName;
+
+    /**
+     * 英文姓名。
+     */
+    @Schema(description = "英文姓名")
+    private String englishName;
+
+    /**
+     * 国籍。
+     */
+    @Schema(description = "国籍")
+    private String nationality;
+
+    /**
+     * 生日。
+     */
+    @Schema(description = "生日")
+    private Date birthday;
+
+    /**
+     * 手机号码。
+     */
+    @Schema(description = "手机号码")
+    private String mobile;
+
+    /**
+     * 订单号信息。
+     */
+    @Schema(description = "订单号信息")
+    private Long orderId;
+}