chenchen 3 сар өмнө
parent
commit
31f9cf6f28
24 өөрчлөгдсөн 2397 нэмэгдсэн , 0 устгасан
  1. 205 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/controller/TourProjectGroupPurchaseController.java
  2. 200 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/controller/TourProjectGroupPurchaseDetailController.java
  3. 179 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/controller/TourProjectGroupPurchaseProgressController.java
  4. 47 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourProjectGroupPurchaseDetailMapper.java
  5. 33 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourProjectGroupPurchaseMapper.java
  6. 33 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourProjectGroupPurchaseProgressMapper.java
  7. 113 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourProjectGroupPurchaseDetailMapper.xml
  8. 120 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourProjectGroupPurchaseMapper.xml
  9. 69 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dao/mapper/TourProjectGroupPurchaseProgressMapper.xml
  10. 119 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourProjectGroupPurchaseDetailDto.java
  11. 172 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourProjectGroupPurchaseDto.java
  12. 46 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourProjectGroupPurchaseProgressDto.java
  13. 170 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourProjectGroupPurchase.java
  14. 119 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourProjectGroupPurchaseDetail.java
  15. 57 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourProjectGroupPurchaseProgress.java
  16. 69 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourProjectGroupPurchaseDetailService.java
  17. 68 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourProjectGroupPurchaseProgressService.java
  18. 68 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourProjectGroupPurchaseService.java
  19. 104 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourProjectGroupPurchaseDetailServiceImpl.java
  20. 103 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourProjectGroupPurchaseProgressServiceImpl.java
  21. 103 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourProjectGroupPurchaseServiceImpl.java
  22. 63 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourProjectGroupPurchaseDetailVo.java
  23. 49 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourProjectGroupPurchaseProgressVo.java
  24. 88 0
      application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourProjectGroupPurchaseVo.java

+ 205 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/controller/TourProjectGroupPurchaseController.java

