|
|
@@ -0,0 +1,170 @@
|
|
|
+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 lombok.RequiredArgsConstructor;
|
|
|
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import shop.alien.entity.store.ActivityPeriod;
|
|
|
+import shop.alien.entity.store.ActivitySignInConfig;
|
|
|
+import shop.alien.entity.store.vo.ActivityConfigVo;
|
|
|
+import shop.alien.entity.store.vo.ActivityInviteConfigVo;
|
|
|
+import shop.alien.entity.store.ActivityInviteConfig;
|
|
|
+import shop.alien.mapper.ActivityInviteConfigMapper;
|
|
|
+import shop.alien.store.service.ActivityInviteConfigService;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Comparator;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+@RequiredArgsConstructor
|
|
|
+public class ActivityInviteConfigServiceImpl extends ServiceImpl<ActivityInviteConfigMapper, ActivityInviteConfig> implements ActivityInviteConfigService {
|
|
|
+
|
|
|
+ private final ActivityInviteConfigMapper activityInviteConfigMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ActivityInviteConfigVo createOrUpdateInviteActivity(ActivityInviteConfigVo activityInviteConfigVo) {
|
|
|
+
|
|
|
+ log.info("创建邀请活动开始执行,请求参数: {}", activityInviteConfigVo);
|
|
|
+ if(activityInviteConfigVo == null) {
|
|
|
+ log.error("创建邀请活动activityInviteConfigVo为空。");
|
|
|
+ activityInviteConfigVo = new ActivityInviteConfigVo();
|
|
|
+ activityInviteConfigVo.setErrorMessage("参数为空");
|
|
|
+ return activityInviteConfigVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ ActivityInviteConfig activityInviteConfig = new ActivityInviteConfig();
|
|
|
+ if(activityInviteConfigVo.getId() == null) {
|
|
|
+ if(activityInviteConfigVo.getActivityTimeType()!=null && activityInviteConfigVo.getActivityTimeType() == 1){
|
|
|
+ //永久邀请活动,不重复
|
|
|
+ LambdaQueryWrapper<ActivityInviteConfig> activityInviteConfigLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ activityInviteConfigLambdaQueryWrapper.eq(ActivityInviteConfig::getDeleteFlag, 0);
|
|
|
+ activityInviteConfigLambdaQueryWrapper.eq(ActivityInviteConfig::getActivityTimeType,1);
|
|
|
+ int count = activityInviteConfigMapper.selectCount(activityInviteConfigLambdaQueryWrapper);
|
|
|
+ if(count > 0){
|
|
|
+ log.error("存在永久邀请活动,请修改。");
|
|
|
+ activityInviteConfigVo = new ActivityInviteConfigVo();
|
|
|
+ activityInviteConfigVo.setErrorMessage("存在永久邀请活动");
|
|
|
+ return activityInviteConfigVo;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 限时活动,校验时间段不重复
|
|
|
+ LambdaQueryWrapper<ActivityInviteConfig> limitedTimeActivityInviteConfigLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ limitedTimeActivityInviteConfigLambdaQueryWrapper.eq(ActivityInviteConfig::getDeleteFlag, 0);
|
|
|
+ limitedTimeActivityInviteConfigLambdaQueryWrapper.eq(ActivityInviteConfig::getActivityTimeType,2);
|
|
|
+ List<ActivityInviteConfig> activityInviteConfigList = activityInviteConfigMapper.selectList(limitedTimeActivityInviteConfigLambdaQueryWrapper);
|
|
|
+ boolean checkResult = checkTime(activityInviteConfigList);
|
|
|
+ if(!checkResult){
|
|
|
+ activityInviteConfigVo.setErrorMessage("方案时间重叠");
|
|
|
+ return activityInviteConfigVo;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ BeanUtils.copyProperties(activityInviteConfigVo, activityInviteConfig);
|
|
|
+ int insertCount = activityInviteConfigMapper.insert(activityInviteConfig);
|
|
|
+ if(insertCount == 0){
|
|
|
+ //插入活动配置数据失败,返回
|
|
|
+ log.error("插入邀请活动配置数据失败, {}", activityInviteConfigVo);
|
|
|
+ activityInviteConfigVo.setErrorMessage("插入邀请活动配置数据失败");
|
|
|
+ return activityInviteConfigVo;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ BeanUtils.copyProperties(activityInviteConfigVo, activityInviteConfig);
|
|
|
+ if(activityInviteConfigVo.getActivityTimeType()!=null && activityInviteConfigVo.getActivityTimeType() == 2) {
|
|
|
+ LambdaQueryWrapper<ActivityInviteConfig> limitedTimeUpdateActivityInviteConfigLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ limitedTimeUpdateActivityInviteConfigLambdaQueryWrapper.eq(ActivityInviteConfig::getDeleteFlag, 0);
|
|
|
+ limitedTimeUpdateActivityInviteConfigLambdaQueryWrapper.eq(ActivityInviteConfig::getActivityTimeType,2);
|
|
|
+ limitedTimeUpdateActivityInviteConfigLambdaQueryWrapper.ne(ActivityInviteConfig::getId,activityInviteConfig.getId());
|
|
|
+ List<ActivityInviteConfig> activityInviteConfigList = activityInviteConfigMapper.selectList(limitedTimeUpdateActivityInviteConfigLambdaQueryWrapper);
|
|
|
+ boolean checkResult = checkTime(activityInviteConfigList);
|
|
|
+ if(!checkResult){
|
|
|
+ activityInviteConfigVo.setErrorMessage("方案时间重叠");
|
|
|
+ return activityInviteConfigVo;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ int updateCount = activityInviteConfigMapper.updateById(activityInviteConfig);
|
|
|
+ if(updateCount == 0){
|
|
|
+ //更新活动配置数据失败,返回
|
|
|
+ log.error("更新邀请活动配置数据失败, {}", activityInviteConfigVo);
|
|
|
+ activityInviteConfigVo.setErrorMessage("更新邀请活动配置数据失败");
|
|
|
+ return activityInviteConfigVo;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return activityInviteConfigVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public ActivityInviteConfigVo getInviteActivitySignInConfigById(Long id) {
|
|
|
+ ActivityInviteConfigVo activityInviteConfigVo = new ActivityInviteConfigVo();
|
|
|
+ ActivityInviteConfig activityInviteConfig = activityInviteConfigMapper.selectById(id);
|
|
|
+ BeanUtils.copyProperties(activityInviteConfig, activityInviteConfigVo);
|
|
|
+ return activityInviteConfigVo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IPage<ActivityInviteConfig> getInviteActivityConfigList(int pageNum, int pageSize, String createdTime, Integer activityType, Integer status) {
|
|
|
+ IPage<ActivityInviteConfig> iPage = new Page<>(pageNum, pageSize);
|
|
|
+ LambdaQueryWrapper<ActivityInviteConfig> activityInviteConfigLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ if(StringUtils.isNotBlank(createdTime)){
|
|
|
+ activityInviteConfigLambdaQueryWrapper.between(ActivityInviteConfig::getCreatedTime,createdTime + " 00:00:00", createdTime + " 23:59:59");
|
|
|
+ }
|
|
|
+ if(activityType != null) {
|
|
|
+ activityInviteConfigLambdaQueryWrapper.eq(ActivityInviteConfig::getActivityType, activityType);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(status != null) {
|
|
|
+ activityInviteConfigLambdaQueryWrapper.eq(ActivityInviteConfig::getStatus, status);
|
|
|
+ }
|
|
|
+ activityInviteConfigLambdaQueryWrapper.eq(ActivityInviteConfig::getDeleteFlag, 0 );
|
|
|
+ return activityInviteConfigMapper.selectPage(iPage, activityInviteConfigLambdaQueryWrapper);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean updateInviteActivityStatus(Integer id, Integer status) {
|
|
|
+ if(id == null || status == null){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ ActivityInviteConfig activityInviteConfig = new ActivityInviteConfig();
|
|
|
+ activityInviteConfig.setId(id);
|
|
|
+ activityInviteConfig.setStatus(status);
|
|
|
+ int updateResult = activityInviteConfigMapper.updateById(activityInviteConfig);
|
|
|
+ return updateResult > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean deleteInviteActivity(Integer id) {
|
|
|
+ if(id != null){
|
|
|
+ int deleteResult = activityInviteConfigMapper.deleteById(id);
|
|
|
+ if(deleteResult == 0){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean checkTime(List<ActivityInviteConfig> activityInviteConfigList){
|
|
|
+ if (activityInviteConfigList == null || activityInviteConfigList.size() <= 1) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 按开始时间排序
|
|
|
+ List<ActivityInviteConfig> sorted = new ArrayList<>(activityInviteConfigList);
|
|
|
+ sorted.sort(Comparator.comparing(ActivityInviteConfig::getActivityStartTime));
|
|
|
+ for (int i = 0; i < sorted.size() - 1; i++) {
|
|
|
+ ActivityInviteConfig current = sorted.get(i);
|
|
|
+ ActivityInviteConfig next = sorted.get(i + 1);
|
|
|
+
|
|
|
+ // 检查重叠条件:当前结束时间 > 下一个开始时间
|
|
|
+ if (current.getActivityEndTime().compareTo(next.getActivityStartTime()) > 0) {
|
|
|
+ return false; // 存在重叠
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+}
|