zhangchen 3 місяців тому
батько
коміт
01b1053397

+ 62 - 0
alien-entity/src/main/java/shop/alien/entity/store/ActivitySignInConfig.java

@@ -0,0 +1,62 @@
+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_sign_in_config")
+@ApiModel(value = "ActivitySignInConfig", description = "签到活动配置表")
+public class ActivitySignInConfig {
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "活动名称")
+    private String activityName;
+
+    @ApiModelProperty(value = "活动开始时间")
+    private Date startTime;
+
+    @ApiModelProperty(value = "活动结束时间")
+    private Date endTime;
+
+    @ApiModelProperty(value = "活动总天数")
+    private Integer totalDays;
+
+    @ApiModelProperty(value = "最大补签次数")
+    private Integer makeupLimit;
+
+    @ApiModelProperty(value = "状态:0-未启用,1-启用,2-已结束")
+    private Integer status;
+
+    @ApiModelProperty(value = "活动规则")
+    private String activityRule;
+
+    @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;
+}

+ 59 - 0
alien-entity/src/main/java/shop/alien/entity/store/ActivitySignInReward.java

@@ -0,0 +1,59 @@
+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_sign_in_reward")
+@ApiModel(value = "ActivitySignInReward", description = "签到奖励配置表")
+public class ActivitySignInReward {
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "活动ID")
+    private Integer activityId;
+
+    @ApiModelProperty(value = "连续签到天数(第几天)")
+    private Integer dayOfSequence;
+
+    @ApiModelProperty(value = "积分")
+    private Integer points;
+
+    @ApiModelProperty(value = "奖励类型1,积分,2.其他")
+    private Integer rewardType;
+
+    @ApiModelProperty(value = "签到配置类型1,连续签到,2.基础签到")
+    private Integer signConfigType;
+
+    @ApiModelProperty(value = "方案配置类型1,默认方案,2.特殊方案")
+    private Integer planConfigType;
+
+    @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;
+}

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

@@ -0,0 +1,24 @@
+package shop.alien.entity.store.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import shop.alien.entity.store.ActivitySignInConfig;
+import shop.alien.entity.store.ActivitySignInReward;
+
+import java.util.List;
+
+/**
+ * @author zhangchen
+ * @version 1.0
+ * @date 2025/9/8 10:00
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+@JsonInclude
+public class ActivityConfigVO extends ActivitySignInConfig {
+
+    @ApiModelProperty(value = "签到奖励配置列表")
+    private List<ActivitySignInReward> rewards;
+}

+ 13 - 0
alien-entity/src/main/java/shop/alien/mapper/ActivitySignInConfigMapper.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.ActivitySignInConfig;
+import shop.alien.entity.store.LifeClassManage;
+
+/**
+ * 签到活动配置mapper
+ */
+@Mapper
+public interface ActivitySignInConfigMapper extends BaseMapper<ActivitySignInConfig> {
+}

+ 13 - 0
alien-entity/src/main/java/shop/alien/mapper/ActivitySignRewardMapper.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.ActivitySignInConfig;
+import shop.alien.entity.store.ActivitySignInReward;
+
+/**
+ * 签到奖励配置mapper
+ */
+@Mapper
+public interface ActivitySignRewardMapper extends BaseMapper<ActivitySignInReward> {
+}

+ 81 - 0
alien-store/src/main/java/shop/alien/store/controller/ActivityConfigController.java