@@ -0,0 +1,205 @@
+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/tourProjectGroupPurchase")
+public class TourProjectGroupPurchaseController {
+
+    @Autowired
+    private TourProjectGroupPurchaseService tourProjectGroupPurchaseService;
+
+    /**
+     * 新增拼团设置主表数据。
+     *
+     * @param tourProjectGroupPurchaseDto 新增对象。
+     * @return 应答结果对象,包含新增对象主键Id。
+     */
+    @ApiOperationSupport(ignoreParameters = {
+            "tourProjectGroupPurchaseDto.id",
+            "tourProjectGroupPurchaseDto.endTimeStart",
+            "tourProjectGroupPurchaseDto.endTimeEnd",
+            "tourProjectGroupPurchaseDto.travelStartTimeStart",
+            "tourProjectGroupPurchaseDto.travelStartTimeEnd",
+            "tourProjectGroupPurchaseDto.travelEndTimeStart",
+            "tourProjectGroupPurchaseDto.travelEndTimeEnd",
+            "tourProjectGroupPurchaseDto.maxCountStart",
+            "tourProjectGroupPurchaseDto.maxCountEnd",
+            "tourProjectGroupPurchaseDto.adultPriceStart",
+            "tourProjectGroupPurchaseDto.adultPriceEnd",
+            "tourProjectGroupPurchaseDto.childrenPriceStart",
+            "tourProjectGroupPurchaseDto.childrenPriceEnd"})
+    @SaCheckPermission("tourProjectGroupPurchase.add")
+    @OperationLog(type = SysOperationLogType.ADD)
+    @PostMapping("/add")
+    public ResponseResult<Long> add(@MyRequestBody TourProjectGroupPurchaseDto tourProjectGroupPurchaseDto) {
+        String errorMessage = MyCommonUtil.getModelValidationError(tourProjectGroupPurchaseDto, false);
+        if (errorMessage != null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
+        }
+        TourProjectGroupPurchase tourProjectGroupPurchase = MyModelUtil.copyTo(tourProjectGroupPurchaseDto, TourProjectGroupPurchase.class);
+        tourProjectGroupPurchase = tourProjectGroupPurchaseService.saveNew(tourProjectGroupPurchase);
+        return ResponseResult.success(tourProjectGroupPurchase.getId());
+    }
+
+    /**
+     * 更新拼团设置主表数据。
+     *
+     * @param tourProjectGroupPurchaseDto 更新对象。
+     * @return 应答结果对象。
+     */
+    @ApiOperationSupport(ignoreParameters = {
+            "tourProjectGroupPurchaseDto.endTimeStart",
+            "tourProjectGroupPurchaseDto.endTimeEnd",
+            "tourProjectGroupPurchaseDto.travelStartTimeStart",
+            "tourProjectGroupPurchaseDto.travelStartTimeEnd",
+            "tourProjectGroupPurchaseDto.travelEndTimeStart",
+            "tourProjectGroupPurchaseDto.travelEndTimeEnd",
+            "tourProjectGroupPurchaseDto.maxCountStart",
+            "tourProjectGroupPurchaseDto.maxCountEnd",
+            "tourProjectGroupPurchaseDto.adultPriceStart",
+            "tourProjectGroupPurchaseDto.adultPriceEnd",
+            "tourProjectGroupPurchaseDto.childrenPriceStart",
+            "tourProjectGroupPurchaseDto.childrenPriceEnd"})
+    @SaCheckPermission("tourProjectGroupPurchase.update")
+    @OperationLog(type = SysOperationLogType.UPDATE)
+    @PostMapping("/update")
+    public ResponseResult<Void> update(@MyRequestBody TourProjectGroupPurchaseDto tourProjectGroupPurchaseDto) {
+        String errorMessage = MyCommonUtil.getModelValidationError(tourProjectGroupPurchaseDto, true);
+        if (errorMessage != null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
+        }
+        TourProjectGroupPurchase tourProjectGroupPurchase = MyModelUtil.copyTo(tourProjectGroupPurchaseDto, TourProjectGroupPurchase.class);
+        TourProjectGroupPurchase originalTourProjectGroupPurchase = tourProjectGroupPurchaseService.getById(tourProjectGroupPurchase.getId());
+        if (originalTourProjectGroupPurchase == null) {
+            // NOTE: 修改下面方括号中的话述
+            errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        if (!tourProjectGroupPurchaseService.update(tourProjectGroupPurchase, originalTourProjectGroupPurchase)) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
+        }
+        return ResponseResult.success();
+    }
+
+    /**
+     * 删除拼团设置主表数据。
+     *
+     * @param id 删除对象主键Id。
+     * @return 应答结果对象。
+     */
+    @SaCheckPermission("tourProjectGroupPurchase.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("tourProjectGroupPurchase.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 tourProjectGroupPurchaseDtoFilter 过滤对象。
+     * @param orderParam 排序参数。
+     * @param pageParam 分页参数。
+     * @return 应答结果对象,包含查询结果集。
+     */
+    @SaCheckPermission("tourProjectGroupPurchase.view")
+    @PostMapping("/list")
+    public ResponseResult<MyPageData<TourProjectGroupPurchaseVo>> list(
+            @MyRequestBody TourProjectGroupPurchaseDto tourProjectGroupPurchaseDtoFilter,
+            @MyRequestBody MyOrderParam orderParam,
+            @MyRequestBody MyPageParam pageParam) {
+        if (pageParam != null) {
+            PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize(), pageParam.getCount());
+        }
+        TourProjectGroupPurchase tourProjectGroupPurchaseFilter = MyModelUtil.copyTo(tourProjectGroupPurchaseDtoFilter, TourProjectGroupPurchase.class);
+        String orderBy = MyOrderParam.buildOrderBy(orderParam, TourProjectGroupPurchase.class);
+        List<TourProjectGroupPurchase> tourProjectGroupPurchaseList =
+                tourProjectGroupPurchaseService.getTourProjectGroupPurchaseListWithRelation(tourProjectGroupPurchaseFilter, orderBy);
+        return ResponseResult.success(MyPageUtil.makeResponseData(tourProjectGroupPurchaseList, TourProjectGroupPurchaseVo.class));
+    }
+
+    /**
+     * 查看指定拼团设置主表对象详情。
+     *
+     * @param id 指定对象主键Id。
+     * @return 应答结果对象,包含对象详情。
+     */
+    @SaCheckPermission("tourProjectGroupPurchase.view")
+    @GetMapping("/view")
+    public ResponseResult<TourProjectGroupPurchaseVo> view(@RequestParam Long id) {
+        TourProjectGroupPurchase tourProjectGroupPurchase = tourProjectGroupPurchaseService.getByIdWithRelation(id, MyRelationParam.full());
+        if (tourProjectGroupPurchase == null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
+        }
+        TourProjectGroupPurchaseVo tourProjectGroupPurchaseVo = MyModelUtil.copyTo(tourProjectGroupPurchase, TourProjectGroupPurchaseVo.class);
+        return ResponseResult.success(tourProjectGroupPurchaseVo);
+    }
+
+    private ResponseResult<Void> doDelete(Long id) {
+        String errorMessage;
+        // 验证关联Id的数据合法性
+        TourProjectGroupPurchase originalTourProjectGroupPurchase = tourProjectGroupPurchaseService.getById(id);
+        if (originalTourProjectGroupPurchase == null) {
+            // NOTE: 修改下面方括号中的话述
+            errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        if (!tourProjectGroupPurchaseService.remove(id)) {
+            errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        return ResponseResult.success();
+    }
+}

+ 200 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/controller/TourProjectGroupPurchaseDetailController.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/tourProjectGroupPurchaseDetail")
+public class TourProjectGroupPurchaseDetailController {
+
+    @Autowired
+    private TourProjectGroupPurchaseDetailService tourProjectGroupPurchaseDetailService;
+
+    /**
+     * 新增拼团设置从表数据。
+     *
+     * @param tourProjectGroupPurchaseDetailDto 新增对象。
+     * @return 应答结果对象,包含新增对象主键Id。
+     */
+    @ApiOperationSupport(ignoreParameters = {
+            "tourProjectGroupPurchaseDetailDto.id",
+            "tourProjectGroupPurchaseDetailDto.adultPriceStart",
+            "tourProjectGroupPurchaseDetailDto.adultPriceEnd",
+            "tourProjectGroupPurchaseDetailDto.childrenPriceStart",
+            "tourProjectGroupPurchaseDetailDto.childrenPriceEnd",
+            "tourProjectGroupPurchaseDetailDto.minCountStart",
+            "tourProjectGroupPurchaseDetailDto.minCountEnd",
+            "tourProjectGroupPurchaseDetailDto.maxCountStart",
+            "tourProjectGroupPurchaseDetailDto.maxCountEnd"})
+    @SaCheckPermission("tourProjectGroupPurchaseDetail.add")
+    @OperationLog(type = SysOperationLogType.ADD)
+    @PostMapping("/add")
+    public ResponseResult<Long> add(@MyRequestBody TourProjectGroupPurchaseDetailDto tourProjectGroupPurchaseDetailDto) {
+        String errorMessage = MyCommonUtil.getModelValidationError(tourProjectGroupPurchaseDetailDto, false);
+        if (errorMessage != null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
+        }
+        TourProjectGroupPurchaseDetail tourProjectGroupPurchaseDetail = MyModelUtil.copyTo(tourProjectGroupPurchaseDetailDto, TourProjectGroupPurchaseDetail.class);
+        tourProjectGroupPurchaseDetail = tourProjectGroupPurchaseDetailService.saveNew(tourProjectGroupPurchaseDetail);
+        return ResponseResult.success(tourProjectGroupPurchaseDetail.getId());
+    }
+
+    /**
+     * 更新拼团设置从表数据。
+     *
+     * @param tourProjectGroupPurchaseDetailDto 更新对象。
+     * @return 应答结果对象。
+     */
+    @ApiOperationSupport(ignoreParameters = {
+            "tourProjectGroupPurchaseDetailDto.adultPriceStart",
+            "tourProjectGroupPurchaseDetailDto.adultPriceEnd",
+            "tourProjectGroupPurchaseDetailDto.childrenPriceStart",
+            "tourProjectGroupPurchaseDetailDto.childrenPriceEnd",
+            "tourProjectGroupPurchaseDetailDto.minCountStart",
+            "tourProjectGroupPurchaseDetailDto.minCountEnd",
+            "tourProjectGroupPurchaseDetailDto.maxCountStart",
+            "tourProjectGroupPurchaseDetailDto.maxCountEnd"})
+    @SaCheckPermission("tourProjectGroupPurchaseDetail.update")
+    @OperationLog(type = SysOperationLogType.UPDATE)
+    @PostMapping("/update")
+    public ResponseResult<Void> update(@MyRequestBody TourProjectGroupPurchaseDetailDto tourProjectGroupPurchaseDetailDto) {
+        String errorMessage = MyCommonUtil.getModelValidationError(tourProjectGroupPurchaseDetailDto, true);
+        if (errorMessage != null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
+        }
+        TourProjectGroupPurchaseDetail tourProjectGroupPurchaseDetail = MyModelUtil.copyTo(tourProjectGroupPurchaseDetailDto, TourProjectGroupPurchaseDetail.class);
+        TourProjectGroupPurchaseDetail originalTourProjectGroupPurchaseDetail = tourProjectGroupPurchaseDetailService.getById(tourProjectGroupPurchaseDetail.getId());
+        if (originalTourProjectGroupPurchaseDetail == null) {
+            // NOTE: 修改下面方括号中的话述
+            errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        if (!tourProjectGroupPurchaseDetailService.update(tourProjectGroupPurchaseDetail, originalTourProjectGroupPurchaseDetail)) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
+        }
+        return ResponseResult.success();
+    }
+
+    /**
+     * 删除拼团设置从表数据。
+     *
+     * @param id 删除对象主键Id。
+     * @return 应答结果对象。
+     */
+    @SaCheckPermission("tourProjectGroupPurchaseDetail.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("tourProjectGroupPurchaseDetail.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 tourProjectGroupPurchaseDetailDtoFilter 过滤对象。
+     * @param tourProjectGroupPurchaseDtoFilter 一对一从表过滤对象。
+     * @param orderParam 排序参数。
+     * @param pageParam 分页参数。
+     * @return 应答结果对象,包含查询结果集。
+     */
+    @SaCheckPermission("tourProjectGroupPurchaseDetail.view")
+    @PostMapping("/list")
+    public ResponseResult<MyPageData<TourProjectGroupPurchaseDetailVo>> list(
+            @MyRequestBody TourProjectGroupPurchaseDetailDto tourProjectGroupPurchaseDetailDtoFilter,
+            @MyRequestBody TourProjectGroupPurchaseDto tourProjectGroupPurchaseDtoFilter,
+            @MyRequestBody MyOrderParam orderParam,
+            @MyRequestBody MyPageParam pageParam) {
+        if (pageParam != null) {
+            PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize(), pageParam.getCount());
+        }
+        TourProjectGroupPurchaseDetail tourProjectGroupPurchaseDetailFilter = MyModelUtil.copyTo(tourProjectGroupPurchaseDetailDtoFilter, TourProjectGroupPurchaseDetail.class);
+        TourProjectGroupPurchase tourProjectGroupPurchaseFilter = MyModelUtil.copyTo(tourProjectGroupPurchaseDtoFilter, TourProjectGroupPurchase.class);
+        String orderBy = MyOrderParam.buildOrderBy(orderParam, TourProjectGroupPurchaseDetail.class);
+        List<TourProjectGroupPurchaseDetail> tourProjectGroupPurchaseDetailList =
+                tourProjectGroupPurchaseDetailService.getTourProjectGroupPurchaseDetailListWithRelation(tourProjectGroupPurchaseDetailFilter, tourProjectGroupPurchaseFilter, orderBy);
+        return ResponseResult.success(MyPageUtil.makeResponseData(tourProjectGroupPurchaseDetailList, TourProjectGroupPurchaseDetailVo.class));
+    }
+
+    /**
+     * 查看指定拼团设置从表对象详情。
+     *
+     * @param id 指定对象主键Id。
+     * @return 应答结果对象,包含对象详情。
+     */
+    @SaCheckPermission("tourProjectGroupPurchaseDetail.view")
+    @GetMapping("/view")
+    public ResponseResult<TourProjectGroupPurchaseDetailVo> view(@RequestParam Long id) {
+        TourProjectGroupPurchaseDetail tourProjectGroupPurchaseDetail = tourProjectGroupPurchaseDetailService.getByIdWithRelation(id, MyRelationParam.full());
+        if (tourProjectGroupPurchaseDetail == null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
+        }
+        TourProjectGroupPurchaseDetailVo tourProjectGroupPurchaseDetailVo = MyModelUtil.copyTo(tourProjectGroupPurchaseDetail, TourProjectGroupPurchaseDetailVo.class);
+        return ResponseResult.success(tourProjectGroupPurchaseDetailVo);
+    }
+
+    private ResponseResult<Void> doDelete(Long id) {
+        String errorMessage;
+        // 验证关联Id的数据合法性
+        TourProjectGroupPurchaseDetail originalTourProjectGroupPurchaseDetail = tourProjectGroupPurchaseDetailService.getById(id);
+        if (originalTourProjectGroupPurchaseDetail == null) {
+            // NOTE: 修改下面方括号中的话述
+            errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        if (!tourProjectGroupPurchaseDetailService.remove(id)) {
+            errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        return ResponseResult.success();
+    }
+}

+ 179 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/controller/TourProjectGroupPurchaseProgressController.java

@@ -0,0 +1,179 @@
+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/tourProjectGroupPurchaseProgress")
+public class TourProjectGroupPurchaseProgressController {
+
+    @Autowired
+    private TourProjectGroupPurchaseProgressService tourProjectGroupPurchaseProgressService;
+
+    /**
+     * 新增拼图的当前人数表数据。
+     *
+     * @param tourProjectGroupPurchaseProgressDto 新增对象。
+     * @return 应答结果对象,包含新增对象主键Id。
+     */
+    @ApiOperationSupport(ignoreParameters = {"tourProjectGroupPurchaseProgressDto.id"})
+    @SaCheckPermission("tourProjectGroupPurchaseProgress.add")
+    @OperationLog(type = SysOperationLogType.ADD)
+    @PostMapping("/add")
+    public ResponseResult<Long> add(@MyRequestBody TourProjectGroupPurchaseProgressDto tourProjectGroupPurchaseProgressDto) {
+        String errorMessage = MyCommonUtil.getModelValidationError(tourProjectGroupPurchaseProgressDto, false);
+        if (errorMessage != null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
+        }
+        TourProjectGroupPurchaseProgress tourProjectGroupPurchaseProgress = MyModelUtil.copyTo(tourProjectGroupPurchaseProgressDto, TourProjectGroupPurchaseProgress.class);
+        tourProjectGroupPurchaseProgress = tourProjectGroupPurchaseProgressService.saveNew(tourProjectGroupPurchaseProgress);
+        return ResponseResult.success(tourProjectGroupPurchaseProgress.getId());
+    }
+
+    /**
+     * 更新拼图的当前人数表数据。
+     *
+     * @param tourProjectGroupPurchaseProgressDto 更新对象。
+     * @return 应答结果对象。
+     */
+    @SaCheckPermission("tourProjectGroupPurchaseProgress.update")
+    @OperationLog(type = SysOperationLogType.UPDATE)
+    @PostMapping("/update")
+    public ResponseResult<Void> update(@MyRequestBody TourProjectGroupPurchaseProgressDto tourProjectGroupPurchaseProgressDto) {
+        String errorMessage = MyCommonUtil.getModelValidationError(tourProjectGroupPurchaseProgressDto, true);
+        if (errorMessage != null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_VALIDATED_FAILED, errorMessage);
+        }
+        TourProjectGroupPurchaseProgress tourProjectGroupPurchaseProgress = MyModelUtil.copyTo(tourProjectGroupPurchaseProgressDto, TourProjectGroupPurchaseProgress.class);
+        TourProjectGroupPurchaseProgress originalTourProjectGroupPurchaseProgress = tourProjectGroupPurchaseProgressService.getById(tourProjectGroupPurchaseProgress.getId());
+        if (originalTourProjectGroupPurchaseProgress == null) {
+            // NOTE: 修改下面方括号中的话述
+            errorMessage = "数据验证失败,当前 [数据] 并不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        if (!tourProjectGroupPurchaseProgressService.update(tourProjectGroupPurchaseProgress, originalTourProjectGroupPurchaseProgress)) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
+        }
+        return ResponseResult.success();
+    }
+
+    /**
+     * 删除拼图的当前人数表数据。
+     *
+     * @param id 删除对象主键Id。
+     * @return 应答结果对象。
+     */
+    @SaCheckPermission("tourProjectGroupPurchaseProgress.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("tourProjectGroupPurchaseProgress.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 tourProjectGroupPurchaseProgressDtoFilter 过滤对象。
+     * @param orderParam 排序参数。
+     * @param pageParam 分页参数。
+     * @return 应答结果对象,包含查询结果集。
+     */
+    @SaCheckPermission("tourProjectGroupPurchaseProgress.view")
+    @PostMapping("/list")
+    public ResponseResult<MyPageData<TourProjectGroupPurchaseProgressVo>> list(
+            @MyRequestBody TourProjectGroupPurchaseProgressDto tourProjectGroupPurchaseProgressDtoFilter,
+            @MyRequestBody MyOrderParam orderParam,
+            @MyRequestBody MyPageParam pageParam) {
+        if (pageParam != null) {
+            PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize(), pageParam.getCount());
+        }
+        TourProjectGroupPurchaseProgress tourProjectGroupPurchaseProgressFilter = MyModelUtil.copyTo(tourProjectGroupPurchaseProgressDtoFilter, TourProjectGroupPurchaseProgress.class);
+        String orderBy = MyOrderParam.buildOrderBy(orderParam, TourProjectGroupPurchaseProgress.class);
+        List<TourProjectGroupPurchaseProgress> tourProjectGroupPurchaseProgressList =
+                tourProjectGroupPurchaseProgressService.getTourProjectGroupPurchaseProgressListWithRelation(tourProjectGroupPurchaseProgressFilter, orderBy);
+        return ResponseResult.success(MyPageUtil.makeResponseData(tourProjectGroupPurchaseProgressList, TourProjectGroupPurchaseProgressVo.class));
+    }
+
+    /**
+     * 查看指定拼图的当前人数表对象详情。
+     *
+     * @param id 指定对象主键Id。
+     * @return 应答结果对象,包含对象详情。
+     */
+    @SaCheckPermission("tourProjectGroupPurchaseProgress.view")
+    @GetMapping("/view")
+    public ResponseResult<TourProjectGroupPurchaseProgressVo> view(@RequestParam Long id) {
+        TourProjectGroupPurchaseProgress tourProjectGroupPurchaseProgress = tourProjectGroupPurchaseProgressService.getByIdWithRelation(id, MyRelationParam.full());
+        if (tourProjectGroupPurchaseProgress == null) {
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
+        }
+        TourProjectGroupPurchaseProgressVo tourProjectGroupPurchaseProgressVo = MyModelUtil.copyTo(tourProjectGroupPurchaseProgress, TourProjectGroupPurchaseProgressVo.class);
+        return ResponseResult.success(tourProjectGroupPurchaseProgressVo);
+    }
+
+    private ResponseResult<Void> doDelete(Long id) {
+        String errorMessage;
+        // 验证关联Id的数据合法性
+        TourProjectGroupPurchaseProgress originalTourProjectGroupPurchaseProgress = tourProjectGroupPurchaseProgressService.getById(id);
+        if (originalTourProjectGroupPurchaseProgress == null) {
+            // NOTE: 修改下面方括号中的话述
+            errorMessage = "数据验证失败,当前 [对象] 并不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        if (!tourProjectGroupPurchaseProgressService.remove(id)) {
+            errorMessage = "数据操作失败,删除的对象不存在,请刷新后重试!";
+            return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST, errorMessage);
+        }
+        return ResponseResult.success();
+    }
+}

+ 47 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourProjectGroupPurchaseDetailMapper.java

@@ -0,0 +1,47 @@
+package com.tourism.webadmin.back.dao;
+
+import com.tourism.common.core.base.dao.BaseDaoMapper;
+import com.tourism.webadmin.back.model.TourProjectGroupPurchaseDetail;
+import com.tourism.webadmin.back.model.TourProjectGroupPurchase;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.*;
+
+/**
+ * 拼团设置从表数据操作访问接口。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+public interface TourProjectGroupPurchaseDetailMapper extends BaseDaoMapper<TourProjectGroupPurchaseDetail> {
+
+    /**
+     * 批量插入对象列表。
+     *
+     * @param tourProjectGroupPurchaseDetailList 新增对象列表。
+     */
+    void insertList(List<TourProjectGroupPurchaseDetail> tourProjectGroupPurchaseDetailList);
+
+    /**
+     * 获取过滤后的对象列表。
+     *
+     * @param tourProjectGroupPurchaseDetailFilter 主表过滤对象。
+     * @param orderBy 排序字符串,order by从句的参数。
+     * @return 对象列表。
+     */
+    List<TourProjectGroupPurchaseDetail> getTourProjectGroupPurchaseDetailList(
+            @Param("tourProjectGroupPurchaseDetailFilter") TourProjectGroupPurchaseDetail tourProjectGroupPurchaseDetailFilter, @Param("orderBy") String orderBy);
+
+    /**
+     * 获取过滤后的对象列表。同时支持基于一对一从表字段的过滤条件。
+     *
+     * @param tourProjectGroupPurchaseDetailFilter 主表过滤对象。
+     * @param tourProjectGroupPurchaseFilter 一对一从表过滤对象。
+     * @param orderBy 排序字符串,order by从句的参数。
+     * @return 对象列表。
+     */
+    List<TourProjectGroupPurchaseDetail> getTourProjectGroupPurchaseDetailListEx(
+            @Param("tourProjectGroupPurchaseDetailFilter") TourProjectGroupPurchaseDetail tourProjectGroupPurchaseDetailFilter,
+            @Param("tourProjectGroupPurchaseFilter") TourProjectGroupPurchase tourProjectGroupPurchaseFilter,
+            @Param("orderBy") String orderBy);
+}

+ 33 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourProjectGroupPurchaseMapper.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.TourProjectGroupPurchase;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.*;
+
+/**
+ * 拼团设置主表数据操作访问接口。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+public interface TourProjectGroupPurchaseMapper extends BaseDaoMapper<TourProjectGroupPurchase> {
+
+    /**
+     * 批量插入对象列表。
+     *
+     * @param tourProjectGroupPurchaseList 新增对象列表。
+     */
+    void insertList(List<TourProjectGroupPurchase> tourProjectGroupPurchaseList);
+
+    /**
+     * 获取过滤后的对象列表。
+     *
+     * @param tourProjectGroupPurchaseFilter 主表过滤对象。
+     * @param orderBy 排序字符串,order by从句的参数。
+     * @return 对象列表。
+     */
+    List<TourProjectGroupPurchase> getTourProjectGroupPurchaseList(
+            @Param("tourProjectGroupPurchaseFilter") TourProjectGroupPurchase tourProjectGroupPurchaseFilter, @Param("orderBy") String orderBy);
+}

