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