浏览代码

签到活动功能代码

zhangchen 3 月之前
父节点
当前提交
bfae781685

+ 55 - 0
alien-entity/src/main/java/shop/alien/entity/store/ActivityPeriod.java

@@ -0,0 +1,55 @@
+package shop.alien.entity.store;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+@Data
+@JsonInclude
+@TableName("activity_period")
+@ApiModel(value = "ActivityPeriod", description = "活动时间段配置表")
+public class ActivityPeriod {
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "活动ID")
+    private Integer activityId;
+
+    @ApiModelProperty(value = "时间段名称")
+    private String periodName;
+
+    @ApiModelProperty(value = "开始时间")
+    private Date startTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private Date endTime;
+
+    @ApiModelProperty(value = "状态:0-未启用,1-启用,2-已结束")
+    private Integer status;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    private Integer updatedUserId;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+}

+ 7 - 6
alien-entity/src/main/java/shop/alien/entity/store/ActivitySignInConfig.java

@@ -21,12 +21,6 @@ public class ActivitySignInConfig {
     @ApiModelProperty(value = "活动名称")
     private String activityName;
 
-    @ApiModelProperty(value = "活动开始时间")
-    private Date startTime;
-
-    @ApiModelProperty(value = "活动结束时间")
-    private Date endTime;
-
     @ApiModelProperty(value = "活动总天数")
     private Integer totalDays;
 
@@ -59,4 +53,11 @@ public class ActivitySignInConfig {
     @TableField("delete_flag")
     @TableLogic
     private Integer deleteFlag;
+
+    @ApiModelProperty(value = "方案配置类型1,默认方案,2.特殊方案")
+    private Integer planConfigType;
+
+    @ApiModelProperty(value = "返回错误信息")
+    @TableField(exist = false)
+    private String errorMessage;
 }

+ 4 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/ActivityConfigVO.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import shop.alien.entity.store.ActivityPeriod;
 import shop.alien.entity.store.ActivitySignInConfig;
 import shop.alien.entity.store.ActivitySignInReward;
 
@@ -20,5 +21,8 @@ import java.util.List;
 public class ActivityConfigVO extends ActivitySignInConfig {
 
     @ApiModelProperty(value = "签到奖励配置列表")
+    private List<ActivityPeriod> activityPeriodList;
+
+    @ApiModelProperty(value = "签到奖励配置列表")
     private List<ActivitySignInReward> rewards;
 }

+ 13 - 0
alien-entity/src/main/java/shop/alien/mapper/ActivityPeriodMapper.java

@@ -0,0 +1,13 @@
+package shop.alien.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import shop.alien.entity.store.ActivityPeriod;
+import shop.alien.entity.store.ActivitySignInConfig;
+
+/**
+ * 时间段配置mapper
+ */
+@Mapper
+public interface ActivityPeriodMapper extends BaseMapper<ActivityPeriod> {
+}

+ 31 - 7
alien-store/src/main/java/shop/alien/store/controller/ActivityConfigController.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.ActivitySignInConfig;
@@ -26,10 +27,13 @@ public class ActivityConfigController {
     @ApiOperation("创建签到活动")
     @ApiOperationSupport(order = 1)
     @PostMapping("createOrUpdateActivity")
-    public R<ActivitySignInConfig> createOrUpdateActivity(@RequestBody ActivityConfigVO configVO) {
-        ActivitySignInConfig activity = activityConfigService.createOrUpdateActivity(configVO);
+    public R<ActivityConfigVO> createOrUpdateActivity(@RequestBody ActivityConfigVO configVO) {
+        ActivityConfigVO activity = activityConfigService.createOrUpdateActivity(configVO);
         if(activity == null) {
-            R.fail("插入/更新失败");
+            return R.fail("插入/更新失败");
+        }
+        if(StringUtils.isNotBlank(activity.getErrorMessage())){
+            return R.fail(activity.getErrorMessage());
         }
         return R.data(activity);
     }
@@ -42,13 +46,16 @@ public class ActivityConfigController {
     @ApiImplicitParams({
             @ApiImplicitParam(name = "pageNum", value = "页数", dataType = "int", paramType = "query", required = true),
             @ApiImplicitParam(name = "pageSize", value = "页容", dataType = "int", paramType = "query", required = true),
-            @ApiImplicitParam(name = "activityName", value = "活动名称", dataType = "String", paramType = "query")
+            @ApiImplicitParam(name = "activityName", value = "活动名称", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "status", value = "状态", dataType = "Integer", paramType = "query")
+
     })
     @GetMapping("/getActivityConfigList")
     public R<IPage<ActivitySignInConfig>> getActivityList(@RequestParam(defaultValue = "1") int pageNum,
                                                             @RequestParam(defaultValue = "10") int pageSize,
-                                                            @RequestParam(required = false) String activityName){
-        IPage<ActivitySignInConfig> activitySignInConfigList = activityConfigService.getActivityList(pageNum, pageSize, activityName);
+                                                            @RequestParam(required = false) String activityName,
+                                                          @RequestParam(required = false) Integer status){
+        IPage<ActivitySignInConfig> activitySignInConfigList = activityConfigService.getActivityList(pageNum, pageSize, activityName, status);
         return R.data(activitySignInConfigList);
     }
 
@@ -61,6 +68,15 @@ public class ActivityConfigController {
         return R.data(activityConfigVO);
     }
 
+    @ApiOperation("获取默认方案签到活动详情")
+    @ApiOperationSupport(order = 4)
+    @GetMapping("/getDefaultActivitySignInConfigById")
+    public R<ActivityConfigVO> getDefaultActivitySignInConfigById() {
+        log.info("ActivityConfigController.getDefaultActivitySignInConfigById");
+        ActivityConfigVO activityConfigVO = activityConfigService.getDefaultActivitySignInConfigById();
+        return R.data(activityConfigVO);
+    }
+
     /**
      * 修改库存数量
      *
@@ -69,7 +85,7 @@ public class ActivityConfigController {
      * @return boolean
      */
     @ApiOperation("更新签到活动状态")
-    @ApiOperationSupport(order = 4)
+    @ApiOperationSupport(order = 5)
     @GetMapping("/updateActivityStatus")
     public R<Boolean> updateActivityStatus(@RequestParam("id") Integer id, @RequestParam("status") Integer status) {
         log.info("ActivityConfigController.updateActivityStatus?id={}&status={}", id, status);
@@ -78,4 +94,12 @@ public class ActivityConfigController {
         }
         return R.fail("失败");
     }
+
+    @ApiOperation("删除活动")
+    @ApiOperationSupport(order = 6)
+    @ApiImplicitParams({@ApiImplicitParam(name = "id", value = "活动ID", dataType = "Integer", paramType = "query", required = true)})
+    @GetMapping("/deleteActivity")
+    public R<Boolean> deleteActivity(Integer id) {
+        return R.data(activityConfigService.deleteActivity(id));
+    }
 }

+ 13 - 2
alien-store/src/main/java/shop/alien/store/service/ActivityConfigService.java

@@ -17,7 +17,7 @@ public interface ActivityConfigService extends IService<ActivitySignInConfig> {
     /**
      * 创建签到活动
      */
-    ActivitySignInConfig createOrUpdateActivity(ActivityConfigVO configVO);
+    ActivityConfigVO createOrUpdateActivity(ActivityConfigVO configVO);
 
     /**
      * 更新签到活动
@@ -32,7 +32,7 @@ public interface ActivityConfigService extends IService<ActivitySignInConfig> {
     /**
      * 获取活动列表
      */
-    IPage<ActivitySignInConfig> getActivityList(int pageNum, int pageSize, String activityName);
+    IPage<ActivitySignInConfig> getActivityList(int pageNum, int pageSize, String activityName, Integer status);
 
     /**
      * 更新活动状态
@@ -43,4 +43,15 @@ public interface ActivityConfigService extends IService<ActivitySignInConfig> {
      * 保存活动奖励配置
      */
     void saveActivityRewards(Long activityId, List<ActivitySignInReward> rewards);
+
+    /**
+     * 删除活动
+     */
+    boolean deleteActivity(Integer id);
+
+    /**
+     * 获取默认方案
+     */
+    ActivityConfigVO getDefaultActivitySignInConfigById();
+
 }

+ 165 - 10
alien-store/src/main/java/shop/alien/store/service/impl/ActivityConfigServiceImpl.java

@@ -1,5 +1,6 @@
 package shop.alien.store.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -10,13 +11,17 @@ import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import shop.alien.entity.store.ActivityPeriod;
 import shop.alien.entity.store.ActivitySignInConfig;
 import shop.alien.entity.store.ActivitySignInReward;
 import shop.alien.entity.store.vo.ActivityConfigVO;
+import shop.alien.mapper.ActivityPeriodMapper;
 import shop.alien.mapper.ActivitySignRewardMapper;
 import shop.alien.store.service.ActivityConfigService;
 import shop.alien.mapper.ActivitySignInConfigMapper;
 
+import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 
 /**
@@ -32,29 +37,68 @@ public class ActivityConfigServiceImpl extends ServiceImpl<ActivitySignInConfigM
 
     private final ActivitySignInConfigMapper activitySignInConfigMapper;
     private final ActivitySignRewardMapper activitySignRewardMapper;
+    private final ActivityPeriodMapper activityPeriodMapper;
 
     @Override
-    public ActivitySignInConfig createOrUpdateActivity(ActivityConfigVO configVO) {
+    public ActivityConfigVO createOrUpdateActivity(ActivityConfigVO configVO) {
         log.info("创建活动开始执行,请求参数: {}", configVO);
         if(configVO == null) {
             log.error("创建活动configVO为空。");
-            return null;
+            configVO = new ActivityConfigVO();
+            configVO.setErrorMessage("参数为空");
+            return configVO;
         }
         List<ActivitySignInReward> activitySignInRewardList = configVO.getRewards();
         if(CollectionUtils.isEmpty(activitySignInRewardList)) {
             log.error("创建活动奖励配置为空。");
-            return null;
+            configVO.setErrorMessage("活动奖励配置为空");
+            return configVO;
         }
+
+        List<ActivityPeriod> activityPeriodList = configVO.getActivityPeriodList();
+        if(!CollectionUtils.isEmpty(activityPeriodList)){
+            boolean checkPeriodResult= checkPeriodTime(activityPeriodList);
+            if(!checkPeriodResult){
+                configVO.setErrorMessage("方案时间重叠");
+                return configVO;
+            }
+        }
+
         ActivitySignInConfig activitySignInConfig = new ActivitySignInConfig();
+
         if(configVO.getId() == null) {
+            if(configVO.getPlanConfigType()!=null && configVO.getPlanConfigType() == 1){
+                // 创建默认活动,先check是否已经存在默认数据
+                LambdaQueryWrapper<ActivitySignInConfig> activitySignInConfigLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                activitySignInConfigLambdaQueryWrapper.eq(ActivitySignInConfig::getDeleteFlag, 0);
+                activitySignInConfigLambdaQueryWrapper.eq(ActivitySignInConfig::getPlanConfigType, 1);
+                int count = activitySignInConfigMapper.selectCount(activitySignInConfigLambdaQueryWrapper);
+                if(count > 0){
+                    log.error("已经存在默认方案,请不要重复创建。");
+                    configVO.setErrorMessage("已经存在默认方案,请不要重复创建。");
+                    return configVO;
+                }
+            }
+
             //创建活动操作
             BeanUtils.copyProperties(configVO, activitySignInConfig);
             int configInsertResult = activitySignInConfigMapper.insert(activitySignInConfig);
             if(configInsertResult == 0){
                 //插入活动配置数据失败,返回
                 log.error("插入活动配置数据失败, {}", configVO);
-                return null;
+                configVO.setErrorMessage("插入活动配置数据失败");
+                return configVO;
             }
+
+            // 创建时间段数据
+            if(!CollectionUtils.isEmpty(activityPeriodList)) {
+                activityPeriodList.forEach(item -> {
+                    item.setActivityId(activitySignInConfig.getId());
+                    activityPeriodMapper.insert(item);
+                });
+            }
+
+            // 创建活动奖励记录
             activitySignInRewardList.forEach(item -> {
                 item.setActivityId(activitySignInConfig.getId());
                 activitySignRewardMapper.insert(item);
@@ -66,15 +110,57 @@ public class ActivityConfigServiceImpl extends ServiceImpl<ActivitySignInConfigM
             if(configUpdateResult == 0){
                 //更新活动配置数据失败,返回
                 log.error("更新活动配置数据失败, {}", configVO);
-                return null;
+                configVO.setErrorMessage("更新活动配置数据失败");
+                return configVO;
             }
-            activitySignInRewardList.forEach(item -> {
-                activitySignRewardMapper.updateById(item);
+            int activityId = configVO.getId();
+
+            //更新时间段信息
+            LambdaQueryWrapper<ActivityPeriod> deletePeriodWrapper = new LambdaQueryWrapper<>();
+            deletePeriodWrapper.eq(ActivityPeriod::getActivityId, configVO.getId());
+            activityPeriodMapper.delete(deletePeriodWrapper);
+            if(!CollectionUtils.isEmpty(activityPeriodList)){
+                activityPeriodList.forEach(item -> {
+                    item.setActivityId(activityId);
+                    activityPeriodMapper.insert(item);
+                });
+            }
+
+            //更新活动奖励
+            LambdaQueryWrapper<ActivitySignInReward> deleteRewardWrapper = new LambdaQueryWrapper<>();
+            deleteRewardWrapper.eq(ActivitySignInReward::getActivityId, configVO.getId());
+            activitySignRewardMapper.delete(deleteRewardWrapper);
+            if(!CollectionUtils.isEmpty(activitySignInRewardList)){
+                activitySignInRewardList.forEach(item -> {
+                item.setActivityId(activityId);
+                activitySignRewardMapper.insert(item);
             });
+
+            }
         }
         return configVO;
     }
 
+    private boolean  checkPeriodTime(List<ActivityPeriod> activityPeriodList){
+        if (activityPeriodList == null || activityPeriodList.size() <= 1) {
+            return true;
+        }
+
+        // 按开始时间排序
+        List<ActivityPeriod> sorted = new ArrayList<>(activityPeriodList);
+        sorted.sort(Comparator.comparing(ActivityPeriod::getStartTime));
+        for (int i = 0; i < sorted.size() - 1; i++) {
+            ActivityPeriod current = sorted.get(i);
+            ActivityPeriod next = sorted.get(i + 1);
+
+            // 检查重叠条件:当前结束时间 > 下一个开始时间
+            if (current.getEndTime().compareTo(next.getStartTime()) > 0) {
+                return false; // 存在重叠
+            }
+        }
+        return true;
+    }
+
     @Override
     public ActivitySignInConfig updateActivity(Long id, ActivityConfigVO configVO) {
         return null;
@@ -100,20 +186,67 @@ public class ActivityConfigServiceImpl extends ServiceImpl<ActivitySignInConfigM
         wrapper.eq(ActivitySignInReward::getActivityId, id);
         wrapper.eq(ActivitySignInReward::getDeleteFlag,0);
         List <ActivitySignInReward> activitySignInRewardList = activitySignRewardMapper.selectList(wrapper);
-        if(CollectionUtils.isEmpty(activitySignInRewardList)){
+        if(!CollectionUtils.isEmpty(activitySignInRewardList)){
+            activityConfigVO.setRewards(activitySignInRewardList);
+        }
+        // 查询活动时间段列表
+        LambdaQueryWrapper<ActivityPeriod> activityPeriodWrapper = new LambdaQueryWrapper<>();
+        activityPeriodWrapper.eq(ActivityPeriod::getActivityId, id);
+        activityPeriodWrapper.eq(ActivityPeriod::getDeleteFlag,0);
+        List <ActivityPeriod> activityPeriodList = activityPeriodMapper.selectList(activityPeriodWrapper);
+        if(!CollectionUtils.isEmpty(activityPeriodList)){
+            activityConfigVO.setActivityPeriodList(activityPeriodList);
+        }
+
+        return activityConfigVO;
+    }
+
+    @Override
+    public ActivityConfigVO getDefaultActivitySignInConfigById() {
+        ActivityConfigVO activityConfigVO = new ActivityConfigVO();
+
+        // 查询签到活动配置信息
+        LambdaQueryWrapper<ActivitySignInConfig> activitySignInConfigLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        activitySignInConfigLambdaQueryWrapper.eq(ActivitySignInConfig::getDeleteFlag, 0);
+        activitySignInConfigLambdaQueryWrapper.eq(ActivitySignInConfig::getPlanConfigType,1);
+        ActivitySignInConfig activitySignInConfig = activitySignInConfigMapper.selectOne(activitySignInConfigLambdaQueryWrapper);
+        if(activitySignInConfig == null){
             return activityConfigVO;
         }
-        activityConfigVO.setRewards(activitySignInRewardList);
+        BeanUtils.copyProperties(activitySignInConfig, activityConfigVO);
+
+        // 查询活动奖励列表
+        LambdaQueryWrapper<ActivitySignInReward> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ActivitySignInReward::getActivityId, activitySignInConfig.getId());
+        wrapper.eq(ActivitySignInReward::getDeleteFlag,0);
+        List <ActivitySignInReward> activitySignInRewardList = activitySignRewardMapper.selectList(wrapper);
+        if(!CollectionUtils.isEmpty(activitySignInRewardList)){
+            activityConfigVO.setRewards(activitySignInRewardList);
+        }
+        // 查询活动时间段列表
+        LambdaQueryWrapper<ActivityPeriod> activityPeriodWrapper = new LambdaQueryWrapper<>();
+        activityPeriodWrapper.eq(ActivityPeriod::getActivityId, activitySignInConfig.getId());
+        activityPeriodWrapper.eq(ActivityPeriod::getDeleteFlag,0);
+        List <ActivityPeriod> activityPeriodList = activityPeriodMapper.selectList(activityPeriodWrapper);
+        if(!CollectionUtils.isEmpty(activityPeriodList)){
+            activityConfigVO.setActivityPeriodList(activityPeriodList);
+        }
+
         return activityConfigVO;
     }
 
     @Override
-    public IPage<ActivitySignInConfig> getActivityList(int pageNum, int pageSize, String activityName) {
+    public IPage<ActivitySignInConfig> getActivityList(int pageNum, int pageSize, String activityName, Integer status) {
         IPage<ActivitySignInConfig> iPage = new Page<>(pageNum, pageSize);
         LambdaQueryWrapper<ActivitySignInConfig> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         if(StringUtils.isNotBlank(activityName)){
             lambdaQueryWrapper.like(ActivitySignInConfig::getActivityName, activityName);
         }
+        if(status != null){
+            lambdaQueryWrapper.eq(ActivitySignInConfig::getStatus, status);
+        }
+        lambdaQueryWrapper.eq(ActivitySignInConfig::getDeleteFlag, 0);
+        lambdaQueryWrapper.eq(ActivitySignInConfig::getPlanConfigType, 2);
         return activitySignInConfigMapper.selectPage(iPage, lambdaQueryWrapper);
     }
 
@@ -133,4 +266,26 @@ public class ActivityConfigServiceImpl extends ServiceImpl<ActivitySignInConfigM
     public void saveActivityRewards(Long activityId, List<ActivitySignInReward> rewards) {
 
     }
+
+    @Override
+    public boolean deleteActivity(Integer id) {
+        if(id != null){
+            // 删除活动信息
+            int configResult = activitySignInConfigMapper.deleteById(id);
+            if(configResult == 0){
+                return false;
+            }
+
+            // 删除活动奖励信息
+            LambdaQueryWrapper<ActivitySignInReward> activitySignInRewardWrapper = new LambdaQueryWrapper<>();
+            activitySignInRewardWrapper.eq(ActivitySignInReward::getActivityId, id);
+            activitySignRewardMapper.delete(activitySignInRewardWrapper);
+
+            // 删除活动时间信息
+            LambdaQueryWrapper<ActivityPeriod> activityPeriodLambdaQueryWrapper = new LambdaQueryWrapper<>();
+            activityPeriodLambdaQueryWrapper.eq(ActivityPeriod::getActivityId, id);
+            activityPeriodMapper.delete(activityPeriodLambdaQueryWrapper);
+        }
+        return true;
+    }
 }