+ 33 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dao/TourProjectGroupPurchaseProgressMapper.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.TourProjectGroupPurchaseProgress;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.*;
+
+/**
+ * 拼图的当前人数表数据操作访问接口。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+public interface TourProjectGroupPurchaseProgressMapper extends BaseDaoMapper<TourProjectGroupPurchaseProgress> {
+
+    /**
+     * 批量插入对象列表。
+     *
+     * @param tourProjectGroupPurchaseProgressList 新增对象列表。
+     */
+    void insertList(List<TourProjectGroupPurchaseProgress> tourProjectGroupPurchaseProgressList);
+
+    /**
+     * 获取过滤后的对象列表。
+     *
+     * @param tourProjectGroupPurchaseProgressFilter 主表过滤对象。
+     * @param orderBy 排序字符串,order by从句的参数。
+     * @return 对象列表。
+     */
+    List<TourProjectGroupPurchaseProgress> getTourProjectGroupPurchaseProgressList(
+            @Param("tourProjectGroupPurchaseProgressFilter") TourProjectGroupPurchaseProgress tourProjectGroupPurchaseProgressFilter, @Param("orderBy") String orderBy);
+}

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

@@ -0,0 +1,113 @@
+<?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.TourProjectGroupPurchaseDetailMapper">
+    <resultMap id="BaseResultMap" type="com.tourism.webadmin.back.model.TourProjectGroupPurchaseDetail">
+        <id column="id" jdbcType="BIGINT" property="id"/>
+        <result column="group_purchase_id" jdbcType="BIGINT" property="groupPurchaseId"/>
+        <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"/>
+        <result column="adult_price" jdbcType="DECIMAL" property="adultPrice"/>
+        <result column="children_price" jdbcType="DECIMAL" property="childrenPrice"/>
+        <result column="min_count" jdbcType="INTEGER" property="minCount"/>
+        <result column="max_count" jdbcType="INTEGER" property="maxCount"/>
+    </resultMap>
+
+    <insert id="insertList">
+        INSERT INTO tour_project_group_purchase_detail
+            (id,
+            group_purchase_id,
+            create_user_id,
+            create_time,
+            update_user_id,
+            update_time,
+            data_state,
+            adult_price,
+            children_price,
+            min_count,
+            max_count)
+        VALUES
+        <foreach collection="list" index="index" item="item" separator="," >
+            (#{item.id},
+            #{item.groupPurchaseId},
+            #{item.createUserId},
+            #{item.createTime},
+            #{item.updateUserId},
+            #{item.updateTime},
+            #{item.dataState},
+            #{item.adultPrice},
+            #{item.childrenPrice},
+            #{item.minCount},
+            #{item.maxCount})
+        </foreach>
+    </insert>
+
+    <!-- 如果有逻辑删除字段过滤,请写到这里 -->
+    <sql id="filterRef">
+        <!-- 这里必须加上全包名,否则当filterRef被其他Mapper.xml包含引用的时候,就会调用Mapper.xml中的该SQL片段 -->
+        <include refid="com.tourism.webadmin.back.dao.TourProjectGroupPurchaseDetailMapper.inputFilterRef"/>
+        AND tour_project_group_purchase_detail.data_state = ${@com.tourism.common.core.constant.GlobalDeletedFlag@NORMAL}
+    </sql>
+
+    <!-- 这里仅包含调用接口输入的主表过滤条件 -->
+    <sql id="inputFilterRef">
+        <if test="tourProjectGroupPurchaseDetailFilter != null">
+            <if test="tourProjectGroupPurchaseDetailFilter.groupPurchaseId != null">
+                AND tour_project_group_purchase_detail.group_purchase_id = #{tourProjectGroupPurchaseDetailFilter.groupPurchaseId}
+            </if>
+            <if test="tourProjectGroupPurchaseDetailFilter.adultPriceStart != null">
+                AND tour_project_group_purchase_detail.adult_price &gt;= #{tourProjectGroupPurchaseDetailFilter.adultPriceStart}
+            </if>
+            <if test="tourProjectGroupPurchaseDetailFilter.adultPriceEnd != null">
+                AND tour_project_group_purchase_detail.adult_price &lt;= #{tourProjectGroupPurchaseDetailFilter.adultPriceEnd}
+            </if>
+            <if test="tourProjectGroupPurchaseDetailFilter.childrenPriceStart != null">
+                AND tour_project_group_purchase_detail.children_price &gt;= #{tourProjectGroupPurchaseDetailFilter.childrenPriceStart}
+            </if>
+            <if test="tourProjectGroupPurchaseDetailFilter.childrenPriceEnd != null">
+                AND tour_project_group_purchase_detail.children_price &lt;= #{tourProjectGroupPurchaseDetailFilter.childrenPriceEnd}
+            </if>
+            <if test="tourProjectGroupPurchaseDetailFilter.minCountStart != null">
+                AND tour_project_group_purchase_detail.min_count &gt;= #{tourProjectGroupPurchaseDetailFilter.minCountStart}
+            </if>
+            <if test="tourProjectGroupPurchaseDetailFilter.minCountEnd != null">
+                AND tour_project_group_purchase_detail.min_count &lt;= #{tourProjectGroupPurchaseDetailFilter.minCountEnd}
+            </if>
+            <if test="tourProjectGroupPurchaseDetailFilter.maxCountStart != null">
+                AND tour_project_group_purchase_detail.max_count &gt;= #{tourProjectGroupPurchaseDetailFilter.maxCountStart}
+            </if>
+            <if test="tourProjectGroupPurchaseDetailFilter.maxCountEnd != null">
+                AND tour_project_group_purchase_detail.max_count &lt;= #{tourProjectGroupPurchaseDetailFilter.maxCountEnd}
+            </if>
+        </if>
+    </sql>
+
+    <select id="getTourProjectGroupPurchaseDetailList" resultMap="BaseResultMap" parameterType="com.tourism.webadmin.back.model.TourProjectGroupPurchaseDetail">
+        SELECT * FROM tour_project_group_purchase_detail
+        <where>
+            <include refid="filterRef"/>
+        </where>
+        <if test="orderBy != null and orderBy != ''">
+            ORDER BY ${orderBy}
+        </if>
+    </select>
+
+    <!-- 支持基于一对一或者一对多从表字段过滤的SQL_ID -->
+    <select id="getTourProjectGroupPurchaseDetailListEx" resultMap="BaseResultMap" >
+        SELECT
+            tour_project_group_purchase_detail.*
+        FROM
+            tour_project_group_purchase_detail
+        LEFT JOIN
+            tour_project_group_purchase ON tour_project_group_purchase_detail.group_purchase_id = tour_project_group_purchase.id AND tour_project_group_purchase.data_state = ${@com.tourism.common.core.constant.GlobalDeletedFlag@NORMAL}
+        <where>
+            <include refid="filterRef"/>
+            <include refid="com.tourism.webadmin.back.dao.TourProjectGroupPurchaseMapper.inputFilterRef"/>
+        </where>
+        <if test="orderBy != null and orderBy != ''">
+            ORDER BY ${orderBy}
+        </if>
+    </select>
+</mapper>

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

@@ -0,0 +1,120 @@
+<?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.TourProjectGroupPurchaseMapper">
+    <resultMap id="BaseResultMap" type="com.tourism.webadmin.back.model.TourProjectGroupPurchase">
+        <id column="id" jdbcType="BIGINT" property="id"/>
+        <result column="project_id" jdbcType="BIGINT" property="projectId"/>
+        <result column="end_time" jdbcType="DATE" property="endTime"/>
+        <result column="travel_start_time" jdbcType="DATE" property="travelStartTime"/>
+        <result column="travel_end_time" jdbcType="DATE" property="travelEndTime"/>
+        <result column="state" jdbcType="TINYINT" property="state"/>
+        <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"/>
+        <result column="max_count" jdbcType="INTEGER" property="maxCount"/>
+        <result column="adult_price" jdbcType="DECIMAL" property="adultPrice"/>
+        <result column="children_price" jdbcType="DECIMAL" property="childrenPrice"/>
+    </resultMap>
+
+    <insert id="insertList">
+        INSERT INTO tour_project_group_purchase
+            (id,
+            project_id,
+            end_time,
+            travel_start_time,
+            travel_end_time,
+            state,
+            create_user_id,
+            create_time,
+            update_user_id,
+            update_time,
+            data_state,
+            max_count,
+            adult_price,
+            children_price)
+        VALUES
+        <foreach collection="list" index="index" item="item" separator="," >
+            (#{item.id},
+            #{item.projectId},
+            #{item.endTime},
+            #{item.travelStartTime},
+            #{item.travelEndTime},
+            #{item.state},
+            #{item.createUserId},
+            #{item.createTime},
+            #{item.updateUserId},
+            #{item.updateTime},
+            #{item.dataState},
+            #{item.maxCount},
+            #{item.adultPrice},
+            #{item.childrenPrice})
+        </foreach>
+    </insert>
+
+    <!-- 如果有逻辑删除字段过滤,请写到这里 -->
+    <sql id="filterRef">
+        <!-- 这里必须加上全包名,否则当filterRef被其他Mapper.xml包含引用的时候,就会调用Mapper.xml中的该SQL片段 -->
+        <include refid="com.tourism.webadmin.back.dao.TourProjectGroupPurchaseMapper.inputFilterRef"/>
+        AND tour_project_group_purchase.data_state = ${@com.tourism.common.core.constant.GlobalDeletedFlag@NORMAL}
+    </sql>
+
+    <!-- 这里仅包含调用接口输入的主表过滤条件 -->
+    <sql id="inputFilterRef">
+        <if test="tourProjectGroupPurchaseFilter != null">
+            <if test="tourProjectGroupPurchaseFilter.projectId != null">
+                AND tour_project_group_purchase.project_id = #{tourProjectGroupPurchaseFilter.projectId}
+            </if>
+            <if test="tourProjectGroupPurchaseFilter.endTimeStart != null and tourProjectGroupPurchaseFilter.endTimeStart != ''">
+                AND tour_project_group_purchase.end_time &gt;= #{tourProjectGroupPurchaseFilter.endTimeStart}
+            </if>
+            <if test="tourProjectGroupPurchaseFilter.endTimeEnd != null and tourProjectGroupPurchaseFilter.endTimeEnd != ''">
+                AND tour_project_group_purchase.end_time &lt;= #{tourProjectGroupPurchaseFilter.endTimeEnd}
+            </if>
+            <if test="tourProjectGroupPurchaseFilter.travelStartTimeStart != null and tourProjectGroupPurchaseFilter.travelStartTimeStart != ''">
+                AND tour_project_group_purchase.travel_start_time &gt;= #{tourProjectGroupPurchaseFilter.travelStartTimeStart}
+            </if>
+            <if test="tourProjectGroupPurchaseFilter.travelStartTimeEnd != null and tourProjectGroupPurchaseFilter.travelStartTimeEnd != ''">
+                AND tour_project_group_purchase.travel_start_time &lt;= #{tourProjectGroupPurchaseFilter.travelStartTimeEnd}
+            </if>
+            <if test="tourProjectGroupPurchaseFilter.travelEndTimeStart != null and tourProjectGroupPurchaseFilter.travelEndTimeStart != ''">
+                AND tour_project_group_purchase.travel_end_time &gt;= #{tourProjectGroupPurchaseFilter.travelEndTimeStart}
+            </if>
+            <if test="tourProjectGroupPurchaseFilter.travelEndTimeEnd != null and tourProjectGroupPurchaseFilter.travelEndTimeEnd != ''">
+                AND tour_project_group_purchase.travel_end_time &lt;= #{tourProjectGroupPurchaseFilter.travelEndTimeEnd}
+            </if>
+            <if test="tourProjectGroupPurchaseFilter.state != null">
+                AND tour_project_group_purchase.state = #{tourProjectGroupPurchaseFilter.state}
+            </if>
+            <if test="tourProjectGroupPurchaseFilter.maxCountStart != null">
+                AND tour_project_group_purchase.max_count &gt;= #{tourProjectGroupPurchaseFilter.maxCountStart}
+            </if>
+            <if test="tourProjectGroupPurchaseFilter.maxCountEnd != null">
+                AND tour_project_group_purchase.max_count &lt;= #{tourProjectGroupPurchaseFilter.maxCountEnd}
+            </if>
+            <if test="tourProjectGroupPurchaseFilter.adultPriceStart != null">
+                AND tour_project_group_purchase.adult_price &gt;= #{tourProjectGroupPurchaseFilter.adultPriceStart}
+            </if>
+            <if test="tourProjectGroupPurchaseFilter.adultPriceEnd != null">
+                AND tour_project_group_purchase.adult_price &lt;= #{tourProjectGroupPurchaseFilter.adultPriceEnd}
+            </if>
+            <if test="tourProjectGroupPurchaseFilter.childrenPriceStart != null">
+                AND tour_project_group_purchase.children_price &gt;= #{tourProjectGroupPurchaseFilter.childrenPriceStart}
+            </if>
+            <if test="tourProjectGroupPurchaseFilter.childrenPriceEnd != null">
+                AND tour_project_group_purchase.children_price &lt;= #{tourProjectGroupPurchaseFilter.childrenPriceEnd}
+            </if>
+        </if>
+    </sql>
+
+    <select id="getTourProjectGroupPurchaseList" resultMap="BaseResultMap" parameterType="com.tourism.webadmin.back.model.TourProjectGroupPurchase">
+        SELECT * FROM tour_project_group_purchase
+        <where>
+            <include refid="filterRef"/>
+        </where>
+        <if test="orderBy != null and orderBy != ''">
+            ORDER BY ${orderBy}
+        </if>
+    </select>
+</mapper>

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

@@ -0,0 +1,69 @@
+<?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.TourProjectGroupPurchaseProgressMapper">
+    <resultMap id="BaseResultMap" type="com.tourism.webadmin.back.model.TourProjectGroupPurchaseProgress">
+        <id column="id" jdbcType="BIGINT" property="id"/>
+        <result column="group_purchase_id" jdbcType="BIGINT" property="groupPurchaseId"/>
+        <result column="now_count" jdbcType="INTEGER" property="nowCount"/>
+        <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"/>
+        <result column="success" jdbcType="TINYINT" property="success"/>
+    </resultMap>
+
+    <insert id="insertList">
+        INSERT INTO tour_project_group_purchase_progress
+            (id,
+            group_purchase_id,
+            now_count,
+            create_user_id,
+            create_time,
+            update_user_id,
+            update_time,
+            data_state,
+            success)
+        VALUES
+        <foreach collection="list" index="index" item="item" separator="," >
+            (#{item.id},
+            #{item.groupPurchaseId},
+            #{item.nowCount},
+            #{item.createUserId},
+            #{item.createTime},
+            #{item.updateUserId},
+            #{item.updateTime},
+            #{item.dataState},
+            #{item.success})
+        </foreach>
+    </insert>
+
+    <!-- 如果有逻辑删除字段过滤,请写到这里 -->
+    <sql id="filterRef">
+        <!-- 这里必须加上全包名,否则当filterRef被其他Mapper.xml包含引用的时候,就会调用Mapper.xml中的该SQL片段 -->
+        <include refid="com.tourism.webadmin.back.dao.TourProjectGroupPurchaseProgressMapper.inputFilterRef"/>
+        AND tour_project_group_purchase_progress.data_state = ${@com.tourism.common.core.constant.GlobalDeletedFlag@NORMAL}
+    </sql>
+
+    <!-- 这里仅包含调用接口输入的主表过滤条件 -->
+    <sql id="inputFilterRef">
+        <if test="tourProjectGroupPurchaseProgressFilter != null">
+            <if test="tourProjectGroupPurchaseProgressFilter.groupPurchaseId != null">
+                AND tour_project_group_purchase_progress.group_purchase_id = #{tourProjectGroupPurchaseProgressFilter.groupPurchaseId}
+            </if>
+            <if test="tourProjectGroupPurchaseProgressFilter.success != null">
+                AND tour_project_group_purchase_progress.success = #{tourProjectGroupPurchaseProgressFilter.success}
+            </if>
+        </if>
+    </sql>
+
+    <select id="getTourProjectGroupPurchaseProgressList" resultMap="BaseResultMap" parameterType="com.tourism.webadmin.back.model.TourProjectGroupPurchaseProgress">
+        SELECT * FROM tour_project_group_purchase_progress
+        <where>
+            <include refid="filterRef"/>
+        </where>
+        <if test="orderBy != null and orderBy != ''">
+            ORDER BY ${orderBy}
+        </if>
+    </select>
+</mapper>

+ 119 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourProjectGroupPurchaseDetailDto.java

@@ -0,0 +1,119 @@
+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;
+
+/**
+ * 拼团设置从表Dto对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Schema(description = "拼团设置从表Dto对象")
+@Data
+public class TourProjectGroupPurchaseDetailDto {
+
+    /**
+     * 主键id。
+     */
+    @Schema(description = "主键id。", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "数据验证失败,主键id不能为空!", groups = {UpdateGroup.class})
+    private Long id;
+
+    /**
+     * 关联 拼团设置的id。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "关联 拼团设置的id。可支持等于操作符的列表数据过滤。")
+    private Long groupPurchaseId;
+
+    /**
+     * 成人价格。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "成人价格。可支持等于操作符的列表数据过滤。")
+    private BigDecimal adultPrice;
+
+    /**
+     * 儿童价格。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "儿童价格。可支持等于操作符的列表数据过滤。")
+    private BigDecimal childrenPrice;
+
+    /**
+     * 阶梯的人数(下限)。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "阶梯的人数(下限)。可支持等于操作符的列表数据过滤。")
+    private Integer minCount;
+
+    /**
+     * 阶梯的人数(上限)。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "阶梯的人数(上限)。可支持等于操作符的列表数据过滤。")
+    private Integer maxCount;
+
+    /**
+     * adultPrice 范围过滤起始值(>=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "adultPrice 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
+    private BigDecimal adultPriceStart;
+
+    /**
+     * adultPrice 范围过滤结束值(<=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "adultPrice 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
+    private BigDecimal adultPriceEnd;
+
+    /**
+     * childrenPrice 范围过滤起始值(>=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "childrenPrice 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
+    private BigDecimal childrenPriceStart;
+
+    /**
+     * childrenPrice 范围过滤结束值(<=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "childrenPrice 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
+    private BigDecimal childrenPriceEnd;
+
+    /**
+     * minCount 范围过滤起始值(>=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "minCount 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
+    private Integer minCountStart;
+
+    /**
+     * minCount 范围过滤结束值(<=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "minCount 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
+    private Integer minCountEnd;
+
+    /**
+     * maxCount 范围过滤起始值(>=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "maxCount 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
+    private Integer maxCountStart;
+
+    /**
+     * maxCount 范围过滤结束值(<=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "maxCount 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
+    private Integer maxCountEnd;
+}

+ 172 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourProjectGroupPurchaseDto.java

@@ -0,0 +1,172 @@
+package com.tourism.webadmin.back.dto;
+
+import com.tourism.common.core.validator.UpdateGroup;
+import com.tourism.common.core.validator.ConstDictRef;
+import com.tourism.webadmin.back.model.constant.Enable;
+
+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 = "拼团设置主表Dto对象")
+@Data
+public class TourProjectGroupPurchaseDto {
+
+    /**
+     * 主键id。
+     */
+    @Schema(description = "主键id。", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "数据验证失败,主键id不能为空!", groups = {UpdateGroup.class})
+    private Long id;
+
+    /**
+     * 项目id。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "项目id。可支持等于操作符的列表数据过滤。")
+    private Long projectId;
+
+    /**
+     * 拼团结束时间。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "拼团结束时间。可支持等于操作符的列表数据过滤。")
+    private Date endTime;
+
+    /**
+     * 出行开始时间。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "出行开始时间。可支持等于操作符的列表数据过滤。")
+    private Date travelStartTime;
+
+    /**
+     * 出行结束时间。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "出行结束时间。可支持等于操作符的列表数据过滤。")
+    private Date travelEndTime;
+
+    /**
+     * 拼团状态(0禁用,1启用)。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "拼团状态(0禁用,1启用)。可支持等于操作符的列表数据过滤。")
+    @ConstDictRef(constDictClass = Enable.class, message = "数据验证失败,拼团状态(0禁用,1启用)为无效值!")
+    private Integer state;
+
+    /**
+     * 拼团人数上限。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "拼团人数上限。可支持等于操作符的列表数据过滤。")
+    private Integer maxCount;
+
+    /**
+     * 成人价格。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "成人价格。可支持等于操作符的列表数据过滤。")
+    private BigDecimal adultPrice;
+
+    /**
+     * 儿童价格。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "儿童价格。可支持等于操作符的列表数据过滤。")
+    private BigDecimal childrenPrice;
+
+    /**
+     * endTime 范围过滤起始值(>=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "endTime 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
+    private String endTimeStart;
+
+    /**
+     * endTime 范围过滤结束值(<=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "endTime 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
+    private String endTimeEnd;
+
+    /**
+     * travelStartTime 范围过滤起始值(>=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "travelStartTime 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
+    private String travelStartTimeStart;
+
+    /**
+     * travelStartTime 范围过滤结束值(<=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "travelStartTime 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
+    private String travelStartTimeEnd;
+
+    /**
+     * travelEndTime 范围过滤起始值(>=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "travelEndTime 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
+    private String travelEndTimeStart;
+
+    /**
+     * travelEndTime 范围过滤结束值(<=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "travelEndTime 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
+    private String travelEndTimeEnd;
+
+    /**
+     * maxCount 范围过滤起始值(>=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "maxCount 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
+    private Integer maxCountStart;
+
+    /**
+     * maxCount 范围过滤结束值(<=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "maxCount 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
+    private Integer maxCountEnd;
+
+    /**
+     * adultPrice 范围过滤起始值(>=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "adultPrice 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
+    private BigDecimal adultPriceStart;
+
+    /**
+     * adultPrice 范围过滤结束值(<=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "adultPrice 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
+    private BigDecimal adultPriceEnd;
+
+    /**
+     * childrenPrice 范围过滤起始值(>=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "childrenPrice 范围过滤起始值(>=)。可支持范围操作符的列表数据过滤。")
+    private BigDecimal childrenPriceStart;
+
+    /**
+     * childrenPrice 范围过滤结束值(<=)。
+     * NOTE: 可支持范围操作符的列表数据过滤。
+     */
+    @Schema(description = "childrenPrice 范围过滤结束值(<=)。可支持范围操作符的列表数据过滤。")
+    private BigDecimal childrenPriceEnd;
+}

+ 46 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/dto/TourProjectGroupPurchaseProgressDto.java

@@ -0,0 +1,46 @@
+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.*;
+
+/**
+ * 拼图的当前人数表Dto对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Schema(description = "拼图的当前人数表Dto对象")
+@Data
+public class TourProjectGroupPurchaseProgressDto {
+
+    /**
+     * 主键id。
+     */
+    @Schema(description = "主键id。", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "数据验证失败,主键id不能为空!", groups = {UpdateGroup.class})
+    private Long id;
+
+    /**
+     * 关联拼团设置的id。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "关联拼团设置的id。可支持等于操作符的列表数据过滤。")
+    private Long groupPurchaseId;
+
+    /**
+     * 当前拼团的人数。
+     */
+    @Schema(description = "当前拼团的人数。")
+    private Integer nowCount;
+
+    /**
+     * 拼团是否成功(0.失败;1.成功)。
+     * NOTE: 可支持等于操作符的列表数据过滤。
+     */
+    @Schema(description = "拼团是否成功(0.失败;1.成功)。可支持等于操作符的列表数据过滤。")
+    private Integer success;
+}

+ 170 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourProjectGroupPurchase.java

@@ -0,0 +1,170 @@
+package com.tourism.webadmin.back.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.tourism.webadmin.back.model.constant.Enable;
+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_project_group_purchase")
+public class TourProjectGroupPurchase extends BaseModel {
+
+    /**
+     * 主键id。
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 项目id。
+     */
+    @TableField(value = "project_id")
+    private Long projectId;
+
+    /**
+     * 拼团结束时间。
+     */
+    @TableField(value = "end_time")
+    private Date endTime;
+
+    /**
+     * 出行开始时间。
+     */
+    @TableField(value = "travel_start_time")
+    private Date travelStartTime;
+
+    /**
+     * 出行结束时间。
+     */
+    @TableField(value = "travel_end_time")
+    private Date travelEndTime;
+
+    /**
+     * 拼团状态(0禁用,1启用)。
+     */
+    @TableField(value = "state")
+    private Integer state;
+
+    /**
+     * 逻辑删除标记字段(1: 正常 -1: 已删除)。
+     */
+    @TableLogic
+    @TableField(value = "data_state")
+    private Integer dataState;
+
+    /**
+     * 拼团人数上限。
+     */
+    @TableField(value = "max_count")
+    private Integer maxCount;
+
+    /**
+     * 成人价格。
+     */
+    @TableField(value = "adult_price")
+    private BigDecimal adultPrice;
+
+    /**
+     * 儿童价格。
+     */
+    @TableField(value = "children_price")
+    private BigDecimal childrenPrice;
+
+    /**
+     * endTime 范围过滤起始值(>=)。
+     */
+    @TableField(exist = false)
+    private String endTimeStart;
+
+    /**
+     * endTime 范围过滤结束值(<=)。
+     */
+    @TableField(exist = false)
+    private String endTimeEnd;
+
+    /**
+     * travelStartTime 范围过滤起始值(>=)。
+     */
+    @TableField(exist = false)
+    private String travelStartTimeStart;
+
+    /**
+     * travelStartTime 范围过滤结束值(<=)。
+     */
+    @TableField(exist = false)
+    private String travelStartTimeEnd;
+
+    /**
+     * travelEndTime 范围过滤起始值(>=)。
+     */
+    @TableField(exist = false)
+    private String travelEndTimeStart;
+
+    /**
+     * travelEndTime 范围过滤结束值(<=)。
+     */
+    @TableField(exist = false)
+    private String travelEndTimeEnd;
+
+    /**
+     * maxCount 范围过滤起始值(>=)。
+     */
+    @TableField(exist = false)
+    private Integer maxCountStart;
+
+    /**
+     * maxCount 范围过滤结束值(<=)。
+     */
+    @TableField(exist = false)
+    private Integer maxCountEnd;
+
+    /**
+     * adultPrice 范围过滤起始值(>=)。
+     */
+    @TableField(exist = false)
+    private BigDecimal adultPriceStart;
+
+    /**
+     * adultPrice 范围过滤结束值(<=)。
+     */
+    @TableField(exist = false)
+    private BigDecimal adultPriceEnd;
+
+    /**
+     * childrenPrice 范围过滤起始值(>=)。
+     */
+    @TableField(exist = false)
+    private BigDecimal childrenPriceStart;
+
+    /**
+     * childrenPrice 范围过滤结束值(<=)。
+     */
+    @TableField(exist = false)
+    private BigDecimal childrenPriceEnd;
+
+    @RelationOneToOne(
+            masterIdField = "projectId",
+            slaveModelClass = TourismProject.class,
+            slaveIdField = "id")
+    @TableField(exist = false)
+    private TourismProject tourismProject;
+
+    @RelationConstDict(
+            masterIdField = "state",
+            constantDictClass = Enable.class)
+    @TableField(exist = false)
+    private Map<String, Object> stateDictMap;
+}

+ 119 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourProjectGroupPurchaseDetail.java

@@ -0,0 +1,119 @@
+package com.tourism.webadmin.back.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.tourism.common.core.annotation.*;
+import com.tourism.common.core.base.model.BaseModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * 拼团设置从表实体对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "tour_project_group_purchase_detail")
+public class TourProjectGroupPurchaseDetail extends BaseModel {
+
+    /**
+     * 主键id。
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 关联 拼团设置的id。
+     */
+    @TableField(value = "group_purchase_id")
+    private Long groupPurchaseId;
+
+    /**
+     * 逻辑删除标记字段(1: 正常 -1: 已删除)。
+     */
+    @TableLogic
+    @TableField(value = "data_state")
+    private Integer dataState;
+
+    /**
+     * 成人价格。
+     */
+    @TableField(value = "adult_price")
+    private BigDecimal adultPrice;
+
+    /**
+     * 儿童价格。
+     */
+    @TableField(value = "children_price")
+    private BigDecimal childrenPrice;
+
+    /**
+     * 阶梯的人数(下限)。
+     */
+    @TableField(value = "min_count")
+    private Integer minCount;
+
+    /**
+     * 阶梯的人数(上限)。
+     */
+    @TableField(value = "max_count")
+    private Integer maxCount;
+
+    /**
+     * adultPrice 范围过滤起始值(>=)。
+     */
+    @TableField(exist = false)
+    private BigDecimal adultPriceStart;
+
+    /**
+     * adultPrice 范围过滤结束值(<=)。
+     */
+    @TableField(exist = false)
+    private BigDecimal adultPriceEnd;
+
+    /**
+     * childrenPrice 范围过滤起始值(>=)。
+     */
+    @TableField(exist = false)
+    private BigDecimal childrenPriceStart;
+
+    /**
+     * childrenPrice 范围过滤结束值(<=)。
+     */
+    @TableField(exist = false)
+    private BigDecimal childrenPriceEnd;
+
+    /**
+     * minCount 范围过滤起始值(>=)。
+     */
+    @TableField(exist = false)
+    private Integer minCountStart;
+
+    /**
+     * minCount 范围过滤结束值(<=)。
+     */
+    @TableField(exist = false)
+    private Integer minCountEnd;
+
+    /**
+     * maxCount 范围过滤起始值(>=)。
+     */
+    @TableField(exist = false)
+    private Integer maxCountStart;
+
+    /**
+     * maxCount 范围过滤结束值(<=)。
+     */
+    @TableField(exist = false)
+    private Integer maxCountEnd;
+
+    @RelationOneToOne(
+            masterIdField = "groupPurchaseId",
+            slaveModelClass = TourProjectGroupPurchase.class,
+            slaveIdField = "id")
+    @TableField(exist = false)
+    private TourProjectGroupPurchase tourProjectGroupPurchase;
+}