@@ -0,0 +1,81 @@
+package shop.alien.store.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import io.swagger.annotations.*;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+import shop.alien.entity.result.R;
+import shop.alien.entity.store.ActivitySignInConfig;
+import shop.alien.entity.store.vo.ActivityConfigVO;
+import shop.alien.store.service.ActivityConfigService;
+
+@Api(tags = {"二期-签到活动"})
+@Slf4j
+@CrossOrigin
+@RestController
+@RequestMapping("/activity")
+@RequiredArgsConstructor
+public class ActivityConfigController {
+
+    private final ActivityConfigService activityConfigService;
+
+    /**
+     * 创建签到活动
+     */
+    @ApiOperation("创建签到活动")
+    @ApiOperationSupport(order = 1)
+    @PostMapping("createOrUpdateActivity")
+    public R<ActivitySignInConfig> createOrUpdateActivity(@RequestBody ActivityConfigVO configVO) {
+        ActivitySignInConfig activity = activityConfigService.createOrUpdateActivity(configVO);
+        if(activity == null) {
+            R.fail("插入/更新失败");
+        }
+        return R.data(activity);
+    }
+
+    /**
+     * web-分页查询店铺信息
+     */
+    @ApiOperation("分页查询活动列表")
+    @ApiOperationSupport(order = 2)
+    @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")
+    })
+    @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);
+        return R.data(activitySignInConfigList);
+    }
+
+    @ApiOperation("获取签到活动详情")
+    @ApiOperationSupport(order = 3)
+    @GetMapping("/getActivitySignInConfigById")
+    public R<ActivityConfigVO> getActivitySignInConfigById(@RequestParam(required = true) Long activityId) {
+        log.info("ActivityConfigController.getActivitySignInConfigById={}", activityId);
+        ActivityConfigVO activityConfigVO = activityConfigService.getActivitySignInConfigById(activityId);
+        return R.data(activityConfigVO);
+    }
+
+    /**
+     * 修改库存数量
+     *
+     * @param id     主键
+     * @param status 状态
+     * @return boolean
+     */
+    @ApiOperation("更新签到活动状态")
+    @ApiOperationSupport(order = 4)
+    @GetMapping("/updateActivityStatus")
+    public R<Boolean> updateActivityStatus(@RequestParam("id") Integer id, @RequestParam("status") Integer status) {
+        log.info("ActivityConfigController.updateActivityStatus?id={}&status={}", id, status);
+        if (activityConfigService.updateActivityStatus(id, status)) {
+            return R.success("成功");
+        }
+        return R.fail("失败");
+    }
+}

+ 46 - 0
alien-store/src/main/java/shop/alien/store/service/ActivityConfigService.java

@@ -0,0 +1,46 @@
+package shop.alien.store.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.IService;
+import shop.alien.entity.store.ActivitySignInConfig;
+import shop.alien.entity.store.ActivitySignInReward;
+import shop.alien.entity.store.vo.ActivityConfigVO;
+
+import java.util.List;
+
+/**
+ * @author zhangchen
+ * @version 1.0
+ * @date 2025/09/05 10:00
+ */
+public interface ActivityConfigService extends IService<ActivitySignInConfig> {
+    /**
+     * 创建签到活动
+     */
+    ActivitySignInConfig createOrUpdateActivity(ActivityConfigVO configVO);
+
+    /**
+     * 更新签到活动
+     */
+    ActivitySignInConfig updateActivity(Long id, ActivityConfigVO configVO);
+
+    /**
+     * 获取活动详情
+     */
+    ActivityConfigVO getActivitySignInConfigById(Long id);
+
+    /**
+     * 获取活动列表
+     */
+    IPage<ActivitySignInConfig> getActivityList(int pageNum, int pageSize, String activityName);
+
+    /**
+     * 更新活动状态
+     */
+    boolean updateActivityStatus(Integer id, Integer status);
+
+    /**
+     * 保存活动奖励配置
+     */
+    void saveActivityRewards(Long activityId, List<ActivitySignInReward> rewards);
+}

+ 136 - 0
alien-store/src/main/java/shop/alien/store/service/impl/ActivityConfigServiceImpl.java

