Przeglądaj źródła

训练营删除判断是否存在进行中的营期

Long 1 miesiąc temu
rodzic
commit
eb911205c5

+ 9 - 0
fs-admin/src/main/java/com/fs/core/exception/FSExceptionHandler.java

@@ -5,6 +5,7 @@ package com.fs.core.exception;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
 import com.fs.common.exception.CustomException;
+import com.fs.common.exception.ServiceException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.dao.DuplicateKeyException;
@@ -34,6 +35,14 @@ public class FSExceptionHandler {
 		return r;
 	}
 
+	@ExceptionHandler(ServiceException.class)
+	public R handleServiceException(ServiceException e){
+		R r = new R();
+		r.put("code", e.getCode());
+		r.put("msg", e.getMessage());
+		return r;
+	}
+
 	@ExceptionHandler(NoHandlerFoundException.class)
 	public R handlerNoFoundException(Exception e) {
 		logger.error(e.getMessage(), e);

+ 11 - 4
fs-service-system/src/main/java/com/fs/course/mapper/FsUserCoursePeriodMapper.java

@@ -1,15 +1,16 @@
 package com.fs.course.mapper;
 
-import java.util.List;
-import java.util.Set;
-
 import com.fs.course.domain.FsUserCoursePeriod;
 import com.fs.course.param.CompanyRedPacketParam;
-import com.fs.course.vo.PeriodRedPacketVO;
 import com.fs.course.vo.FsUserCoursePeriodVO;
+import com.fs.course.vo.PeriodRedPacketVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 /**
  * 会员营期Mapper接口
  *
@@ -104,4 +105,10 @@ public interface FsUserCoursePeriodMapper
      */
     List<FsUserCoursePeriod> selectFsUserCoursePeriodsByIds(@Param("periodIds") Set<Long> periodIds);
 
+    /**
+     * 查询训练营进行中的营期条数
+     * @param params    参数
+     * @return  count
+     */
+    int countPeriodByCampIds(@Param("params") Map<String, Object> params);
 }

+ 21 - 7
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseTrainingCampServiceImpl.java

@@ -2,27 +2,24 @@ package com.fs.course.service.impl;
 
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.common.exception.ServiceException;
-import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.bean.BeanUtils;
 import com.fs.course.domain.FsUserCoursePeriod;
 import com.fs.course.domain.FsUserCoursePeriodDays;
+import com.fs.course.domain.FsUserCourseTrainingCamp;
 import com.fs.course.dto.FsUserCourseTrainingCampDTO;
-import com.fs.course.mapper.FsUserCoursePeriodDaysMapper;
 import com.fs.course.mapper.FsUserCoursePeriodMapper;
+import com.fs.course.mapper.FsUserCourseTrainingCampMapper;
 import com.fs.course.service.IFsUserCoursePeriodDaysService;
+import com.fs.course.service.IFsUserCourseTrainingCampService;
 import com.fs.course.vo.FsUserCourseTrainingCampVO;
-import com.fs.store.service.IFsUserService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
-import com.fs.course.mapper.FsUserCourseTrainingCampMapper;
-import com.fs.course.domain.FsUserCourseTrainingCamp;
-import com.fs.course.service.IFsUserCourseTrainingCampService;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -68,11 +65,28 @@ public class FsUserCourseTrainingCampServiceImpl extends ServiceImpl<FsUserCours
      * 删除训练营
      * @param ids   ids
      */
+    @Transactional(rollbackFor = Exception.class)
     @Override
     public void del(Long[] ids) {
+        // 检查是否存在进行中的营期
+        if (checkPeriodStatus(ids)) {
+            throw new ServiceException("存在进行中的营期,请营期结束后再操作");
+        }
+
         baseMapper.deleteBatchIds(Arrays.asList(ids));
     }
 
+    /**
+     * 检查是否存在进行中的营期
+     * @param ids 训练营ID集合
+     */
+    private boolean checkPeriodStatus(Long[] ids) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("ids", ids);
+        params.put("date", LocalDate.now());
+        return fsUserCoursePeriodMapper.countPeriodByCampIds(params) > 0;
+    }
+
     /**
      * 复制训练营
      * @param id    id

+ 14 - 0
fs-service-system/src/main/resources/mapper/course/FsUserCoursePeriodMapper.xml

@@ -211,4 +211,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{item}
         </foreach>
     </select>
+
+    <select id="countPeriodByCampIds" resultType="java.lang.Integer">
+        select count(ucp.period_id)
+        from fs_user_course_period ucp
+        inner join fs_user_course_training_camp uctc on uctc.training_camp_id = ucp.training_camp_id
+        where uctc.training_camp_id in
+        <foreach collection="params.ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+        <![CDATA[
+        and ucp.period_starting_time <= #{params.date}
+        and ucp.period_end_time >= #{params.date}
+        ]]>
+    </select>
 </mapper>