+ 57 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/model/TourProjectGroupPurchaseProgress.java

@@ -0,0 +1,57 @@
+package com.tourism.webadmin.back.model;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.tourism.common.core.annotation.*;
+import com.tourism.common.core.base.model.BaseModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 拼图的当前人数表实体对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "tour_project_group_purchase_progress")
+public class TourProjectGroupPurchaseProgress extends BaseModel {
+
+    /**
+     * 主键id。
+     */
+    @TableId(value = "id")
+    private Long id;
+
+    /**
+     * 关联拼团设置的id。
+     */
+    @TableField(value = "group_purchase_id")
+    private Long groupPurchaseId;
+
+    /**
+     * 当前拼团的人数。
+     */
+    @TableField(value = "now_count")
+    private Integer nowCount;
+
+    /**
+     * 逻辑删除标记字段(1: 正常 -1: 已删除)。
+     */
+    @TableLogic
+    @TableField(value = "data_state")
+    private Integer dataState;
+
+    /**
+     * 拼团是否成功(0.失败;1.成功)。
+     */
+    @TableField(value = "success")
+    private Integer success;
+
+    @RelationOneToOne(
+            masterIdField = "groupPurchaseId",
+            slaveModelClass = TourProjectGroupPurchase.class,
+            slaveIdField = "id")
+    @TableField(exist = false)
+    private TourProjectGroupPurchase tourProjectGroupPurchase;
+}