@@ -0,0 +1,136 @@
+package shop.alien.store.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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.apache.commons.lang.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import shop.alien.entity.store.ActivitySignInConfig;
+import shop.alien.entity.store.ActivitySignInReward;
+import shop.alien.entity.store.vo.ActivityConfigVO;
+import shop.alien.mapper.ActivitySignRewardMapper;
+import shop.alien.store.service.ActivityConfigService;
+import shop.alien.mapper.ActivitySignInConfigMapper;
+
+import java.util.List;
+
+/**
+ *
+ * 签到类型活动服务
+ * @author zhangchen
+ * @since 2025-9-8
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class ActivityConfigServiceImpl extends ServiceImpl<ActivitySignInConfigMapper, ActivitySignInConfig> implements ActivityConfigService {
+
+    private final ActivitySignInConfigMapper activitySignInConfigMapper;
+    private final ActivitySignRewardMapper activitySignRewardMapper;
+
+    @Override
+    public ActivitySignInConfig createOrUpdateActivity(ActivityConfigVO configVO) {
+        log.info("创建活动开始执行,请求参数: {}", configVO);
+        if(configVO == null) {
+            log.error("创建活动configVO为空。");
+            return null;
+        }
+        List<ActivitySignInReward> activitySignInRewardList = configVO.getRewards();
+        if(CollectionUtils.isEmpty(activitySignInRewardList)) {
+            log.error("创建活动奖励配置为空。");
+            return null;
+        }
+        ActivitySignInConfig activitySignInConfig = new ActivitySignInConfig();
+        if(configVO.getId() == null) {
+            //创建活动操作
+            BeanUtils.copyProperties(configVO, activitySignInConfig);
+            int configInsertResult = activitySignInConfigMapper.insert(activitySignInConfig);
+            if(configInsertResult == 0){
+                //插入活动配置数据失败,返回
+                log.error("插入活动配置数据失败, {}", configVO);
+                return null;
+            }
+            activitySignInRewardList.forEach(item -> {
+                item.setActivityId(activitySignInConfig.getId());
+                activitySignRewardMapper.insert(item);
+            });
+        } else {
+            //更新操作
+            BeanUtils.copyProperties(configVO, activitySignInConfig);
+            int configUpdateResult =  activitySignInConfigMapper.updateById(activitySignInConfig);
+            if(configUpdateResult == 0){
+                //更新活动配置数据失败,返回
+                log.error("更新活动配置数据失败, {}", configVO);
+                return null;
+            }
+            activitySignInRewardList.forEach(item -> {
+                activitySignRewardMapper.updateById(item);
+            });
+        }
+        return configVO;
+    }
+
+    @Override
+    public ActivitySignInConfig updateActivity(Long id, ActivityConfigVO configVO) {
+        return null;
+    }
+
+    @Override
+    public ActivityConfigVO getActivitySignInConfigById(Long id) {
+        ActivityConfigVO activityConfigVO = new ActivityConfigVO();
+        if(id == null || id == 0){
+            //id为空
+            return activityConfigVO;
+        }
+
+        // 查询签到活动配置信息
+        ActivitySignInConfig activitySignInConfig = activitySignInConfigMapper.selectById(id);
+        if(activitySignInConfig == null){
+            return activityConfigVO;
+        }
+        BeanUtils.copyProperties(activitySignInConfig, activityConfigVO);
+
+        // 查询活动奖励列表
+        LambdaQueryWrapper<ActivitySignInReward> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ActivitySignInReward::getActivityId, id);
+        wrapper.eq(ActivitySignInReward::getDeleteFlag,0);
+        List <ActivitySignInReward> activitySignInRewardList = activitySignRewardMapper.selectList(wrapper);
+        if(CollectionUtils.isEmpty(activitySignInRewardList)){
+            return activityConfigVO;
+        }
+        activityConfigVO.setRewards(activitySignInRewardList);
+        return activityConfigVO;
+    }
+
+    @Override
+    public IPage<ActivitySignInConfig> getActivityList(int pageNum, int pageSize, String activityName) {
+        IPage<ActivitySignInConfig> iPage = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<ActivitySignInConfig> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        if(StringUtils.isNotBlank(activityName)){
+            lambdaQueryWrapper.like(ActivitySignInConfig::getActivityName, activityName);
+        }
+        return activitySignInConfigMapper.selectPage(iPage, lambdaQueryWrapper);
+    }
+
+    @Override
+    public boolean updateActivityStatus(Integer id, Integer status) {
+        if(id == null || status == null){
+            return false;
+        }
+        ActivitySignInConfig activitySignInConfig = new ActivitySignInConfig();
+        activitySignInConfig.setId(id);
+        activitySignInConfig.setStatus(status);
+        int result = activitySignInConfigMapper.updateById(activitySignInConfig);
+        return result > 0;
+    }
+
+    @Override
+    public void saveActivityRewards(Long activityId, List<ActivitySignInReward> rewards) {
+
+    }
+}