diff --git a/yudao-admin-vue3/src/api/promotion/activityinfo/index.ts b/yudao-admin-vue3/src/api/promotion/activityinfo/index.ts new file mode 100644 index 0000000..044a9bc --- /dev/null +++ b/yudao-admin-vue3/src/api/promotion/activityinfo/index.ts @@ -0,0 +1,51 @@ +import request from '@/config/axios' + +// 活动信息 VO +export interface ActivityInfoVO { + id: number // 活动唯一ID + activityTitle: string // 活动标题 + activityLocation: string // 活动地点 + organizer: string // 活动主办方 + startTime: Date // 活动开始时间 + endTime: Date // 活动结束时间 + price: number // 活动票价 + status: string // 活动状态 + activityType: string // 活动类型 + capacity: number // 活动人数限制 + registeredCount: number // 已报名人数 + topicType: string // 专题类型 +} + +// 活动信息 API +export const ActivityInfoApi = { + // 查询活动信息分页 + getActivityInfoPage: async (params: any) => { + return await request.get({ url: `/promotion/activity-info/page`, params }) + }, + + // 查询活动信息详情 + getActivityInfo: async (id: number) => { + return await request.get({ url: `/promotion/activity-info/get?id=` + id }) + }, + + // 新增活动信息 + createActivityInfo: async (data: ActivityInfoVO) => { + return await request.post({ url: `/promotion/activity-info/create`, data }) + }, + + // 修改活动信息 + updateActivityInfo: async (data: ActivityInfoVO) => { + return await request.put({ url: `/promotion/activity-info/update`, data }) + }, + + // 删除活动信息 + deleteActivityInfo: async (id: number) => { + return await request.delete({ url: `/promotion/activity-info/delete?id=` + id }) + }, + + // 导出活动信息 Excel + exportActivityInfo: async (params) => { + return await request.download({ url: `/promotion/activity-info/export-excel`, params }) + }, + +} diff --git a/yudao-admin-vue3/src/api/promotion/registration/index.ts b/yudao-admin-vue3/src/api/promotion/registration/index.ts new file mode 100644 index 0000000..d9169f6 --- /dev/null +++ b/yudao-admin-vue3/src/api/promotion/registration/index.ts @@ -0,0 +1,58 @@ +import request from '@/config/axios' + +// 活动报名 VO +export interface RegistrationVO { + userName: string // 用户姓名 + phoneNumber: string // 手机号 + companyName: string // 公司名称 + position: string // 职位 + operationPlatform: string // 运营平台 + mainCategory: string // 主营品类 + agencyCity: string // 代理城市 + productIntent: string // 产品意向 + purpose: string // 参会目的 + attendeeIdentity: string // 参会身份 + registrationStatus: string // 报名状态 + verificationCode: string // 核销码 + verificationStatus: string // 核销状态 + isPaid: string // 是否付费 + reviewStatus: string // 审核状态 +} + +// 活动报名 API +export const RegistrationApi = { + // 查询活动报名分页 + getRegistrationPage: async (params: any) => { + return await request.get({ url: `/promotion/registration/page`, params }) + }, + + // 查询活动报名详情 + getRegistration: async (id: number) => { + return await request.get({ url: `/promotion/registration/get?id=` + id }) + }, + + // 新增活动报名 + createRegistration: async (data: RegistrationVO) => { + return await request.post({ url: `/promotion/registration/create`, data }) + }, + + // 修改活动报名 + updateRegistration: async (data: RegistrationVO) => { + return await request.put({ url: `/promotion/registration/update`, data }) + }, + + // 删除活动报名 + deleteRegistration: async (id: number) => { + return await request.delete({ url: `/promotion/registration/delete?id=` + id }) + }, + + // 导出活动报名 Excel + exportRegistration: async (params) => { + return await request.download({ url: `/promotion/registration/export-excel`, params }) + }, + // 查询活动名称数据 + getActivityNames: async () => { + return await request.get({ url: `/promotion/registration/getOrganization` }) + }, + +} diff --git a/yudao-admin-vue3/src/utils/dict.ts b/yudao-admin-vue3/src/utils/dict.ts index 3b17798..75f8ce5 100644 --- a/yudao-admin-vue3/src/utils/dict.ts +++ b/yudao-admin-vue3/src/utils/dict.ts @@ -123,19 +123,19 @@ export enum DICT_TYPE { TYPES = 'types', TECHNICIAN_STATUS = 'technician_status', SEX = 'sex', - + //客服配置类型 KEFU_CONFIGURATION_TYPE = 'kefu_configuration_type', - + INFRA_FILE_TYPE = 'infra_file_type', - + PAY_WALLET_RECHARGE_PAY_STATUS = 'pay_wallet_recharge_pay_status', - + //预约:项目 SUBSCRIBE_PROJECT_STATUS = 'subscribe_project_status', - + SUBSCRIBE_RESERVATION_STATUS = 'subscribe_reservation_status', - + //预约:配置 SUBSCRIBE_CONFIGURATION_STATUS = 'subscribe_configuration_status', @@ -152,17 +152,17 @@ export enum DICT_TYPE { //预约:机构管理 ORGANIZATION_STATUS = 'organization_status', - + //客服:自动回复 KEFU_AUTO_RESPONSE_TYPE = 'kefu_auto_response_type', KEFU_AUTO_RESPONSE_STATUS = 'kefu_auto_response_status', - + //客服:留言 KEFU_LEAVE_WORD_STATUS = 'kefu_leave_word_status', - + //客服:话术 KEFU_VERBAL_TRICK_TYPE = 'kefu_verbal_trick_type', - + //客服人员管理 KEFU_SUPPORT_STAFF_STATUS = 'kefu_support_staff_status', KEFU_SUPPORT_STAFF_ORDER_MANAGE = 'kefu_support_staff_order_manage', @@ -309,5 +309,20 @@ export enum DICT_TYPE { INVOICE_STATUS = 'invoice_status', //发票状态 INVOICE_HEADER_DEFAULT = 'invoice_header_default', //抬头默认 +// ========== 活动报名模块 ========== + PROMOTION_REGISTRATION_OPERATION_PLATFORM = 'promotion_registration_operation_platform', + PROMOTION_REGISTRATION_MAIN_CATEGORY = 'promotion_registration_main_category', + PROMOTION_REGISTRATION_AGENCY_CITY = 'promotion_registration_agency_city', + PROMOTION_REGISTRATION_PRODUCT_INTENT = 'promotion_registration_product_intent', + PROMOTION_REGISTRATION_PURPOSE = 'promotion_registration_purpose', + PROMOTION_REGISTRATION_ATTENDEE_IDENTITY = 'promotion_registration_attendee_identity', + PROMOTION_REGISTRATION_REGISTRATION_STATUS = 'promotion_registration_registration_status', + PROMOTION_REGISTRATION_VERIFICATION_STATUS = 'promotion_registration_verification_status', + PROMOTION_REGISTRATION_IS_PAID = 'promotion_registration_is_paid', + PROMOTION_REGISTRATION_REVIEW_STATUS = 'promotion_registration_review_status', + // ========== 活动信息模块 ========== + PROMOTION_ACTIVITY_INFO_STATUS = 'promotion_activity_info_status', + PROMOTION_ACTIVITY_INFO_ACTIVITY_TYPE = 'promotion_activity_info_activity_type', + PROMOTION_ACTIVITY_INFO_TOPIC_TYPE = 'promotion_activity_info_topic_type', } diff --git a/yudao-admin-vue3/src/views/promotion/activityinfo/ActivityInfoForm.vue b/yudao-admin-vue3/src/views/promotion/activityinfo/ActivityInfoForm.vue new file mode 100644 index 0000000..e6ada17 --- /dev/null +++ b/yudao-admin-vue3/src/views/promotion/activityinfo/ActivityInfoForm.vue @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 确 定 + 取 消 + + + + diff --git a/yudao-admin-vue3/src/views/promotion/activityinfo/index.vue b/yudao-admin-vue3/src/views/promotion/activityinfo/index.vue new file mode 100644 index 0000000..3dc730b --- /dev/null +++ b/yudao-admin-vue3/src/views/promotion/activityinfo/index.vue @@ -0,0 +1,370 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 搜索 + 重置 + + 新增 + + + 导出 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 编辑 + + + 删除 + + + + + + + + + + + + + + + + + + + + + diff --git a/yudao-admin-vue3/src/views/promotion/registration/RegistrationForm.vue b/yudao-admin-vue3/src/views/promotion/registration/RegistrationForm.vue new file mode 100644 index 0000000..6c32863 --- /dev/null +++ b/yudao-admin-vue3/src/views/promotion/registration/RegistrationForm.vue @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 确 定 + 取 消 + + + + diff --git a/yudao-admin-vue3/src/views/promotion/registration/index.vue b/yudao-admin-vue3/src/views/promotion/registration/index.vue new file mode 100644 index 0000000..4d8532f --- /dev/null +++ b/yudao-admin-vue3/src/views/promotion/registration/index.vue @@ -0,0 +1,457 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 搜索 + 重置 + + 新增 + + + 导出 + + + + + + + + + + + + + + + + 姓名:{{ scope.row.userName }} + + + 公司名称:{{ scope.row.companyName }} + + + 手机号:{{ scope.row.phoneNumber }} + + + 身份: + + + + 职位:{{ scope.row.position }} + + + + 目的: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 编辑 + + + 删除 + + + + + + + + + + + + + + + + diff --git a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java index f2ad17a..88dd670 100644 --- a/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java +++ b/yudao-module-mall/yudao-module-promotion-api/src/main/java/cn/iocoder/yudao/module/promotion/enums/ErrorCodeConstants.java @@ -170,4 +170,7 @@ public interface ErrorCodeConstants { // ========== 客服人员 TODO 补充编号 ========== ErrorCode SUPPORT_STAFF_NOT_EXISTS = new ErrorCode(1_023_000_000, "客服人员不存在"); + ErrorCode REGISTRATION_NOT_EXISTS = new ErrorCode(1_024_000_000, "活动报名不存在"); + + ErrorCode ACTIVITY_INFO_NOT_EXISTS = new ErrorCode(1_025_000_000, "活动信息不存在"); } diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/activityinfo/ActivityInfoController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/activityinfo/ActivityInfoController.java new file mode 100644 index 0000000..5213b93 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/activityinfo/ActivityInfoController.java @@ -0,0 +1,103 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.activityinfo; + +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.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.promotion.controller.admin.activityinfo.vo.*; +import cn.iocoder.yudao.module.promotion.dal.dataobject.activityinfo.ActivityInfoDO; +import cn.iocoder.yudao.module.promotion.service.activityinfo.ActivityInfoService; + +@Tag(name = "管理后台 - 活动信息") +@RestController +@RequestMapping("/promotion/activity-info") +@Validated +public class ActivityInfoController { + + @Resource + private ActivityInfoService activityInfoService; + + @PostMapping("/create") + @Operation(summary = "创建活动信息") + @PreAuthorize("@ss.hasPermission('promotion:activity-info:create')") + public CommonResult createActivityInfo(@Valid @RequestBody ActivityInfoSaveReqVO createReqVO) { + return success(activityInfoService.createActivityInfo(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新活动信息") + @PreAuthorize("@ss.hasPermission('promotion:activity-info:update')") + public CommonResult updateActivityInfo(@Valid @RequestBody ActivityInfoSaveReqVO updateReqVO) { + activityInfoService.updateActivityInfo(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除活动信息") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('promotion:activity-info:delete')") + public CommonResult deleteActivityInfo(@RequestParam("id") Long id) { + activityInfoService.deleteActivityInfo(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得活动信息") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('promotion:activity-info:query')") + public CommonResult getActivityInfo(@RequestParam("id") Long id) { + ActivityInfoDO activityInfo = activityInfoService.getActivityInfo(id); + return success(BeanUtils.toBean(activityInfo, ActivityInfoRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得活动信息分页") + @PreAuthorize("@ss.hasPermission('promotion:activity-info:query')") + public CommonResult> getActivityInfoPage(@Valid ActivityInfoPageReqVO pageReqVO) { + PageResult pageResult = activityInfoService.getActivityInfoPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ActivityInfoRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出活动信息 Excel") + @PreAuthorize("@ss.hasPermission('promotion:activity-info:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportActivityInfoExcel(@Valid ActivityInfoPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = activityInfoService.getActivityInfoPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "活动信息.xls", "数据", ActivityInfoRespVO.class, + BeanUtils.toBean(list, ActivityInfoRespVO.class)); + } + +// // 获得活动名称数据 +// @GetMapping("/getOrganization") +// @Operation(summary = "获得活动名称数据") +// public CommonResult> getOrganization() { +// List list = ActivityInfoService.getOrganization(); +// return success(list); +// } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/activityinfo/vo/ActivityInfoPageReqVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/activityinfo/vo/ActivityInfoPageReqVO.java new file mode 100644 index 0000000..877fb1e --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/activityinfo/vo/ActivityInfoPageReqVO.java @@ -0,0 +1,58 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.activityinfo.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 ActivityInfoPageReqVO extends PageParam { + + @Schema(description = "活动标题") + private String activityTitle; + + @Schema(description = "活动地点") + private String activityLocation; + + @Schema(description = "活动主办方") + private String organizer; + + @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 = "活动票价") + private BigDecimal price; + + @Schema(description = "活动状态") + private String status; + + @Schema(description = "活动类型") + private String activityType; + + @Schema(description = "活动人数限制") + private Integer capacity; + + @Schema(description = "已报名人数") + private Integer registeredCount; + + @Schema(description = "专题类型") + private String topicType; + + @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-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/activityinfo/vo/ActivityInfoRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/activityinfo/vo/ActivityInfoRespVO.java new file mode 100644 index 0000000..c855978 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/activityinfo/vo/ActivityInfoRespVO.java @@ -0,0 +1,73 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.activityinfo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 活动信息 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ActivityInfoRespVO { + + @Schema(description = "活动唯一ID", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("活动唯一ID") + private Long id; + + @Schema(description = "活动标题", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("活动标题") + private String activityTitle; + + @Schema(description = "活动地点", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("活动地点") + private String activityLocation; + + @Schema(description = "活动主办方", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("活动主办方") + private String organizer; + + @Schema(description = "活动开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("活动开始时间") + private LocalDateTime startTime; + + @Schema(description = "活动结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("活动结束时间") + private LocalDateTime endTime; + + @Schema(description = "活动票价") + @ExcelProperty("活动票价") + private BigDecimal price; + + @Schema(description = "活动状态") + @ExcelProperty(value = "活动状态", converter = DictConvert.class) + @DictFormat("promotion_activity_info_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String status; + + @Schema(description = "活动类型") + @ExcelProperty(value = "活动类型", converter = DictConvert.class) + @DictFormat("promotion_activity_info_activity_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String activityType; + + @Schema(description = "活动人数限制", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("活动人数限制") + private Integer capacity; + + @Schema(description = "已报名人数") + @ExcelProperty("已报名人数") + private Integer registeredCount; + + @Schema(description = "专题类型") + @ExcelProperty(value = "专题类型", converter = DictConvert.class) + @DictFormat("promotion_activity_info_topic_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String topicType; + + @Schema(description = "记录创建时间") + @ExcelProperty("记录创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/activityinfo/vo/ActivityInfoSaveReqVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/activityinfo/vo/ActivityInfoSaveReqVO.java new file mode 100644 index 0000000..7048fa8 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/activityinfo/vo/ActivityInfoSaveReqVO.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.activityinfo.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 活动信息新增/修改 Request VO") +@Data +public class ActivityInfoSaveReqVO { + + @Schema(description = "活动唯一ID", requiredMode = Schema.RequiredMode.REQUIRED) + private Long id; + + @Schema(description = "活动标题", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "活动标题不能为空") + private String activityTitle; + + @Schema(description = "活动地点", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "活动地点不能为空") + private String activityLocation; + + @Schema(description = "活动主办方", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "活动主办方不能为空") + private String organizer; + + @Schema(description = "活动开始时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动开始时间不能为空") + private LocalDateTime startTime; + + @Schema(description = "活动结束时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动结束时间不能为空") + private LocalDateTime endTime; + + @Schema(description = "活动票价") + private BigDecimal price; + + @Schema(description = "活动状态") + private String status; + + @Schema(description = "活动类型") + private String activityType; + + @Schema(description = "活动人数限制", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "活动人数限制不能为空") + private Integer capacity; + + @Schema(description = "已报名人数") + private Integer registeredCount; + + @Schema(description = "专题类型") + private String topicType; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/registration/RegistrationController.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/registration/RegistrationController.java new file mode 100644 index 0000000..0c63326 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/registration/RegistrationController.java @@ -0,0 +1,123 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.registration; + +import cn.iocoder.yudao.module.promotion.dal.dataobject.activityinfo.ActivityInfoDO; +import cn.iocoder.yudao.module.promotion.service.activityinfo.ActivityInfoService; +import lombok.extern.slf4j.Slf4j; +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.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.promotion.controller.admin.registration.vo.*; +import cn.iocoder.yudao.module.promotion.dal.dataobject.registration.RegistrationDO; +import cn.iocoder.yudao.module.promotion.service.registration.RegistrationService; + +@Slf4j +@Tag(name = "管理后台 - 活动报名") +@RestController +@RequestMapping("/promotion/registration") +@Validated +public class RegistrationController { + + @Resource + private RegistrationService registrationService; + + @Resource + private ActivityInfoService ActivityInfoService; + + @PostMapping("/create") + @Operation(summary = "创建活动报名") + @PreAuthorize("@ss.hasPermission('promotion:registration:create')") + public CommonResult createRegistration(@Valid @RequestBody RegistrationSaveReqVO createReqVO) { + return success(registrationService.createRegistration(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新活动报名") + @PreAuthorize("@ss.hasPermission('promotion:registration:update')") + public CommonResult updateRegistration(@Valid @RequestBody RegistrationSaveReqVO updateReqVO) { + registrationService.updateRegistration(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除活动报名") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('promotion:registration:delete')") + public CommonResult deleteRegistration(@RequestParam("id") Long id) { + registrationService.deleteRegistration(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得活动报名") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('promotion:registration:query')") + public CommonResult getRegistration(@RequestParam("id") Long id) { + RegistrationDO registration = registrationService.getRegistration(id); + return success(BeanUtils.toBean(registration, RegistrationRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得活动报名分页") + @PreAuthorize("@ss.hasPermission('promotion:registration:query')") +// public CommonResult> getRegistrationPage(@Valid RegistrationPageReqVO pageReqVO) { +// PageResult pageResult = registrationService.getRegistrationPage(pageReqVO); +// return success(BeanUtils.toBean(pageResult, RegistrationRespVO.class)); +// } + public CommonResult> getRegistrationPage(@Valid RegistrationPageReqVO pageReqVO) { + PageResult pageResult = registrationService.getRegistrationPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, RegistrationRespVO.class)); + } + + + @GetMapping("/export-excel") + @Operation(summary = "导出活动报名 Excel") + @PreAuthorize("@ss.hasPermission('promotion:registration:export')") + @ApiAccessLog(operateType = EXPORT) +// public void exportRegistrationExcel(@Valid RegistrationPageReqVO pageReqVO, +// HttpServletResponse response) throws IOException { +// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); +// List list = registrationService.getRegistrationPage(pageReqVO).getList(); +// // 导出 Excel +// ExcelUtils.write(response, "活动报名.xls", "数据", RegistrationRespVO.class, +// BeanUtils.toBean(list, RegistrationRespVO.class)); +// } + public void exportRegistrationExcel(@Valid RegistrationPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = registrationService.getRegistrationPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "活动报名.xls", "数据", RegistrationRespVO.class, + BeanUtils.toBean(list, RegistrationRespVO.class)); + } + + // 获得活动名称数据 + @GetMapping("/getOrganization") + @Operation(summary = "获得活动名称数据") + public CommonResult> getOrganization() { + List list = ActivityInfoService.getOrganization(); + return success(list); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/registration/vo/RegistrationPageReqVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/registration/vo/RegistrationPageReqVO.java new file mode 100644 index 0000000..134af76 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/registration/vo/RegistrationPageReqVO.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.registration.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 RegistrationPageReqVO extends PageParam { + + @Schema(description = "用户姓名") + private String userName; + + @Schema(description = "运营平台") + private String operationPlatform; + + @Schema(description = "代理城市") + private String agencyCity; + + @Schema(description = "参会身份") + private String attendeeIdentity; + + @Schema(description = "报名状态") + private String registrationStatus; + + @Schema(description = "核销状态") + private String verificationStatus; + + @Schema(description = "是否付费") + private String isPaid; + + @Schema(description = "审核状态") + private String reviewStatus; + + @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-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/registration/vo/RegistrationRespVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/registration/vo/RegistrationRespVO.java new file mode 100644 index 0000000..ac4ac6a --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/registration/vo/RegistrationRespVO.java @@ -0,0 +1,107 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.registration.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 活动报名 Response VO") +@Data +@ExcelIgnoreUnannotated +public class RegistrationRespVO { + + @Schema(description = "报名唯一ID", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("报名唯一ID") + private Long id; + + @Schema(description = "用户姓名", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("用户姓名") + private String userName; + + @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("手机号") + private String phoneNumber; + + @Schema(description = "活动编号") + @ExcelProperty("活动编号") + private Long activityId; + +// @Schema(description = "活动名称") +// @ExcelProperty("活动名称") +// private String activityName; + @Schema(description = "活动名称") + @ExcelProperty("活动名称") + private String activityTitle; + + + @Schema(description = "公司名称") + @ExcelProperty("公司名称") + private String companyName; + + @Schema(description = "职位") + @ExcelProperty("职位") + private String position; + + @Schema(description = "运营平台") +// @ExcelProperty(value = "运营平台", converter = DictConvert.class) + @DictFormat("promotion_registration_operation_platform") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String operationPlatform; + + @Schema(description = "主营品类") +// @ExcelProperty(value = "主营品类", converter = DictConvert.class) + @DictFormat("promotion_registration_main_category") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String mainCategory; + + @Schema(description = "代理城市") +// @ExcelProperty(value = "代理城市", converter = DictConvert.class) + @DictFormat("promotion_registration_agency_city") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String agencyCity; + + @Schema(description = "产品意向") +// @ExcelProperty(value = "产品意向", converter = DictConvert.class) + @DictFormat("promotion_registration_product_intent") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String productIntent; + + @Schema(description = "参会目的") + @ExcelProperty(value = "参会目的", converter = DictConvert.class) + @DictFormat("promotion_registration_purpose") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String purpose; + + @Schema(description = "参会身份") + @ExcelProperty(value = "参会身份", converter = DictConvert.class) + @DictFormat("promotion_registration_attendee_identity") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String attendeeIdentity; + + @Schema(description = "报名状态", requiredMode = Schema.RequiredMode.REQUIRED) +// @ExcelProperty(value = "报名状态", converter = DictConvert.class) + @DictFormat("promotion_registration_registration_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String registrationStatus; + + @Schema(description = "核销码") + @ExcelProperty("核销码") + private String verificationCode; + + @Schema(description = "核销状态") + @ExcelProperty(value = "核销状态", converter = DictConvert.class) + @DictFormat("promotion_registration_verification_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String verificationStatus; + + @Schema(description = "是否付费") + @ExcelProperty(value = "是否付费", converter = DictConvert.class) + @DictFormat("promotion_registration_is_paid") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String isPaid; + + @Schema(description = "审核状态") + @ExcelProperty(value = "报名状态", converter = DictConvert.class) + @DictFormat("promotion_registration_review_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String reviewStatus; + + @Schema(description = "记录创建时间") + @ExcelProperty("记录创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/registration/vo/RegistrationSaveReqVO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/registration/vo/RegistrationSaveReqVO.java new file mode 100644 index 0000000..3870b05 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/controller/admin/registration/vo/RegistrationSaveReqVO.java @@ -0,0 +1,66 @@ +package cn.iocoder.yudao.module.promotion.controller.admin.registration.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 RegistrationSaveReqVO { + + @Schema(description = "报名唯一ID", requiredMode = Schema.RequiredMode.REQUIRED) + private Long id; + + @Schema(description = "用户姓名", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "用户姓名不能为空") + private String userName; + + @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "手机号不能为空") + private String phoneNumber; + + @Schema(description = "活动编号") + private Long activityId; + + @Schema(description = "公司名称") + private String companyName; + + @Schema(description = "职位") + private String position; + + @Schema(description = "运营平台") + private String operationPlatform; + + @Schema(description = "主营品类") + private String mainCategory; + + @Schema(description = "代理城市") + private String agencyCity; + + @Schema(description = "产品意向") + private String productIntent; + + @Schema(description = "参会目的") + private String purpose; + + @Schema(description = "参会身份") + private String attendeeIdentity; + + @Schema(description = "报名状态", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "报名状态不能为空") + private String registrationStatus; + + @Schema(description = "核销码") + private String verificationCode; + + @Schema(description = "核销状态") + private String verificationStatus; + + @Schema(description = "是否付费") + private String isPaid; + + @Schema(description = "审核状态") + private String reviewStatus; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/activityinfo/ActivityInfoDO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/activityinfo/ActivityInfoDO.java new file mode 100644 index 0000000..c0caf55 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/activityinfo/ActivityInfoDO.java @@ -0,0 +1,84 @@ +package cn.iocoder.yudao.module.promotion.dal.dataobject.activityinfo; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +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 LCQ + */ +@TableName("promotion_activity_info") +@KeySequence("promotion_activity_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ActivityInfoDO extends BaseDO { + + /** + * 活动唯一ID + */ + @TableId + private Long id; + /** + * 活动标题 + */ + private String activityTitle; + /** + * 活动地点 + */ + private String activityLocation; + /** + * 活动主办方 + */ + private String organizer; + /** + * 活动开始时间 + */ + private LocalDateTime startTime; + /** + * 活动结束时间 + */ + private LocalDateTime endTime; + /** + * 活动票价 + */ + private BigDecimal price; + /** + * 活动状态 + * + * 枚举 {@link TODO promotion_activity_info_status 对应的类} + */ + private String status; + /** + * 活动类型 + * + * 枚举 {@link TODO promotion_activity_info_activity_type 对应的类} + */ + private String activityType; + /** + * 活动人数限制 + */ + private Integer capacity; + /** + * 已报名人数 + */ + private Integer registeredCount; + /** + * 专题类型 + * + * 枚举 {@link TODO promotion_activity_info_topic_type 对应的类} + */ + private String topicType; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/registration/RegistrationDO.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/registration/RegistrationDO.java new file mode 100644 index 0000000..43af757 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/dataobject/registration/RegistrationDO.java @@ -0,0 +1,118 @@ +package cn.iocoder.yudao.module.promotion.dal.dataobject.registration; + +import com.sun.xml.bind.v2.TODO; +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 活动报名 DO + * + * @author LCQ + */ +@TableName("promotion_registration") +@KeySequence("promotion_registration_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class RegistrationDO extends BaseDO { + + /** + * 报名唯一ID + */ + @TableId + private Long id; + /** + * 用户姓名 + */ + private String userName; + /** + * 手机号 + */ + private String phoneNumber; + /** + * 公司名称 + */ + private String companyName; + /** + * 职位 + */ + private String position; + /** + * 运营平台 + * + * 枚举 {@link TODO promotion_registration_operation_platform 对应的类} + */ + private String operationPlatform; + /** + * 主营品类 + * + * 枚举 {@link TODO promotion_registration_main_category 对应的类} + */ + private String mainCategory; + /** + * 代理城市 + * + * 枚举 {@link TODO promotion_registration_agency_city 对应的类} + */ + private String agencyCity; + /** + * 产品意向 + * + * 枚举 {@link TODO promotion_registration_product_intent 对应的类} + */ + private String productIntent; + /** + * 参会目的 + * + * 枚举 {@link TODO promotion_registration_purpose 对应的类} + */ + private String purpose; + /** + * 参会身份 + * + * 枚举 {@link TODO promotion_registration_attendee_identity 对应的类} + */ + private String attendeeIdentity; + /** + * 关联活动ID(外键关联活动表) + */ + private Long activityId; + /** + * 报名状态 + * + * 枚举 {@link TODO promotion_registration_registration_status 对应的类} + */ + private String registrationStatus; + /** + * 核销码 + */ + private String verificationCode; + /** + * 核销状态 + * + * 枚举 {@link TODO promotion_registration_verification_status 对应的类} + */ + private String verificationStatus; + /** + * 是否付费 + * + * 枚举 {@link TODO promotion_registration_is_paid 对应的类} + */ + private String isPaid; + /** + * 审核状态 + * + * 枚举 {@link TODO promotion_registration_review_status 对应的类} + */ + private String reviewStatus; + + + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/activityinfo/ActivityInfoMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/activityinfo/ActivityInfoMapper.java new file mode 100644 index 0000000..d38fc39 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/activityinfo/ActivityInfoMapper.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.promotion.dal.mysql.activityinfo; + +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.promotion.dal.dataobject.activityinfo.ActivityInfoDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.promotion.controller.admin.activityinfo.vo.*; + +/** + * 活动信息 Mapper + * + * @author LCQ + */ +@Mapper +public interface ActivityInfoMapper extends BaseMapperX { + + default PageResult selectPage(ActivityInfoPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ActivityInfoDO::getActivityTitle, reqVO.getActivityTitle()) + .eqIfPresent(ActivityInfoDO::getActivityLocation, reqVO.getActivityLocation()) + .eqIfPresent(ActivityInfoDO::getOrganizer, reqVO.getOrganizer()) + .betweenIfPresent(ActivityInfoDO::getStartTime, reqVO.getStartTime()) + .betweenIfPresent(ActivityInfoDO::getEndTime, reqVO.getEndTime()) + .eqIfPresent(ActivityInfoDO::getPrice, reqVO.getPrice()) + .eqIfPresent(ActivityInfoDO::getStatus, reqVO.getStatus()) + .eqIfPresent(ActivityInfoDO::getActivityType, reqVO.getActivityType()) + .eqIfPresent(ActivityInfoDO::getCapacity, reqVO.getCapacity()) + .eqIfPresent(ActivityInfoDO::getRegisteredCount, reqVO.getRegisteredCount()) + .eqIfPresent(ActivityInfoDO::getTopicType, reqVO.getTopicType()) + .betweenIfPresent(ActivityInfoDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(ActivityInfoDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/registration/RegistrationMapper.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/registration/RegistrationMapper.java new file mode 100644 index 0000000..6abe368 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/dal/mysql/registration/RegistrationMapper.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.promotion.dal.mysql.registration; + +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.promotion.dal.dataobject.registration.RegistrationDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.promotion.controller.admin.registration.vo.*; + +/** + * 活动报名 Mapper + * + * @author LCQ + */ +@Mapper +public interface RegistrationMapper extends BaseMapperX { + + default PageResult selectPage(RegistrationPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(RegistrationDO::getUserName, reqVO.getUserName()) + .eqIfPresent(RegistrationDO::getOperationPlatform, reqVO.getOperationPlatform()) + .eqIfPresent(RegistrationDO::getAgencyCity, reqVO.getAgencyCity()) + .eqIfPresent(RegistrationDO::getAttendeeIdentity, reqVO.getAttendeeIdentity()) + .eqIfPresent(RegistrationDO::getRegistrationStatus, reqVO.getRegistrationStatus()) +// .eqIfPresent(RegistrationDO::getActivityId, reqVO.getActivityId()) + .eqIfPresent(RegistrationDO::getVerificationStatus, reqVO.getVerificationStatus()) + .eqIfPresent(RegistrationDO::getIsPaid, reqVO.getIsPaid()) + .eqIfPresent(RegistrationDO::getReviewStatus, reqVO.getReviewStatus()) + .betweenIfPresent(RegistrationDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(RegistrationDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/activityinfo/ActivityInfoService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/activityinfo/ActivityInfoService.java new file mode 100644 index 0000000..c2b0b45 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/activityinfo/ActivityInfoService.java @@ -0,0 +1,60 @@ +package cn.iocoder.yudao.module.promotion.service.activityinfo; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.promotion.controller.admin.activityinfo.vo.*; +import cn.iocoder.yudao.module.promotion.dal.dataobject.activityinfo.ActivityInfoDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 活动信息 Service 接口 + * + * @author LCQ + */ +public interface ActivityInfoService { + + + /** + * 创建活动信息 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createActivityInfo(@Valid ActivityInfoSaveReqVO createReqVO); + + /** + * 更新活动信息 + * + * @param updateReqVO 更新信息 + */ + void updateActivityInfo(@Valid ActivityInfoSaveReqVO updateReqVO); + + /** + * 删除活动信息 + * + * @param id 编号 + */ + void deleteActivityInfo(Long id); + + /** + * 获得活动信息 + * + * @param id 编号 + * @return 活动信息 + */ + ActivityInfoDO getActivityInfo(Long id); + + /** + * 获得活动信息分页 + * + * @param pageReqVO 分页查询 + * @return 活动信息分页 + */ + PageResult getActivityInfoPage(ActivityInfoPageReqVO pageReqVO); + + + Map getActivityTitleMapByIds(Collection ids); // 新增方法声明 + + List getOrganization(); +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/activityinfo/ActivityInfoServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/activityinfo/ActivityInfoServiceImpl.java new file mode 100644 index 0000000..e2c42d0 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/activityinfo/ActivityInfoServiceImpl.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.promotion.service.activityinfo; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; + +import org.springframework.util.CollectionUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.module.promotion.controller.admin.activityinfo.vo.*; +import cn.iocoder.yudao.module.promotion.dal.dataobject.activityinfo.ActivityInfoDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.promotion.dal.mysql.activityinfo.ActivityInfoMapper; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; + +/** + * 活动信息 Service 实现类 + * + * @author LCQ + */ +@Service +@Validated +public class ActivityInfoServiceImpl implements ActivityInfoService { + + @Resource + private ActivityInfoMapper activityInfoMapper; + + @Override + public Long createActivityInfo(ActivityInfoSaveReqVO createReqVO) { + // 插入 + ActivityInfoDO activityInfo = BeanUtils.toBean(createReqVO, ActivityInfoDO.class); + activityInfoMapper.insert(activityInfo); + // 返回 + return activityInfo.getId(); + } + + @Override + public void updateActivityInfo(ActivityInfoSaveReqVO updateReqVO) { + // 校验存在 + validateActivityInfoExists(updateReqVO.getId()); + // 更新 + ActivityInfoDO updateObj = BeanUtils.toBean(updateReqVO, ActivityInfoDO.class); + activityInfoMapper.updateById(updateObj); + } + + @Override + public void deleteActivityInfo(Long id) { + // 校验存在 + validateActivityInfoExists(id); + // 删除 + activityInfoMapper.deleteById(id); + } + + private void validateActivityInfoExists(Long id) { + if (activityInfoMapper.selectById(id) == null) { + throw exception(ACTIVITY_INFO_NOT_EXISTS); + } + } + + @Override + public ActivityInfoDO getActivityInfo(Long id) { + return activityInfoMapper.selectById(id); + } + + @Override + public PageResult getActivityInfoPage(ActivityInfoPageReqVO pageReqVO) { + return activityInfoMapper.selectPage(pageReqVO); + } + + + public Map getActivityTitleMapByIds(Collection ids) { + if (CollectionUtils.isEmpty(ids)) { + return Collections.emptyMap(); // 返回空 Map,避免生成无效 SQL + } + List activities = activityInfoMapper.selectBatchIds(ids); + return activities.stream() + .collect(Collectors.toMap(ActivityInfoDO::getId, ActivityInfoDO::getActivityTitle)); + } + + @Override + public List getOrganization() { + return activityInfoMapper.selectList(); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/registration/RegistrationService.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/registration/RegistrationService.java new file mode 100644 index 0000000..17e2d1f --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/registration/RegistrationService.java @@ -0,0 +1,60 @@ +package cn.iocoder.yudao.module.promotion.service.registration; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.promotion.controller.admin.registration.vo.*; +import cn.iocoder.yudao.module.promotion.dal.dataobject.registration.RegistrationDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 活动报名 Service 接口 + * + * @author LCQ + */ +public interface RegistrationService { + + /** + * 创建活动报名 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createRegistration(@Valid RegistrationSaveReqVO createReqVO); + + /** + * 更新活动报名 + * + * @param updateReqVO 更新信息 + */ + void updateRegistration(@Valid RegistrationSaveReqVO updateReqVO); + + /** + * 删除活动报名 + * + * @param id 编号 + */ + void deleteRegistration(Long id); + + /** + * 获得活动报名 + * + * @param id 编号 + * @return 活动报名 + */ + RegistrationDO getRegistration(Long id); + + /** + * 获得活动报名分页 + * + * @param pageReqVO 分页查询 + * @return 活动报名分页 + */ +// PageResult getRegistrationPage(RegistrationPageReqVO pageReqVO); + + + // 原方法返回PageResult,改为返回PageResult + PageResult getRegistrationPage(RegistrationPageReqVO pageReqVO); + + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/registration/RegistrationServiceImpl.java b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/registration/RegistrationServiceImpl.java new file mode 100644 index 0000000..52b0a57 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/java/cn/iocoder/yudao/module/promotion/service/registration/RegistrationServiceImpl.java @@ -0,0 +1,109 @@ +package cn.iocoder.yudao.module.promotion.service.registration; + +import cn.iocoder.yudao.module.promotion.service.activityinfo.ActivityInfoService; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.module.promotion.controller.admin.registration.vo.*; +import cn.iocoder.yudao.module.promotion.dal.dataobject.registration.RegistrationDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.promotion.dal.mysql.registration.RegistrationMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.promotion.enums.ErrorCodeConstants.*; + +/** + * 活动报名 Service 实现类 + * + * @author LCQ + */ +@Service +@Validated +public class RegistrationServiceImpl implements RegistrationService { + + @Resource + private RegistrationMapper registrationMapper; + + @Resource + private ActivityInfoService activityInfoService; // 新增注入 + + @Override + public Long createRegistration(RegistrationSaveReqVO createReqVO) { + // 插入 + RegistrationDO registration = BeanUtils.toBean(createReqVO, RegistrationDO.class); + registrationMapper.insert(registration); + // 返回 + return registration.getId(); + } + + @Override + public void updateRegistration(RegistrationSaveReqVO updateReqVO) { + // 校验存在 + validateRegistrationExists(updateReqVO.getId()); + // 更新 + RegistrationDO updateObj = BeanUtils.toBean(updateReqVO, RegistrationDO.class); + registrationMapper.updateById(updateObj); + } + + @Override + public void deleteRegistration(Long id) { + // 校验存在 + validateRegistrationExists(id); + // 删除 + registrationMapper.deleteById(id); + } + + private void validateRegistrationExists(Long id) { + if (registrationMapper.selectById(id) == null) { + throw exception(REGISTRATION_NOT_EXISTS); + } + } + + @Override + public RegistrationDO getRegistration(Long id) { + return registrationMapper.selectById(id); + } + +// @Override +// public PageResult getRegistrationPage(RegistrationPageReqVO pageReqVO) { +// return registrationMapper.selectPage(pageReqVO); +// } + + @Override + public PageResult getRegistrationPage(RegistrationPageReqVO pageReqVO) { + // 1. 查询原始DO分页数据 + PageResult pageResult = registrationMapper.selectPage(pageReqVO); + + // 2. 提取所有活动ID并查询对应标题 + Set activityIds = pageResult.getList().stream() + .map(RegistrationDO::getActivityId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + Map activityTitleMap = activityInfoService.getActivityTitleMapByIds(activityIds); // 依赖注入ActivityInfoService + + // 3. 转换DO到RespVO并填充活动名称 + List respList = pageResult.getList().stream() + .map(registrationDO -> { + RegistrationRespVO respVO = BeanUtils.toBean(registrationDO, RegistrationRespVO.class); + // 填充活动名称 + respVO.setActivityTitle( + activityTitleMap.get(registrationDO.getActivityId()) + ); + return respVO; + }) + .collect(Collectors.toList()); + + // 4. 返回新的RespVO分页结果 + return new PageResult<>(respList, pageResult.getTotal()); + } + + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/mapper/registration/RegistrationMapper.xml b/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/mapper/registration/RegistrationMapper.xml new file mode 100644 index 0000000..14f6e57 --- /dev/null +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/mapper/registration/RegistrationMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file