+ 69 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourProjectGroupPurchaseDetailService.java

@@ -0,0 +1,69 @@
+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 TourProjectGroupPurchaseDetailService extends IBaseService<TourProjectGroupPurchaseDetail, Long> {
+
+    /**
+     * 保存新增对象。
+     *
+     * @param tourProjectGroupPurchaseDetail 新增对象。
+     * @return 返回新增对象。
+     */
+    TourProjectGroupPurchaseDetail saveNew(TourProjectGroupPurchaseDetail tourProjectGroupPurchaseDetail);
+
+    /**
+     * 利用数据库的insertList语法,批量插入对象列表。
+     *
+     * @param tourProjectGroupPurchaseDetailList 新增对象列表。
+     */
+    void saveNewBatch(List<TourProjectGroupPurchaseDetail> tourProjectGroupPurchaseDetailList);
+
+    /**
+     * 更新数据对象。
+     *
+     * @param tourProjectGroupPurchaseDetail         更新的对象。
+     * @param originalTourProjectGroupPurchaseDetail 原有数据对象。
+     * @return 成功返回true,否则false。
+     */
+    boolean update(TourProjectGroupPurchaseDetail tourProjectGroupPurchaseDetail, TourProjectGroupPurchaseDetail originalTourProjectGroupPurchaseDetail);
+
+    /**
+     * 删除指定数据。
+     *
+     * @param id 主键Id。
+     * @return 成功返回true,否则false。
+     */
+    boolean remove(Long id);
+
+    /**
+     * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
+     * 如果需要同时获取关联数据,请移步(getTourProjectGroupPurchaseDetailListWithRelation)方法。
+     *
+     * @param filter  过滤对象。
+     * @param orderBy 排序参数。
+     * @return 查询结果集。
+     */
+    List<TourProjectGroupPurchaseDetail> getTourProjectGroupPurchaseDetailList(TourProjectGroupPurchaseDetail filter, String orderBy);
+
+    /**
+     * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
+     * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
+     * 如果仅仅需要获取主表数据,请移步(getTourProjectGroupPurchaseDetailList),以便获取更好的查询性能。
+     *
+     * @param filter 主表过滤对象。
+     * @param tourProjectGroupPurchaseFilter 一对一从表过滤对象。
+     * @param orderBy 排序参数。
+     * @return 查询结果集。
+     */
+    List<TourProjectGroupPurchaseDetail> getTourProjectGroupPurchaseDetailListWithRelation(TourProjectGroupPurchaseDetail filter, TourProjectGroupPurchase tourProjectGroupPurchaseFilter, String orderBy);
+}

