Browse Source

积分规则代码提交

wangzhijun 5 ngày trước cách đây
mục cha
commit
ab523d737f

+ 2 - 2
nightFragrance-massage/src/main/java/com/ylx/point/domain/vo/PointActivityBaseVo.java

@@ -22,7 +22,7 @@ public class PointActivityBaseVo {
     private String description;
     private String description;
 
 
     @ApiModelProperty("活动类型")
     @ApiModelProperty("活动类型")
-    private Integer activityType;
+    private String activityType;
 
 
     @ApiModelProperty("覆盖城市代码")
     @ApiModelProperty("覆盖城市代码")
     private String cityCode;
     private String cityCode;
@@ -48,6 +48,6 @@ public class PointActivityBaseVo {
     private String expireYear;
     private String expireYear;
 
 
     @ApiModelProperty("状态: 0=未开始, 1=进行中, 2=已结束, 3=草稿")
     @ApiModelProperty("状态: 0=未开始, 1=进行中, 2=已结束, 3=草稿")
-    private Long status;
+    private String status;
 
 
 }
 }

+ 2 - 9
nightFragrance-massage/src/main/java/com/ylx/point/domain/vo/PointActivityStatVo.java

@@ -1,7 +1,6 @@
 package com.ylx.point.domain.vo;
 package com.ylx.point.domain.vo;
 
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
@@ -19,18 +18,12 @@ public class PointActivityStatVo {
     @ApiModelProperty(name = "活动名称")
     @ApiModelProperty(name = "活动名称")
     private String name;
     private String name;
 
 
-    @JsonIgnore
-    private Integer activityType;
-
     @ApiModelProperty(name = "活动类型")
     @ApiModelProperty(name = "活动类型")
-    private Integer activityTypeName;
+    private Integer activityType;
 
 
-    @JsonIgnore
+    @ApiModelProperty(name = "覆盖城市")
     private String cityCode;
     private String cityCode;
 
 
-    @ApiModelProperty(name = "覆盖城市名称")
-    private String cityName;
-
     @ApiModelProperty(name = "是否长期有效 (1:是, 0:否)")
     @ApiModelProperty(name = "是否长期有效 (1:是, 0:否)")
     private Integer isPermanent;
     private Integer isPermanent;
 
 

+ 20 - 0
nightFragrance-massage/src/main/java/com/ylx/point/enums/PointActivityExpirePolicyEnum.java

@@ -0,0 +1,20 @@
+package com.ylx.point.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum PointActivityExpirePolicyEnum {
+
+    PERMANENT_VALID(0, "永久有效"),
+    TRANSACTION_EXPIRE(1, "逐笔过期"),
+    YEARLY_EXPIRE(2, "逐年过期");
+
+    private final Integer code;
+    private final String info;
+
+    PointActivityExpirePolicyEnum(Integer code, String info) {
+        this.code = code;
+        this.info = info;
+    }
+
+}

+ 2 - 2
nightFragrance-massage/src/main/java/com/ylx/point/mapper/PointActivityMapper.java

@@ -1,5 +1,6 @@
 package com.ylx.point.mapper;
 package com.ylx.point.mapper;
 
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ylx.point.domain.PointActivity;
 import com.ylx.point.domain.PointActivity;
 import com.ylx.point.domain.dto.PointActivityPageDTO;
 import com.ylx.point.domain.dto.PointActivityPageDTO;
 import com.ylx.point.domain.vo.PointActivityPageVo;
 import com.ylx.point.domain.vo.PointActivityPageVo;
@@ -12,8 +13,7 @@ import java.util.List;
  * @author wzj
  * @author wzj
  * @date 2026-03-25
  * @date 2026-03-25
  */
  */
-public interface PointActivityMapper 
-{
+public interface PointActivityMapper extends BaseMapper<PointActivity> {
     /**
     /**
      * 查询积分活动主
      * 查询积分活动主
      * 
      * 

+ 0 - 2
nightFragrance-massage/src/main/java/com/ylx/point/service/IPointActivityService.java

@@ -1,7 +1,5 @@
 package com.ylx.point.service;
 package com.ylx.point.service;
 
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ylx.point.domain.PointActivity;
 import com.ylx.point.domain.dto.PointActivityDTO;
 import com.ylx.point.domain.dto.PointActivityDTO;
 import com.ylx.point.domain.dto.PointActivityPageDTO;
 import com.ylx.point.domain.dto.PointActivityPageDTO;
 import com.ylx.point.domain.dto.PointActivityValidityDTO;
 import com.ylx.point.domain.dto.PointActivityValidityDTO;

+ 60 - 14
nightFragrance-massage/src/main/java/com/ylx/point/service/impl/PointActivityServiceImpl.java

@@ -1,38 +1,38 @@
 package com.ylx.point.service.impl;
 package com.ylx.point.service.impl;
 
 
-import java.time.DateTimeException;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.ZoneId;
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
-
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ylx.common.core.domain.R;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ylx.common.exception.base.BaseException;
 import com.ylx.common.exception.base.BaseException;
 import com.ylx.common.utils.DateUtils;
 import com.ylx.common.utils.DateUtils;
+import com.ylx.point.domain.PointActivity;
 import com.ylx.point.domain.PointActivityTask;
 import com.ylx.point.domain.PointActivityTask;
 import com.ylx.point.domain.PointSignReward;
 import com.ylx.point.domain.PointSignReward;
 import com.ylx.point.domain.PointSignTask;
 import com.ylx.point.domain.PointSignTask;
 import com.ylx.point.domain.dto.*;
 import com.ylx.point.domain.dto.*;
 import com.ylx.point.domain.vo.*;
 import com.ylx.point.domain.vo.*;
+import com.ylx.point.enums.PointActivityExpirePolicyEnum;
 import com.ylx.point.enums.PointActivityStatusEnum;
 import com.ylx.point.enums.PointActivityStatusEnum;
 import com.ylx.point.enums.PointActivityTypeEnum;
 import com.ylx.point.enums.PointActivityTypeEnum;
+import com.ylx.point.mapper.PointActivityMapper;
+import com.ylx.point.service.IPointActivityService;
 import com.ylx.point.service.IPointActivityTaskService;
 import com.ylx.point.service.IPointActivityTaskService;
 import com.ylx.point.service.IPointSignRewardService;
 import com.ylx.point.service.IPointSignRewardService;
 import com.ylx.point.service.IPointSignTaskService;
 import com.ylx.point.service.IPointSignTaskService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import com.ylx.point.domain.PointActivity;
-import com.ylx.point.mapper.PointActivityMapper;
-import com.ylx.point.service.IPointActivityService;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 
 
+import java.time.DateTimeException;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
 
 
 /**
 /**
  * 积分活动主Service业务层处理
  * 积分活动主Service业务层处理
@@ -41,7 +41,7 @@ import org.springframework.transaction.annotation.Transactional;
  * @date 2026-03-25
  * @date 2026-03-25
  */
  */
 @Service
 @Service
-public class PointActivityServiceImpl implements IPointActivityService {
+public class PointActivityServiceImpl extends ServiceImpl<PointActivityMapper, PointActivity> implements IPointActivityService {
     @Autowired
     @Autowired
     private PointActivityMapper pointActivityMapper;
     private PointActivityMapper pointActivityMapper;
     @Autowired
     @Autowired
@@ -135,6 +135,24 @@ public class PointActivityServiceImpl implements IPointActivityService {
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public void editValidity(PointActivityValidityDTO dto) {
     public void editValidity(PointActivityValidityDTO dto) {
 
 
+        // 根据dto中activityType获取全部的活动list
+        LambdaQueryWrapper<PointActivity> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(PointActivity::getActivityType, dto.getActivityType());
+        List<PointActivity> activityList = pointActivityMapper.selectList(queryWrapper);
+        if (CollectionUtil.isEmpty(activityList)) {
+            throw new BaseException("该类型的活动不存在,设置失败");
+        }
+
+        // 判断活动list中只要有活动的状态为"进行中",修改就失败
+        boolean hasOngoingActivity = activityList.stream()
+                .anyMatch(activity -> PointActivityStatusEnum.IN_PROGRESS.getCode().equals(activity.getStatus()));
+        if (hasOngoingActivity) {
+            throw new BaseException("存在进行中的活动,无法修改有效期");
+        }
+
+        // 批量更新活动的有效期策略
+        batchUpdateExpirePolicy(activityList, dto);
+
     }
     }
 
 
     private void validateActivityDTO(PointActivityDTO dto) {
     private void validateActivityDTO(PointActivityDTO dto) {
@@ -399,4 +417,32 @@ public class PointActivityServiceImpl implements IPointActivityService {
         pointActivityTaskService.batchInsertPointActivityTask(activityTasks);
         pointActivityTaskService.batchInsertPointActivityTask(activityTasks);
     }
     }
 
 
+    private void batchUpdateExpirePolicy(List<PointActivity> activityList, PointActivityValidityDTO dto) {
+        Integer expirePolicy = dto.getExpirePolicy();
+
+        // 使用Stream处理活动列表
+        List<PointActivity> updateList = activityList.stream()
+                .peek(activity -> {
+                    activity.setExpirePolicy(expirePolicy);
+
+                    // 根据策略设置不同的过期时间字段
+                    if (PointActivityExpirePolicyEnum.TRANSACTION_EXPIRE.getCode().equals(expirePolicy)) {
+                        activity.setExpireDays(dto.getExpireDays());
+                        activity.setExpireYear(null);
+                    } else if (PointActivityExpirePolicyEnum.YEARLY_EXPIRE.getCode().equals(expirePolicy)) {
+                        activity.setExpireYear(dto.getExpireYear());
+                        activity.setExpireDays(null);
+                    } else {
+                        activity.setExpireDays(null);
+                        activity.setExpireYear(null);
+                    }
+                })
+                .collect(Collectors.toList());
+
+        // 批量更新数据库
+        if (CollectionUtil.isNotEmpty(updateList)) {
+            super.updateBatchById(updateList);
+        }
+    }
+
 }
 }