diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/activitypay/ActivityApi.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/activitypay/ActivityApi.java
new file mode 100644
index 00000000..26fe3e16
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/activitypay/ActivityApi.java
@@ -0,0 +1,15 @@
+package cn.iocoder.yudao.module.member.api.activitypay;
+
+import cn.iocoder.yudao.module.member.api.activitypay.dto.ActivityPayDTO;
+
+/**
+ * 用户收件地址 API 接口
+ *
+ * @author 芋道源码
+ */
+public interface ActivityApi {
+
+
+ void createActivityPay(ActivityPayDTO createReqVO);
+
+}
diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/activitypay/dto/ActivityPayDTO.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/activitypay/dto/ActivityPayDTO.java
new file mode 100644
index 00000000..6f251056
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/api/activitypay/dto/ActivityPayDTO.java
@@ -0,0 +1,45 @@
+package cn.iocoder.yudao.module.member.api.activitypay.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * 活动付款 DO
+ *
+ * @author 我是秦俊旗
+ */
+// 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityPayDTO {
+
+ /**
+ * 活动id
+ */
+ private Long activityId;
+ /**
+ * 桌号
+ */
+ private String serialNumbers;
+ /**
+ * 价格
+ */
+ private BigDecimal price;
+ /**
+ * 用户id
+ */
+ private Long userId;
+
+ private String status;
+
+ private String reserveTime;
+
+ private String dish;
+
+ private String diningPeriod;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java
index a865e002..ce5d7cef 100644
--- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java
+++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java
@@ -188,5 +188,28 @@ public interface ErrorCodeConstants {
ErrorCode DINING_PLATES_BIND_MAX = new ErrorCode(1_004_033_02, "可绑定的餐盘已达到上限");
ErrorCode STORE_DISCOUNT_NOT_EXISTS = new ErrorCode(1_004_033_03, "门店超市折扣不存在");
+
+
+ ErrorCode ACTIVITY_USER_NOT_EXISTS = new ErrorCode(1_005_000_01, "活动参加人员不存在");
+ ErrorCode ACTIVITY_TABLE_NOT_EXISTS = new ErrorCode(1_005_000_02, "活动用餐桌子不存在");
+ ErrorCode ACTIVITY_RESTAURANT_NOT_EXISTS = new ErrorCode(1_005_000_03, "活动用餐不存在");
+ ErrorCode ACTIVITY_AWARDS_USER_NOT_EXISTS = new ErrorCode(1_005_000_04, "活动中奖人员不存在");
+ ErrorCode ACTIVITY_AWARDS_NOT_EXISTS = new ErrorCode(1_005_000_05, "活动奖项不存在");
+ ErrorCode ACTIVITY_NOT_EXISTS = new ErrorCode(1_005_000_06, "活动不存在");
+ ErrorCode ACTIVITY_START = new ErrorCode(1_005_000_07, "活动已开始或结束");
+ ErrorCode ACTIVITY_TABLE_ZERO = new ErrorCode(1_005_000_08, "总桌数至少为1");
+ ErrorCode ACTIVITY_AWARDS_EXCEED = new ErrorCode(1_005_000_09, "中奖人数超出");
+ ErrorCode ACTIVITY_ERROR = new ErrorCode(1_005_000_10, "活动已结束");
+ ErrorCode ACTIVITY_USER_JOIN = new ErrorCode(1_005_000_11, "该活动已报名");
+ ErrorCode ACTIVITY_TABLE_RESERVED = new ErrorCode(1_005_000_12, "桌子已预订");
+ ErrorCode ACTIVITY_PAY_NOT_EXISTS = new ErrorCode(1_005_000_13, "活动付款不存在");
+ ErrorCode ACTIVITY_AWARDS_USER_NOT_EFFECTIVE = new ErrorCode(1_005_000_14, "该奖项已兑换或已过期");
+ ErrorCode ACTIVITY_NO_USER = new ErrorCode(1_005_000_15, "活动无参与人员");
+ ErrorCode ACTIVITY_PAY_TABLE_NOT_EXISTS = new ErrorCode(1_005_000_16, "活动付款不存在");
+ ErrorCode ACTIVITY_PAY_USE = new ErrorCode(1_005_000_17, "该订单已使用");
+ ErrorCode ACTIVITY_PAY_EXPIRE = new ErrorCode(1_005_000_18, "该订单不在有效期内");
+ ErrorCode ACTIVITY_ADD_DISH_NOT_EXISTS = new ErrorCode(1_005_000_19, "活动用餐桌子加菜不存在");
+ ErrorCode ACTIVITY_TABLE_DISH_NOT_EXISTS = new ErrorCode(1_005_000_20, "活动用餐桌子配置不存在");
+ ErrorCode ACTIVITY_ADD_DISH_NOT_CHANGE = new ErrorCode(1_005_000_19, "请先选择桌子");
}
diff --git a/yudao-module-member/yudao-module-member-biz/pom.xml b/yudao-module-member/yudao-module-member-biz/pom.xml
index e57c02ea..d38ebdf5 100644
--- a/yudao-module-member/yudao-module-member-biz/pom.xml
+++ b/yudao-module-member/yudao-module-member-biz/pom.xml
@@ -110,6 +110,10 @@
javase
3.4.1
+
+ cn.iocoder.boot
+ yudao-spring-boot-starter-protection
+
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/api/activitypay/ActivityApiImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/api/activitypay/ActivityApiImpl.java
new file mode 100644
index 00000000..e068d581
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/api/activitypay/ActivityApiImpl.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.member.api.activitypay;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.iocoder.yudao.module.member.api.activitypay.dto.ActivityPayDTO;
+import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPaySaveReqVO;
+import cn.iocoder.yudao.module.member.service.activitypay.ActivityPayService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * 用户收件地址 API 接口
+ *
+ * @author 芋道源码
+ */
+@Service
+public class ActivityApiImpl implements ActivityApi {
+
+
+ @Resource
+ private ActivityPayService activityPayService;
+
+ @Override
+ public void createActivityPay(ActivityPayDTO createReqVO) {
+ ActivityPaySaveReqVO bean = BeanUtil.toBean(createReqVO, ActivityPaySaveReqVO.class);
+ activityPayService.addActivityPay(bean);
+
+ }
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activity/ActivityController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activity/ActivityController.java
new file mode 100644
index 00000000..33ec2e3f
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activity/ActivityController.java
@@ -0,0 +1,100 @@
+package cn.iocoder.yudao.module.member.controller.admin.activity;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import cn.iocoder.yudao.module.member.controller.admin.activity.vo.ActivityPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activity.vo.ActivityRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activity.vo.ActivitySaveReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo.ActivityRestaurantRespVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activity.ActivityDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityrestaurant.ActivityRestaurantDO;
+import cn.iocoder.yudao.module.member.service.activity.ActivityService;
+import cn.iocoder.yudao.module.member.service.activityrestaurant.ActivityRestaurantService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+
+@Tag(name = "管理后台 - 活动")
+@RestController
+@RequestMapping("/member/activity")
+@Validated
+public class ActivityController {
+
+ @Resource
+ private ActivityService activityService;
+ @Resource
+ private ActivityRestaurantService activityRestaurantService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建活动")
+ public CommonResult createActivity(@Valid @RequestBody ActivitySaveReqVO createReqVO) {
+ return success(activityService.createActivity(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新活动")
+ @PreAuthorize("@ss.hasPermission('member:activity:update')")
+ public CommonResult updateActivity(@Valid @RequestBody ActivitySaveReqVO updateReqVO) {
+ activityService.updateActivity(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除活动")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('member:activity:delete')")
+ public CommonResult deleteActivity(@RequestParam("id") Long id) {
+ activityService.deleteActivity(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得活动")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('member:activity:query')")
+ public CommonResult getActivity(@RequestParam("id") Long id) {
+ ActivityDO activity = activityService.getActivity(id);
+ ActivityRespVO bean = BeanUtils.toBean(activity, ActivityRespVO.class);
+ ActivityRestaurantDO activityRestaurantDO = activityRestaurantService.getByActivityId(id);
+ bean.setActivityRestaurantSaveDto(BeanUtils.toBean(activityRestaurantDO, ActivityRestaurantRespVO.class));
+ return success(bean);
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得活动分页")
+ @PreAuthorize("@ss.hasPermission('member:activity:query')")
+ public CommonResult> getActivityPage(@Valid ActivityPageReqVO pageReqVO) {
+ PageResult pageResult = activityService.getActivityPage(pageReqVO);
+ return success(pageResult);
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出活动 Excel")
+ @PreAuthorize("@ss.hasPermission('member:activity:export')")
+ @OperateLog(type = EXPORT)
+ public void exportActivityExcel(@Valid ActivityPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityService.getActivityPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "活动.xls", "数据", ActivityRespVO.class,
+ list);
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activity/vo/ActivityPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activity/vo/ActivityPageReqVO.java
new file mode 100644
index 00000000..d53758a1
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activity/vo/ActivityPageReqVO.java
@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.module.member.controller.admin.activity.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 活动分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ActivityPageReqVO extends PageParam {
+
+ @Schema(description = "活动名称", example = "李四")
+ private String activityName;
+
+ @Schema(description = "活动开始时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] startTime;
+
+ @Schema(description = "活动结束时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] endTime;
+
+ @Schema(description = "描述", example = "你猜")
+ private String description;
+
+ @Schema(description = "封面图")
+ private String img;
+
+ @Schema(description = "地点")
+ private String location;
+
+ @Schema(description = "主办方")
+ private String sponsor;
+
+ @Schema(description = "可抽奖次数")
+ private Integer lotteryNum;
+
+ @Schema(description = "用餐状态,0-禁用,1-启用 ", example = "1")
+ private String reservationStatus;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "用户ID")
+ private Long userId;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activity/vo/ActivityRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activity/vo/ActivityRespVO.java
new file mode 100644
index 00000000..72be58f3
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activity/vo/ActivityRespVO.java
@@ -0,0 +1,77 @@
+package cn.iocoder.yudao.module.member.controller.admin.activity.vo;
+
+import cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo.ActivityRestaurantRespVO;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 活动 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "29158")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "活动名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+ @ExcelProperty("活动名称")
+ private String activityName;
+
+ @Schema(description = "活动开始时间")
+ @ExcelProperty("活动开始时间")
+ private LocalDateTime startTime;
+
+ @Schema(description = "活动结束时间")
+ @ExcelProperty("活动结束时间")
+ private LocalDateTime endTime;
+
+ @Schema(description = "描述", example = "你猜")
+ @ExcelProperty("描述")
+ private String description;
+
+ @Schema(description = "封面图")
+ @ExcelProperty("封面图")
+ private String img;
+
+ @Schema(description = "地点")
+ @ExcelProperty("地点")
+ private String location;
+
+ @Schema(description = "主办方")
+ @ExcelProperty("主办方")
+ private String sponsor;
+
+ @Schema(description = "可抽奖次数")
+ @ExcelProperty("可抽奖次数")
+ private Integer lotteryNum;
+
+ @Schema(description = "用餐状态,0-禁用,1-启用 ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @ExcelProperty("用餐状态,0-禁用,1-启用 ")
+ private String reservationStatus;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "报名人数")
+ private Integer applyNum;
+
+ @Schema(description = "中奖人数")
+ private Integer awardsNum;
+
+ @Schema(description = "预定人数")
+ private Integer reserveNum;
+
+ @Schema(description = "收入")
+ private BigDecimal income;
+
+ @Schema(description = "是否报名")
+ private Boolean isApply;
+
+ private ActivityRestaurantRespVO activityRestaurantSaveDto;
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activity/vo/ActivitySaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activity/vo/ActivitySaveReqVO.java
new file mode 100644
index 00000000..db52883a
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activity/vo/ActivitySaveReqVO.java
@@ -0,0 +1,53 @@
+package cn.iocoder.yudao.module.member.controller.admin.activity.vo;
+
+import cn.iocoder.yudao.module.member.controller.admin.activityawards.vo.ActivityAwardsListDTO;
+import cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo.ActivityRestaurantSaveDto;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 活动新增/修改 Request VO")
+@Data
+public class ActivitySaveReqVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "29158")
+ private Long id;
+
+ @Schema(description = "活动名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+ @NotEmpty(message = "活动名称不能为空")
+ private String activityName;
+
+ @Schema(description = "活动开始时间")
+ private LocalDateTime startTime;
+
+ @Schema(description = "活动结束时间")
+ private LocalDateTime endTime;
+
+ @Schema(description = "描述", example = "你猜")
+ private String description;
+
+ @Schema(description = "封面图")
+ private String img;
+
+ @Schema(description = "地点")
+ private String location;
+
+ @Schema(description = "主办方")
+ private String sponsor;
+
+ @Schema(description = "可抽奖次数")
+ private Integer lotteryNum;
+
+ @Schema(description = "用餐状态,0-禁用,1-启用 ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotEmpty(message = "用餐状态,0-禁用,1-启用 不能为空")
+ private String reservationStatus;
+
+ @Schema(description = "奖项列表")
+ private List activityAwardsList;
+
+ @Schema(description = "用餐设置")
+ private ActivityRestaurantSaveDto activityRestaurantSaveDto;
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/ActivityAddDishController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/ActivityAddDishController.java
new file mode 100644
index 00000000..589916c3
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/ActivityAddDishController.java
@@ -0,0 +1,102 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityadddish;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo.ActivityAddDishPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo.ActivityAddDishRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo.ActivityAddDishSaveBatchVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo.ActivityAddDishSaveReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityadddish.ActivityAddDishDO;
+import cn.iocoder.yudao.module.member.service.activityadddish.ActivityAddDishService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+
+@Tag(name = "管理后台 - 活动用餐桌子加菜")
+@RestController
+@RequestMapping("/member/activity-add-dish")
+@Validated
+public class ActivityAddDishController {
+
+ @Resource
+ private ActivityAddDishService activityAddDishService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建活动用餐桌子加菜")
+ @PreAuthorize("@ss.hasPermission('member:activity-add-dish:create')")
+ public CommonResult createActivityAddDish(@Valid @RequestBody ActivityAddDishSaveReqVO createReqVO) {
+ return success(activityAddDishService.createActivityAddDish(createReqVO));
+ }
+
+ @PostMapping("/createBatch")
+ @Operation(summary = "创建活动用餐桌子加菜批量")
+ @PreAuthorize("@ss.hasPermission('member:activity-add-dish:create')")
+ public CommonResult createActivityAddDish(@Valid @RequestBody ActivityAddDishSaveBatchVO createReqVO) {
+ activityAddDishService.createActivityAddDishBatch(createReqVO);
+ return success(true);
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新活动用餐桌子加菜")
+ @PreAuthorize("@ss.hasPermission('member:activity-add-dish:update')")
+ public CommonResult updateActivityAddDish(@Valid @RequestBody ActivityAddDishSaveReqVO updateReqVO) {
+ activityAddDishService.updateActivityAddDish(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除活动用餐桌子加菜")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('member:activity-add-dish:delete')")
+ public CommonResult deleteActivityAddDish(@RequestParam("id") Long id) {
+ activityAddDishService.deleteActivityAddDish(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得活动用餐桌子加菜")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('member:activity-add-dish:query')")
+ public CommonResult getActivityAddDish(@RequestParam("id") Long id) {
+ ActivityAddDishDO activityAddDish = activityAddDishService.getActivityAddDish(id);
+ return success(BeanUtils.toBean(activityAddDish, ActivityAddDishRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得活动用餐桌子加菜分页")
+ @PreAuthorize("@ss.hasPermission('member:activity-add-dish:query')")
+ public CommonResult> getActivityAddDishPage(@Valid ActivityAddDishPageReqVO pageReqVO) {
+ PageResult pageResult = activityAddDishService.getActivityAddDishPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ActivityAddDishRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出活动用餐桌子加菜 Excel")
+ @PreAuthorize("@ss.hasPermission('member:activity-add-dish:export')")
+ @OperateLog(type = EXPORT)
+ public void exportActivityAddDishExcel(@Valid ActivityAddDishPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityAddDishService.getActivityAddDishPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "活动用餐桌子加菜.xls", "数据", ActivityAddDishRespVO.class,
+ BeanUtils.toBean(list, ActivityAddDishRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/vo/ActivityAddDishPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/vo/ActivityAddDishPageReqVO.java
new file mode 100644
index 00000000..8dc4a910
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/vo/ActivityAddDishPageReqVO.java
@@ -0,0 +1,44 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 活动用餐桌子加菜分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ActivityAddDishPageReqVO extends PageParam {
+
+ @Schema(description = "桌子", example = "18726")
+ private Long tableDishId;
+
+ @Schema(description = "序号")
+ private Integer serialNumber;
+
+ @Schema(description = "菜名", example = "赵六")
+ private String dishName;
+
+ @Schema(description = "菜品价格", example = "12669")
+ private BigDecimal dishPrice;
+
+ @Schema(description = "菜品图片")
+ private String dishImg;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "桌子", example = "18726")
+ private List tableDishIds;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/vo/ActivityAddDishRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/vo/ActivityAddDishRespVO.java
new file mode 100644
index 00000000..2dbd4051
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/vo/ActivityAddDishRespVO.java
@@ -0,0 +1,45 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.util.*;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 活动用餐桌子加菜 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityAddDishRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15656")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "桌子", requiredMode = Schema.RequiredMode.REQUIRED, example = "18726")
+ @ExcelProperty("桌子")
+ private Long tableDishId;
+
+ @Schema(description = "序号")
+ @ExcelProperty("序号")
+ private Integer serialNumber;
+
+ @Schema(description = "菜名", example = "赵六")
+ @ExcelProperty("菜名")
+ private String dishName;
+
+ @Schema(description = "菜品价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "12669")
+ @ExcelProperty("菜品价格")
+ private BigDecimal dishPrice;
+
+ @Schema(description = "菜品图片")
+ @ExcelProperty("菜品图片")
+ private String dishImg;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/vo/ActivityAddDishSaveBatchVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/vo/ActivityAddDishSaveBatchVO.java
new file mode 100644
index 00000000..df6ec493
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/vo/ActivityAddDishSaveBatchVO.java
@@ -0,0 +1,28 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Schema(description = "管理后台 - 活动用餐桌子加菜新增/修改 Request VO")
+@Data
+public class ActivityAddDishSaveBatchVO {
+
+ @Schema(description = "桌子", requiredMode = Schema.RequiredMode.REQUIRED, example = "18726")
+ @NotNull(message = "桌子不能为空")
+ private List tableDishIds;
+
+ @Schema(description = "菜名", example = "赵六")
+ private String dishName;
+
+ @Schema(description = "菜品价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "12669")
+ @NotNull(message = "菜品价格不能为空")
+ private BigDecimal dishPrice;
+
+ @Schema(description = "菜品图片")
+ private String dishImg;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/vo/ActivityAddDishSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/vo/ActivityAddDishSaveReqVO.java
new file mode 100644
index 00000000..d802858e
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityadddish/vo/ActivityAddDishSaveReqVO.java
@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 活动用餐桌子加菜新增/修改 Request VO")
+@Data
+public class ActivityAddDishSaveReqVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15656")
+ private Long id;
+
+ @Schema(description = "桌子", requiredMode = Schema.RequiredMode.REQUIRED, example = "18726")
+ @NotNull(message = "桌子不能为空")
+ private Long tableDishId;
+
+ @Schema(description = "序号")
+ private Integer serialNumber;
+
+ @Schema(description = "菜名", example = "赵六")
+ private String dishName;
+
+ @Schema(description = "菜品价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "12669")
+ @NotNull(message = "菜品价格不能为空")
+ private BigDecimal dishPrice;
+
+ @Schema(description = "菜品图片")
+ private String dishImg;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/ActivityAwardsController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/ActivityAwardsController.java
new file mode 100644
index 00000000..e9812a80
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/ActivityAwardsController.java
@@ -0,0 +1,101 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityawards;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import cn.iocoder.yudao.module.member.controller.admin.activityawards.vo.ActivityAwardsPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawards.vo.ActivityAwardsRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawards.vo.ActivityAwardsSaveReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawards.ActivityAwardsDO;
+import cn.iocoder.yudao.module.member.service.activityawards.ActivityAwardsService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+
+@Tag(name = "管理后台 - 活动奖项")
+@RestController
+@RequestMapping("/member/activity-awards")
+@Validated
+public class ActivityAwardsController {
+
+ @Resource
+ private ActivityAwardsService activityAwardsService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建活动奖项")
+ @PreAuthorize("@ss.hasPermission('member:activity-awards:create')")
+ public CommonResult createActivityAwards(@Valid @RequestBody ActivityAwardsSaveReqVO createReqVO) {
+ return success(activityAwardsService.createActivityAwards(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新活动奖项")
+ @PreAuthorize("@ss.hasPermission('member:activity-awards:update')")
+ public CommonResult updateActivityAwards(@Valid @RequestBody ActivityAwardsSaveReqVO updateReqVO) {
+ activityAwardsService.updateActivityAwards(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除活动奖项")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('member:activity-awards:delete')")
+ public CommonResult deleteActivityAwards(@RequestParam("id") Long id) {
+ activityAwardsService.deleteActivityAwards(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得活动奖项")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('member:activity-awards:query')")
+ public CommonResult getActivityAwards(@RequestParam("id") Long id) {
+ ActivityAwardsDO activityAwards = activityAwardsService.getActivityAwards(id);
+ return success(BeanUtils.toBean(activityAwards, ActivityAwardsRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得活动奖项分页")
+ @PreAuthorize("@ss.hasPermission('member:activity-awards:query')")
+ public CommonResult> getActivityAwardsPage(@Valid ActivityAwardsPageReqVO pageReqVO) {
+ PageResult pageResult = activityAwardsService.getActivityAwardsPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ActivityAwardsRespVO.class));
+ }
+
+ @GetMapping("/list")
+ @Operation(summary = "获得活动奖项列表")
+ public CommonResult> getActivityAwardsList(@Valid ActivityAwardsPageReqVO pageReqVO) {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityAwardsService.getActivityAwardsPage(pageReqVO).getList();
+ return success(BeanUtils.toBean(list, ActivityAwardsRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出活动奖项 Excel")
+ @PreAuthorize("@ss.hasPermission('member:activity-awards:export')")
+ @OperateLog(type = EXPORT)
+ public void exportActivityAwardsExcel(@Valid ActivityAwardsPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityAwardsService.getActivityAwardsPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "活动奖项.xls", "数据", ActivityAwardsRespVO.class,
+ BeanUtils.toBean(list, ActivityAwardsRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/vo/ActivityAwardsListDTO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/vo/ActivityAwardsListDTO.java
new file mode 100644
index 00000000..e6a170c1
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/vo/ActivityAwardsListDTO.java
@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityawards.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 活动奖项新增/修改 Request VO")
+@Data
+public class ActivityAwardsListDTO {
+
+
+ @Schema(description = "奖项名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @NotEmpty(message = "奖项名称不能为空")
+ private String awardsName;
+
+ private String limitType;
+
+ @Schema(description = "奖项人数")
+ private Integer awardsNum;
+
+ @Schema(description = "奖品")
+ private String prize;
+
+ @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "排序不能为空")
+ private Integer sortNum;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/vo/ActivityAwardsPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/vo/ActivityAwardsPageReqVO.java
new file mode 100644
index 00000000..1d645522
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/vo/ActivityAwardsPageReqVO.java
@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityawards.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 活动奖项分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ActivityAwardsPageReqVO extends PageParam {
+
+ @Schema(description = "活动id", example = "3061")
+ private Long activityId;
+
+ @Schema(description = "奖项名称", example = "芋艿")
+ private String awardsName;
+
+ private String limitType;
+
+ @Schema(description = "奖项人数")
+ private Integer awardsNum;
+
+ @Schema(description = "奖品")
+ private String prize;
+
+ @Schema(description = "排序")
+ private Integer sortNum;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/vo/ActivityAwardsRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/vo/ActivityAwardsRespVO.java
new file mode 100644
index 00000000..f66cde8b
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/vo/ActivityAwardsRespVO.java
@@ -0,0 +1,46 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityawards.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 活动奖项 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityAwardsRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13226")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3061")
+ @ExcelProperty("活动id")
+ private Long activityId;
+
+ @Schema(description = "奖项名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @ExcelProperty("奖项名称")
+ private String awardsName;
+
+
+ private String limitType;
+
+ @Schema(description = "奖项人数")
+ @ExcelProperty("奖项人数")
+ private Integer awardsNum;
+
+ @Schema(description = "奖品")
+ @ExcelProperty("奖品")
+ private String prize;
+
+ @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("排序")
+ private Integer sortNum;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/vo/ActivityAwardsSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/vo/ActivityAwardsSaveReqVO.java
new file mode 100644
index 00000000..b27b08b1
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawards/vo/ActivityAwardsSaveReqVO.java
@@ -0,0 +1,37 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityawards.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 活动奖项新增/修改 Request VO")
+@Data
+public class ActivityAwardsSaveReqVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13226")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3061")
+ @NotNull(message = "活动id不能为空")
+ private Long activityId;
+
+
+ private String limitType;
+
+ @Schema(description = "奖项名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+ @NotEmpty(message = "奖项名称不能为空")
+ private String awardsName;
+
+ @Schema(description = "奖项人数")
+ private Integer awardsNum;
+
+ @Schema(description = "奖品")
+ private String prize;
+
+ @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED)
+ @NotNull(message = "排序不能为空")
+ private Integer sortNum;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/ActivityAwardsUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/ActivityAwardsUserController.java
new file mode 100644
index 00000000..7e4fdb65
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/ActivityAwardsUserController.java
@@ -0,0 +1,101 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityawardsuser;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserSaveReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawardsuser.ActivityAwardsUserDO;
+import cn.iocoder.yudao.module.member.service.activityawardsuser.ActivityAwardsUserService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+
+@Tag(name = "管理后台 - 活动中奖人员")
+@RestController
+@RequestMapping("/member/activity-awards-user")
+@Validated
+public class ActivityAwardsUserController {
+
+ @Resource
+ private ActivityAwardsUserService activityAwardsUserService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建活动中奖人员")
+ @PreAuthorize("@ss.hasPermission('member:activity-awards-user:create')")
+ public CommonResult createActivityAwardsUser(@Valid @RequestBody ActivityAwardsUserSaveReqVO createReqVO) {
+ return success(activityAwardsUserService.createActivityAwardsUser(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新活动中奖人员")
+ @PreAuthorize("@ss.hasPermission('member:activity-awards-user:update')")
+ public CommonResult updateActivityAwardsUser(@Valid @RequestBody ActivityAwardsUserSaveReqVO updateReqVO) {
+ activityAwardsUserService.updateActivityAwardsUser(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除活动中奖人员")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('member:activity-awards-user:delete')")
+ public CommonResult deleteActivityAwardsUser(@RequestParam("id") Long id) {
+ activityAwardsUserService.deleteActivityAwardsUser(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得活动中奖人员")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('member:activity-awards-user:query')")
+ public CommonResult getActivityAwardsUser(@RequestParam("id") Long id) {
+ ActivityAwardsUserDO activityAwardsUser = activityAwardsUserService.getActivityAwardsUser(id);
+ return success(BeanUtils.toBean(activityAwardsUser, ActivityAwardsUserRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得活动中奖人员分页")
+ @PreAuthorize("@ss.hasPermission('member:activity-awards-user:query')")
+ public CommonResult> getActivityAwardsUserPage(@Valid ActivityAwardsUserPageReqVO pageReqVO) {
+ PageResult pageResult = activityAwardsUserService.getActivityAwardsUserPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ActivityAwardsUserRespVO.class));
+ }
+
+ @GetMapping("/JoinPage")
+ @Operation(summary = "获得活动中奖人员分页")
+ public CommonResult> getActivityAwardsUserJoinPage(@Valid ActivityAwardsUserPageReqVO pageReqVO) {
+ return success(activityAwardsUserService.getActivityAwardsUserJoinPage(pageReqVO));
+ }
+
+
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出活动中奖人员 Excel")
+ @PreAuthorize("@ss.hasPermission('member:activity-awards-user:export')")
+ @OperateLog(type = EXPORT)
+ public void exportActivityAwardsUserExcel(@Valid ActivityAwardsUserPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityAwardsUserService.getActivityAwardsUserPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "活动中奖人员.xls", "数据", ActivityAwardsUserRespVO.class,
+ BeanUtils.toBean(list, ActivityAwardsUserRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/vo/ActivityAwardsUserCountVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/vo/ActivityAwardsUserCountVO.java
new file mode 100644
index 00000000..2c12b0b1
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/vo/ActivityAwardsUserCountVO.java
@@ -0,0 +1,19 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 活动参加人员 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityAwardsUserCountVO {
+
+
+ @Schema(description = "活动id")
+ private Long activityId;
+
+ @Schema(description = "中奖人数")
+ private Integer awardsNum= 0;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/vo/ActivityAwardsUserPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/vo/ActivityAwardsUserPageReqVO.java
new file mode 100644
index 00000000..0de5ac78
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/vo/ActivityAwardsUserPageReqVO.java
@@ -0,0 +1,38 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 活动中奖人员分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ActivityAwardsUserPageReqVO extends PageParam {
+
+ @Schema(description = "活动id", example = "8386")
+ private Long activityId;
+
+ @Schema(description = "用户id", example = "19931")
+ private Long userId;
+
+ @Schema(description = "电话")
+ private String mobile;
+
+ @Schema(description = "奖品id", example = "3358")
+ private Long awardsId;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+
+ private String awardsStatus;
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/vo/ActivityAwardsUserRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/vo/ActivityAwardsUserRespVO.java
new file mode 100644
index 00000000..58eb3c93
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/vo/ActivityAwardsUserRespVO.java
@@ -0,0 +1,58 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 活动中奖人员 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityAwardsUserRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32607")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "8386")
+ @ExcelProperty("活动id")
+ private Long activityId;
+
+ @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19931")
+ @ExcelProperty("用户id")
+ private Long userId;
+
+ @Schema(description = "电话")
+ @ExcelProperty("电话")
+ private String mobile;
+
+ private String nickName;
+
+ private String avatar;
+
+ /**
+ * 领奖状态(0-未领奖,1-已领奖,2-已过期)
+ */
+ private String awardsStatus;
+
+ @Schema(description = "奖品id", example = "3358")
+ @ExcelProperty("奖品id")
+ private Long awardsId;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 奖项名称
+ */
+ private String awardsName;
+
+ /**
+ * 奖品
+ */
+ private String prize;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/vo/ActivityAwardsUserSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/vo/ActivityAwardsUserSaveReqVO.java
new file mode 100644
index 00000000..6dae9dc3
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityawardsuser/vo/ActivityAwardsUserSaveReqVO.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 活动中奖人员新增/修改 Request VO")
+@Data
+public class ActivityAwardsUserSaveReqVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32607")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "8386")
+ @NotNull(message = "活动id不能为空")
+ private Long activityId;
+
+ @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "19931")
+ @NotNull(message = "用户id不能为空")
+ private Long userId;
+
+ @Schema(description = "电话")
+ private String mobile;
+
+ @Schema(description = "奖品id", example = "3358")
+ private Long awardsId;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/ActivityPayController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/ActivityPayController.java
new file mode 100644
index 00000000..78606164
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/ActivityPayController.java
@@ -0,0 +1,93 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitypay;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPayPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPayRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPaySaveReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activitypay.ActivityPayDO;
+import cn.iocoder.yudao.module.member.service.activitypay.ActivityPayService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+
+@Tag(name = "管理后台 - 活动付款")
+@RestController
+@RequestMapping("/member/activity-pay")
+@Validated
+public class ActivityPayController {
+
+ @Resource
+ private ActivityPayService activityPayService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建活动付款")
+ @PreAuthorize("@ss.hasPermission('member:activity-pay:create')")
+ public CommonResult createActivityPay(@Valid @RequestBody ActivityPaySaveReqVO createReqVO) {
+ return success(activityPayService.createActivityPay(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新活动付款")
+ @PreAuthorize("@ss.hasPermission('member:activity-pay:update')")
+ public CommonResult updateActivityPay(@Valid @RequestBody ActivityPaySaveReqVO updateReqVO) {
+ activityPayService.updateActivityPay(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除活动付款")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('member:activity-pay:delete')")
+ public CommonResult deleteActivityPay(@RequestParam("id") Long id) {
+ activityPayService.deleteActivityPay(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得活动付款")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('member:activity-pay:query')")
+ public CommonResult getActivityPay(@RequestParam("id") Long id) {
+ ActivityPayDO activityPay = activityPayService.getActivityPay(id);
+ return success(BeanUtils.toBean(activityPay, ActivityPayRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得活动付款分页")
+ @PreAuthorize("@ss.hasPermission('member:activity-pay:query')")
+ public CommonResult> getActivityPayPage(@Valid ActivityPayPageReqVO pageReqVO) {
+ PageResult pageResult = activityPayService.getActivityPayPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ActivityPayRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出活动付款 Excel")
+ @PreAuthorize("@ss.hasPermission('member:activity-pay:export')")
+ @OperateLog(type = EXPORT)
+ public void exportActivityPayExcel(@Valid ActivityPayPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityPayService.getActivityPayPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "活动付款.xls", "数据", ActivityPayRespVO.class,
+ BeanUtils.toBean(list, ActivityPayRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/vo/ActivityPayCountVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/vo/ActivityPayCountVO.java
new file mode 100644
index 00000000..8b2f9533
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/vo/ActivityPayCountVO.java
@@ -0,0 +1,21 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitypay.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 活动参加人员 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityPayCountVO {
+
+
+ @Schema(description = "活动id")
+ private Long activityId;
+
+ @Schema(description = "已收钱款")
+ private BigDecimal income= BigDecimal.ZERO;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/vo/ActivityPayPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/vo/ActivityPayPageReqVO.java
new file mode 100644
index 00000000..6be8b13e
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/vo/ActivityPayPageReqVO.java
@@ -0,0 +1,35 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitypay.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 活动付款分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ActivityPayPageReqVO extends PageParam {
+
+ @Schema(description = "活动id", example = "27391")
+ private Long activityId;
+
+ @Schema(description = "桌号")
+ private String serialNumbers;
+
+ @Schema(description = "价格", example = "7717")
+ private BigDecimal price;
+
+ @Schema(description = "用户id", example = "5313")
+ private Long userId;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/vo/ActivityPayRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/vo/ActivityPayRespVO.java
new file mode 100644
index 00000000..917dc010
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/vo/ActivityPayRespVO.java
@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitypay.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.util.*;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 活动付款 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityPayRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24970")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27391")
+ @ExcelProperty("活动id")
+ private Long activityId;
+
+ @Schema(description = "桌号")
+ @ExcelProperty("桌号")
+ private String serialNumbers;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "7717")
+ @ExcelProperty("价格")
+ private BigDecimal price;
+
+ @Schema(description = "用户id", example = "5313")
+ @ExcelProperty("用户id")
+ private Long userId;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/vo/ActivityPaySaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/vo/ActivityPaySaveReqVO.java
new file mode 100644
index 00000000..ced9f2ba
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypay/vo/ActivityPaySaveReqVO.java
@@ -0,0 +1,38 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitypay.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 活动付款新增/修改 Request VO")
+@Data
+public class ActivityPaySaveReqVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24970")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27391")
+ @NotNull(message = "活动id不能为空")
+ private Long activityId;
+
+ @Schema(description = "桌号")
+ private String serialNumbers;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "7717")
+ @NotNull(message = "价格不能为空")
+ private BigDecimal price;
+
+ @Schema(description = "用户id", example = "5313")
+ private Long userId;
+
+ private String status;
+
+ private String reserveTime;
+
+ private String dish;
+
+ private String diningPeriod;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypaytable/ActivityPayTableController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypaytable/ActivityPayTableController.java
new file mode 100644
index 00000000..d0afebfe
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypaytable/ActivityPayTableController.java
@@ -0,0 +1,100 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitypaytable;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import cn.iocoder.yudao.module.member.controller.admin.activitypaytable.vo.ActivityPayTablePageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitypaytable.vo.ActivityPayTableRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitypaytable.vo.ActivityPayTableSaveReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activitypaytable.ActivityPayTableDO;
+import cn.iocoder.yudao.module.member.service.activitypaytable.ActivityPayTableService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+
+@Tag(name = "管理后台 - 活动付款")
+@RestController
+@RequestMapping("/member/activity-pay-table")
+@Validated
+public class ActivityPayTableController {
+
+ @Resource
+ private ActivityPayTableService activityPayTableService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建活动付款")
+ @PreAuthorize("@ss.hasPermission('member:activity-pay-table:create')")
+ public CommonResult createActivityPayTable(@Valid @RequestBody ActivityPayTableSaveReqVO createReqVO) {
+ return success(activityPayTableService.createActivityPayTable(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新活动付款")
+ @PreAuthorize("@ss.hasPermission('member:activity-pay-table:update')")
+ public CommonResult updateActivityPayTable(@Valid @RequestBody ActivityPayTableSaveReqVO updateReqVO) {
+ activityPayTableService.updateActivityPayTable(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除活动付款")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('member:activity-pay-table:delete')")
+ public CommonResult deleteActivityPayTable(@RequestParam("id") Long id) {
+ activityPayTableService.deleteActivityPayTable(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得活动付款")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('member:activity-pay-table:query')")
+ public CommonResult getActivityPayTable(@RequestParam("id") Long id) {
+ ActivityPayTableDO activityPayTable = activityPayTableService.getActivityPayTable(id);
+ return success(BeanUtils.toBean(activityPayTable, ActivityPayTableRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得活动付款分页")
+ @PreAuthorize("@ss.hasPermission('member:activity-pay-table:query')")
+ public CommonResult> getActivityPayTablePage(@Valid ActivityPayTablePageReqVO pageReqVO) {
+ PageResult pageResult = activityPayTableService.getActivityPayTablePage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ActivityPayTableRespVO.class));
+ }
+
+ @GetMapping("/groupPage")
+ @Operation(summary = "获得活动付款分页")
+ public CommonResult> getActivityPayTableGroupPage(@Valid ActivityPayTablePageReqVO pageReqVO) {
+ PageResult pageResult = activityPayTableService. getActivityPayTableGroupPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ActivityPayTableRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出活动付款 Excel")
+ @PreAuthorize("@ss.hasPermission('member:activity-pay-table:export')")
+ @OperateLog(type = EXPORT)
+ public void exportActivityPayTableExcel(@Valid ActivityPayTablePageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityPayTableService.getActivityPayTablePage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "活动付款.xls", "数据", ActivityPayTableRespVO.class,
+ BeanUtils.toBean(list, ActivityPayTableRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypaytable/vo/ActivityPayTablePageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypaytable/vo/ActivityPayTablePageReqVO.java
new file mode 100644
index 00000000..fc0c6487
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypaytable/vo/ActivityPayTablePageReqVO.java
@@ -0,0 +1,35 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitypaytable.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 活动付款分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ActivityPayTablePageReqVO extends PageParam {
+
+ @Schema(description = "活动id", example = "11464")
+ private Long activityId;
+
+ @Schema(description = "桌号")
+ private String serialNumbers;
+
+ @Schema(description = "价格", example = "18695")
+ private BigDecimal price;
+
+ @Schema(description = "用户id", example = "19527")
+ private Long userId;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypaytable/vo/ActivityPayTableRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypaytable/vo/ActivityPayTableRespVO.java
new file mode 100644
index 00000000..5a1cac97
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypaytable/vo/ActivityPayTableRespVO.java
@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitypaytable.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 活动付款 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityPayTableRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2305")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11464")
+ @ExcelProperty("活动id")
+ private Long activityId;
+
+ @Schema(description = "桌号")
+ @ExcelProperty("桌号")
+ private String serialNumbers;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "18695")
+ @ExcelProperty("价格")
+ private BigDecimal price;
+
+ @Schema(description = "用户id", example = "19527")
+ @ExcelProperty("用户id")
+ private Long userId;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ private BigDecimal allPrice;
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypaytable/vo/ActivityPayTableSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypaytable/vo/ActivityPayTableSaveReqVO.java
new file mode 100644
index 00000000..c938a49b
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitypaytable/vo/ActivityPayTableSaveReqVO.java
@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitypaytable.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 活动付款新增/修改 Request VO")
+@Data
+public class ActivityPayTableSaveReqVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "2305")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "11464")
+ @NotNull(message = "活动id不能为空")
+ private Long activityId;
+
+ @Schema(description = "桌号")
+ private String serialNumbers;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "18695")
+ @NotNull(message = "价格不能为空")
+ private BigDecimal price;
+
+ @Schema(description = "用户id", example = "19527")
+ private Long userId;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/ActivityRestaurantController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/ActivityRestaurantController.java
new file mode 100644
index 00000000..aa4f78cb
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/ActivityRestaurantController.java
@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityrestaurant;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo.*;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityrestaurant.ActivityRestaurantDO;
+import cn.iocoder.yudao.module.member.service.activityrestaurant.ActivityRestaurantService;
+
+@Tag(name = "管理后台 - 活动用餐")
+@RestController
+@RequestMapping("/member/activity-restaurant")
+@Validated
+public class ActivityRestaurantController {
+
+ @Resource
+ private ActivityRestaurantService activityRestaurantService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建活动用餐")
+ @PreAuthorize("@ss.hasPermission('member:activity-restaurant:create')")
+ public CommonResult createActivityRestaurant(@Valid @RequestBody ActivityRestaurantSaveReqVO createReqVO) {
+ return success(activityRestaurantService.createActivityRestaurant(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新活动用餐")
+ @PreAuthorize("@ss.hasPermission('member:activity-restaurant:update')")
+ public CommonResult updateActivityRestaurant(@Valid @RequestBody ActivityRestaurantSaveReqVO updateReqVO) {
+ activityRestaurantService.updateActivityRestaurant(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除活动用餐")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('member:activity-restaurant:delete')")
+ public CommonResult deleteActivityRestaurant(@RequestParam("id") Long id) {
+ activityRestaurantService.deleteActivityRestaurant(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得活动用餐")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('member:activity-restaurant:query')")
+ public CommonResult getActivityRestaurant(@RequestParam("id") Long id) {
+ ActivityRestaurantDO activityRestaurant = activityRestaurantService.getActivityRestaurant(id);
+ return success(BeanUtils.toBean(activityRestaurant, ActivityRestaurantRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得活动用餐分页")
+ @PreAuthorize("@ss.hasPermission('member:activity-restaurant:query')")
+ public CommonResult> getActivityRestaurantPage(@Valid ActivityRestaurantPageReqVO pageReqVO) {
+ PageResult pageResult = activityRestaurantService.getActivityRestaurantPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ActivityRestaurantRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出活动用餐 Excel")
+ @PreAuthorize("@ss.hasPermission('member:activity-restaurant:export')")
+ @OperateLog(type = EXPORT)
+ public void exportActivityRestaurantExcel(@Valid ActivityRestaurantPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityRestaurantService.getActivityRestaurantPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "活动用餐.xls", "数据", ActivityRestaurantRespVO.class,
+ BeanUtils.toBean(list, ActivityRestaurantRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/vo/ActivityRestaurantPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/vo/ActivityRestaurantPageReqVO.java
new file mode 100644
index 00000000..04593d52
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/vo/ActivityRestaurantPageReqVO.java
@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 活动用餐分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ActivityRestaurantPageReqVO extends PageParam {
+
+ @Schema(description = "活动id", example = "17921")
+ private Long activityId;
+
+ @Schema(description = "总桌数")
+ private Integer totalTable;
+
+ @Schema(description = "每桌人数")
+ private Integer tableNum;
+
+ @Schema(description = "价格", example = "11086")
+ private BigDecimal price;
+
+ @Schema(description = "菜谱图片", example = "https://www.iocoder.cn")
+ private String dishUrl;
+
+ @Schema(description = "描述", example = "随便")
+ private String description;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/vo/ActivityRestaurantRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/vo/ActivityRestaurantRespVO.java
new file mode 100644
index 00000000..d8cb96cb
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/vo/ActivityRestaurantRespVO.java
@@ -0,0 +1,49 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import java.util.*;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 活动用餐 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityRestaurantRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32692")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17921")
+ @ExcelProperty("活动id")
+ private Long activityId;
+
+ @Schema(description = "总桌数")
+ @ExcelProperty("总桌数")
+ private Integer totalTable;
+
+ @Schema(description = "每桌人数")
+ @ExcelProperty("每桌人数")
+ private Integer tableNum;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "11086")
+ @ExcelProperty("价格")
+ private BigDecimal price;
+
+ @Schema(description = "菜谱图片", example = "https://www.iocoder.cn")
+ @ExcelProperty("菜谱图片")
+ private String dishUrl;
+
+ @Schema(description = "描述", example = "随便")
+ @ExcelProperty("描述")
+ private String description;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/vo/ActivityRestaurantSaveDto.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/vo/ActivityRestaurantSaveDto.java
new file mode 100644
index 00000000..8364cbf4
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/vo/ActivityRestaurantSaveDto.java
@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 活动用餐新增/修改 Request VO")
+@Data
+public class ActivityRestaurantSaveDto {
+
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32692")
+ private Long id;
+
+ @Schema(description = "总桌数")
+ private Integer totalTable;
+
+ @Schema(description = "每桌人数")
+ private Integer tableNum;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "11086")
+ @NotNull(message = "价格不能为空")
+ private BigDecimal price;
+
+ @Schema(description = "菜谱图片", example = "https://www.iocoder.cn")
+ private String dishUrl;
+
+ @Schema(description = "描述", example = "随便")
+ private String description;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/vo/ActivityRestaurantSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/vo/ActivityRestaurantSaveReqVO.java
new file mode 100644
index 00000000..9a311400
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityrestaurant/vo/ActivityRestaurantSaveReqVO.java
@@ -0,0 +1,36 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 活动用餐新增/修改 Request VO")
+@Data
+public class ActivityRestaurantSaveReqVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "32692")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "17921")
+ @NotNull(message = "活动id不能为空")
+ private Long activityId;
+
+ @Schema(description = "总桌数")
+ private Integer totalTable;
+
+ @Schema(description = "每桌人数")
+ private Integer tableNum;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "11086")
+ @NotNull(message = "价格不能为空")
+ private BigDecimal price;
+
+ @Schema(description = "菜谱图片", example = "https://www.iocoder.cn")
+ private String dishUrl;
+
+ @Schema(description = "描述", example = "随便")
+ private String description;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/ActivityTableController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/ActivityTableController.java
new file mode 100644
index 00000000..509ab6f5
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/ActivityTableController.java
@@ -0,0 +1,103 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitytable;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTablePageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTableRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTableSaveReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activitytable.ActivityTableDO;
+import cn.iocoder.yudao.module.member.service.activitytable.ActivityTableService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+
+@Tag(name = "管理后台 - 活动用餐桌子")
+@RestController
+@RequestMapping("/member/activity-table")
+@Validated
+public class ActivityTableController {
+
+ @Resource
+ private ActivityTableService activityTableService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建活动用餐桌子")
+ @PreAuthorize("@ss.hasPermission('member:activity-table:create')")
+ public CommonResult createActivityTable(@Valid @RequestBody ActivityTableSaveReqVO createReqVO) {
+ return success(activityTableService.createActivityTable(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新活动用餐桌子")
+ @PreAuthorize("@ss.hasPermission('member:activity-table:update')")
+ public CommonResult updateActivityTable(@Valid @RequestBody ActivityTableSaveReqVO updateReqVO) {
+ activityTableService.updateActivityTable(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除活动用餐桌子")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('member:activity-table:delete')")
+ public CommonResult deleteActivityTable(@RequestParam("id") Long id) {
+ activityTableService.deleteActivityTable(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得活动用餐桌子")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('member:activity-table:query')")
+ public CommonResult getActivityTable(@RequestParam("id") Long id) {
+ ActivityTableDO activityTable = activityTableService.getActivityTable(id);
+ return success(BeanUtils.toBean(activityTable, ActivityTableRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得活动用餐桌子分页")
+ @PreAuthorize("@ss.hasPermission('member:activity-table:query')")
+ public CommonResult> getActivityTablePage(@Valid ActivityTablePageReqVO pageReqVO) {
+ PageResult pageResult = activityTableService.getActivityTablePage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ActivityTableRespVO.class));
+ }
+
+ @GetMapping("/list")
+ @Operation(summary = "获得所有活动用餐桌子")
+ @PreAuthorize("@ss.hasPermission('member:activity-table:query')")
+ public CommonResult> getActivityTableList(@Valid ActivityTablePageReqVO pageReqVO) {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityTableService.getActivityTablePage(pageReqVO).getList();
+ return success(BeanUtils.toBean(list, ActivityTableRespVO.class));
+ }
+
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出活动用餐桌子 Excel")
+ @PreAuthorize("@ss.hasPermission('member:activity-table:export')")
+ @OperateLog(type = EXPORT)
+ public void exportActivityTableExcel(@Valid ActivityTablePageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityTableService.getActivityTablePage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "活动用餐桌子.xls", "数据", ActivityTableRespVO.class,
+ BeanUtils.toBean(list, ActivityTableRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTableCountVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTableCountVO.java
new file mode 100644
index 00000000..a0c9db25
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTableCountVO.java
@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitytable.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 活动用餐桌子 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityTableCountVO {
+
+
+ @Schema(description = "活动id")
+ private Long activityId;
+
+ @Schema(description = "预定人数")
+ private Integer reserveNum= 0;
+
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTablePageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTablePageReqVO.java
new file mode 100644
index 00000000..1153877e
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTablePageReqVO.java
@@ -0,0 +1,43 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitytable.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 活动用餐桌子分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ActivityTablePageReqVO extends PageParam {
+
+ @Schema(description = "活动id", example = "8513")
+ private Long activityId;
+
+ @Schema(description = "序号")
+ private Integer serialNumber;
+
+ @Schema(description = "价格", example = "515")
+ private BigDecimal price;
+
+ @Schema(description = "用户id", example = "13832")
+ private Long userId;
+
+ @Schema(description = "电话")
+ private String mobile;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "是否只查预定的")
+ private Boolean isReserve;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTableRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTableRespVO.java
new file mode 100644
index 00000000..9ae04dbf
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTableRespVO.java
@@ -0,0 +1,49 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitytable.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 活动用餐桌子 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityTableRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5590")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "8513")
+ @ExcelProperty("活动id")
+ private Long activityId;
+
+ @Schema(description = "序号")
+ @ExcelProperty("序号")
+ private Integer serialNumber;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "515")
+ @ExcelProperty("价格")
+ private BigDecimal price;
+
+ @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13832")
+ @ExcelProperty("用户id")
+ private Long userId;
+
+ @Schema(description = "电话")
+ @ExcelProperty("电话")
+ private String mobile;
+
+
+ private String nickName;
+
+ private String avatar;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTableSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTableSaveReqVO.java
new file mode 100644
index 00000000..8e932973
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTableSaveReqVO.java
@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitytable.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 活动用餐桌子新增/修改 Request VO")
+@Data
+public class ActivityTableSaveReqVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5590")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "8513")
+ @NotNull(message = "活动id不能为空")
+ private Long activityId;
+
+ @Schema(description = "序号")
+ private Integer serialNumber;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "515")
+ @NotNull(message = "价格不能为空")
+ private BigDecimal price;
+
+ @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13832")
+ private Long userId;
+
+ @Schema(description = "电话")
+ private String mobile;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTableVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTableVO.java
new file mode 100644
index 00000000..0960591c
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytable/vo/ActivityTableVO.java
@@ -0,0 +1,8 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitytable.vo;
+
+
+import lombok.Data;
+
+@Data
+public class ActivityTableVO {
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/ActivityTableDishController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/ActivityTableDishController.java
new file mode 100644
index 00000000..dccc8db9
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/ActivityTableDishController.java
@@ -0,0 +1,108 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitytabledish;
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import cn.iocoder.yudao.module.member.controller.admin.activitytabledish.vo.ActivityTableDishPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitytabledish.vo.ActivityTableDishRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitytabledish.vo.ActivityTableDishSaveReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitytabledish.vo.ActivityUpdateDishVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activitytabledish.ActivityTableDishDO;
+import cn.iocoder.yudao.module.member.service.activitytabledish.ActivityTableDishService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
+
+@Tag(name = "管理后台 - 活动用餐桌子配置")
+@RestController
+@RequestMapping("/member/activity-table-dish")
+@Validated
+public class ActivityTableDishController {
+
+ @Resource
+ private ActivityTableDishService activityTableDishService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建活动用餐桌子配置")
+ @PreAuthorize("@ss.hasPermission('member:activity-table-dish:create')")
+ public CommonResult createActivityTableDish(@Valid @RequestBody ActivityTableDishSaveReqVO createReqVO) {
+ return success(activityTableDishService.createActivityTableDish(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新活动用餐桌子配置")
+ @PreAuthorize("@ss.hasPermission('member:activity-table-dish:update')")
+ public CommonResult updateActivityTableDish(@Valid @RequestBody ActivityTableDishSaveReqVO updateReqVO) {
+ activityTableDishService.updateActivityTableDish(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除活动用餐桌子配置")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('member:activity-table-dish:delete')")
+ public CommonResult deleteActivityTableDish(@RequestParam("id") Long id) {
+ activityTableDishService.deleteActivityTableDish(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得活动用餐桌子配置")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('member:activity-table-dish:query')")
+ public CommonResult getActivityTableDish(@RequestParam("id") Long id) {
+ ActivityTableDishDO activityTableDish = activityTableDishService.getActivityTableDish(id);
+ return success(BeanUtils.toBean(activityTableDish, ActivityTableDishRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得活动用餐桌子配置分页")
+ @PreAuthorize("@ss.hasPermission('member:activity-table-dish:query')")
+ public CommonResult> getActivityTableDishPage(@Valid ActivityTableDishPageReqVO pageReqVO) {
+ PageResult pageResult = activityTableDishService.getActivityTableDishPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ActivityTableDishRespVO.class));
+ }
+
+ @GetMapping("/list")
+ @Operation(summary = "获得所有活动用餐桌子")
+ @PreAuthorize("@ss.hasPermission('member:activity-table-dish:query')")
+ public CommonResult> getActivityTableDishList(@Valid ActivityTableDishPageReqVO pageReqVO) {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityTableDishService.getActivityTableDishPage(pageReqVO).getList();
+ return success(BeanUtils.toBean(list, ActivityTableDishRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出活动用餐桌子配置 Excel")
+ @PreAuthorize("@ss.hasPermission('member:activity-table-dish:export')")
+ @OperateLog(type = EXPORT)
+ public void exportActivityTableDishExcel(@Valid ActivityTableDishPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityTableDishService.getActivityTableDishPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "活动用餐桌子配置.xls", "数据", ActivityTableDishRespVO.class,
+ BeanUtils.toBean(list, ActivityTableDishRespVO.class));
+ }
+
+ @PutMapping("/updateDish")
+ @Operation(summary = "批量更新活动用餐桌子套餐菜品")
+ public CommonResult updateDish(@Valid @RequestBody ActivityUpdateDishVO updateReqVO) {
+ return success(activityTableDishService.updateDish(updateReqVO));
+ }
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/vo/ActivityTableDishPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/vo/ActivityTableDishPageReqVO.java
new file mode 100644
index 00000000..33fb33b7
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/vo/ActivityTableDishPageReqVO.java
@@ -0,0 +1,40 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitytabledish.vo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 活动用餐桌子配置分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ActivityTableDishPageReqVO extends PageParam {
+
+ @Schema(description = "活动id", example = "16826")
+ private Long activityId;
+
+ @Schema(description = "序号")
+ private Integer serialNumber;
+
+ @Schema(description = "价格", example = "9524")
+ private BigDecimal price;
+
+ @Schema(description = "套餐菜品")
+ private String dish;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+ @Schema(description = "ID", example = "1")
+ private List ids;
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/vo/ActivityTableDishRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/vo/ActivityTableDishRespVO.java
new file mode 100644
index 00000000..8ba65d48
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/vo/ActivityTableDishRespVO.java
@@ -0,0 +1,40 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitytabledish.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 活动用餐桌子配置 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityTableDishRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21273")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "16826")
+ @ExcelProperty("活动id")
+ private Long activityId;
+
+ @Schema(description = "序号")
+ @ExcelProperty("序号")
+ private Integer serialNumber;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "9524")
+ @ExcelProperty("价格")
+ private BigDecimal price;
+
+ @Schema(description = "套餐菜品")
+ @ExcelProperty("套餐菜品")
+ private String dish;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/vo/ActivityTableDishSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/vo/ActivityTableDishSaveReqVO.java
new file mode 100644
index 00000000..ee3f41fd
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/vo/ActivityTableDishSaveReqVO.java
@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitytabledish.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 活动用餐桌子配置新增/修改 Request VO")
+@Data
+public class ActivityTableDishSaveReqVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21273")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "16826")
+ @NotNull(message = "活动id不能为空")
+ private Long activityId;
+
+ @Schema(description = "序号")
+ private Integer serialNumber;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "9524")
+ @NotNull(message = "价格不能为空")
+ private BigDecimal price;
+
+ @Schema(description = "套餐菜品")
+ private String dish;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/vo/ActivityUpdateDishVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/vo/ActivityUpdateDishVO.java
new file mode 100644
index 00000000..4c93efcb
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activitytabledish/vo/ActivityUpdateDishVO.java
@@ -0,0 +1,18 @@
+package cn.iocoder.yudao.module.member.controller.admin.activitytabledish.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.List;
+
+@Schema(description = "管理后台 - 活动用餐桌子配置新增/修改 Request VO")
+@Data
+public class ActivityUpdateDishVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21273")
+ private List ids;
+
+ @Schema(description = "套餐菜品")
+ private String dish;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/ActivityUserController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/ActivityUserController.java
new file mode 100644
index 00000000..072eb2e4
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/ActivityUserController.java
@@ -0,0 +1,95 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityuser;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
+import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*;
+
+import cn.iocoder.yudao.module.member.controller.admin.activityuser.vo.*;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityuser.ActivityUserDO;
+import cn.iocoder.yudao.module.member.service.activityuser.ActivityUserService;
+
+@Tag(name = "管理后台 - 活动参加人员")
+@RestController
+@RequestMapping("/member/activity-user")
+@Validated
+public class ActivityUserController {
+
+ @Resource
+ private ActivityUserService activityUserService;
+
+ @PostMapping("/create")
+ @Operation(summary = "创建活动参加人员")
+ @PreAuthorize("@ss.hasPermission('member:activity-user:create')")
+ public CommonResult createActivityUser(@Valid @RequestBody ActivityUserSaveReqVO createReqVO) {
+ return success(activityUserService.createActivityUser(createReqVO));
+ }
+
+ @PutMapping("/update")
+ @Operation(summary = "更新活动参加人员")
+ @PreAuthorize("@ss.hasPermission('member:activity-user:update')")
+ public CommonResult updateActivityUser(@Valid @RequestBody ActivityUserSaveReqVO updateReqVO) {
+ activityUserService.updateActivityUser(updateReqVO);
+ return success(true);
+ }
+
+ @DeleteMapping("/delete")
+ @Operation(summary = "删除活动参加人员")
+ @Parameter(name = "id", description = "编号", required = true)
+ @PreAuthorize("@ss.hasPermission('member:activity-user:delete')")
+ public CommonResult deleteActivityUser(@RequestParam("id") Long id) {
+ activityUserService.deleteActivityUser(id);
+ return success(true);
+ }
+
+ @GetMapping("/get")
+ @Operation(summary = "获得活动参加人员")
+ @Parameter(name = "id", description = "编号", required = true, example = "1024")
+ @PreAuthorize("@ss.hasPermission('member:activity-user:query')")
+ public CommonResult getActivityUser(@RequestParam("id") Long id) {
+ ActivityUserDO activityUser = activityUserService.getActivityUser(id);
+ return success(BeanUtils.toBean(activityUser, ActivityUserRespVO.class));
+ }
+
+ @GetMapping("/page")
+ @Operation(summary = "获得活动参加人员分页")
+ @PreAuthorize("@ss.hasPermission('member:activity-user:query')")
+ public CommonResult> getActivityUserPage(@Valid ActivityUserPageReqVO pageReqVO) {
+ PageResult pageResult = activityUserService.getActivityUserPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ActivityUserRespVO.class));
+ }
+
+ @GetMapping("/export-excel")
+ @Operation(summary = "导出活动参加人员 Excel")
+ @PreAuthorize("@ss.hasPermission('member:activity-user:export')")
+ @OperateLog(type = EXPORT)
+ public void exportActivityUserExcel(@Valid ActivityUserPageReqVO pageReqVO,
+ HttpServletResponse response) throws IOException {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityUserService.getActivityUserPage(pageReqVO).getList();
+ // 导出 Excel
+ ExcelUtils.write(response, "活动参加人员.xls", "数据", ActivityUserRespVO.class,
+ BeanUtils.toBean(list, ActivityUserRespVO.class));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/vo/ActivityUserCountVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/vo/ActivityUserCountVO.java
new file mode 100644
index 00000000..c7a704ce
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/vo/ActivityUserCountVO.java
@@ -0,0 +1,19 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityuser.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "管理后台 - 活动参加人员 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityUserCountVO {
+
+
+ @Schema(description = "活动id")
+ private Long activityId;
+
+ @Schema(description = "参加人数")
+ private Integer applyNum = 0;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/vo/ActivityUserPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/vo/ActivityUserPageReqVO.java
new file mode 100644
index 00000000..a78ce90a
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/vo/ActivityUserPageReqVO.java
@@ -0,0 +1,31 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityuser.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 活动参加人员分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ActivityUserPageReqVO extends PageParam {
+
+ @Schema(description = "活动id", example = "12749")
+ private Long activityId;
+
+ @Schema(description = "用户id", example = "6186")
+ private Long userId;
+
+ @Schema(description = "电话")
+ private String mobile;
+
+ @Schema(description = "创建时间")
+ @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+ private LocalDateTime[] createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/vo/ActivityUserRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/vo/ActivityUserRespVO.java
new file mode 100644
index 00000000..29911e75
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/vo/ActivityUserRespVO.java
@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityuser.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 活动参加人员 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ActivityUserRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "17804")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12749")
+ @ExcelProperty("活动id")
+ private Long activityId;
+
+ @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6186")
+ @ExcelProperty("用户id")
+ private Long userId;
+
+ @Schema(description = "电话")
+ @ExcelProperty("电话")
+ private String mobile;
+
+ private String nickName;
+
+ private String avatar;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/vo/ActivityUserSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/vo/ActivityUserSaveReqVO.java
new file mode 100644
index 00000000..4befc252
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/activityuser/vo/ActivityUserSaveReqVO.java
@@ -0,0 +1,26 @@
+package cn.iocoder.yudao.module.member.controller.admin.activityuser.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 活动参加人员新增/修改 Request VO")
+@Data
+public class ActivityUserSaveReqVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "17804")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12749")
+ @NotNull(message = "活动id不能为空")
+ private Long activityId;
+
+ @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6186")
+ @NotNull(message = "用户id不能为空")
+ private Long userId;
+
+ @Schema(description = "电话")
+ private String mobile;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/AppActivityDrawController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/AppActivityDrawController.java
new file mode 100644
index 00000000..101a47db
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/AppActivityDrawController.java
@@ -0,0 +1,301 @@
+package cn.iocoder.yudao.module.member.controller.app.activity;
+
+import cn.hutool.json.JSONUtil;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.idempotent.core.annotation.Idempotent;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.member.controller.admin.activity.vo.ActivityPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activity.vo.ActivityRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo.ActivityAddDishPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo.ActivityAddDishRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawards.vo.ActivityAwardsRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPayPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo.ActivityRestaurantRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitytabledish.vo.ActivityTableDishPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitytabledish.vo.ActivityTableDishRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityuser.vo.ActivityUserPageReqVO;
+import cn.iocoder.yudao.module.member.controller.app.activity.vo.*;
+import cn.iocoder.yudao.module.member.dal.dataobject.activity.ActivityDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityadddish.ActivityAddDishDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawards.ActivityAwardsDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawardsuser.ActivityAwardsUserDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activitypay.ActivityPayDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityrestaurant.ActivityRestaurantDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activitytabledish.ActivityTableDishDO;
+import cn.iocoder.yudao.module.member.service.activity.ActivityService;
+import cn.iocoder.yudao.module.member.service.activityadddish.ActivityAddDishService;
+import cn.iocoder.yudao.module.member.service.activityawards.ActivityAwardsService;
+import cn.iocoder.yudao.module.member.service.activityawardsuser.ActivityAwardsUserService;
+import cn.iocoder.yudao.module.member.service.activitypay.ActivityPayService;
+import cn.iocoder.yudao.module.member.service.activityrestaurant.ActivityRestaurantService;
+import cn.iocoder.yudao.module.member.service.activitytable.ActivityTableService;
+import cn.iocoder.yudao.module.member.service.activitytabledish.ActivityTableDishService;
+import cn.iocoder.yudao.module.member.service.activityuser.ActivityUserService;
+import cn.iocoder.yudao.module.member.util.QRCodeWithJWTUtil;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.time.LocalDate;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
+
+
+@Tag(name = "用户 APP - 活动")
+@RestController
+@RequestMapping("/member/activity")
+@Validated
+public class AppActivityDrawController {
+
+ @Resource
+ private ActivityService activityService;
+
+ @Resource
+ private ActivityAwardsService activityAwardsService;
+
+ @Resource
+ private ActivityAwardsUserService activityAwardsUserService;
+
+ @Resource
+ private ActivityUserService activityUserService;
+
+ @Resource
+ private ActivityTableService activityTableService;
+
+ @Resource
+ private ActivityPayService activityPayService;
+
+ @Resource
+ private ActivityRestaurantService activityRestaurantService;
+
+ @Resource
+ private ActivityTableDishService activityTableDishService;
+
+ @Resource
+ private ActivityAddDishService activityAddDishService;
+
+ @GetMapping("/manage/page")
+ @Operation(summary = "管理员获取当天活动")
+ public CommonResult> getTodayActivityPage(@Valid ActivityPageReqVO pageReqVO) {
+ PageResult pageResult = activityService.getActivityPage(pageReqVO);
+ return success(pageResult);
+ }
+
+ @GetMapping("/user/page")
+ @Operation(summary = "用户获取所有活动")
+ public CommonResult> getAllActivityPage(@Valid ActivityPageReqVO pageReqVO) {
+ PageResult pageResult = activityService.getUserActivityPage(pageReqVO);
+ return success(pageResult);
+ }
+
+ @GetMapping("/userRecord/page")
+ @Operation(summary = "用户获取自己的活动记录")
+ public CommonResult> getUserRecordActivityPage(@Valid ActivityUserPageReqVO pageReqVO) {
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+ pageReqVO.setUserId(loginUserId);
+ return success(activityUserService.getUserRecordPage(pageReqVO));
+ }
+
+ @GetMapping("/prizeDraw")
+ @Operation(summary = "抽奖")
+ @Idempotent(timeout = 10)
+ public CommonResult> prizeDraw(@Valid AppActivityPrizeDrawVO drawVO) {
+ return success( activityService.prizeDraw(drawVO));
+ }
+
+ @GetMapping("/awardsUser/page")
+ @Operation(summary = "中奖人员分页")
+ public CommonResult> getActivityAwardsUserPage(@Valid ActivityAwardsUserPageReqVO pageReqVO) {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ PageResult pageResult = activityAwardsUserService.getActivityAwardsUserPage(pageReqVO);
+ return success(BeanUtils.toBean(pageResult, ActivityAwardsUserRespVO.class));
+ }
+
+ @PostMapping("/user/apply")
+ @Operation(summary = "用户报名")
+ @Idempotent(timeout = 10)
+ public CommonResult userApply(@Valid @RequestBody AppUserApplyVO appUserApplyVO) {
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+ appUserApplyVO.setUserId(loginUserId);
+ return success( activityUserService.userApply(appUserApplyVO));
+ }
+
+
+ @GetMapping("/manage/get")
+ @Operation(summary = "管理员获得活动详情")
+ public CommonResult getActivity(@RequestParam("id") Long id) {
+ ActivityDO activity = activityService.getActivity(id);
+ ActivityRespVO bean = BeanUtils.toBean(activity, ActivityRespVO.class);
+ return success(bean);
+ }
+
+ @GetMapping("/user/activity")
+ @Operation(summary = "用户获得活动详情(记录)")
+ public CommonResult getUserActivity(@RequestParam("id") Long id) {
+ AppActivityRespVO activity = activityService.getUserActivity(id,SecurityFrameworkUtils.getLoginUserId());
+ return success(activity);
+ }
+
+ @GetMapping("/user/activity/applyInfo")
+ @Operation(summary = "用户获得活动详情(报名)")
+ public CommonResult getUserActivityApplyInfo(@RequestParam("id") Long id) {
+ AppActivityRespVO activity = activityService.getUserActivityApplyInfo(id,SecurityFrameworkUtils.getLoginUserId());
+ return success(activity);
+ }
+
+
+ @GetMapping("/user/activityList")
+ @Operation(summary = "用户获得可订餐的活动")
+ public CommonResult> getUserActivityList() {
+ return success(activityService.getReservatList());
+ }
+
+ @GetMapping("/user/activityList/page")
+ @Operation(summary = "用户获得可订餐的活动分页")
+ public CommonResult> getActivityReservePage(@Valid ActivityPageReqVO pageReqVO) {
+ PageResult pageResult = activityService.getActivityReservePage(pageReqVO);
+ return success(pageResult);
+ }
+
+ @GetMapping("/user/table")
+ @Operation(summary = "用户获取已订餐桌号")
+ public CommonResult> getUserTableList(@RequestParam("activityId") Long activityId,@RequestParam("time") String time) {
+ return success(BeanUtils.toBean(activityTableService.getListByActivityIdAndTime(activityId,time), AppActivityTableRespVO.class));
+ }
+
+
+ @PostMapping("/user/check")
+ @Operation(summary = "用户订餐桌号检测")
+ public CommonResult userTableCheck(@RequestBody AppCheckVO vo) {
+ return success(activityTableService.userTableCheck(vo));
+ }
+
+ @PutMapping("/user/unbind")
+ @Operation(summary = "支付失败取消用户餐桌绑定")
+ public CommonResult userTableUnbind(@RequestBody AppUnbindVO vo) {
+ return success(activityTableService.userTableUnbind(vo));
+ }
+
+ @GetMapping("/qrCode")
+ @Operation(summary = "获取核销二维码(抽奖)")
+ public CommonResult getQrCode(@RequestParam("activityAwardsUserId") Long activityAwardsUserId) {
+
+ ActivityAwardsUserDO activityAwardsUserDO = activityAwardsUserService.getActivityAwardsUser(activityAwardsUserId);
+ if(!"0".equals(activityAwardsUserDO.getAwardsStatus())){
+ throw exception(ACTIVITY_AWARDS_USER_NOT_EFFECTIVE);
+ }
+ ActivityDO activity = activityService.getActivity(activityAwardsUserDO.getActivityId());
+ ActivityAwardsDO activityAwards = activityAwardsService.getActivityAwards(activityAwardsUserDO.getAwardsId());
+
+
+ AppQrCodeVO appQrCodeVO = new AppQrCodeVO();
+ appQrCodeVO.setActivityAwardsUserId(activityAwardsUserId);
+ appQrCodeVO.setNickName(activityAwardsUserDO.getNickName());
+ appQrCodeVO.setMobile(activityAwardsUserDO.getMobile());
+ appQrCodeVO.setPrize(activityAwards.getPrize());
+ appQrCodeVO.setActivityName(activity.getActivityName());
+ appQrCodeVO.setType("1");
+
+ String qrCode = QRCodeWithJWTUtil.generateQRCode(JSONUtil.toJsonStr(appQrCodeVO), 350, 350, null);// 生
+ return success(qrCode);
+ }
+
+ @PutMapping("/cancel")
+ @Operation(summary = "核销(抽奖)")
+ public CommonResult cancel(@RequestBody AppCancelVO vo) {
+ return success(activityAwardsUserService.cancel(vo));
+ }
+
+ @GetMapping("/manage/applyUserList")
+ @Operation(summary = "报名人员列表")
+ public CommonResult> applyUserList(@RequestParam("activityId") Long activityId) {
+ return success(activityUserService.applyUserList(activityId));
+ }
+
+ @GetMapping("/awardsList")
+ @Operation(summary = "获得活动奖项列表")
+ public CommonResult> getActivityAwardsList(@RequestParam("activityId") Long activityId) {
+ List list = activityAwardsService.getListByActivity(activityId);
+ return success(BeanUtils.toBean(list, ActivityAwardsRespVO.class));
+ }
+
+ @GetMapping("/user/pay/page")
+ @Operation(summary = "用户付款记录分页")
+ public CommonResult> getUserActivityPayPage(@Valid ActivityPayPageReqVO pageReqVO) {
+ Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
+ pageReqVO.setUserId(loginUserId);
+ PageResult pageResult = activityPayService.getUserActivityPayPage(pageReqVO);
+ return success(pageResult);
+ }
+
+ @GetMapping("/user/activity/reserveInfo")
+ @Operation(summary = "用户获得订餐活动详情")
+ public CommonResult getUserActivityReserveInfo(@RequestParam("id") Long id) {
+ ActivityDO activity = activityService.getActivity(id);
+ AppActivityRespVO bean = BeanUtils.toBean(activity, AppActivityRespVO.class);
+ ActivityRestaurantDO activityRestaurantDO = activityRestaurantService.getByActivityId(id);
+ bean.setActivityRestaurantSaveDto(BeanUtils.toBean(activityRestaurantDO, ActivityRestaurantRespVO.class));
+ return success(bean);
+ }
+
+ @GetMapping("/reserveQrCode")
+ @Operation(summary = "获取核销二维码(订餐)")
+ public CommonResult getReserveQrCode(@RequestParam("activityPayId") Long activityPayId) {
+ ActivityPayDO activityPay = activityPayService.getActivityPay(activityPayId);
+ if(!"0".equals(activityPay.getStatus())){
+ throw exception(ACTIVITY_PAY_USE);
+ }
+ //获取当天日期
+ LocalDate now = LocalDate.now();
+ //比较日期是否相等
+ if(! now.isEqual(activityPay.getReserveTime())){
+ throw exception(ACTIVITY_PAY_EXPIRE);
+ }
+
+ ActivityDO activity = activityService.getActivity(activityPay.getActivityId());
+
+ AppReserveQrCodeVO appReserveQrCodeVO = new AppReserveQrCodeVO();
+ appReserveQrCodeVO.setActivityPayId(activityPayId);
+ appReserveQrCodeVO.setNickName(activityPay.getNickName());
+ appReserveQrCodeVO.setMobile(activityPay.getMobile());
+ appReserveQrCodeVO.setActivityName(activity.getActivityName());
+ appReserveQrCodeVO.setSerialNumbers(activityPay.getSerialNumbers());
+ appReserveQrCodeVO.setType("2");
+ String qrCode = QRCodeWithJWTUtil.generateQRCode(JSONUtil.toJsonStr(appReserveQrCodeVO), 350, 350, null);// 生
+ return success(qrCode);
+
+ }
+
+ @PutMapping("/reserveCancel")
+ @Operation(summary = "核销(订餐)")
+ public CommonResult reserveCancel(@RequestBody AppCancelVO vo) {
+ return success(activityPayService.reserveCancel(vo));
+ }
+
+ @GetMapping("/tableList")
+ @Operation(summary = "获得所有活动用餐桌子")
+ public CommonResult> getActivityTableDishList(@Valid ActivityTableDishPageReqVO pageReqVO) {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityTableDishService.getActivityTableDishPage(pageReqVO).getList();
+ return success(BeanUtils.toBean(list, ActivityTableDishRespVO.class));
+ }
+
+ @GetMapping("/addDishList")
+ @Operation(summary = "获得活动用餐桌子加菜列表")
+ public CommonResult> getActivityAddDishPage(@Valid ActivityAddDishPageReqVO pageReqVO) {
+ pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+ List list = activityAddDishService.getActivityAddDishPage(pageReqVO).getList();
+ return success(BeanUtils.toBean(list, ActivityAddDishRespVO.class));
+ }
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityPayRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityPayRespVO.java
new file mode 100644
index 00000000..3f361b9b
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityPayRespVO.java
@@ -0,0 +1,50 @@
+package cn.iocoder.yudao.module.member.controller.app.activity.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 活动付款 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AppActivityPayRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "24970")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "27391")
+ @ExcelProperty("活动id")
+ private Long activityId;
+
+ private String activityName;
+
+ @Schema(description = "桌号")
+ @ExcelProperty("桌号")
+ private String serialNumbers;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "7717")
+ @ExcelProperty("价格")
+ private BigDecimal price;
+
+ @Schema(description = "用户id", example = "5313")
+ @ExcelProperty("用户id")
+ private Long userId;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ private String status;
+
+ private LocalDate reserveTime;
+
+ private String dish;
+
+ private String diningPeriod;
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityPrizeDrawVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityPrizeDrawVO.java
new file mode 100644
index 00000000..122b5a5c
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityPrizeDrawVO.java
@@ -0,0 +1,20 @@
+package cn.iocoder.yudao.module.member.controller.app.activity.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class AppActivityPrizeDrawVO {
+
+
+ @Schema(description = "奖项Id")
+ @NotNull(message = "奖项不能为空")
+ private Long awardsId;
+
+ @Schema(description = "抽奖人数")
+ @Min(value = 1, message = "数值不能小于 1")
+ private Integer num;
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityRespVO.java
new file mode 100644
index 00000000..6fa367df
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityRespVO.java
@@ -0,0 +1,83 @@
+package cn.iocoder.yudao.module.member.controller.app.activity.vo;
+
+import cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo.ActivityRestaurantRespVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawards.ActivityAwardsDO;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Schema(description = "管理后台 - 活动 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AppActivityRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "29158")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "活动名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+ @ExcelProperty("活动名称")
+ private String activityName;
+
+ @Schema(description = "活动开始时间")
+ @ExcelProperty("活动开始时间")
+ private LocalDateTime startTime;
+
+ @Schema(description = "活动结束时间")
+ @ExcelProperty("活动结束时间")
+ private LocalDateTime endTime;
+
+ @Schema(description = "描述", example = "你猜")
+ @ExcelProperty("描述")
+ private String description;
+
+ @Schema(description = "封面图")
+ @ExcelProperty("封面图")
+ private String img;
+
+ @Schema(description = "地点")
+ @ExcelProperty("地点")
+ private String location;
+
+ @Schema(description = "主办方")
+ @ExcelProperty("主办方")
+ private String sponsor;
+
+ @Schema(description = "可抽奖次数")
+ @ExcelProperty("可抽奖次数")
+ private Integer lotteryNum;
+
+ @Schema(description = "用餐状态,0-禁用,1-启用 ", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @ExcelProperty("用餐状态,0-禁用,1-启用 ")
+ private String reservationStatus;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ @Schema(description = "报名人数")
+ private Integer applyNum;
+
+ @Schema(description = "中奖人数")
+ private Integer awardsNum;
+
+ @Schema(description = "预定人数")
+ private Integer reserveNum;
+
+ @Schema(description = "收入")
+ private BigDecimal income;
+
+ @Schema(description = "是否报名")
+ private Boolean isApply;
+
+ private ActivityRestaurantRespVO activityRestaurantSaveDto;
+
+ private List awards;
+
+ private List awardList;
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityTableRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityTableRespVO.java
new file mode 100644
index 00000000..b3a5df5f
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityTableRespVO.java
@@ -0,0 +1,51 @@
+package cn.iocoder.yudao.module.member.controller.app.activity.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 活动用餐桌子 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AppActivityTableRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "5590")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "8513")
+ @ExcelProperty("活动id")
+ private Long activityId;
+
+ @Schema(description = "序号")
+ @ExcelProperty("序号")
+ private Integer serialNumber;
+
+ @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "515")
+ @ExcelProperty("价格")
+ private BigDecimal price;
+
+ @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "13832")
+ @ExcelProperty("用户id")
+ private Long userId;
+
+ @Schema(description = "电话")
+ @ExcelProperty("电话")
+ private String mobile;
+
+
+ private String nickName;
+
+ private String avatar;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+ private LocalDate reserveTime;
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityUserRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityUserRespVO.java
new file mode 100644
index 00000000..56ea3eb0
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppActivityUserRespVO.java
@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.module.member.controller.app.activity.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Schema(description = "管理后台 - 活动参加人员 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class AppActivityUserRespVO {
+
+ @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "17804")
+ @ExcelProperty("编号")
+ private Long id;
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12749")
+ @ExcelProperty("活动id")
+ private Long activityId;
+
+ @Schema(description = "用户id", requiredMode = Schema.RequiredMode.REQUIRED, example = "6186")
+ @ExcelProperty("用户id")
+ private Long userId;
+
+ @Schema(description = "电话")
+ @ExcelProperty("电话")
+ private String mobile;
+
+ private String nickName;
+
+ private String avatar;
+
+ @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+ @ExcelProperty("创建时间")
+ private LocalDateTime createTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppCancelVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppCancelVO.java
new file mode 100644
index 00000000..a7947d1b
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppCancelVO.java
@@ -0,0 +1,11 @@
+package cn.iocoder.yudao.module.member.controller.app.activity.vo;
+
+import lombok.Data;
+
+@Data
+public class AppCancelVO {
+
+ private Long activityAwardsUserId;
+
+ private Long activityPayId;
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppCheckVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppCheckVO.java
new file mode 100644
index 00000000..8a72e90a
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppCheckVO.java
@@ -0,0 +1,21 @@
+package cn.iocoder.yudao.module.member.controller.app.activity.vo;
+
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class AppCheckVO {
+
+
+ private List serialNumbers;
+
+ private String time;
+
+ private Long activityId;
+
+ private BigDecimal price;
+
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppQrCodeVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppQrCodeVO.java
new file mode 100644
index 00000000..25b31a0c
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppQrCodeVO.java
@@ -0,0 +1,19 @@
+package cn.iocoder.yudao.module.member.controller.app.activity.vo;
+
+import lombok.Data;
+
+@Data
+public class AppQrCodeVO {
+
+ private Long activityAwardsUserId;
+
+ private String nickName;
+
+ private String mobile;
+
+ private String prize;
+
+ private String activityName;
+
+ private String type;
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppReserveQrCodeVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppReserveQrCodeVO.java
new file mode 100644
index 00000000..36e94197
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppReserveQrCodeVO.java
@@ -0,0 +1,19 @@
+package cn.iocoder.yudao.module.member.controller.app.activity.vo;
+
+import lombok.Data;
+
+@Data
+public class AppReserveQrCodeVO {
+
+ private Long activityPayId;
+
+ private String mobile;
+
+ private String serialNumbers;
+
+ private String activityName;
+
+ private String nickName;
+
+ private String type;
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppUnbindVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppUnbindVO.java
new file mode 100644
index 00000000..6f201a60
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppUnbindVO.java
@@ -0,0 +1,15 @@
+package cn.iocoder.yudao.module.member.controller.app.activity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class AppUnbindVO {
+
+ private List serialNumbers;
+
+ private String time;
+
+ private Long activityId;
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppUserApplyVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppUserApplyVO.java
new file mode 100644
index 00000000..ea9ace5d
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppUserApplyVO.java
@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.module.member.controller.app.activity.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class AppUserApplyVO {
+
+
+ @Schema(description = "活动id", requiredMode = Schema.RequiredMode.REQUIRED, example = "12749")
+ @NotNull(message = "活动id不能为空")
+ private Long activityId;
+
+ @Schema(description = "用户Id")
+ private Long userId;
+
+ @Schema(description = "电话")
+ @NotBlank(message = "用户电话不能为空")
+ private String mobile;
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppUserAwardsVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppUserAwardsVO.java
new file mode 100644
index 00000000..920bf62d
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/activity/vo/AppUserAwardsVO.java
@@ -0,0 +1,16 @@
+package cn.iocoder.yudao.module.member.controller.app.activity.vo;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class AppUserAwardsVO {
+
+ private Long id;
+ private String awardsName;
+ private String prize;
+ private String awardsStatus;
+ private LocalDateTime createTime;
+
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activity/ActivityDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activity/ActivityDO.java
new file mode 100644
index 00000000..6770788b
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activity/ActivityDO.java
@@ -0,0 +1,69 @@
+package cn.iocoder.yudao.module.member.dal.dataobject.activity;
+
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 活动 DO
+ *
+ * @author 我是秦俊旗
+ */
+@TableName("member_activity")
+@KeySequence("member_activity_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+ /**
+ * 活动名称
+ */
+ private String activityName;
+ /**
+ * 活动开始时间
+ */
+ private LocalDateTime startTime;
+ /**
+ * 活动结束时间
+ */
+ private LocalDateTime endTime;
+ /**
+ * 描述
+ */
+ private String description;
+ /**
+ * 封面图
+ */
+ private String img;
+ /**
+ * 地点
+ */
+ private String location;
+ /**
+ * 主办方
+ */
+ private String sponsor;
+ /**
+ * 可抽奖次数
+ */
+ private Integer lotteryNum;
+ /**
+ * 用餐状态,0-禁用,1-启用
+ */
+ private String reservationStatus;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityadddish/ActivityAddDishDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityadddish/ActivityAddDishDO.java
new file mode 100644
index 00000000..9e7cf1c8
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityadddish/ActivityAddDishDO.java
@@ -0,0 +1,52 @@
+package cn.iocoder.yudao.module.member.dal.dataobject.activityadddish;
+
+import lombok.*;
+import java.util.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 活动用餐桌子加菜 DO
+ *
+ * @author 我是秦俊旗
+ */
+@TableName("member_activity_add_dish")
+@KeySequence("member_activity_add_dish_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityAddDishDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+ /**
+ * 桌子
+ */
+ private Long tableDishId;
+ /**
+ * 序号
+ */
+ private Integer serialNumber;
+ /**
+ * 菜名
+ */
+ private String dishName;
+ /**
+ * 菜品价格
+ */
+ private BigDecimal dishPrice;
+ /**
+ * 菜品图片
+ */
+ private String dishImg;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityawards/ActivityAwardsDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityawards/ActivityAwardsDO.java
new file mode 100644
index 00000000..4b086b76
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityawards/ActivityAwardsDO.java
@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.member.dal.dataobject.activityawards;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.*;
+
+/**
+ * 活动奖项 DO
+ *
+ * @author 我是秦俊旗
+ */
+@TableName("member_activity_awards")
+@KeySequence("member_activity_awards_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityAwardsDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+ /**
+ * 活动id
+ */
+ private Long activityId;
+ /**
+ * 奖项名称
+ */
+ private String awardsName;
+
+ /**
+ * 限制类型(1-整个活动,2-单个奖项,3-无限制)
+ */
+ private String limitType;
+ /**
+ * 奖项人数
+ */
+ @TableField(updateStrategy = FieldStrategy.ALWAYS)
+ private Integer awardsNum;
+ /**
+ * 奖品
+ */
+ private String prize;
+ /**
+ * 排序
+ */
+ private Integer sortNum;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityawardsuser/ActivityAwardsUserDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityawardsuser/ActivityAwardsUserDO.java
new file mode 100644
index 00000000..9a95ab46
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityawardsuser/ActivityAwardsUserDO.java
@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.module.member.dal.dataobject.activityawardsuser;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 活动中奖人员 DO
+ *
+ * @author 我是秦俊旗
+ */
+@TableName("member_activity_awards_user")
+@KeySequence("member_activity_awards_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityAwardsUserDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+ /**
+ * 活动id
+ */
+ private Long activityId;
+ /**
+ * 用户id
+ */
+ private Long userId;
+
+ private String nickName;
+
+ private String avatar;
+
+ /**
+ * 领奖状态(0-未领奖,1-已领奖,2-已过期)
+ */
+ private String awardsStatus;
+
+ /**
+ * 电话
+ */
+ private String mobile;
+ /**
+ * 奖品id
+ */
+ private Long awardsId;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activitypay/ActivityPayDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activitypay/ActivityPayDO.java
new file mode 100644
index 00000000..9ee9a9a9
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activitypay/ActivityPayDO.java
@@ -0,0 +1,61 @@
+package cn.iocoder.yudao.module.member.dal.dataobject.activitypay;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * 活动付款 DO
+ *
+ * @author 我是秦俊旗
+ */
+@TableName("member_activity_pay")
+@KeySequence("member_activity_pay_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityPayDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+ /**
+ * 活动id
+ */
+ private Long activityId;
+ /**
+ * 桌号
+ */
+ private String serialNumbers;
+ /**
+ * 价格
+ */
+ private BigDecimal price;
+ /**
+ * 用户id
+ */
+ private Long userId;
+
+
+ private String status;
+
+ private LocalDate reserveTime;
+
+ private String nickName;
+
+ private String mobile;
+
+ private String dish;
+
+ private String diningPeriod;
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activitypaytable/ActivityPayTableDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activitypaytable/ActivityPayTableDO.java
new file mode 100644
index 00000000..953921d5
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activitypaytable/ActivityPayTableDO.java
@@ -0,0 +1,58 @@
+package cn.iocoder.yudao.module.member.dal.dataobject.activitypaytable;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.*;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * 活动付款 DO
+ *
+ * @author 我是秦俊旗
+ */
+@TableName("member_activity_pay_table")
+@KeySequence("member_activity_pay_table_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityPayTableDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+ /**
+ * 活动id
+ */
+ private Long activityId;
+ /**
+ * 桌号
+ */
+ private String serialNumbers;
+ /**
+ * 价格
+ */
+ private BigDecimal price;
+ /**
+ * 用户id
+ */
+ private Long userId;
+
+ /**
+ * 预定时间
+ */
+ private LocalDate reserveTime;
+
+ @TableField(value = "sum(price)",insertStrategy = FieldStrategy.NEVER,updateStrategy = FieldStrategy.NEVER)
+ private BigDecimal allPrice;
+
+ private String nickName;
+
+ private String mobile;
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityrestaurant/ActivityRestaurantDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityrestaurant/ActivityRestaurantDO.java
new file mode 100644
index 00000000..543fae41
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityrestaurant/ActivityRestaurantDO.java
@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.module.member.dal.dataobject.activityrestaurant;
+
+import lombok.*;
+import java.util.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 活动用餐 DO
+ *
+ * @author 我是秦俊旗
+ */
+@TableName("member_activity_restaurant")
+@KeySequence("member_activity_restaurant_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityRestaurantDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+ /**
+ * 活动id
+ */
+ private Long activityId;
+ /**
+ * 总桌数
+ */
+ private Integer totalTable;
+ /**
+ * 每桌人数
+ */
+ private Integer tableNum;
+ /**
+ * 价格
+ */
+ private BigDecimal price;
+ /**
+ * 菜谱图片
+ */
+ private String dishUrl;
+ /**
+ * 描述
+ */
+ private String description;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activitytable/ActivityTableDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activitytable/ActivityTableDO.java
new file mode 100644
index 00000000..e6610086
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activitytable/ActivityTableDO.java
@@ -0,0 +1,59 @@
+package cn.iocoder.yudao.module.member.dal.dataobject.activitytable;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+/**
+ * 活动用餐桌子 DO
+ *
+ * @author 我是秦俊旗
+ */
+@TableName("member_activity_table")
+@KeySequence("member_activity_table_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityTableDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+ /**
+ * 活动id
+ */
+ private Long activityId;
+ /**
+ * 序号
+ */
+ private Integer serialNumber;
+ /**
+ * 价格
+ */
+ private BigDecimal price;
+ /**
+ * 用户id
+ */
+ private Long userId;
+ /**
+ * 电话
+ */
+ private String mobile;
+
+ private String nickName;
+
+ private String avatar;
+
+ private LocalDate reserveTime;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activitytabledish/ActivityTableDishDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activitytabledish/ActivityTableDishDO.java
new file mode 100644
index 00000000..a360695e
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activitytabledish/ActivityTableDishDO.java
@@ -0,0 +1,48 @@
+package cn.iocoder.yudao.module.member.dal.dataobject.activitytabledish;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+import java.math.BigDecimal;
+
+/**
+ * 活动用餐桌子配置 DO
+ *
+ * @author 我是秦俊旗
+ */
+@TableName("member_activity_table_dish")
+@KeySequence("member_activity_table_dish_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityTableDishDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+ /**
+ * 活动id
+ */
+ private Long activityId;
+ /**
+ * 序号
+ */
+ private Integer serialNumber;
+ /**
+ * 价格
+ */
+ private BigDecimal price;
+ /**
+ * 套餐菜品
+ */
+ private String dish;
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityuser/ActivityUserDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityuser/ActivityUserDO.java
new file mode 100644
index 00000000..644fea7b
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/activityuser/ActivityUserDO.java
@@ -0,0 +1,45 @@
+package cn.iocoder.yudao.module.member.dal.dataobject.activityuser;
+
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.*;
+
+/**
+ * 活动参加人员 DO
+ *
+ * @author 我是秦俊旗
+ */
+@TableName("member_activity_user")
+@KeySequence("member_activity_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ActivityUserDO extends BaseDO {
+
+ /**
+ * 编号
+ */
+ @TableId
+ private Long id;
+ /**
+ * 活动id
+ */
+ private Long activityId;
+ /**
+ * 用户id
+ */
+ private Long userId;
+ /**
+ * 电话
+ */
+ private String mobile;
+
+ private String nickName;
+
+ private String avatar;
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activity/ActivityMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activity/ActivityMapper.java
new file mode 100644
index 00000000..7c229a87
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activity/ActivityMapper.java
@@ -0,0 +1,52 @@
+package cn.iocoder.yudao.module.member.dal.mysql.activity;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.member.controller.admin.activity.vo.ActivityPageReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activity.ActivityDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 活动 Mapper
+ *
+ * @author 我是秦俊旗
+ */
+@Mapper
+public interface ActivityMapper extends BaseMapperX {
+
+ default PageResult selectPage(ActivityPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .likeIfPresent(ActivityDO::getActivityName, reqVO.getActivityName())
+ .leIfPresent(ActivityDO::getStartTime, reqVO.getStartTime())
+ .geIfPresent(ActivityDO::getEndTime, reqVO.getStartTime())
+ .eqIfPresent(ActivityDO::getDescription, reqVO.getDescription())
+ .eqIfPresent(ActivityDO::getImg, reqVO.getImg())
+ .eqIfPresent(ActivityDO::getLocation, reqVO.getLocation())
+ .eqIfPresent(ActivityDO::getSponsor, reqVO.getSponsor())
+ .eqIfPresent(ActivityDO::getLotteryNum, reqVO.getLotteryNum())
+ .eqIfPresent(ActivityDO::getReservationStatus, reqVO.getReservationStatus())
+ .betweenIfPresent(ActivityDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(ActivityDO::getId));
+ }
+
+ default PageResult selectPageApp(ActivityPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .likeIfPresent(ActivityDO::getActivityName, reqVO.getActivityName())
+ .leIfPresent(ActivityDO::getStartTime, reqVO.getStartTime())
+ .geIfPresent(ActivityDO::getEndTime, reqVO.getStartTime())
+ .eqIfPresent(ActivityDO::getDescription, reqVO.getDescription())
+ .eqIfPresent(ActivityDO::getImg, reqVO.getImg())
+ .eqIfPresent(ActivityDO::getLocation, reqVO.getLocation())
+ .eqIfPresent(ActivityDO::getSponsor, reqVO.getSponsor())
+ .eqIfPresent(ActivityDO::getLotteryNum, reqVO.getLotteryNum())
+ .eqIfPresent(ActivityDO::getReservationStatus, reqVO.getReservationStatus())
+ .betweenIfPresent(ActivityDO::getCreateTime, reqVO.getCreateTime())
+ .last("ORDER BY " +
+ " CASE " +
+ " WHEN start_time <= NOW() AND end_time >= NOW() THEN 0 " +
+ " ELSE 1 " +
+ " END," +
+ " end_time ASC "));
+ }
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityadddish/ActivityAddDishMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityadddish/ActivityAddDishMapper.java
new file mode 100644
index 00000000..37a0036b
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityadddish/ActivityAddDishMapper.java
@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.member.dal.mysql.activityadddish;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo.ActivityAddDishPageReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityadddish.ActivityAddDishDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 活动用餐桌子加菜 Mapper
+ *
+ * @author 我是秦俊旗
+ */
+@Mapper
+public interface ActivityAddDishMapper extends BaseMapperX {
+
+ default PageResult selectPage(ActivityAddDishPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(ActivityAddDishDO::getTableDishId, reqVO.getTableDishId())
+ .eqIfPresent(ActivityAddDishDO::getSerialNumber, reqVO.getSerialNumber())
+ .likeIfPresent(ActivityAddDishDO::getDishName, reqVO.getDishName())
+ .eqIfPresent(ActivityAddDishDO::getDishPrice, reqVO.getDishPrice())
+ .eqIfPresent(ActivityAddDishDO::getDishImg, reqVO.getDishImg())
+ .betweenIfPresent(ActivityAddDishDO::getCreateTime, reqVO.getCreateTime())
+ .inIfPresent(ActivityAddDishDO::getTableDishId, reqVO.getTableDishIds())
+ .orderByDesc(ActivityAddDishDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityawards/ActivityAwardsMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityawards/ActivityAwardsMapper.java
new file mode 100644
index 00000000..1bb4aef1
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityawards/ActivityAwardsMapper.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.member.dal.mysql.activityawards;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.member.controller.admin.activityawards.vo.ActivityAwardsPageReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawards.ActivityAwardsDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 活动奖项 Mapper
+ *
+ * @author 我是秦俊旗
+ */
+@Mapper
+public interface ActivityAwardsMapper extends BaseMapperX {
+
+ default PageResult selectPage(ActivityAwardsPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(ActivityAwardsDO::getActivityId, reqVO.getActivityId())
+ .likeIfPresent(ActivityAwardsDO::getAwardsName, reqVO.getAwardsName())
+ .eqIfPresent(ActivityAwardsDO::getAwardsNum, reqVO.getAwardsNum())
+ .eqIfPresent(ActivityAwardsDO::getPrize, reqVO.getPrize())
+ .eqIfPresent(ActivityAwardsDO::getSortNum, reqVO.getSortNum())
+ .betweenIfPresent(ActivityAwardsDO::getCreateTime, reqVO.getCreateTime())
+ .orderByAsc(ActivityAwardsDO::getSortNum));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityawardsuser/ActivityAwardsUserMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityawardsuser/ActivityAwardsUserMapper.java
new file mode 100644
index 00000000..2214858e
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityawardsuser/ActivityAwardsUserMapper.java
@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.member.dal.mysql.activityawardsuser;
+
+import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserCountVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserRespVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawards.ActivityAwardsDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawardsuser.ActivityAwardsUserDO;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 活动中奖人员 Mapper
+ *
+ * @author 我是秦俊旗
+ */
+@Mapper
+public interface ActivityAwardsUserMapper extends BaseMapperX {
+
+ default PageResult selectPage(ActivityAwardsUserPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(ActivityAwardsUserDO::getActivityId, reqVO.getActivityId())
+ .eqIfPresent(ActivityAwardsUserDO::getUserId, reqVO.getUserId())
+ .eqIfPresent(ActivityAwardsUserDO::getMobile, reqVO.getMobile())
+ .eqIfPresent(ActivityAwardsUserDO::getAwardsId, reqVO.getAwardsId())
+ .betweenIfPresent(ActivityAwardsUserDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(ActivityAwardsUserDO::getId));
+ }
+
+ List countByActivityIds(@Param("activityIds") List activityIds);
+
+ default PageResult selectJoinPage(ActivityAwardsUserPageReqVO reqVO) {
+ Page activityAwardsUserRespVOPage = selectJoinPage(new Page<>(reqVO.getPageNo(), reqVO.getPageSize()), ActivityAwardsUserRespVO.class,
+ new MPJLambdaWrapper()
+ .selectAll(ActivityAwardsUserDO.class)
+ .select(ActivityAwardsDO::getAwardsName, ActivityAwardsDO::getPrize)
+ .leftJoin(ActivityAwardsDO.class, ActivityAwardsDO::getId, ActivityAwardsUserDO::getAwardsId)
+ .eq(reqVO.getActivityId() != null, ActivityAwardsUserDO::getActivityId, reqVO.getActivityId())
+ .eq(reqVO.getAwardsId() != null, ActivityAwardsUserDO::getAwardsId, reqVO.getAwardsId())
+ .eq(StrUtil.isNotBlank(reqVO.getAwardsStatus()), ActivityAwardsUserDO::getAwardsStatus,reqVO.getAwardsStatus())
+ .eq(StrUtil.isNotBlank(reqVO.getMobile()), ActivityAwardsUserDO::getMobile, reqVO.getMobile())
+ .orderByAsc(ActivityAwardsDO::getSortNum)
+ );
+ return new PageResult<>(activityAwardsUserRespVOPage.getRecords(), activityAwardsUserRespVOPage.getTotal());
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activitypay/ActivityPayMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activitypay/ActivityPayMapper.java
new file mode 100644
index 00000000..64970c45
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activitypay/ActivityPayMapper.java
@@ -0,0 +1,35 @@
+package cn.iocoder.yudao.module.member.dal.mysql.activitypay;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPayCountVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPayPageReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activitypay.ActivityPayDO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 活动付款 Mapper
+ *
+ * @author 我是秦俊旗
+ */
+@Mapper
+public interface ActivityPayMapper extends BaseMapperX {
+
+ default PageResult selectPage(ActivityPayPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(ActivityPayDO::getActivityId, reqVO.getActivityId())
+ .eqIfPresent(ActivityPayDO::getSerialNumbers, reqVO.getSerialNumbers())
+ .eqIfPresent(ActivityPayDO::getPrice, reqVO.getPrice())
+ .eqIfPresent(ActivityPayDO::getUserId, reqVO.getUserId())
+ .betweenIfPresent(ActivityPayDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(ActivityPayDO::getId));
+ }
+
+
+ List countByActivityIds(@Param("activityIds") List activityIds);
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activitypaytable/ActivityPayTableMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activitypaytable/ActivityPayTableMapper.java
new file mode 100644
index 00000000..ce59eae7
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activitypaytable/ActivityPayTableMapper.java
@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.member.dal.mysql.activitypaytable;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.member.dal.dataobject.activitypaytable.ActivityPayTableDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.member.controller.admin.activitypaytable.vo.*;
+
+/**
+ * 活动付款 Mapper
+ *
+ * @author 我是秦俊旗
+ */
+@Mapper
+public interface ActivityPayTableMapper extends BaseMapperX {
+
+ default PageResult selectPage(ActivityPayTablePageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(ActivityPayTableDO::getActivityId, reqVO.getActivityId())
+ .eqIfPresent(ActivityPayTableDO::getSerialNumbers, reqVO.getSerialNumbers())
+ .eqIfPresent(ActivityPayTableDO::getPrice, reqVO.getPrice())
+ .eqIfPresent(ActivityPayTableDO::getUserId, reqVO.getUserId())
+ .betweenIfPresent(ActivityPayTableDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(ActivityPayTableDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityrestaurant/ActivityRestaurantMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityrestaurant/ActivityRestaurantMapper.java
new file mode 100644
index 00000000..0f167186
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityrestaurant/ActivityRestaurantMapper.java
@@ -0,0 +1,32 @@
+package cn.iocoder.yudao.module.member.dal.mysql.activityrestaurant;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityrestaurant.ActivityRestaurantDO;
+import org.apache.ibatis.annotations.Mapper;
+import cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo.*;
+
+/**
+ * 活动用餐 Mapper
+ *
+ * @author 我是秦俊旗
+ */
+@Mapper
+public interface ActivityRestaurantMapper extends BaseMapperX {
+
+ default PageResult selectPage(ActivityRestaurantPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(ActivityRestaurantDO::getActivityId, reqVO.getActivityId())
+ .eqIfPresent(ActivityRestaurantDO::getTotalTable, reqVO.getTotalTable())
+ .eqIfPresent(ActivityRestaurantDO::getTableNum, reqVO.getTableNum())
+ .eqIfPresent(ActivityRestaurantDO::getPrice, reqVO.getPrice())
+ .eqIfPresent(ActivityRestaurantDO::getDishUrl, reqVO.getDishUrl())
+ .eqIfPresent(ActivityRestaurantDO::getDescription, reqVO.getDescription())
+ .betweenIfPresent(ActivityRestaurantDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(ActivityRestaurantDO::getId));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activitytable/ActivityTableMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activitytable/ActivityTableMapper.java
new file mode 100644
index 00000000..5a2f8a5b
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activitytable/ActivityTableMapper.java
@@ -0,0 +1,38 @@
+package cn.iocoder.yudao.module.member.dal.mysql.activitytable;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTableCountVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTablePageReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activitytable.ActivityTableDO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 活动用餐桌子 Mapper
+ *
+ * @author 我是秦俊旗
+ */
+@Mapper
+public interface ActivityTableMapper extends BaseMapperX {
+
+ default PageResult selectPage(ActivityTablePageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(ActivityTableDO::getActivityId, reqVO.getActivityId())
+ .eqIfPresent(ActivityTableDO::getSerialNumber, reqVO.getSerialNumber())
+ .eqIfPresent(ActivityTableDO::getPrice, reqVO.getPrice())
+ .eqIfPresent(ActivityTableDO::getUserId, reqVO.getUserId())
+ .eqIfPresent(ActivityTableDO::getMobile, reqVO.getMobile())
+ .betweenIfPresent(ActivityTableDO::getCreateTime, reqVO.getCreateTime())
+ .isNotNull(reqVO.getIsReserve(),ActivityTableDO::getUserId)
+ .orderByDesc(ActivityTableDO::getId));
+ }
+
+ List countByActivityIds(@Param("activityIds") List activityIds);
+
+
+ void deleteByActivityId(@Param("activityId")Long activityId);
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activitytabledish/ActivityTableDishMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activitytabledish/ActivityTableDishMapper.java
new file mode 100644
index 00000000..22d59ced
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activitytabledish/ActivityTableDishMapper.java
@@ -0,0 +1,29 @@
+package cn.iocoder.yudao.module.member.dal.mysql.activitytabledish;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.member.controller.admin.activitytabledish.vo.ActivityTableDishPageReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activitytabledish.ActivityTableDishDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 活动用餐桌子配置 Mapper
+ *
+ * @author 我是秦俊旗
+ */
+@Mapper
+public interface ActivityTableDishMapper extends BaseMapperX {
+
+ default PageResult selectPage(ActivityTableDishPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(ActivityTableDishDO::getActivityId, reqVO.getActivityId())
+ .eqIfPresent(ActivityTableDishDO::getSerialNumber, reqVO.getSerialNumber())
+ .eqIfPresent(ActivityTableDishDO::getPrice, reqVO.getPrice())
+ .eqIfPresent(ActivityTableDishDO::getDish, reqVO.getDish())
+ .betweenIfPresent(ActivityTableDishDO::getCreateTime, reqVO.getCreateTime())
+ .inIfPresent(ActivityTableDishDO::getId, reqVO.getIds())
+ .orderByAsc(ActivityTableDishDO::getSerialNumber));
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityuser/ActivityUserMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityuser/ActivityUserMapper.java
new file mode 100644
index 00000000..b3ff938d
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/activityuser/ActivityUserMapper.java
@@ -0,0 +1,47 @@
+package cn.iocoder.yudao.module.member.dal.mysql.activityuser;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.member.controller.admin.activityuser.vo.ActivityUserCountVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityuser.vo.ActivityUserPageReqVO;
+import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppActivityRespVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activity.ActivityDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityuser.ActivityUserDO;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 活动参加人员 Mapper
+ *
+ * @author 我是秦俊旗
+ */
+@Mapper
+public interface ActivityUserMapper extends BaseMapperX {
+
+ default PageResult selectPage(ActivityUserPageReqVO reqVO) {
+ return selectPage(reqVO, new LambdaQueryWrapperX()
+ .eqIfPresent(ActivityUserDO::getActivityId, reqVO.getActivityId())
+ .eqIfPresent(ActivityUserDO::getUserId, reqVO.getUserId())
+ .eqIfPresent(ActivityUserDO::getMobile, reqVO.getMobile())
+ .betweenIfPresent(ActivityUserDO::getCreateTime, reqVO.getCreateTime())
+ .orderByDesc(ActivityUserDO::getId));
+ }
+
+ List countByActivityIds(@Param("activityIds") List activityIds);
+
+ default PageResult selectUserRecordPage(ActivityUserPageReqVO reqVO) {
+ Page activityAwardsUserRespVOPage = selectJoinPage(new Page<>(reqVO.getPageNo(), reqVO.getPageSize()), AppActivityRespVO.class,
+ new MPJLambdaWrapper()
+ .selectAll(ActivityDO.class)
+ .leftJoin(ActivityDO.class, ActivityDO::getId, ActivityUserDO::getActivityId)
+ .eq(ActivityUserDO::getUserId, reqVO.getUserId())
+ .orderByDesc(ActivityUserDO::getCreateTime)
+ );
+ return new PageResult<>(activityAwardsUserRespVOPage.getRecords(), activityAwardsUserRespVOPage.getTotal());
+ }
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/ActivityJob.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/ActivityJob.java
new file mode 100644
index 00000000..b072baea
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/ActivityJob.java
@@ -0,0 +1,47 @@
+package cn.iocoder.yudao.module.member.job;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawardsuser.ActivityAwardsUserDO;
+import cn.iocoder.yudao.module.member.service.activityawardsuser.ActivityAwardsUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Author:qjq
+ * @Date:2024/4/3 14:50
+ */
+@Slf4j
+@Component
+public class ActivityJob implements JobHandler {
+
+
+ @Resource
+ private ActivityAwardsUserService activityAwardsUserService;
+ /**
+ * 执行任务
+ *
+ * @param param 参数
+ * @return 结果
+ * @throws Exception 异常
+ */
+ @Override
+ @TenantIgnore
+ public String execute(String param){
+
+ List listByTime = activityAwardsUserService.getListByTime();
+ if(CollectionUtil.isNotEmpty(listByTime)){
+ for (ActivityAwardsUserDO activityAwardsUserDO : listByTime) {
+ activityAwardsUserDO.setAwardsStatus("2");
+ }
+ activityAwardsUserService.updateBatch(listByTime);
+ }
+
+ log.info("[execute][上一天中奖信息过期 {}条]", listByTime.size());
+ return String.format("中奖信息过期 %s 条 ", listByTime.size());
+ }
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/ActivityReserveJob.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/ActivityReserveJob.java
new file mode 100644
index 00000000..51b5868c
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/job/ActivityReserveJob.java
@@ -0,0 +1,47 @@
+package cn.iocoder.yudao.module.member.job;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.module.member.dal.dataobject.activitypay.ActivityPayDO;
+import cn.iocoder.yudao.module.member.service.activitypay.ActivityPayService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @Author:qjq
+ * @Date:2024/4/3 14:50
+ */
+@Slf4j
+@Component
+public class ActivityReserveJob implements JobHandler {
+
+
+ @Resource
+ private ActivityPayService activityPayService;
+ /**
+ * 执行任务
+ *
+ * @param param 参数
+ * @return 结果
+ * @throws Exception 异常
+ */
+ @Override
+ @TenantIgnore
+ public String execute(String param){
+
+ List listByTime = activityPayService.getListByTime();
+ if(CollectionUtil.isNotEmpty(listByTime)){
+ for (ActivityPayDO activityPayDO : listByTime) {
+ activityPayDO.setStatus("2");
+ }
+ activityPayService.updateBatch(listByTime);
+ }
+
+ log.info("[execute][上一天预约信息过期 {}条]", listByTime.size());
+ return String.format("预约信息过期 %s 条 ",listByTime.size());
+ }
+}
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activity/ActivityService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activity/ActivityService.java
new file mode 100644
index 00000000..5fbe62ac
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activity/ActivityService.java
@@ -0,0 +1,79 @@
+package cn.iocoder.yudao.module.member.service.activity;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.member.controller.admin.activity.vo.ActivityPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activity.vo.ActivityRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activity.vo.ActivitySaveReqVO;
+import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppActivityPrizeDrawVO;
+import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppActivityRespVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activity.ActivityDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawardsuser.ActivityAwardsUserDO;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 活动 Service 接口
+ *
+ * @author 我是秦俊旗
+ */
+public interface ActivityService {
+
+ /**
+ * 创建活动
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createActivity(@Valid ActivitySaveReqVO createReqVO);
+
+ /**
+ * 更新活动
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateActivity(@Valid ActivitySaveReqVO updateReqVO);
+
+ /**
+ * 删除活动
+ *
+ * @param id 编号
+ */
+ void deleteActivity(Long id);
+
+ /**
+ * 获得活动
+ *
+ * @param id 编号
+ * @return 活动
+ */
+ ActivityDO getActivity(Long id);
+
+ /**
+ * 获得活动分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 活动分页
+ */
+ PageResult getActivityPage(ActivityPageReqVO pageReqVO);
+
+
+
+ /**
+ * 获得用户活动分页
+ *
+ */
+ PageResult getUserActivityPage(ActivityPageReqVO pageReqVO);
+
+
+ List prizeDraw(@Valid AppActivityPrizeDrawVO drawVO);
+
+ AppActivityRespVO getUserActivity(Long id,Long userId);
+
+ AppActivityRespVO getUserActivityApplyInfo(Long id,Long userId);
+
+ List getReservatList();
+
+ PageResult getActivityReservePage(ActivityPageReqVO pageReqVO);
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activity/ActivityServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activity/ActivityServiceImpl.java
new file mode 100644
index 00000000..69729d17
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activity/ActivityServiceImpl.java
@@ -0,0 +1,416 @@
+package cn.iocoder.yudao.module.member.service.activity;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
+import cn.iocoder.yudao.module.member.controller.admin.activity.vo.ActivityPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activity.vo.ActivityRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activity.vo.ActivitySaveReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawards.vo.ActivityAwardsListDTO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserCountVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitypay.vo.ActivityPayCountVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo.ActivityRestaurantRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo.ActivityRestaurantSaveDto;
+import cn.iocoder.yudao.module.member.controller.admin.activityrestaurant.vo.ActivityRestaurantSaveReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activitytable.vo.ActivityTableCountVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityuser.vo.ActivityUserCountVO;
+import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppActivityPrizeDrawVO;
+import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppActivityRespVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activity.ActivityDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawards.ActivityAwardsDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawardsuser.ActivityAwardsUserDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityrestaurant.ActivityRestaurantDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityuser.ActivityUserDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
+import cn.iocoder.yudao.module.member.dal.mysql.activity.ActivityMapper;
+import cn.iocoder.yudao.module.member.service.activityawards.ActivityAwardsService;
+import cn.iocoder.yudao.module.member.service.activityawardsuser.ActivityAwardsUserService;
+import cn.iocoder.yudao.module.member.service.activitypay.ActivityPayService;
+import cn.iocoder.yudao.module.member.service.activityrestaurant.ActivityRestaurantService;
+import cn.iocoder.yudao.module.member.service.activitytable.ActivityTableService;
+import cn.iocoder.yudao.module.member.service.activitytabledish.ActivityTableDishService;
+import cn.iocoder.yudao.module.member.service.activityuser.ActivityUserService;
+import cn.iocoder.yudao.module.member.service.user.MemberUserService;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*;
+
+/**
+ * 活动 Service 实现类
+ *
+ * @author 我是秦俊旗
+ */
+@Service
+@Validated
+public class ActivityServiceImpl implements ActivityService {
+
+ @Resource
+ private ActivityMapper activityMapper;
+
+ @Resource
+ @Lazy
+ private ActivityAwardsService activityAwardsService;
+
+ @Resource
+ @Lazy
+ private ActivityUserService activityUserService;
+
+ @Resource
+ @Lazy
+ private ActivityTableService activityTableService;
+
+ @Resource
+ @Lazy
+ private ActivityRestaurantService activityRestaurantService;
+
+ @Resource
+ @Lazy
+ private ActivityAwardsUserService activityAwardsUserService;
+
+ @Resource
+ private MemberUserService memberUserService;
+
+ @Resource
+ @Lazy
+ private ActivityPayService activityPayService;
+ @Resource
+ @Lazy
+ private ActivityTableDishService activityTableDishService;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public Long createActivity(ActivitySaveReqVO createReqVO) {
+ // 插入
+ ActivityDO activity = BeanUtils.toBean(createReqVO, ActivityDO.class);
+ activityMapper.insert(activity);
+ ArrayList activityAwardsDOarrayList = new ArrayList();
+ for (ActivityAwardsListDTO dto : createReqVO.getActivityAwardsList()) {
+ ActivityAwardsDO activityAwardsDO = BeanUtils.toBean(dto, ActivityAwardsDO.class);
+ activityAwardsDO.setActivityId(activity.getId());
+ activityAwardsDOarrayList.add(activityAwardsDO);
+ }
+ if (CollectionUtil.isNotEmpty(activityAwardsDOarrayList)) {
+ activityAwardsService.insertActivityAwards(activityAwardsDOarrayList);
+ }
+ if ("1".equals(createReqVO.getReservationStatus()) && createReqVO.getActivityRestaurantSaveDto() != null) {
+
+ ActivityRestaurantSaveReqVO bean = BeanUtils.toBean(createReqVO.getActivityRestaurantSaveDto(), ActivityRestaurantSaveReqVO.class);
+ if (bean.getTotalTable() <= 0) {
+ throw exception(ACTIVITY_TABLE_ZERO);
+ }
+ bean.setActivityId(activity.getId());
+ activityRestaurantService.createActivityRestaurant(bean);
+ activityTableDishService.createByRestaurant(bean);
+ }
+
+ // 返回
+ return activity.getId();
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void updateActivity(ActivitySaveReqVO updateReqVO) {
+ // 校验存在
+ validateActivityExists(updateReqVO.getId());
+ validateActivityTime(updateReqVO.getId());
+ // 更新
+ ActivityDO updateObj = BeanUtils.toBean(updateReqVO, ActivityDO.class);
+
+ if ("1".equals(updateReqVO.getReservationStatus()) && updateReqVO.getActivityRestaurantSaveDto() != null) {
+
+ ActivityRestaurantSaveDto activityRestaurantSaveDto = updateReqVO.getActivityRestaurantSaveDto();
+ ActivityRestaurantSaveReqVO bean = BeanUtils.toBean(activityRestaurantSaveDto, ActivityRestaurantSaveReqVO.class);
+ if (bean.getTotalTable() <= 0) {
+ throw exception(ACTIVITY_TABLE_ZERO);
+ }
+ bean.setActivityId(updateObj.getId());
+ if (bean.getId() != null) {
+// activityTableService.deleteByActivityId(updateObj.getId());
+ activityRestaurantService.updateActivityRestaurant(bean);
+ } else {
+ bean.setActivityId(updateObj.getId());
+ activityRestaurantService.createActivityRestaurant(bean);
+ activityTableDishService.createByRestaurant(bean);
+ }
+ }
+ activityMapper.updateById(updateObj);
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void deleteActivity(Long id) {
+ // 校验存在
+ validateActivityExists(id);
+ validateActivityTime(id);
+ // 删除
+ activityMapper.deleteById(id);
+ activityAwardsService.deleteByActivityId(id);
+ activityRestaurantService.deleteByActivityId(id);
+
+ }
+
+ private void validateActivityExists(Long id) {
+ if (activityMapper.selectById(id) == null) {
+ throw exception(ACTIVITY_NOT_EXISTS);
+ }
+ }
+
+ private void validateActivityTime(Long id) {
+ ActivityDO activityDO = activityMapper.selectById(id);
+ LocalDateTime startTime = activityDO.getStartTime();
+ LocalDateTime endTime = activityDO.getEndTime();
+ //现在时间再开始时间之后
+ if (startTime.isBefore(LocalDateTime.now())) {
+ throw exception(ACTIVITY_START);
+ }
+
+ }
+
+ @Override
+ public ActivityDO getActivity(Long id) {
+ return activityMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getActivityPage(ActivityPageReqVO pageReqVO) {
+ PageResult activityDOPageResult = activityMapper.selectPage(pageReqVO);
+ List list = activityDOPageResult.getList();
+ List activityIds = list.stream().map(ActivityDO::getId).collect(Collectors.toList());
+ if (CollectionUtil.isEmpty(activityIds)) {
+ return BeanUtils.toBean(activityDOPageResult, ActivityRespVO.class);
+ }
+ Map userCountVOMap = activityUserService.countByActivityIds(activityIds);
+ Map tableCountVOMap = activityTableService.countByActivityIds(activityIds);
+ Map awardsUserCountVOMap = activityAwardsUserService.countByActivityIds(activityIds);
+ Map longActivityPayCountVOMap = activityPayService.countByActivityIds(activityIds);
+ ArrayList activityRespVOS = new ArrayList<>();
+
+ for (ActivityDO activity : list) {
+ ActivityRespVO bean = BeanUtils.toBean(activity, ActivityRespVO.class);
+ bean.setApplyNum(userCountVOMap.getOrDefault(activity.getId(), new ActivityUserCountVO()).getApplyNum());
+ bean.setReserveNum(tableCountVOMap.getOrDefault(activity.getId(), new ActivityTableCountVO()).getReserveNum());
+ bean.setIncome((longActivityPayCountVOMap.getOrDefault(activity.getId(), new ActivityPayCountVO()).getIncome()));
+ bean.setAwardsNum(awardsUserCountVOMap.getOrDefault(activity.getId(), new ActivityAwardsUserCountVO()).getAwardsNum());
+ activityRespVOS.add(bean);
+ }
+ return new PageResult<>(activityRespVOS, activityDOPageResult.getTotal());
+ }
+
+ @Override
+ public PageResult getUserActivityPage(ActivityPageReqVO pageReqVO) {
+ pageReqVO.setUserId(SecurityFrameworkUtils.getLoginUserId());
+ PageResult activityDOPageResult = activityMapper.selectPageApp(pageReqVO);
+ List list = activityDOPageResult.getList();
+ List activityIds = list.stream().map(ActivityDO::getId).collect(Collectors.toList());
+ if (CollectionUtil.isEmpty(activityIds)) {
+ return BeanUtils.toBean(activityDOPageResult, ActivityRespVO.class);
+ }
+ Map userCountVOMap = activityUserService.countByActivityIds(activityIds);
+ List applyByActivityIds = activityUserService.isApplyByActivityIds(activityIds, pageReqVO.getUserId());
+
+ ArrayList activityRespVOS = new ArrayList<>();
+ for (ActivityDO activity : list) {
+ ActivityRespVO bean = BeanUtils.toBean(activity, ActivityRespVO.class);
+ bean.setApplyNum(userCountVOMap.getOrDefault(activity.getId(), new ActivityUserCountVO()).getApplyNum());
+ bean.setIsApply(applyByActivityIds.contains(activity.getId()));
+ activityRespVOS.add(bean);
+ }
+ return new PageResult<>(activityRespVOS, activityDOPageResult.getTotal());
+ }
+
+ @Override
+ public List prizeDraw(AppActivityPrizeDrawVO drawVO) {
+
+ // 查询奖品
+ ActivityAwardsDO activityAwards = activityAwardsService.getActivityAwards(drawVO.getAwardsId());
+
+ // 查询活动
+ ActivityDO activityDO = activityMapper.selectById(activityAwards.getActivityId());
+
+ if(activityDO.getStartTime().isAfter(LocalDateTime.now())){
+ throw exception(ACTIVITY_ERROR);
+ }
+
+ // 查询报名用户
+ List activityUserDOList = activityUserService.getUserListByActivityId(activityDO.getId());
+
+ //抽奖用户池
+ Set drawUserPool = activityUserDOList.stream().map(ActivityUserDO::getUserId).collect(Collectors.toSet());
+
+ if(CollectionUtil.isEmpty(drawUserPool)){
+ throw exception(ACTIVITY_NO_USER);
+ }
+
+ // 查询当天中奖用户
+ List activityAwardsUserDOList = activityAwardsUserService.getAwardsUserListByActivityId(activityDO.getId());
+
+
+ //统计已中该奖项的人数
+// int count = (int) activityAwardsUserDOList.stream().filter(vo -> vo.getAwardsId().equals(activityAwards.getId())).count();
+//
+// if (count + drawVO.getNum() > activityAwards.getAwardsNum()) {
+// throw exception(ACTIVITY_AWARDS_EXCEED);
+// }
+
+ //查询整个活动中限制类型为整个活动(1)的奖项
+ List limitTypeList = activityAwardsService.getListByActivityIdAndAwardsStatus(activityDO.getId(), "1");
+ //优先排除这批中奖人员
+ if(CollectionUtil.isNotEmpty(limitTypeList)){
+ for (ActivityAwardsDO activityAwardsDO : limitTypeList) {
+ Map map = activityAwardsUserDOList.stream().filter(vo -> vo.getAwardsId().equals(activityAwardsDO.getId()))
+ .collect(Collectors.groupingBy(
+ ActivityAwardsUserDO::getUserId,
+ Collectors.counting()
+ ));
+ Integer awardsNum = activityAwardsDO.getAwardsNum();
+ // 筛选出次数 大于限定次数 的用户ID,存入Set去重
+ Set inconsistentUserList = map.entrySet().stream()
+ .filter(entry -> entry.getValue() >= awardsNum)
+ .map(Map.Entry::getKey)
+ .collect(Collectors.toSet());
+ // 从抽奖用户池中移除次数大于限定次数的用户
+ drawUserPool.removeAll(inconsistentUserList);
+ }
+ }
+
+ // 获取该奖项的限制类型
+ String limitType = activityAwards.getLimitType();
+
+ //如果是单个奖项(2)的话,需要排除该奖项次数满的 整个活动(1)的话上面已排除 无限制(3)无需排除
+ if ("2".equals(limitType)){
+ Map map = activityAwardsUserDOList.stream().filter(vo -> vo.getAwardsId().equals(activityAwards.getId()))
+ .collect(Collectors.groupingBy(
+ ActivityAwardsUserDO::getUserId,
+ Collectors.counting()
+ ));
+
+ //每个人可中奖次数
+ Integer awardsNum = activityAwards.getAwardsNum();
+
+ // 筛选出次数 大于限定次数 的用户ID,存入Set去重
+ Set inconsistentUserList = map.entrySet().stream()
+ .filter(entry -> entry.getValue() >= awardsNum)
+ .map(Map.Entry::getKey)
+ .collect(Collectors.toSet());
+ drawUserPool.removeAll(inconsistentUserList);
+ }
+
+ //开始抽奖
+ List longs = selectRandom(drawUserPool, drawVO.getNum());
+
+ //中奖人员信息
+ List userList = memberUserService.getUserList(longs);
+
+ //插入数据库
+ ArrayList list = new ArrayList<>();
+ for (MemberUserDO user : userList) {
+ ActivityAwardsUserDO activityAwardsUserDO = new ActivityAwardsUserDO();
+ activityAwardsUserDO.setActivityId(activityDO.getId());
+ activityAwardsUserDO.setUserId(user.getId());
+ activityAwardsUserDO.setNickName(user.getNickname());
+ activityAwardsUserDO.setAvatar(user.getAvatar());
+ activityAwardsUserDO.setMobile(user.getMobile());
+ activityAwardsUserDO.setAwardsId(activityAwards.getId());
+ activityAwardsUserDO.setAwardsStatus("0");
+ list.add(activityAwardsUserDO);
+ }
+ activityAwardsUserService.insertBatch(list);
+ return list;
+ }
+
+ public static List selectRandom(Set drawUserPool, int count) {
+ // 校验输入
+ if (drawUserPool == null || drawUserPool.isEmpty()) {
+ return Collections.emptyList();
+ }
+ int total = drawUserPool.size();
+ if (count >= total) {
+ return new ArrayList<>(drawUserPool); // 直接返回所有元素
+ }
+
+ // 转换为列表并复制,避免修改原始集合
+ List list = new ArrayList<>(drawUserPool);
+ Random random = new Random();
+
+ // Fisher-Yates 洗牌算法(原地打乱)
+ for (int i = total - 1; i > 0; i--) {
+ int j = random.nextInt(i + 1); // 生成 [0, i] 之间的随机索引
+ Collections.swap(list, i, j); // 交换元素,确保每个位置等概率出现
+ }
+
+ // 取前 count 个元素
+ return list.subList(0, count);
+ }
+
+
+ @Override
+ public AppActivityRespVO getUserActivity(Long id,Long userId) {
+ ActivityDO activityDO = activityMapper.selectById(id);
+ if( activityDO == null){
+ throw exception(ACTIVITY_NOT_EXISTS);
+ }
+ AppActivityRespVO activity = BeanUtil.toBean(activityDO, AppActivityRespVO.class);
+ Map userCountVOMap = activityUserService.countByActivityIds(Collections.singletonList(id));
+ activity.setApplyNum(userCountVOMap.getOrDefault(activity.getId(), new ActivityUserCountVO()).getApplyNum());
+
+ activity.setAwards(activityAwardsUserService.getListByActivityIdAndUserId(id, userId));
+ return activity;
+ }
+
+ @Override
+ public AppActivityRespVO getUserActivityApplyInfo(Long id, Long userId) {
+ ActivityDO activityDO = activityMapper.selectById(id);
+ if( activityDO == null){
+ throw exception(ACTIVITY_NOT_EXISTS);
+ }
+ AppActivityRespVO activity = BeanUtil.toBean(activityDO, AppActivityRespVO.class);
+ Map userCountVOMap = activityUserService.countByActivityIds(Collections.singletonList(id));
+ activity.setApplyNum(userCountVOMap.getOrDefault(activity.getId(), new ActivityUserCountVO()).getApplyNum());
+
+ activity.setIsApply(activityUserService.selectIsApply(id, userId));
+
+ activity.setAwardList(activityAwardsService.getListByActivityId(id));
+ return activity;
+ }
+
+ @Override
+ public List getReservatList() {
+ LocalDateTime now = LocalDateTime.now();
+ List activityDOS = activityMapper.selectList(Wrappers.lambdaQuery()
+ .eq(ActivityDO::getReservationStatus, "1")
+ .ge(ActivityDO::getEndTime, now)
+// .le(ActivityDO::getStartTime, now)
+ );
+ List result = new ArrayList<>();
+ for (ActivityDO activityDO : activityDOS) {
+ AppActivityRespVO bean = BeanUtils.toBean(activityDO, AppActivityRespVO.class);
+ ActivityRestaurantDO activityRestaurantDO = activityRestaurantService.getByActivityId(activityDO.getId());
+ bean.setActivityRestaurantSaveDto(BeanUtils.toBean(activityRestaurantDO, ActivityRestaurantRespVO.class));
+ result.add(bean);
+ }
+ return result;
+ }
+
+ @Override
+ public PageResult getActivityReservePage(ActivityPageReqVO reqVO) {
+ PageResult activityDOPageResult = activityMapper.selectPage(reqVO, new LambdaQueryWrapperX()
+ .eq(ActivityDO::getReservationStatus, "1")
+ .ge(ActivityDO::getEndTime, LocalDateTime.now())
+ .orderByDesc(ActivityDO::getId));
+ return BeanUtils.toBean(activityDOPageResult, ActivityRespVO.class);
+ }
+}
+
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityadddish/ActivityAddDishService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityadddish/ActivityAddDishService.java
new file mode 100644
index 00000000..2dbe1a5f
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityadddish/ActivityAddDishService.java
@@ -0,0 +1,58 @@
+package cn.iocoder.yudao.module.member.service.activityadddish;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo.ActivityAddDishPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo.ActivityAddDishSaveBatchVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo.ActivityAddDishSaveReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityadddish.ActivityAddDishDO;
+
+import javax.validation.Valid;
+
+/**
+ * 活动用餐桌子加菜 Service 接口
+ *
+ * @author 我是秦俊旗
+ */
+public interface ActivityAddDishService {
+
+ /**
+ * 创建活动用餐桌子加菜
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createActivityAddDish(@Valid ActivityAddDishSaveReqVO createReqVO);
+
+ /**
+ * 更新活动用餐桌子加菜
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateActivityAddDish(@Valid ActivityAddDishSaveReqVO updateReqVO);
+
+ /**
+ * 删除活动用餐桌子加菜
+ *
+ * @param id 编号
+ */
+ void deleteActivityAddDish(Long id);
+
+ /**
+ * 获得活动用餐桌子加菜
+ *
+ * @param id 编号
+ * @return 活动用餐桌子加菜
+ */
+ ActivityAddDishDO getActivityAddDish(Long id);
+
+ /**
+ * 获得活动用餐桌子加菜分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 活动用餐桌子加菜分页
+ */
+ PageResult getActivityAddDishPage(ActivityAddDishPageReqVO pageReqVO);
+
+
+ void createActivityAddDishBatch(ActivityAddDishSaveBatchVO activityAddDishSaveBatchVO);
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityadddish/ActivityAddDishServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityadddish/ActivityAddDishServiceImpl.java
new file mode 100644
index 00000000..863b6b78
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityadddish/ActivityAddDishServiceImpl.java
@@ -0,0 +1,105 @@
+package cn.iocoder.yudao.module.member.service.activityadddish;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo.ActivityAddDishPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo.ActivityAddDishSaveBatchVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityadddish.vo.ActivityAddDishSaveReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityadddish.ActivityAddDishDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activitytabledish.ActivityTableDishDO;
+import cn.iocoder.yudao.module.member.dal.mysql.activityadddish.ActivityAddDishMapper;
+import cn.iocoder.yudao.module.member.service.activitytabledish.ActivityTableDishService;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ACTIVITY_ADD_DISH_NOT_CHANGE;
+import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ACTIVITY_ADD_DISH_NOT_EXISTS;
+
+/**
+ * 活动用餐桌子加菜 Service 实现类
+ *
+ * @author 我是秦俊旗
+ */
+@Service
+@Validated
+public class ActivityAddDishServiceImpl implements ActivityAddDishService {
+
+ @Resource
+ private ActivityAddDishMapper activityAddDishMapper;
+ @Resource
+ private ActivityTableDishService activityTableDishService;
+
+ @Override
+ public Long createActivityAddDish(ActivityAddDishSaveReqVO createReqVO) {
+ // 插入
+ ActivityAddDishDO activityAddDish = BeanUtils.toBean(createReqVO, ActivityAddDishDO.class);
+ activityAddDishMapper.insert(activityAddDish);
+ // 返回
+ return activityAddDish.getId();
+ }
+
+ @Override
+ public void updateActivityAddDish(ActivityAddDishSaveReqVO updateReqVO) {
+ // 校验存在
+ validateActivityAddDishExists(updateReqVO.getId());
+ // 更新
+ ActivityAddDishDO updateObj = BeanUtils.toBean(updateReqVO, ActivityAddDishDO.class);
+ activityAddDishMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteActivityAddDish(Long id) {
+ // 校验存在
+ validateActivityAddDishExists(id);
+ // 删除
+ activityAddDishMapper.deleteById(id);
+ }
+
+ private void validateActivityAddDishExists(Long id) {
+ if (activityAddDishMapper.selectById(id) == null) {
+ throw exception(ACTIVITY_ADD_DISH_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public ActivityAddDishDO getActivityAddDish(Long id) {
+ return activityAddDishMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getActivityAddDishPage(ActivityAddDishPageReqVO pageReqVO) {
+ return activityAddDishMapper.selectPage(pageReqVO);
+ }
+
+ @Override
+ public void createActivityAddDishBatch(ActivityAddDishSaveBatchVO activityAddDishSaveBatchVO) {
+
+ List tableDishIds = activityAddDishSaveBatchVO.getTableDishIds();
+ if(tableDishIds == null){
+ throw exception(ACTIVITY_ADD_DISH_NOT_CHANGE);
+ }
+ List listByIds = activityTableDishService.getListByIds(tableDishIds);
+ Map collect = listByIds.stream().collect(Collectors.toMap(ActivityTableDishDO::getId, ActivityTableDishDO::getSerialNumber));
+
+
+ List list = new ArrayList<>();
+ for (Long tableDishId : tableDishIds){
+ ActivityAddDishDO activityAddDishDO = new ActivityAddDishDO();
+ activityAddDishDO.setTableDishId(tableDishId);
+ activityAddDishDO.setDishName(activityAddDishSaveBatchVO.getDishName());
+ activityAddDishDO.setDishPrice(activityAddDishSaveBatchVO.getDishPrice());
+ activityAddDishDO.setDishImg(activityAddDishSaveBatchVO.getDishImg());
+ activityAddDishDO.setSerialNumber(collect.get(tableDishId));
+ list.add(activityAddDishDO);
+ }
+ activityAddDishMapper.insertBatch(list);
+ }
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityawards/ActivityAwardsService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityawards/ActivityAwardsService.java
new file mode 100644
index 00000000..a6265b39
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityawards/ActivityAwardsService.java
@@ -0,0 +1,69 @@
+package cn.iocoder.yudao.module.member.service.activityawards;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.member.controller.admin.activityawards.vo.ActivityAwardsPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawards.vo.ActivityAwardsSaveReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawards.ActivityAwardsDO;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 活动奖项 Service 接口
+ *
+ * @author 我是秦俊旗
+ */
+public interface ActivityAwardsService {
+
+ /**
+ * 创建活动奖项
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createActivityAwards(@Valid ActivityAwardsSaveReqVO createReqVO);
+
+ /**
+ * 更新活动奖项
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateActivityAwards(@Valid ActivityAwardsSaveReqVO updateReqVO);
+
+ /**
+ * 删除活动奖项
+ *
+ * @param id 编号
+ */
+ void deleteActivityAwards(Long id);
+
+ /**
+ * 获得活动奖项
+ *
+ * @param id 编号
+ * @return 活动奖项
+ */
+ ActivityAwardsDO getActivityAwards(Long id);
+
+ /**
+ * 获得活动奖项分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 活动奖项分页
+ */
+ PageResult getActivityAwardsPage(ActivityAwardsPageReqVO pageReqVO);
+
+
+ void insertActivityAwards(List activityAwardsDOList);
+
+ void deleteByActivityId(Long activityId);
+
+ List getListByActivityId(Long activityId);
+
+ List getListByIds(List ids);
+
+ List getListByActivityIdAndAwardsStatus(Long activityId, String limitType);
+
+ List getListByActivity(Long activityId);
+
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityawards/ActivityAwardsServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityawards/ActivityAwardsServiceImpl.java
new file mode 100644
index 00000000..86f51189
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityawards/ActivityAwardsServiceImpl.java
@@ -0,0 +1,111 @@
+package cn.iocoder.yudao.module.member.service.activityawards;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.member.controller.admin.activityawards.vo.ActivityAwardsPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawards.vo.ActivityAwardsSaveReqVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawards.ActivityAwardsDO;
+import cn.iocoder.yudao.module.member.dal.mysql.activityawards.ActivityAwardsMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.util.Collections;
+import java.util.List;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ACTIVITY_AWARDS_NOT_EXISTS;
+
+/**
+ * 活动奖项 Service 实现类
+ *
+ * @author 我是秦俊旗
+ */
+@Service
+@Validated
+public class ActivityAwardsServiceImpl implements ActivityAwardsService {
+
+ @Resource
+ private ActivityAwardsMapper activityAwardsMapper;
+
+ @Override
+ public Long createActivityAwards(ActivityAwardsSaveReqVO createReqVO) {
+ // 插入
+ ActivityAwardsDO activityAwards = BeanUtils.toBean(createReqVO, ActivityAwardsDO.class);
+ activityAwardsMapper.insert(activityAwards);
+ // 返回
+ return activityAwards.getId();
+ }
+
+ @Override
+ public void updateActivityAwards(ActivityAwardsSaveReqVO updateReqVO) {
+ // 校验存在
+ validateActivityAwardsExists(updateReqVO.getId());
+ // 更新
+ ActivityAwardsDO updateObj = BeanUtils.toBean(updateReqVO, ActivityAwardsDO.class);
+ activityAwardsMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteActivityAwards(Long id) {
+ // 校验存在
+ validateActivityAwardsExists(id);
+ // 删除
+ activityAwardsMapper.deleteById(id);
+ }
+
+ private void validateActivityAwardsExists(Long id) {
+ if (activityAwardsMapper.selectById(id) == null) {
+ throw exception(ACTIVITY_AWARDS_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public ActivityAwardsDO getActivityAwards(Long id) {
+ return activityAwardsMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getActivityAwardsPage(ActivityAwardsPageReqVO pageReqVO) {
+ return activityAwardsMapper.selectPage(pageReqVO);
+ }
+
+ @Override
+ public void insertActivityAwards(List activityAwardsDOList) {
+ activityAwardsMapper.insertBatch(activityAwardsDOList);
+ }
+
+ @Override
+ public void deleteByActivityId(Long activityId) {
+ activityAwardsMapper.delete(Wrappers.lambdaQuery(ActivityAwardsDO.class).eq(ActivityAwardsDO::getActivityId,activityId));
+ }
+
+ @Override
+ public List getListByActivityId(Long activityId) {
+
+ return activityAwardsMapper.selectList(Wrappers.lambdaQuery(ActivityAwardsDO.class)
+ .eq(ActivityAwardsDO::getActivityId, activityId)
+ .orderByAsc(ActivityAwardsDO::getSortNum));
+ }
+
+ @Override
+ public List getListByIds(List ids) {
+ return activityAwardsMapper.selectList(Wrappers.lambdaQuery(ActivityAwardsDO.class)
+ .in(ActivityAwardsDO::getId, ids)
+ .orderByAsc(ActivityAwardsDO::getSortNum));
+ }
+
+ @Override
+ public List getListByActivityIdAndAwardsStatus(Long activityId, String limitType) {
+ return activityAwardsMapper.selectList(Wrappers.lambdaQuery(ActivityAwardsDO.class)
+ .eq(ActivityAwardsDO::getActivityId, activityId)
+ .eq(ActivityAwardsDO::getLimitType, limitType));
+ }
+
+ @Override
+ public List getListByActivity(Long activityId) {
+ return activityAwardsMapper.selectList(Wrappers.lambdaQuery(ActivityAwardsDO.class)
+ .eq(ActivityAwardsDO::getActivityId, activityId));
+ }
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityawardsuser/ActivityAwardsUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityawardsuser/ActivityAwardsUserService.java
new file mode 100644
index 00000000..7d020915
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityawardsuser/ActivityAwardsUserService.java
@@ -0,0 +1,76 @@
+package cn.iocoder.yudao.module.member.service.activityawardsuser;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserCountVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserSaveReqVO;
+import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppCancelVO;
+import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppUserAwardsVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawardsuser.ActivityAwardsUserDO;
+
+import javax.validation.Valid;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 活动中奖人员 Service 接口
+ *
+ * @author 我是秦俊旗
+ */
+public interface ActivityAwardsUserService {
+
+ /**
+ * 创建活动中奖人员
+ *
+ * @param createReqVO 创建信息
+ * @return 编号
+ */
+ Long createActivityAwardsUser(@Valid ActivityAwardsUserSaveReqVO createReqVO);
+
+ /**
+ * 更新活动中奖人员
+ *
+ * @param updateReqVO 更新信息
+ */
+ void updateActivityAwardsUser(@Valid ActivityAwardsUserSaveReqVO updateReqVO);
+
+ /**
+ * 删除活动中奖人员
+ *
+ * @param id 编号
+ */
+ void deleteActivityAwardsUser(Long id);
+
+ /**
+ * 获得活动中奖人员
+ *
+ * @param id 编号
+ * @return 活动中奖人员
+ */
+ ActivityAwardsUserDO getActivityAwardsUser(Long id);
+
+ /**
+ * 获得活动中奖人员分页
+ *
+ * @param pageReqVO 分页查询
+ * @return 活动中奖人员分页
+ */
+ PageResult getActivityAwardsUserPage(ActivityAwardsUserPageReqVO pageReqVO);
+
+ PageResult getActivityAwardsUserJoinPage(ActivityAwardsUserPageReqVO pageReqVO);
+
+ Map countByActivityIds(List activityIds);
+
+ List getAwardsUserListByActivityId(Long activityId);
+
+ void insertBatch(List list);
+
+ List getListByActivityIdAndUserId(Long activityId, Long userId);
+
+ Boolean cancel(AppCancelVO vo);
+
+ List getListByTime();
+
+ void updateBatch(List list );
+}
\ No newline at end of file
diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityawardsuser/ActivityAwardsUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityawardsuser/ActivityAwardsUserServiceImpl.java
new file mode 100644
index 00000000..5f3dda44
--- /dev/null
+++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/activityawardsuser/ActivityAwardsUserServiceImpl.java
@@ -0,0 +1,160 @@
+package cn.iocoder.yudao.module.member.service.activityawardsuser;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserCountVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserPageReqVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserRespVO;
+import cn.iocoder.yudao.module.member.controller.admin.activityawardsuser.vo.ActivityAwardsUserSaveReqVO;
+import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppCancelVO;
+import cn.iocoder.yudao.module.member.controller.app.activity.vo.AppUserAwardsVO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawards.ActivityAwardsDO;
+import cn.iocoder.yudao.module.member.dal.dataobject.activityawardsuser.ActivityAwardsUserDO;
+import cn.iocoder.yudao.module.member.dal.mysql.activityawardsuser.ActivityAwardsUserMapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ACTIVITY_AWARDS_USER_NOT_EFFECTIVE;
+import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ACTIVITY_AWARDS_USER_NOT_EXISTS;
+
+/**
+ * 活动中奖人员 Service 实现类
+ *
+ * @author 我是秦俊旗
+ */
+@Service
+@Validated
+public class ActivityAwardsUserServiceImpl implements ActivityAwardsUserService {
+
+ @Resource
+ private ActivityAwardsUserMapper activityAwardsUserMapper;
+
+ @Override
+ public Long createActivityAwardsUser(ActivityAwardsUserSaveReqVO createReqVO) {
+ // 插入
+ ActivityAwardsUserDO activityAwardsUser = BeanUtils.toBean(createReqVO, ActivityAwardsUserDO.class);
+ activityAwardsUserMapper.insert(activityAwardsUser);
+ // 返回
+ return activityAwardsUser.getId();
+ }
+
+ @Override
+ public void updateActivityAwardsUser(ActivityAwardsUserSaveReqVO updateReqVO) {
+ // 校验存在
+ validateActivityAwardsUserExists(updateReqVO.getId());
+ // 更新
+ ActivityAwardsUserDO updateObj = BeanUtils.toBean(updateReqVO, ActivityAwardsUserDO.class);
+ activityAwardsUserMapper.updateById(updateObj);
+ }
+
+ @Override
+ public void deleteActivityAwardsUser(Long id) {
+ // 校验存在
+ validateActivityAwardsUserExists(id);
+ // 删除
+ activityAwardsUserMapper.deleteById(id);
+ }
+
+ private void validateActivityAwardsUserExists(Long id) {
+ if (activityAwardsUserMapper.selectById(id) == null) {
+ throw exception(ACTIVITY_AWARDS_USER_NOT_EXISTS);
+ }
+ }
+
+ @Override
+ public ActivityAwardsUserDO getActivityAwardsUser(Long id) {
+ return activityAwardsUserMapper.selectById(id);
+ }
+
+ @Override
+ public PageResult getActivityAwardsUserPage(ActivityAwardsUserPageReqVO pageReqVO) {
+ return activityAwardsUserMapper.selectPage(pageReqVO);
+ }
+
+ @Override
+ public PageResult getActivityAwardsUserJoinPage(ActivityAwardsUserPageReqVO pageReqVO) {
+ return activityAwardsUserMapper.selectJoinPage(pageReqVO);
+ }
+
+ @Override
+ public Map countByActivityIds(List activityIds) {
+ List activityAwardsUserCountVOS = activityAwardsUserMapper.countByActivityIds(activityIds);
+ if (activityAwardsUserCountVOS.isEmpty()) {
+ return Collections.emptyMap();
+ }
+ return activityAwardsUserCountVOS.stream().collect(Collectors.toMap(ActivityAwardsUserCountVO::getActivityId, v -> v));
+ }
+
+ @Override
+ public List getAwardsUserListByActivityId(Long activityId) {
+
+ LocalDateTime date = LocalDateTime.now();
+
+ LocalDateTime startOfDay = date.with(LocalTime.MIN);
+
+ LocalDateTime endOfDay = date.with(LocalTime.MAX);
+
+ return activityAwardsUserMapper.selectList(Wrappers.lambdaQuery()
+ .eq(ActivityAwardsUserDO::getActivityId, activityId)
+ .between(ActivityAwardsUserDO::getCreateTime, startOfDay, endOfDay));
+ }
+
+ @Override
+ public void insertBatch(List list) {
+ activityAwardsUserMapper.insertBatch(list);
+ }
+
+ @Override
+ public List