+ 68 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourProjectGroupPurchaseProgressService.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 TourProjectGroupPurchaseProgressService extends IBaseService<TourProjectGroupPurchaseProgress, Long> {
+
+    /**
+     * 保存新增对象。
+     *
+     * @param tourProjectGroupPurchaseProgress 新增对象。
+     * @return 返回新增对象。
+     */
+    TourProjectGroupPurchaseProgress saveNew(TourProjectGroupPurchaseProgress tourProjectGroupPurchaseProgress);
+
+    /**
+     * 利用数据库的insertList语法,批量插入对象列表。
+     *
+     * @param tourProjectGroupPurchaseProgressList 新增对象列表。
+     */
+    void saveNewBatch(List<TourProjectGroupPurchaseProgress> tourProjectGroupPurchaseProgressList);
+
+    /**
+     * 更新数据对象。
+     *
+     * @param tourProjectGroupPurchaseProgress         更新的对象。
+     * @param originalTourProjectGroupPurchaseProgress 原有数据对象。
+     * @return 成功返回true,否则false。
+     */
+    boolean update(TourProjectGroupPurchaseProgress tourProjectGroupPurchaseProgress, TourProjectGroupPurchaseProgress originalTourProjectGroupPurchaseProgress);
+
+    /**
+     * 删除指定数据。
+     *
+     * @param id 主键Id。
+     * @return 成功返回true,否则false。
+     */
+    boolean remove(Long id);
+
+    /**
+     * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
+     * 如果需要同时获取关联数据,请移步(getTourProjectGroupPurchaseProgressListWithRelation)方法。
+     *
+     * @param filter  过滤对象。
+     * @param orderBy 排序参数。
+     * @return 查询结果集。
+     */
+    List<TourProjectGroupPurchaseProgress> getTourProjectGroupPurchaseProgressList(TourProjectGroupPurchaseProgress filter, String orderBy);
+
+    /**
+     * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
+     * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
+     * 如果仅仅需要获取主表数据,请移步(getTourProjectGroupPurchaseProgressList),以便获取更好的查询性能。
+     *
+     * @param filter 主表过滤对象。
+     * @param orderBy 排序参数。
+     * @return 查询结果集。
+     */
+    List<TourProjectGroupPurchaseProgress> getTourProjectGroupPurchaseProgressListWithRelation(TourProjectGroupPurchaseProgress filter, String orderBy);
+}

