From 074fc7dcdde6c9501e0f6ee8b247205c2f427e79 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Thu, 17 Apr 2025 10:19:08 +0800
Subject: [PATCH] 初始化
---
src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityController.java | 102 ++++
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java | 319 ++++++++++++++
src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityDto.java | 20
src/main/java/cc/mrbird/febs/mall/service/HappyActivityCategoryService.java | 11
src/main/java/cc/mrbird/febs/mall/entity/HappyActivityCategory.java | 23 +
src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityOptionMapper.java | 7
src/main/resources/mapper/modules/HappyActivityMapper.xml | 45 ++
src/main/java/cc/mrbird/febs/mall/vo/api/activity/category/ApiCategoryInfoVo.java | 25 +
src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityInfoVo.java | 44 ++
src/main/java/cc/mrbird/febs/mall/vo/api/activity/follow/ApiOperateDoDto.java | 27 +
src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiActivityOptionVo.java | 43 +
src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiActivityOptionListVo.java | 26 +
src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java | 2
src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityVo.java | 69 +++
src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiOperateRegisterActivityDto.java | 55 ++
src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityCategoryController.java | 46 ++
src/main/java/cc/mrbird/febs/common/enumerates/StateUpDownEnum.java | 55 ++
src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java | 34 +
src/main/resources/application-test.yml | 4
src/main/java/cc/mrbird/febs/mall/entity/HappyActivityOption.java | 54 ++
src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityCategoryMapper.java | 7
src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiVoteRecordInPageVo.java | 26 +
src/main/java/cc/mrbird/febs/mall/entity/HappyActivity.java | 64 ++
src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityInfoDto.java | 30 +
src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiOperateVoteDto.java | 25 +
src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityCategoryServiceImpl.java | 80 +++
src/main/java/cc/mrbird/febs/mall/entity/HappyFollow.java | 27 +
src/main/java/cc/mrbird/febs/mall/mapper/HappyFollowMapper.java | 7
src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java | 17
src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiVoteRecordInPageDto.java | 26 +
30 files changed, 1,318 insertions(+), 2 deletions(-)
diff --git a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
index 4d0b4b3..8993c1e 100644
--- a/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
+++ b/src/main/java/cc/mrbird/febs/common/configure/WebMvcConfigure.java
@@ -32,5 +32,7 @@
registration.excludePathPatterns("/api/xcxPay/wxpayCallback");
registration.excludePathPatterns("/api/xcxPay/rechargeCallBack");
registration.excludePathPatterns("/api/xcxPay/fapiaoCallBack");
+ registration.excludePathPatterns("/api/happyCategory/allCategory");
+ registration.excludePathPatterns("/api/happyCategory/indexCategory");
}
}
diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/StateUpDownEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/StateUpDownEnum.java
new file mode 100644
index 0000000..c4f4ba4
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/StateUpDownEnum.java
@@ -0,0 +1,55 @@
+package cc.mrbird.febs.common.enumerates;
+
+import lombok.Getter;
+
+@Getter
+public enum StateUpDownEnum {
+
+
+ /**
+ * 来源类型 1-活动 2-社区圈子发布
+ */
+ SOURCE_TYPE_ACTIVITY(1),
+ SOURCE_TYPE_SOCIAL_CIRCLE(2),
+ /**
+ * 操作类型 1-关注 2-点赞 3-分享 4-投票
+ */
+ FOLLOW(1),
+ LIKE(2),
+ SHARE(3),
+ VOTE(4),
+
+ /**
+ * 投票活动选项是否审核 0.未审核 1.审核成功 2.拒绝
+ */
+ VOTE_OPTION_STATE_NOT_AUDIT(0),
+ VOTE_OPTION_STATE_AUDIT_SUCCESS(1),
+ VOTE_OPTION_STATE_AUDIT_REFUSE(2),
+
+ /**
+ * 活动类型 1-普通活动 2-众筹活动 3-投票活动
+ */
+ ACTIVITY_TYPE_NORMAL(1),
+ ACTIVITY_TYPE_CROWDFUNDING(2),
+ ACTIVITY_TYPE_VOTE(3),
+
+ /**
+ * 状态 0-未开始 1-报名中(进行中) 2-已结束
+ */
+ ACTIVITY_STATE_NOT_START(0),
+ ACTIVITY_STATE_ENROLLING(1),
+ ACTIVITY_STATE_END(2),
+ /**
+ * 状态 0-未开启 1-已开启
+ * 是否推荐到首页 0-不推荐 1-推荐
+ * 删除标识 0-未删除 1-已删除
+ */
+ DOWN(0),
+ UP(1);
+
+ private final int code;
+
+ StateUpDownEnum(int code) {
+ this.code = code;
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityCategoryController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityCategoryController.java
new file mode 100644
index 0000000..182db24
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityCategoryController.java
@@ -0,0 +1,46 @@
+package cc.mrbird.febs.mall.controller;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.mall.service.HappyActivityCategoryService;
+import cc.mrbird.febs.mall.vo.api.activity.category.ApiCategoryInfoVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(value = "/api/happyCategory")
+@Api(value = "ApiHappyActivityCategoryController", tags = "365活动")
+public class ApiHappyActivityCategoryController {
+
+ private final HappyActivityCategoryService happyActivityCategoryService;
+
+ @ApiOperation(value = "全部分类", notes = "全部分类")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = ApiCategoryInfoVo.class)
+ })
+ @GetMapping(value = "/allCategory")
+ public FebsResponse allCategory() {
+
+ return happyActivityCategoryService.allCategory();
+ }
+
+ @ApiOperation(value = "首页分类", notes = "首页分类")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = ApiCategoryInfoVo.class)
+ })
+ @GetMapping(value = "/indexCategory")
+ public FebsResponse indexCategory() {
+
+ return happyActivityCategoryService.indexCategory();
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityController.java
new file mode 100644
index 0000000..0c1adc8
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiHappyActivityController.java
@@ -0,0 +1,102 @@
+package cc.mrbird.febs.mall.controller;
+
+import cc.mrbird.febs.common.annotation.Limit;
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.mall.service.HappyActivityService;
+import cc.mrbird.febs.mall.vo.api.activity.*;
+import cc.mrbird.febs.mall.vo.api.activity.follow.ApiOperateDoDto;
+import cc.mrbird.febs.mall.vo.api.activity.options.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@Validated
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(value = "/api/happyActivity")
+@Api(value = "ApiHappyActivityController", tags = "365活动分类")
+public class ApiHappyActivityController{
+
+ private final HappyActivityService happyActivityService;
+
+ @ApiOperation(value = "活动列表", notes = "活动列表")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = ApiActivityInfoVo.class)
+ })
+ @PostMapping(value = "/activityList")
+ public FebsResponse activityList(@RequestBody @Validated ApiActivityInfoDto dto) {
+
+ return happyActivityService.activityList(dto);
+ }
+
+ @ApiOperation(value = "活动详情", notes = "活动详情")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = ApiActivityVo.class)
+ })
+ @PostMapping(value = "/activityInfo")
+ public FebsResponse activityInfo(@RequestBody @Validated ApiActivityDto dto) {
+
+ return happyActivityService.activityInfo(dto);
+ }
+
+ @ApiOperation(value = "投票活动选项列表", notes = "投票活动选项列表")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = ApiActivityOptionListVo.class)
+ })
+ @GetMapping(value = "/voteOptionList/{id}")
+ public FebsResponse voteOptionList(@PathVariable("id") Long id) {
+
+ return happyActivityService.voteOptionList(id);
+ }
+
+ @ApiOperation(value = "投票活动选项详情", notes = "投票活动选项详情")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = ApiActivityOptionVo.class)
+ })
+ @GetMapping(value = "/voteOption/{id}")
+ public FebsResponse voteOption(@PathVariable("id") Long id) {
+
+ return happyActivityService.voteOption(id);
+ }
+
+ @ApiOperation(value = "点赞关注转发", notes = "点赞关注转发")
+ @PostMapping(value = "/operateDo")
+ @Limit(key = "operateDo", period = 60, count = 1, name = "点赞关注转发接口", prefix = "limit")
+ public FebsResponse operateDo(@RequestBody @Validated ApiOperateDoDto dto) {
+
+ return happyActivityService.operateDo(dto);
+ }
+
+ @ApiOperation(value = "投票活动选项投票", notes = "投票活动选项投票")
+ @PostMapping(value = "/operateVote")
+ @Limit(key = "operateVote", period = 60, count = 1, name = "投票接口", prefix = "limit")
+ public FebsResponse operateVote(@RequestBody @Validated ApiOperateVoteDto dto) {
+
+ return happyActivityService.operateVote(dto);
+ }
+
+ @ApiOperation(value = "投票活动选项投票记录", notes = "投票活动选项投票记录")
+ @ApiResponses({
+ @ApiResponse(code = 200, message = "success", response = ApiVoteRecordInPageVo.class)
+ })
+ @PostMapping(value = "/voteRecordInPage")
+ public FebsResponse voteRecordInPage(@RequestBody @Validated ApiVoteRecordInPageDto dto) {
+
+ return happyActivityService.voteRecordInPage(dto);
+ }
+
+ @ApiOperation(value = "活动报名", notes = "活动报名")
+ @PostMapping(value = "/operateRegister")
+ @Limit(key = "operateRegister", period = 60, count = 1, name = "活动报名接口", prefix = "limit")
+ public FebsResponse operateRegister(@RequestBody @Validated ApiOperateRegisterActivityDto dto) {
+
+ return happyActivityService.operateRegister(dto);
+ }
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/HappyActivity.java b/src/main/java/cc/mrbird/febs/mall/entity/HappyActivity.java
new file mode 100644
index 0000000..83dd49f
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/HappyActivity.java
@@ -0,0 +1,64 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@TableName("happy_activity")
+public class HappyActivity extends BaseEntity {
+ /**
+ *
+
+ `category_id` bigint(20) DEFAULT NULL COMMENT '活动分类ID',
+ `code` varchar(200) DEFAULT NULL COMMENT '编码',
+ `name` varchar(500) DEFAULT NULL COMMENT '名称',
+ `type` int(11) DEFAULT NULL COMMENT '活动类型 1-普通活动 2-众筹活动 3-投票活动',
+ `join_cnt` int(11) DEFAULT NULL COMMENT '参与人数',
+ `state` int(11) DEFAULT '0' COMMENT '状态 0-未开始 1-报名中(进行中) 2-已结束',
+ `start_time` datetime DEFAULT NULL COMMENT '开始时间',
+ `end_time` datetime DEFAULT NULL COMMENT '结束时间',
+ `phone` varchar(100) DEFAULT NULL COMMENT '联系方式',
+ `address` varchar(500) DEFAULT NULL COMMENT '活动地址',
+ `expect_cnt` int(11) DEFAULT NULL COMMENT '门票预计数量',
+ `surplus_cnt` int(11) DEFAULT NULL COMMENT '门票剩余数量',
+ `pay_state` int(11) DEFAULT NULL COMMENT '是否众筹 0-关闭 1-开启(开启代表收取参与费用)',
+ `pay_amount` decimal(20,2) DEFAULT NULL COMMENT '众筹金额',
+ `img_remark` text COMMENT '图片描述',
+ `text_remark` text COMMENT '文字描述',
+ `index_img` varchar(200) DEFAULT NULL COMMENT '活动封面',
+ `order_cnt` int(11) DEFAULT '0' COMMENT '排序',
+ `hot_state` int(11) DEFAULT '0' COMMENT '是否推荐到首页 0-不推荐 1-推荐',
+ `back_img` varchar(500) DEFAULT NULL COMMENT '背景图片',
+ `DELETE_FLAG` int(11) DEFAULT '0' COMMENT '删除标识 0-未删除 1-已删除',
+ */
+ private Long categoryId;
+ private String code;
+ private String name;
+ private Integer type;
+ private Integer joinCnt;
+ private Integer state;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date startTime;
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date endTime;
+ private String phone;
+ private String address;
+ private Integer expectCnt;
+ private Integer surplusCnt;
+ private Integer payState;
+ private BigDecimal payAmount;
+ private String imgRemark;
+ private String textRemark;
+ private String indexImg;
+ private Integer orderCnt;
+ private Integer hotState;
+ private String backImg;
+ private Integer deleteFlag;
+
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/HappyActivityCategory.java b/src/main/java/cc/mrbird/febs/mall/entity/HappyActivityCategory.java
new file mode 100644
index 0000000..79d41ad
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/HappyActivityCategory.java
@@ -0,0 +1,23 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("happy_activity_category")
+public class HappyActivityCategory extends BaseEntity {
+ /**
+ *
+ `name` varchar(500) DEFAULT NULL,
+ `order_cnt` int(11) DEFAULT '0' COMMENT '排序',
+ `hot_state` int(11) DEFAULT '0' COMMENT '是否推荐到首页 0-不推荐 1-推荐',
+ `state` int(11) DEFAULT NULL COMMENT '状态 0-未开启 1-已开启',
+ `DELETE_FLAG` int(11) DEFAULT '0' COMMENT '删除标识 0-未删除 1-已删除',
+ */
+ private String name;
+ private Integer orderCnt;
+ private Integer hotState;
+ private Integer state;
+ private Integer deleteFlag;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/HappyActivityOption.java b/src/main/java/cc/mrbird/febs/mall/entity/HappyActivityOption.java
new file mode 100644
index 0000000..28bbbab
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/HappyActivityOption.java
@@ -0,0 +1,54 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("happy_activity_option")
+public class HappyActivityOption extends BaseEntity {
+ /**
+ *
+ `ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `member_id` bigint(20) DEFAULT NULL COMMENT '用户ID',
+ `activity_id` bigint(20) DEFAULT NULL COMMENT '活动ID',
+ `order_cnt` int(11) DEFAULT NULL COMMENT '排序',
+ `option_name` varchar(256) NOT NULL COMMENT '选项名称',
+ `rank` int(11) DEFAULT NULL COMMENT '排名',
+ `likes_cnt` int(11) DEFAULT '0' COMMENT '点赞数量',
+ `image` varchar(500) DEFAULT NULL COMMENT '投票选项图片 URL',
+ `video_url` varchar(500) DEFAULT NULL COMMENT '投票选项视频URL',
+ `description` text COMMENT '选项描述',
+ `state` int(11) DEFAULT '0' COMMENT '是否审核 0.未审核 1.审核成功 2.拒绝',
+ `real_name` varchar(256) DEFAULT NULL COMMENT '注册名称',
+ `mobile_phone` varchar(64) DEFAULT NULL COMMENT '手机',
+ `province` varchar(128) DEFAULT NULL COMMENT '省',
+ `city` varchar(128) DEFAULT NULL COMMENT '市',
+ `address` varchar(512) DEFAULT NULL COMMENT '地址',
+ `email` varchar(256) DEFAULT '' COMMENT '邮箱',
+ `sex` int(8) DEFAULT NULL COMMENT '性别 0-女1-男 2-保密',
+ `hobby` varchar(256) DEFAULT NULL COMMENT '爱好',
+ `mcn_state` int(8) DEFAULT NULL COMMENT '是否签约mcn机构 0否 1是',
+ `DELETE_FLAG` int(11) DEFAULT '0' COMMENT '删除标识 0-未删除 1-已删除',
+ */
+ private Long memberId;
+ private Long activityId;
+ private Integer orderCnt;
+ private String optionName;
+ private Integer rank;
+ private Integer likesCnt;
+ private String image;
+ private String videoUrl;
+ private String description;
+ private Integer state;
+ private String realName;
+ private String mobilePhone;
+ private String province;
+ private String city;
+ private String address;
+ private String email;
+ private Integer sex;
+ private String hobby;
+ private Integer mcnState;
+ private Integer deleteFlag;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/entity/HappyFollow.java b/src/main/java/cc/mrbird/febs/mall/entity/HappyFollow.java
new file mode 100644
index 0000000..4325b83
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/entity/HappyFollow.java
@@ -0,0 +1,27 @@
+package cc.mrbird.febs.mall.entity;
+
+import cc.mrbird.febs.common.entity.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("happy_follow")
+public class HappyFollow extends BaseEntity {
+ /**
+ *
+ `ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+ `member_id` bigint(20) DEFAULT NULL,
+ `source_type` int(11) DEFAULT NULL COMMENT '来源类型 1-活动 2-社区圈子发布',
+ `source_id` bigint(20) DEFAULT NULL COMMENT '来源ID',
+ `source_option_id` bigint(20) DEFAULT NULL COMMENT '来源选项ID',
+ `type` int(11) DEFAULT NULL COMMENT '操作类型 1-关注 2-点赞 3-分享 4-投票',
+ `DELETE_FLAG` int(11) DEFAULT '0' COMMENT '删除标识 0-未删除 1-已删除',
+ */
+ private Long memberId;
+ private Integer sourceType;
+ private Long sourceId;
+ private Long sourceOptionId;
+ private Integer type;
+ private Integer deleteFlag;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityCategoryMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityCategoryMapper.java
new file mode 100644
index 0000000..2a84d8f
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityCategoryMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.HappyActivityCategory;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface HappyActivityCategoryMapper extends BaseMapper<HappyActivityCategory> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java
new file mode 100644
index 0000000..34e8702
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityMapper.java
@@ -0,0 +1,17 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.HappyActivity;
+import cc.mrbird.febs.mall.vo.api.activity.ApiActivityInfoDto;
+import cc.mrbird.febs.mall.vo.api.activity.ApiActivityInfoVo;
+import cc.mrbird.febs.mall.vo.api.activity.options.ApiVoteRecordInPageDto;
+import cc.mrbird.febs.mall.vo.api.activity.options.ApiVoteRecordInPageVo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+
+public interface HappyActivityMapper extends BaseMapper<HappyActivity> {
+
+ Page<ApiActivityInfoVo> selectActivityPage(Page<ApiActivityInfoVo> page, @Param("record")ApiActivityInfoDto dto);
+
+ Page<ApiVoteRecordInPageVo> getVoteRecordInPage(Page<ApiActivityInfoVo> page, @Param("record")ApiVoteRecordInPageDto dto);
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityOptionMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityOptionMapper.java
new file mode 100644
index 0000000..2f1cc67
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/HappyActivityOptionMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.HappyActivityOption;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface HappyActivityOptionMapper extends BaseMapper<HappyActivityOption> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/HappyFollowMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/HappyFollowMapper.java
new file mode 100644
index 0000000..a3fcee3
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/mapper/HappyFollowMapper.java
@@ -0,0 +1,7 @@
+package cc.mrbird.febs.mall.mapper;
+
+import cc.mrbird.febs.mall.entity.HappyFollow;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface HappyFollowMapper extends BaseMapper<HappyFollow> {
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/HappyActivityCategoryService.java b/src/main/java/cc/mrbird/febs/mall/service/HappyActivityCategoryService.java
new file mode 100644
index 0000000..9ad7a34
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/HappyActivityCategoryService.java
@@ -0,0 +1,11 @@
+package cc.mrbird.febs.mall.service;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.mall.entity.HappyActivityCategory;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface HappyActivityCategoryService extends IService<HappyActivityCategory> {
+ FebsResponse allCategory();
+
+ FebsResponse indexCategory();
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java b/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java
new file mode 100644
index 0000000..78dfe73
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/HappyActivityService.java
@@ -0,0 +1,34 @@
+package cc.mrbird.febs.mall.service;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.mall.entity.HappyActivity;
+import cc.mrbird.febs.mall.vo.api.activity.ApiActivityDto;
+import cc.mrbird.febs.mall.vo.api.activity.ApiActivityInfoDto;
+import cc.mrbird.febs.mall.vo.api.activity.ApiOperateRegisterActivityDto;
+import cc.mrbird.febs.mall.vo.api.activity.follow.ApiOperateDoDto;
+import cc.mrbird.febs.mall.vo.api.activity.options.ApiOperateVoteDto;
+import cc.mrbird.febs.mall.vo.api.activity.options.ApiVoteRecordInPageDto;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface HappyActivityService extends IService<HappyActivity> {
+
+ FebsResponse activityList(ApiActivityInfoDto dto);
+
+ FebsResponse activityInfo(ApiActivityDto dto);
+
+ FebsResponse voteOptionList(Long id);
+
+ FebsResponse voteOption(Long id);
+
+ FebsResponse operateDo(ApiOperateDoDto dto);
+
+ void operateDoVote(Long memberId, int code, Long sourceId, Long sourceOptionId, Integer type);
+
+ void operateDo(Long memberId, int code, Long sourceId, Integer type);
+
+ FebsResponse operateVote(ApiOperateVoteDto dto);
+
+ FebsResponse voteRecordInPage(ApiVoteRecordInPageDto dto);
+
+ FebsResponse operateRegister(ApiOperateRegisterActivityDto dto);
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityCategoryServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityCategoryServiceImpl.java
new file mode 100644
index 0000000..84246f9
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityCategoryServiceImpl.java
@@ -0,0 +1,80 @@
+package cc.mrbird.febs.mall.service.impl;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.enumerates.StateUpDownEnum;
+import cc.mrbird.febs.mall.entity.HappyActivityCategory;
+import cc.mrbird.febs.mall.mapper.HappyActivityCategoryMapper;
+import cc.mrbird.febs.mall.service.HappyActivityCategoryService;
+import cc.mrbird.febs.mall.vo.api.activity.category.ApiCategoryInfoVo;
+import cn.hutool.core.collection.CollUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+@Transactional
+public class HappyActivityCategoryServiceImpl extends ServiceImpl<HappyActivityCategoryMapper, HappyActivityCategory> implements HappyActivityCategoryService {
+
+ /**
+ * 公共方法:根据查询条件获取分类列表
+ *
+ * @param queryWrapper 查询条件
+ * @return 分类列表
+ */
+ private List<ApiCategoryInfoVo> getCategoryList(LambdaQueryWrapper<HappyActivityCategory> queryWrapper) {
+ try {
+ List<HappyActivityCategory> happyActivityCategories = this.baseMapper.selectList(queryWrapper);
+ if (CollUtil.isEmpty(happyActivityCategories)) {
+ log.info("查询结果为空,查询条件: {}", queryWrapper);
+ return new ArrayList<>();
+ }
+
+ // 使用 Stream API 简化转换逻辑
+ return happyActivityCategories.stream()
+ .map(item -> {
+ ApiCategoryInfoVo apiCategoryInfoVo = new ApiCategoryInfoVo();
+ apiCategoryInfoVo.setId(item.getId());
+ apiCategoryInfoVo.setName(item.getName());
+ return apiCategoryInfoVo;
+ })
+ .collect(Collectors.toList());
+ } catch (Exception e) {
+ log.error("查询分类列表时发生异常", e);
+ throw new RuntimeException("查询分类列表失败,请稍后重试");
+ }
+ }
+
+ @Override
+ public FebsResponse allCategory() {
+ LambdaQueryWrapper<HappyActivityCategory> queryWrapper = new LambdaQueryWrapper<HappyActivityCategory>()
+ .select(HappyActivityCategory::getId, HappyActivityCategory::getName)
+ .eq(HappyActivityCategory::getState, StateUpDownEnum.UP.getCode())
+ .eq(HappyActivityCategory::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+ .orderByAsc(HappyActivityCategory::getOrderCnt);
+
+ List<ApiCategoryInfoVo> categoryList = getCategoryList(queryWrapper);
+ return new FebsResponse().success().data(categoryList);
+ }
+
+ @Override
+ public FebsResponse indexCategory() {
+ LambdaQueryWrapper<HappyActivityCategory> queryWrapper = new LambdaQueryWrapper<HappyActivityCategory>()
+ .select(HappyActivityCategory::getId, HappyActivityCategory::getName)
+ .eq(HappyActivityCategory::getState, StateUpDownEnum.UP.getCode())
+ .eq(HappyActivityCategory::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+ .eq(HappyActivityCategory::getHotState, StateUpDownEnum.UP.getCode())
+ .orderByAsc(HappyActivityCategory::getOrderCnt);
+
+ List<ApiCategoryInfoVo> categoryList = getCategoryList(queryWrapper);
+ return new FebsResponse().success().data(categoryList);
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java
new file mode 100644
index 0000000..b088dd0
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/service/impl/HappyActivityServiceImpl.java
@@ -0,0 +1,319 @@
+package cc.mrbird.febs.mall.service.impl;
+
+import cc.mrbird.febs.common.entity.FebsResponse;
+import cc.mrbird.febs.common.enumerates.StateUpDownEnum;
+import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.utils.LoginUserUtil;
+import cc.mrbird.febs.mall.entity.HappyActivity;
+import cc.mrbird.febs.mall.entity.HappyActivityOption;
+import cc.mrbird.febs.mall.entity.HappyFollow;
+import cc.mrbird.febs.mall.entity.MallMember;
+import cc.mrbird.febs.mall.mapper.HappyActivityMapper;
+import cc.mrbird.febs.mall.mapper.HappyActivityOptionMapper;
+import cc.mrbird.febs.mall.mapper.HappyFollowMapper;
+import cc.mrbird.febs.mall.mapper.MallMemberMapper;
+import cc.mrbird.febs.mall.service.HappyActivityService;
+import cc.mrbird.febs.mall.vo.api.activity.*;
+import cc.mrbird.febs.mall.vo.api.activity.follow.ApiOperateDoDto;
+import cc.mrbird.febs.mall.vo.api.activity.options.*;
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+@RequiredArgsConstructor
+@Transactional
+public class HappyActivityServiceImpl extends ServiceImpl<HappyActivityMapper, HappyActivity> implements HappyActivityService {
+
+ private final HappyFollowMapper happyFollowMapper;
+ private final MallMemberMapper mallMemberMapper;
+ private final HappyActivityOptionMapper happyActivityOptionMapper;
+
+ @Override
+ public FebsResponse activityList(ApiActivityInfoDto dto) {
+ // 创建分页对象,传入当前页和每页大小
+ Page<ApiActivityInfoVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
+ // 调用Mapper方法获取活动分页数据
+ Page<ApiActivityInfoVo> happyActivityPage = this.baseMapper.selectActivityPage(page, dto);
+
+ // 检查分页结果是否包含数据
+ if(CollUtil.isNotEmpty(happyActivityPage.getRecords())){
+ List<ApiActivityInfoVo> records = happyActivityPage.getRecords();
+ // 使用Stream流操作records,获取所有活动的ID
+ List<Long> ids = records.stream().map(ApiActivityInfoVo::getId).collect(Collectors.toList());
+
+ // 查询关注点赞转发记录,筛选出关注活动类型且未删除的关注记录,并按ID升序排序,限制结果数量为3
+ List<HappyFollow> happyFollows = happyFollowMapper.selectList(
+ new LambdaQueryWrapper<HappyFollow>()
+ .select(HappyFollow::getMemberId)
+ .eq(HappyFollow::getSourceType, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode())
+ .in(HappyFollow::getSourceId, ids)
+ .eq(HappyFollow::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+ .orderByAsc(HappyFollow::getId)
+ .last("limit 3")
+ );
+
+ // 检查关注记录是否不为空
+ if(CollUtil.isNotEmpty(happyFollows)){
+ // 使用Stream流操作关注记录,获取所有成员ID的集合
+ Set<Long> memberIds = happyFollows.stream().collect(Collectors.mapping(HappyFollow::getMemberId, Collectors.toSet()));
+
+ // 查询成员信息,获取成员的ID和头像
+ List<MallMember> mallMembers = mallMemberMapper.selectList(
+ new LambdaQueryWrapper<MallMember>()
+ .select(MallMember::getId,MallMember::getAvatar)
+ .in(MallMember::getId, memberIds)
+ );
+
+ // 使用Stream流操作成员信息,生成一个以成员ID为键,成员信息为值的Map
+ Map<Long, MallMember> memberMap = mallMembers.stream()
+ .collect(Collectors.toMap(MallMember::getId, member -> member));
+
+ // 使用Stream流操作关注记录,生成一个以活动ID为键,成员ID列表为值的Map
+ Map<Long, List<Long>> followMap = happyFollows.stream()
+ .collect(Collectors.groupingBy(
+ HappyFollow::getSourceId,
+ Collectors.mapping(HappyFollow::getMemberId, Collectors.toList())
+ ));
+
+ // 遍历活动记录,为每个活动添加成员头像信息
+ records.forEach(record -> {
+ List<Long> memberIdsForRecord = followMap.get(record.getId());
+ if (CollUtil.isNotEmpty(memberIdsForRecord)) {
+ List<String> memberAvatars = memberIdsForRecord.stream()
+ .map(memberMap::get)
+ .filter(member -> member != null)
+ .map(MallMember::getAvatar)
+ .collect(Collectors.toList());
+ record.setMemberAvatars(memberAvatars);
+ }
+ });
+ }
+ }
+ // 返回成功响应,包含活动分页数据
+ return new FebsResponse().success().data(happyActivityPage);
+ }
+
+ @Override
+ public FebsResponse activityInfo(ApiActivityDto dto) {
+
+ ApiActivityVo apiActivityVo = new ApiActivityVo();
+ HappyActivity happyActivity = this.baseMapper.selectOne(
+ new LambdaQueryWrapper<HappyActivity>()
+ .eq(HappyActivity::getId, dto.getId())
+ .eq(HappyActivity::getType, dto.getType())
+ .eq(HappyActivity::getDeleteFlag, StateUpDownEnum.DOWN.getCode())
+ .ne(HappyActivity::getState, StateUpDownEnum.ACTIVITY_STATE_NOT_START.getCode())
+ );
+ if(happyActivity != null){
+ BeanUtil.copyProperties(happyActivity,apiActivityVo);
+ }
+ return new FebsResponse().success().data(apiActivityVo);
+ }
+
+ @Override
+ public FebsResponse voteOptionList(Long id) {
+ ArrayList<ApiActivityOptionListVo> apiActivityOptionListVos = new ArrayList<>();
+
+
+ HappyActivity happyActivity = this.baseMapper.selectById(id);
+ if(StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode() != happyActivity.getType()){
+ throw new FebsException("投票活动才可获取投票选项");
+ }
+
+ List<HappyActivityOption> happyActivityOptions = happyActivityOptionMapper.selectList(
+ new LambdaQueryWrapper<HappyActivityOption>()
+ .select(
+ HappyActivityOption::getId,
+ HappyActivityOption::getOptionName,
+ HappyActivityOption::getRank,
+ HappyActivityOption::getLikesCnt,
+ HappyActivityOption::getImage
+ )
+ .eq(HappyActivityOption::getActivityId,id)
+ .eq(HappyActivityOption::getState,StateUpDownEnum.VOTE_OPTION_STATE_AUDIT_SUCCESS.getCode())
+ .eq(HappyActivityOption::getDeleteFlag,StateUpDownEnum.DOWN.getCode())
+ .orderByAsc(HappyActivityOption::getRank)
+ );
+ if(CollUtil.isNotEmpty(happyActivityOptions)){
+ happyActivityOptions.forEach(option -> {
+ ApiActivityOptionListVo apiActivityOptionListVo = new ApiActivityOptionListVo();
+ BeanUtil.copyProperties(option, apiActivityOptionListVo);
+ apiActivityOptionListVos.add(apiActivityOptionListVo);
+ });
+ }
+ return new FebsResponse().success().data(apiActivityOptionListVos);
+ }
+
+ @Override
+ public FebsResponse voteOption(Long id) {
+
+ ApiActivityOptionVo apiActivityOptionVo = new ApiActivityOptionVo();
+ HappyActivityOption happyActivityOption = happyActivityOptionMapper.selectById(id);
+ if(happyActivityOption != null){
+ BeanUtil.copyProperties(happyActivityOption, apiActivityOptionVo);
+ }
+ return new FebsResponse().success().data(apiActivityOptionVo);
+ }
+
+ @Override
+ public FebsResponse operateDo(ApiOperateDoDto dto) {
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ Integer sourceType = dto.getSourceType();
+ Long sourceId = dto.getSourceId();
+ Integer type = dto.getType();
+
+ try {
+ if (StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode() == sourceType) {
+ // 活动点赞或关注
+ HappyActivity happyActivity = this.baseMapper.selectById(sourceId);
+ if (happyActivity == null) {
+ throw new FebsException("活动不存在");
+ }
+
+ if (StateUpDownEnum.ACTIVITY_TYPE_VOTE.getCode() == happyActivity.getType()) {
+ Long sourceOptionId = dto.getSourceOptionId();
+ if (sourceOptionId == null) {
+ throw new FebsException("选项ID不能为空");
+ }
+ this.operateDoVote(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, sourceOptionId, type);
+ } else {
+ this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode(), sourceId, type);
+ }
+ } else if (StateUpDownEnum.SOURCE_TYPE_SOCIAL_CIRCLE.getCode() == sourceType) {
+ // 朋友圈点赞或关注
+ this.operateDo(memberId, StateUpDownEnum.SOURCE_TYPE_SOCIAL_CIRCLE.getCode(), sourceId, type);
+ } else {
+ throw new FebsException("不支持的操作类型");
+ }
+ } catch (Exception e) {
+ // 捕获异常并返回错误信息
+ log.error("操作失败:{}", e.getMessage());
+ throw new FebsException("操作失败");
+ }
+ return new FebsResponse().success();
+ }
+
+ @Override
+ public void operateDoVote(Long memberId, int code, Long sourceId, Long sourceOptionId, Integer type) {
+ HappyFollow happyFollow = new HappyFollow();
+ happyFollow.setMemberId(memberId);
+ happyFollow.setSourceType(code);
+ happyFollow.setSourceId(sourceId);
+ happyFollow.setSourceOptionId(sourceOptionId);
+ happyFollow.setType(type);
+ happyFollowMapper.insert(happyFollow);
+ }
+
+ @Override
+ public void operateDo(Long memberId, int code, Long sourceId, Integer type) {
+ HappyFollow happyFollow = new HappyFollow();
+ happyFollow.setMemberId(memberId);
+ happyFollow.setSourceType(code);
+ happyFollow.setSourceId(sourceId);
+ happyFollow.setType(type);
+ happyFollowMapper.insert(happyFollow);
+ }
+
+ @Override
+ public FebsResponse operateVote(ApiOperateVoteDto dto) {
+ Long memberId = LoginUserUtil.getLoginUser().getId();
+ Long sourceId = dto.getSourceId();
+ Long sourceOptionId = dto.getSourceOptionId();
+ Integer sourceType = dto.getSourceType();
+ Integer type = StateUpDownEnum.VOTE.getCode();
+
+ //验证当前登录人员今日是否已经投票
+ List<HappyFollow> happyFollows = happyFollowMapper.selectList(
+ new LambdaQueryWrapper<HappyFollow>()
+ .eq(HappyFollow::getMemberId, memberId)
+ .eq(HappyFollow::getSourceId, sourceId)
+ .eq(HappyFollow::getSourceOptionId, sourceOptionId)
+ .eq(HappyFollow::getType, type)
+ .gt(HappyFollow::getCreatedTime, DateUtil.beginOfDay(new Date()))
+ );
+ if (CollUtil.isNotEmpty(happyFollows)){
+ throw new FebsException("今日已经投票");
+ }
+
+ if (StateUpDownEnum.SOURCE_TYPE_ACTIVITY.getCode() == sourceType) {
+ HappyActivityOption happyActivityOption = happyActivityOptionMapper.selectById(sourceOptionId);
+ if (happyActivityOption == null) {
+ throw new FebsException("投票对象不存在");
+ }
+ if (StateUpDownEnum.VOTE_OPTION_STATE_AUDIT_SUCCESS.getCode() != happyActivityOption.getState()) {
+ throw new FebsException("请重新选择投票对象");
+ }
+
+ Integer likesCnt = happyActivityOption.getLikesCnt();
+ if (likesCnt == null) {
+ likesCnt = 0;
+ }
+ likesCnt += 1;
+ happyActivityOption.setLikesCnt(likesCnt);
+
+ boolean updateSuccess = happyActivityOptionMapper.updateById(happyActivityOption) > 0;
+ if (!updateSuccess) {
+ throw new FebsException("更新票数失败");
+ }
+
+ this.operateDoVote(memberId, sourceType, sourceId, sourceOptionId, type);
+ }
+ return new FebsResponse().success();
+ }
+
+ @Override
+ public FebsResponse voteRecordInPage(ApiVoteRecordInPageDto dto) {
+ // 创建分页对象,传入当前页和每页大小
+ Page<ApiActivityInfoVo> page = new Page<>(dto.getPageNow(), dto.getPageSize());
+ Page<ApiVoteRecordInPageVo> voteRecordInPage = this.baseMapper.getVoteRecordInPage(page, dto);
+
+ List<ApiVoteRecordInPageVo> records = voteRecordInPage.getRecords();
+ if(CollUtil.isNotEmpty(records)){
+ //stream流操作records,获取全部的memberId(全部投票人)
+ Set<Long> memberIds = records.stream().map(ApiVoteRecordInPageVo::getMemberId).collect(Collectors.toSet());
+ if(CollUtil.isEmpty(memberIds)){
+ List<MallMember> mallMembers = mallMemberMapper.selectList(
+ new LambdaQueryWrapper<MallMember>()
+ .select(MallMember::getId, MallMember::getName, MallMember::getAvatar)
+ .in(MallMember::getId,memberIds)
+ );
+ //stream流操作mallMembers得到一个Map<memberId,MallMember>的map对象
+ Map<Long, MallMember> mallMemberMap = mallMembers.stream().collect(Collectors.toMap(MallMember::getId, mallMember -> mallMember));
+ records.forEach(record -> {
+ MallMember mallMember = mallMemberMap.get(record.getMemberId());
+ record.setName(mallMember.getName());
+ record.setAvatar(mallMember.getAvatar());
+ });
+ }
+ }
+
+
+
+ return new FebsResponse().success().data(voteRecordInPage);
+ }
+
+ @Override
+ public FebsResponse operateRegister(ApiOperateRegisterActivityDto dto) {
+ return null;
+ }
+
+ public static void main(String[] args) {
+ Date date = new Date();
+ //获取今日的凌晨的时间
+ DateTime dateTime = DateUtil.beginOfDay(date);
+ System.out.println(dateTime);
+ }
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityDto.java b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityDto.java
new file mode 100644
index 0000000..1622193
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityDto.java
@@ -0,0 +1,20 @@
+package cc.mrbird.febs.mall.vo.api.activity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "ApiActivityDto", description = "接收参数类")
+public class ApiActivityDto {
+
+ @NotNull(message = "ID不能为空")
+ @ApiModelProperty(value = "ID")
+ private Long id;
+
+ @NotNull(message = "活动类型不能为空")
+ @ApiModelProperty(value = "活动类型 1-普通活动 2-众筹活动 3-投票活动")
+ private Integer type;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityInfoDto.java b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityInfoDto.java
new file mode 100644
index 0000000..80b14e8
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityInfoDto.java
@@ -0,0 +1,30 @@
+package cc.mrbird.febs.mall.vo.api.activity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "ApiActivityInfoDto", description = "参数")
+public class ApiActivityInfoDto {
+
+ @NotNull(message = "页码不能为空")
+ @ApiModelProperty(value = "页码", example = "1")
+ private Integer pageNow;
+
+ @NotNull(message = "每页数量不能为空")
+ @ApiModelProperty(value = "每页数量", example = "10")
+ private Integer pageSize;
+
+ @ApiModelProperty(value = "分类ID")
+ private Long categoryId;
+
+ @ApiModelProperty(value = "首页活动 0-不推荐 1-推荐", example = "1")
+ private Integer hotState;
+
+ @ApiModelProperty(value = "查询名称", example = "123")
+ private String query;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityInfoVo.java
new file mode 100644
index 0000000..c2e531a
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityInfoVo.java
@@ -0,0 +1,44 @@
+package cc.mrbird.febs.mall.vo.api.activity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@ApiModel(value = "ApiActivityInfoVo", description = "参数")
+public class ApiActivityInfoVo {
+
+ @ApiModelProperty(value = "ID")
+ private Long id;
+
+ @ApiModelProperty(value = "活动封面")
+ private String indexImg;
+
+ @ApiModelProperty(value = "编码")
+ private String code;
+
+ @ApiModelProperty(value = "名称")
+ private String name;
+
+ @ApiModelProperty(value = "状态 0-未开始 1-报名中(进行中) 2-已结束")
+ private Integer state;
+
+ @ApiModelProperty(value = "开始时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date startTime;
+
+ @ApiModelProperty(value = "结束时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date endTime;
+
+ @ApiModelProperty(value = "参与人数")
+ private Integer joinCnt;
+
+ @ApiModelProperty(value = "参与头像")
+ private List<String> memberAvatars;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityVo.java b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityVo.java
new file mode 100644
index 0000000..5decd94
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiActivityVo.java
@@ -0,0 +1,69 @@
+package cc.mrbird.febs.mall.vo.api.activity;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@ApiModel(value = "ApiActivityVo", description = "参数")
+public class ApiActivityVo {
+ @ApiModelProperty(value = "ID")
+ private Long id;
+
+ @ApiModelProperty(value = "编码")
+ private String code;
+
+ @ApiModelProperty(value = "名称")
+ private String name;
+
+ @ApiModelProperty(value = "活动类型 1-普通活动 2-众筹活动 3-投票活动")
+ private Integer type;
+
+ @ApiModelProperty(value = "参与人数")
+ private Integer joinCnt;
+
+ @ApiModelProperty(value = "状态 0-未开始 1-报名中(进行中) 2-已结束")
+ private Integer state;
+
+ @ApiModelProperty(value = "开始时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date startTime;
+
+ @ApiModelProperty(value = "结束时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date endTime;
+
+ @ApiModelProperty(value = "活动联系方式")
+ private String phone;
+
+ @ApiModelProperty(value = "活动地址")
+ private String address;
+
+ @ApiModelProperty(value = "门票预计数量")
+ private Integer expectCnt;
+
+ @ApiModelProperty(value = "门票剩余数量")
+ private Integer surplusCnt;
+
+ @ApiModelProperty(value = "是否众筹 0-关闭 1-开启(开启代表收取参与费用)")
+ private Integer payState;
+
+ @ApiModelProperty(value = "众筹金额(单价)")
+ private BigDecimal payAmount;
+
+ @ApiModelProperty(value = "图片描述")
+ private String imgRemark;
+
+ @ApiModelProperty(value = "文字描述")
+ private String textRemark;
+
+ @ApiModelProperty(value = "活动封面")
+ private String indexImg;
+
+ @ApiModelProperty(value = "背景图片")
+ private String backImg;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiOperateRegisterActivityDto.java b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiOperateRegisterActivityDto.java
new file mode 100644
index 0000000..50e21b3
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/ApiOperateRegisterActivityDto.java
@@ -0,0 +1,55 @@
+package cc.mrbird.febs.mall.vo.api.activity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+@Data
+@ApiModel(value = "ApiOperateRegisterActivityDto", description = "参数")
+public class ApiOperateRegisterActivityDto {
+
+ @NotBlank(message = "活动ID不可为空")
+ @ApiModelProperty(value = "活动ID", example = "1")
+ private Long activityId;//投票活动ID
+
+ @ApiModelProperty(value = "投票选项图片 URL", example = "http://www.baidu.com")
+ private String image;//投票选项图片 URL
+
+ @ApiModelProperty(value = "视频url", example = "http://www.baidu.com")
+ private String videoUrl; //视频url
+
+ @ApiModelProperty(value = "详情描述", example = "详情描述")
+ private String description;//详情描述
+
+ @NotBlank(message = "选手名称不可为空")
+ @ApiModelProperty(value = "选手名称", example = "丽丽")
+ private String realName;//选手名称
+
+
+ @NotBlank(message = "手机不可为空")
+ @ApiModelProperty(value = "手机", example = "18700000000")
+ private String mobilePhone;//手机
+
+ @ApiModelProperty(value = "省份", example = "湖南省")
+ private String province;//省份
+
+ @ApiModelProperty(value = "城市", example = "长沙市")
+ private String city;//城市
+
+ @ApiModelProperty(value = "地址", example = "XX街道20")
+ private String address;//地址
+
+ @ApiModelProperty(value = "邮箱", example = "123456@qq.com")
+ private String email;//邮箱
+
+ @ApiModelProperty(value = "性别", example = "男")
+ private String sex;//性别
+
+ @ApiModelProperty(value = "兴趣爱好", example = "篮球")
+ private String hobby;//兴趣爱好
+
+ @ApiModelProperty(value = "是否签约MCN机构", example = "1")
+ private String mcnState;//是否签约MCN机构 0否 1是
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/api/activity/category/ApiCategoryInfoVo.java b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/category/ApiCategoryInfoVo.java
new file mode 100644
index 0000000..121dcbe
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/category/ApiCategoryInfoVo.java
@@ -0,0 +1,25 @@
+package cc.mrbird.febs.mall.vo.api.activity.category;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "ApiCategoryInfoVo", description = "参数")
+public class ApiCategoryInfoVo {
+
+ @ApiModelProperty(value = "ID")
+ private Long id;
+
+ @ApiModelProperty(value = "名称")
+ private String name;
+
+// @ApiModelProperty(value = "排序")
+// private Integer orderCnt;
+//
+// @ApiModelProperty(value = "是否推荐到首页 0-不推荐 1-推荐")
+// private Integer hotState;
+//
+// @ApiModelProperty(value = "状态 0-未开启 1-已开启")
+// private Integer state;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/api/activity/follow/ApiOperateDoDto.java b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/follow/ApiOperateDoDto.java
new file mode 100644
index 0000000..37ab08b
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/follow/ApiOperateDoDto.java
@@ -0,0 +1,27 @@
+package cc.mrbird.febs.mall.vo.api.activity.follow;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "ApiOperateDoDto", description = "接收参数类")
+public class ApiOperateDoDto {
+
+ @NotNull(message = "来源ID不能为空")
+ @ApiModelProperty(value = "来源ID")
+ private Long sourceId;
+
+ @ApiModelProperty(value = "来源选项ID")
+ private Long sourceOptionId;
+
+ @NotNull(message = "来源类型不能为空")
+ @ApiModelProperty(value = "来源类型 1-活动 2-社区圈子发布")
+ private Integer sourceType;
+
+ @NotNull(message = "操作类型不能为空")
+ @ApiModelProperty(value = "操作类型 1-关注 2-点赞 3-分享 4-投票")
+ private Integer type;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiActivityOptionListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiActivityOptionListVo.java
new file mode 100644
index 0000000..dce99ba
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiActivityOptionListVo.java
@@ -0,0 +1,26 @@
+package cc.mrbird.febs.mall.vo.api.activity.options;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "ApiActivityOptionListVo", description = "接收参数类")
+public class ApiActivityOptionListVo {
+
+ @ApiModelProperty(value = "选项ID")
+ private Long id;
+
+ @ApiModelProperty(value = "选项名称")
+ private String optionName;
+
+ @ApiModelProperty(value = "排名")
+ private Integer rank;
+
+ @ApiModelProperty(value = "点赞数量")
+ private Integer likesCnt;
+
+ @ApiModelProperty(value = "投票选项图片 URL")
+ private String image;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiActivityOptionVo.java b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiActivityOptionVo.java
new file mode 100644
index 0000000..991d30c
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiActivityOptionVo.java
@@ -0,0 +1,43 @@
+package cc.mrbird.febs.mall.vo.api.activity.options;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "ApiActivityOptionVo", description = "参数")
+public class ApiActivityOptionVo {
+
+ @ApiModelProperty(value = "选项ID")
+ private Long id;
+
+ @ApiModelProperty(value = "选项名称")
+ private String optionName;
+
+ @ApiModelProperty(value = "排名")
+ private Integer rank;
+
+ @ApiModelProperty(value = "点赞数量")
+ private Integer likesCnt;
+
+ @ApiModelProperty(value = "投票选项图片 URL")
+ private String image;
+
+ @ApiModelProperty(value = "投票选项视频URL")
+ private String videoUrl;
+
+ @ApiModelProperty(value = "选项描述")
+ private String description;
+
+ @ApiModelProperty(value = "名称")
+ private String realName;
+
+ @ApiModelProperty(value = "性别 0-女1-男 2-保密")
+ private Integer sex;
+
+ @ApiModelProperty(value = "爱好")
+ private String hobby;
+
+ @ApiModelProperty(value = "是否签约mcn机构 0否 1是")
+ private Integer mcnState;
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiOperateVoteDto.java b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiOperateVoteDto.java
new file mode 100644
index 0000000..3402938
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiOperateVoteDto.java
@@ -0,0 +1,25 @@
+package cc.mrbird.febs.mall.vo.api.activity.options;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "ApiOperateVoteDto", description = "接收参数类")
+public class ApiOperateVoteDto {
+
+ @NotNull(message = "来源ID不能为空")
+ @ApiModelProperty(value = "来源ID")
+ private Long sourceId;
+
+ @NotNull(message = "来源选项ID不能为空")
+ @ApiModelProperty(value = "来源选项ID")
+ private Long sourceOptionId;
+
+ @NotNull(message = "来源类型不能为空")
+ @ApiModelProperty(value = "来源类型 1-活动 2-社区圈子发布")
+ private Integer sourceType;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiVoteRecordInPageDto.java b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiVoteRecordInPageDto.java
new file mode 100644
index 0000000..ba2864f
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiVoteRecordInPageDto.java
@@ -0,0 +1,26 @@
+package cc.mrbird.febs.mall.vo.api.activity.options;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "ApiVoteRecordInPageDto", description = "参数")
+public class ApiVoteRecordInPageDto {
+
+
+ @NotNull(message = "页码不能为空")
+ @ApiModelProperty(value = "页码", example = "1")
+ private Integer pageNow;
+
+ @NotNull(message = "每页数量不能为空")
+ @ApiModelProperty(value = "每页数量", example = "10")
+ private Integer pageSize;
+
+ @NotNull(message = "选项ID不能为空")
+ @ApiModelProperty(value = "选项ID")
+ private Long sourceOptionId;
+
+}
diff --git a/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiVoteRecordInPageVo.java b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiVoteRecordInPageVo.java
new file mode 100644
index 0000000..dc1a495
--- /dev/null
+++ b/src/main/java/cc/mrbird/febs/mall/vo/api/activity/options/ApiVoteRecordInPageVo.java
@@ -0,0 +1,26 @@
+package cc.mrbird.febs.mall.vo.api.activity.options;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+@ApiModel(value = "ApiVoteRecordInPageVo", description = "参数")
+public class ApiVoteRecordInPageVo {
+
+ @ApiModelProperty(value = "用户memberId")
+ private Long memberId;
+
+ @ApiModelProperty(value = "投票时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private Date createdTime;
+
+ @ApiModelProperty(value = "会员名称")
+ private String name;
+
+ @ApiModelProperty(value = "头像")
+ private String avatar;
+}
diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml
index 2292ceb..9443759 100644
--- a/src/main/resources/application-test.yml
+++ b/src/main/resources/application-test.yml
@@ -70,8 +70,8 @@
# wecharpaySecret: CSxc168888CSxc168888CSxc168888xc
xcx:
wechar_login_url: https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code
- xcx_appid: wxad2fdb2fcad10fb2
- xcx_secret: 9bb58d655bff419feec3a6d948ca8b8d
+ xcx_appid: wxad2fdb2fcad10fb21
+ xcx_secret: 9bb58d655bff419feec3a6d948ca8b8d1
debug: true
wecharPaynotifyUrl: http://blnka.csxuncong.com/api/xcxPay/wxpayCallback
wecharRechargePaynotifyUrl: http://blnka.csxuncong.com/api/xcxPay/rechargeCallBack
diff --git a/src/main/resources/mapper/modules/HappyActivityMapper.xml b/src/main/resources/mapper/modules/HappyActivityMapper.xml
new file mode 100644
index 0000000..90a0a01
--- /dev/null
+++ b/src/main/resources/mapper/modules/HappyActivityMapper.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cc.mrbird.febs.mall.mapper.HappyActivityMapper">
+
+ <select id="selectActivityPage" resultType="cc.mrbird.febs.mall.vo.api.activity.ApiActivityInfoVo">
+ select
+ a.id,
+ a.index_img,
+ a.code,
+ a.name,
+ a.state,
+ a.join_cnt,
+ a.start_time,
+ a.end_time
+ from happy_activity a
+ <where>
+ a.state != 0
+ and a.DELETE_FLAG = 0
+ <if test="record != null">
+ <if test="record.query != null and record.query != ''">
+ and a.name like CONCAT('%', CONCAT(#{record.query}, '%'))
+ </if>
+ <if test="record.hotState != null">
+ and a.hot_state=#{record.hotState}
+ </if>
+ <if test="record.categoryId != null">
+ and a.category_id=#{record.categoryId}
+ </if>
+ </if>
+ </where>
+ order by a.order_cnt asc, a.id desc
+ </select>
+
+ <select id="getVoteRecordInPage" resultType="cc.mrbird.febs.mall.vo.api.activity.options.ApiVoteRecordInPageVo">
+ select
+ a.member_id as memberId,
+ a.created_time as createdTime
+ from happy_follow a
+ where
+ a.type = 4
+ and a.source_option_id = #{record.sourceOptionId}
+ order by a.id desc
+ </select>
+
+</mapper>
\ No newline at end of file
--
Gitblit v1.9.1