+ 68 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/TourProjectGroupPurchaseService.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 TourProjectGroupPurchaseService extends IBaseService<TourProjectGroupPurchase, Long> {
+
+    /**
+     * 保存新增对象。
+     *
+     * @param tourProjectGroupPurchase 新增对象。
+     * @return 返回新增对象。
+     */
+    TourProjectGroupPurchase saveNew(TourProjectGroupPurchase tourProjectGroupPurchase);
+
+    /**
+     * 利用数据库的insertList语法,批量插入对象列表。
+     *
+     * @param tourProjectGroupPurchaseList 新增对象列表。
+     */
+    void saveNewBatch(List<TourProjectGroupPurchase> tourProjectGroupPurchaseList);
+
+    /**
+     * 更新数据对象。
+     *
+     * @param tourProjectGroupPurchase         更新的对象。
+     * @param originalTourProjectGroupPurchase 原有数据对象。
+     * @return 成功返回true,否则false。
+     */
+    boolean update(TourProjectGroupPurchase tourProjectGroupPurchase, TourProjectGroupPurchase originalTourProjectGroupPurchase);
+
+    /**
+     * 删除指定数据。
+     *
+     * @param id 主键Id。
+     * @return 成功返回true,否则false。
+     */
+    boolean remove(Long id);
+
+    /**
+     * 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
+     * 如果需要同时获取关联数据,请移步(getTourProjectGroupPurchaseListWithRelation)方法。
+     *
+     * @param filter  过滤对象。
+     * @param orderBy 排序参数。
+     * @return 查询结果集。
+     */
+    List<TourProjectGroupPurchase> getTourProjectGroupPurchaseList(TourProjectGroupPurchase filter, String orderBy);
+
+    /**
+     * 获取主表的查询结果,以及主表关联的字典数据和一对一从表数据,以及一对一从表的字典数据。
+     * 该查询会涉及到一对一从表的关联过滤,或一对多从表的嵌套关联过滤,因此性能不如单表过滤。
+     * 如果仅仅需要获取主表数据,请移步(getTourProjectGroupPurchaseList),以便获取更好的查询性能。
+     *
+     * @param filter 主表过滤对象。
+     * @param orderBy 排序参数。
+     * @return 查询结果集。
+     */
+    List<TourProjectGroupPurchase> getTourProjectGroupPurchaseListWithRelation(TourProjectGroupPurchase filter, String orderBy);
+}

+ 104 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourProjectGroupPurchaseDetailServiceImpl.java

@@ -0,0 +1,104 @@
+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.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
+@Service("tourProjectGroupPurchaseDetailService")
+public class TourProjectGroupPurchaseDetailServiceImpl extends BaseService<TourProjectGroupPurchaseDetail, Long> implements TourProjectGroupPurchaseDetailService {
+
+    @Autowired
+    private IdGeneratorWrapper idGenerator;
+    @Autowired
+    private TourProjectGroupPurchaseDetailMapper tourProjectGroupPurchaseDetailMapper;
+
+    /**
+     * 返回当前Service的主表Mapper对象。
+     *
+     * @return 主表Mapper对象。
+     */
+    @Override
+    protected BaseDaoMapper<TourProjectGroupPurchaseDetail> mapper() {
+        return tourProjectGroupPurchaseDetailMapper;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public TourProjectGroupPurchaseDetail saveNew(TourProjectGroupPurchaseDetail tourProjectGroupPurchaseDetail) {
+        tourProjectGroupPurchaseDetailMapper.insert(this.buildDefaultValue(tourProjectGroupPurchaseDetail));
+        return tourProjectGroupPurchaseDetail;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void saveNewBatch(List<TourProjectGroupPurchaseDetail> tourProjectGroupPurchaseDetailList) {
+        if (CollUtil.isNotEmpty(tourProjectGroupPurchaseDetailList)) {
+            tourProjectGroupPurchaseDetailList.forEach(this::buildDefaultValue);
+            tourProjectGroupPurchaseDetailMapper.insertList(tourProjectGroupPurchaseDetailList);
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean update(TourProjectGroupPurchaseDetail tourProjectGroupPurchaseDetail, TourProjectGroupPurchaseDetail originalTourProjectGroupPurchaseDetail) {
+        MyModelUtil.fillCommonsForUpdate(tourProjectGroupPurchaseDetail, originalTourProjectGroupPurchaseDetail);
+        // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
+        UpdateWrapper<TourProjectGroupPurchaseDetail> uw = this.createUpdateQueryForNullValue(tourProjectGroupPurchaseDetail, tourProjectGroupPurchaseDetail.getId());
+        return tourProjectGroupPurchaseDetailMapper.update(tourProjectGroupPurchaseDetail, uw) == 1;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean remove(Long id) {
+        return tourProjectGroupPurchaseDetailMapper.deleteById(id) == 1;
+    }
+
+    @Override
+    public List<TourProjectGroupPurchaseDetail> getTourProjectGroupPurchaseDetailList(TourProjectGroupPurchaseDetail filter, String orderBy) {
+        return tourProjectGroupPurchaseDetailMapper.getTourProjectGroupPurchaseDetailList(filter, orderBy);
+    }
+
+    @Override
+    public List<TourProjectGroupPurchaseDetail> getTourProjectGroupPurchaseDetailListWithRelation(TourProjectGroupPurchaseDetail filter, TourProjectGroupPurchase tourProjectGroupPurchaseFilter, String orderBy) {
+        List<TourProjectGroupPurchaseDetail> resultList =
+                tourProjectGroupPurchaseDetailMapper.getTourProjectGroupPurchaseDetailListEx(filter, tourProjectGroupPurchaseFilter, orderBy);
+        // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
+        // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
+        int batchSize = resultList instanceof Page ? 0 : 1000;
+        this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
+        return resultList;
+    }
+
+    private TourProjectGroupPurchaseDetail buildDefaultValue(TourProjectGroupPurchaseDetail tourProjectGroupPurchaseDetail) {
+        if (tourProjectGroupPurchaseDetail.getId() == null) {
+            tourProjectGroupPurchaseDetail.setId(idGenerator.nextLongId());
+        }
+        MyModelUtil.fillCommonsForInsert(tourProjectGroupPurchaseDetail);
+        tourProjectGroupPurchaseDetail.setDataState(GlobalDeletedFlag.NORMAL);
+        return tourProjectGroupPurchaseDetail;
+    }
+}

+ 103 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourProjectGroupPurchaseProgressServiceImpl.java

@@ -0,0 +1,103 @@
+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.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
+@Service("tourProjectGroupPurchaseProgressService")
+public class TourProjectGroupPurchaseProgressServiceImpl extends BaseService<TourProjectGroupPurchaseProgress, Long> implements TourProjectGroupPurchaseProgressService {
+
+    @Autowired
+    private IdGeneratorWrapper idGenerator;
+    @Autowired
+    private TourProjectGroupPurchaseProgressMapper tourProjectGroupPurchaseProgressMapper;
+
+    /**
+     * 返回当前Service的主表Mapper对象。
+     *
+     * @return 主表Mapper对象。
+     */
+    @Override
+    protected BaseDaoMapper<TourProjectGroupPurchaseProgress> mapper() {
+        return tourProjectGroupPurchaseProgressMapper;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public TourProjectGroupPurchaseProgress saveNew(TourProjectGroupPurchaseProgress tourProjectGroupPurchaseProgress) {
+        tourProjectGroupPurchaseProgressMapper.insert(this.buildDefaultValue(tourProjectGroupPurchaseProgress));
+        return tourProjectGroupPurchaseProgress;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void saveNewBatch(List<TourProjectGroupPurchaseProgress> tourProjectGroupPurchaseProgressList) {
+        if (CollUtil.isNotEmpty(tourProjectGroupPurchaseProgressList)) {
+            tourProjectGroupPurchaseProgressList.forEach(this::buildDefaultValue);
+            tourProjectGroupPurchaseProgressMapper.insertList(tourProjectGroupPurchaseProgressList);
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean update(TourProjectGroupPurchaseProgress tourProjectGroupPurchaseProgress, TourProjectGroupPurchaseProgress originalTourProjectGroupPurchaseProgress) {
+        MyModelUtil.fillCommonsForUpdate(tourProjectGroupPurchaseProgress, originalTourProjectGroupPurchaseProgress);
+        // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
+        UpdateWrapper<TourProjectGroupPurchaseProgress> uw = this.createUpdateQueryForNullValue(tourProjectGroupPurchaseProgress, tourProjectGroupPurchaseProgress.getId());
+        return tourProjectGroupPurchaseProgressMapper.update(tourProjectGroupPurchaseProgress, uw) == 1;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean remove(Long id) {
+        return tourProjectGroupPurchaseProgressMapper.deleteById(id) == 1;
+    }
+
+    @Override
+    public List<TourProjectGroupPurchaseProgress> getTourProjectGroupPurchaseProgressList(TourProjectGroupPurchaseProgress filter, String orderBy) {
+        return tourProjectGroupPurchaseProgressMapper.getTourProjectGroupPurchaseProgressList(filter, orderBy);
+    }
+
+    @Override
+    public List<TourProjectGroupPurchaseProgress> getTourProjectGroupPurchaseProgressListWithRelation(TourProjectGroupPurchaseProgress filter, String orderBy) {
+        List<TourProjectGroupPurchaseProgress> resultList = tourProjectGroupPurchaseProgressMapper.getTourProjectGroupPurchaseProgressList(filter, orderBy);
+        // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
+        // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
+        int batchSize = resultList instanceof Page ? 0 : 1000;
+        this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
+        return resultList;
+    }
+
+    private TourProjectGroupPurchaseProgress buildDefaultValue(TourProjectGroupPurchaseProgress tourProjectGroupPurchaseProgress) {
+        if (tourProjectGroupPurchaseProgress.getId() == null) {
+            tourProjectGroupPurchaseProgress.setId(idGenerator.nextLongId());
+        }
+        MyModelUtil.fillCommonsForInsert(tourProjectGroupPurchaseProgress);
+        tourProjectGroupPurchaseProgress.setDataState(GlobalDeletedFlag.NORMAL);
+        return tourProjectGroupPurchaseProgress;
+    }
+}

+ 103 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/service/impl/TourProjectGroupPurchaseServiceImpl.java

@@ -0,0 +1,103 @@
+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.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
+@Service("tourProjectGroupPurchaseService")
+public class TourProjectGroupPurchaseServiceImpl extends BaseService<TourProjectGroupPurchase, Long> implements TourProjectGroupPurchaseService {
+
+    @Autowired
+    private IdGeneratorWrapper idGenerator;
+    @Autowired
+    private TourProjectGroupPurchaseMapper tourProjectGroupPurchaseMapper;
+
+    /**
+     * 返回当前Service的主表Mapper对象。
+     *
+     * @return 主表Mapper对象。
+     */
+    @Override
+    protected BaseDaoMapper<TourProjectGroupPurchase> mapper() {
+        return tourProjectGroupPurchaseMapper;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public TourProjectGroupPurchase saveNew(TourProjectGroupPurchase tourProjectGroupPurchase) {
+        tourProjectGroupPurchaseMapper.insert(this.buildDefaultValue(tourProjectGroupPurchase));
+        return tourProjectGroupPurchase;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void saveNewBatch(List<TourProjectGroupPurchase> tourProjectGroupPurchaseList) {
+        if (CollUtil.isNotEmpty(tourProjectGroupPurchaseList)) {
+            tourProjectGroupPurchaseList.forEach(this::buildDefaultValue);
+            tourProjectGroupPurchaseMapper.insertList(tourProjectGroupPurchaseList);
+        }
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean update(TourProjectGroupPurchase tourProjectGroupPurchase, TourProjectGroupPurchase originalTourProjectGroupPurchase) {
+        MyModelUtil.fillCommonsForUpdate(tourProjectGroupPurchase, originalTourProjectGroupPurchase);
+        // 这里重点提示,在执行主表数据更新之前,如果有哪些字段不支持修改操作,请用原有数据对象字段替换当前数据字段。
+        UpdateWrapper<TourProjectGroupPurchase> uw = this.createUpdateQueryForNullValue(tourProjectGroupPurchase, tourProjectGroupPurchase.getId());
+        return tourProjectGroupPurchaseMapper.update(tourProjectGroupPurchase, uw) == 1;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public boolean remove(Long id) {
+        return tourProjectGroupPurchaseMapper.deleteById(id) == 1;
+    }
+
+    @Override
+    public List<TourProjectGroupPurchase> getTourProjectGroupPurchaseList(TourProjectGroupPurchase filter, String orderBy) {
+        return tourProjectGroupPurchaseMapper.getTourProjectGroupPurchaseList(filter, orderBy);
+    }
+
+    @Override
+    public List<TourProjectGroupPurchase> getTourProjectGroupPurchaseListWithRelation(TourProjectGroupPurchase filter, String orderBy) {
+        List<TourProjectGroupPurchase> resultList = tourProjectGroupPurchaseMapper.getTourProjectGroupPurchaseList(filter, orderBy);
+        // 在缺省生成的代码中,如果查询结果resultList不是Page对象,说明没有分页,那么就很可能是数据导出接口调用了当前方法。
+        // 为了避免一次性的大量数据关联,规避因此而造成的系统运行性能冲击,这里手动进行了分批次读取,开发者可按需修改该值。
+        int batchSize = resultList instanceof Page ? 0 : 1000;
+        this.buildRelationForDataList(resultList, MyRelationParam.normal(), batchSize);
+        return resultList;
+    }
+
+    private TourProjectGroupPurchase buildDefaultValue(TourProjectGroupPurchase tourProjectGroupPurchase) {
+        if (tourProjectGroupPurchase.getId() == null) {
+            tourProjectGroupPurchase.setId(idGenerator.nextLongId());
+        }
+        MyModelUtil.fillCommonsForInsert(tourProjectGroupPurchase);
+        tourProjectGroupPurchase.setDataState(GlobalDeletedFlag.NORMAL);
+        return tourProjectGroupPurchase;
+    }
+}

+ 63 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourProjectGroupPurchaseDetailVo.java

@@ -0,0 +1,63 @@
+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.Map;
+
+/**
+ * 拼团设置从表VO视图对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Schema(description = "拼团设置从表VO视图对象")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TourProjectGroupPurchaseDetailVo extends BaseVo {
+
+    /**
+     * 主键id。
+     */
+    @Schema(description = "主键id")
+    private Long id;
+
+    /**
+     * 关联 拼团设置的id。
+     */
+    @Schema(description = "关联 拼团设置的id")
+    private Long groupPurchaseId;
+
+    /**
+     * 成人价格。
+     */
+    @Schema(description = "成人价格")
+    private BigDecimal adultPrice;
+
+    /**
+     * 儿童价格。
+     */
+    @Schema(description = "儿童价格")
+    private BigDecimal childrenPrice;
+
+    /**
+     * 阶梯的人数(下限)。
+     */
+    @Schema(description = "阶梯的人数(下限)")
+    private Integer minCount;
+
+    /**
+     * 阶梯的人数(上限)。
+     */
+    @Schema(description = "阶梯的人数(上限)")
+    private Integer maxCount;
+
+    /**
+     * groupPurchaseId 的一对一关联数据对象,数据对应类型为TourProjectGroupPurchaseVo。
+     */
+    @Schema(description = "groupPurchaseId 的一对一关联数据对象,数据对应类型为TourProjectGroupPurchaseVo")
+    private Map<String, Object> tourProjectGroupPurchase;
+}

+ 49 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourProjectGroupPurchaseProgressVo.java

@@ -0,0 +1,49 @@
+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.Map;
+
+/**
+ * 拼图的当前人数表VO视图对象。
+ *
+ * @author 吃饭睡觉
+ * @date 2024-09-06
+ */
+@Schema(description = "拼图的当前人数表VO视图对象")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TourProjectGroupPurchaseProgressVo extends BaseVo {
+
+    /**
+     * 主键id。
+     */
+    @Schema(description = "主键id")
+    private Long id;
+
+    /**
+     * 关联拼团设置的id。
+     */
+    @Schema(description = "关联拼团设置的id")
+    private Long groupPurchaseId;
+
+    /**
+     * 当前拼团的人数。
+     */
+    @Schema(description = "当前拼团的人数")
+    private Integer nowCount;
+
+    /**
+     * 拼团是否成功(0.失败;1.成功)。
+     */
+    @Schema(description = "拼团是否成功(0.失败;1.成功)")
+    private Integer success;
+
+    /**
+     * groupPurchaseId 的一对一关联数据对象,数据对应类型为TourProjectGroupPurchaseVo。
+     */
+    @Schema(description = "groupPurchaseId 的一对一关联数据对象,数据对应类型为TourProjectGroupPurchaseVo")
+    private Map<String, Object> tourProjectGroupPurchase;
+}

+ 88 - 0
application-webadmin/src/main/java/com/tourism/webadmin/back/vo/TourProjectGroupPurchaseVo.java

@@ -0,0 +1,88 @@
+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 = "拼团设置主表VO视图对象")
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TourProjectGroupPurchaseVo extends BaseVo {
+
+    /**
+     * 主键id。
+     */
+    @Schema(description = "主键id")
+    private Long id;
+
+    /**
+     * 项目id。
+     */
+    @Schema(description = "项目id")
+    private Long projectId;
+
+    /**
+     * 拼团结束时间。
+     */
+    @Schema(description = "拼团结束时间")
+    private Date endTime;
+
+    /**
+     * 出行开始时间。
+     */
+    @Schema(description = "出行开始时间")
+    private Date travelStartTime;
+
+    /**
+     * 出行结束时间。
+     */
+    @Schema(description = "出行结束时间")
+    private Date travelEndTime;
+
+    /**
+     * 拼团状态(0禁用,1启用)。
+     */
+    @Schema(description = "拼团状态(0禁用,1启用)")
+    private Integer state;
+
+    /**
+     * 拼团人数上限。
+     */
+    @Schema(description = "拼团人数上限")
+    private Integer maxCount;
+
+    /**
+     * 成人价格。
+     */
+    @Schema(description = "成人价格")
+    private BigDecimal adultPrice;
+
+    /**
+     * 儿童价格。
+     */
+    @Schema(description = "儿童价格")
+    private BigDecimal childrenPrice;
+
+    /**
+     * projectId 的一对一关联数据对象,数据对应类型为TourismProjectVo。
+     */
+    @Schema(description = "projectId 的一对一关联数据对象,数据对应类型为TourismProjectVo")
+    private Map<String, Object> tourismProject;
+
+    /**
+     * state 常量字典关联数据。
+     */
+    @Schema(description = "state 常量字典关联数据")
+    private Map<String, Object> stateDictMap;
+}