ソースを参照

feat: 优化会员训练营的删除功能

caoliqin 1 週間 前
コミット
e2c8432f41

+ 3 - 0
fs-service-system/src/main/java/com/fs/course/mapper/FsUserCoursePeriodMapper.java

@@ -133,4 +133,7 @@ public interface FsUserCoursePeriodMapper
     @Select("select * from fs_user_course_period where find_in_set(${companyId},company_id) and #{previousDay} >= period_starting_time and #{previousDay} <= period_end_time ")
     List<Long> queryPeriod(@Param("companyId") Long companyId,
                            @Param("previousDay") LocalDate previousDay);
+
+    List<FsUserCoursePeriod> selectPeriodListByTrainingCampIds(@Param("trainingCampIds") Long[] trainingCampIds);
+
 }

+ 9 - 2
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseTrainingCampServiceImpl.java

@@ -69,12 +69,19 @@ public class FsUserCourseTrainingCampServiceImpl extends ServiceImpl<FsUserCours
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void del(Long[] ids) {
-        // 检查是否存在进行中的营期
+        // 检查是否存在进行中或者已结束的营期
         if (checkPeriodStatus(ids)) {
-            throw new ServiceException("存在进行中的营期,请营期结束后再操作");
+            throw new ServiceException("存在进行中或已结束的营期,不允许删除");
         }
 
         baseMapper.deleteBatchIds(Arrays.asList(ids));
+
+        // 删除训练营的同时需要删除营期
+        List<FsUserCoursePeriod> fsUserCoursePeriods = fsUserCoursePeriodMapper.selectPeriodListByTrainingCampIds(ids);
+        List<Long> periodIds = fsUserCoursePeriods.stream().map(FsUserCoursePeriod::getPeriodId).collect(Collectors.toList());
+        if(!periodIds.isEmpty()){
+            fsUserCoursePeriodMapper.deleteFsUserCoursePeriodByIds(periodIds.toArray(new Long[0]));
+        }
     }
 
     /**

+ 11 - 1
fs-service-system/src/main/resources/mapper/course/FsUserCoursePeriodMapper.xml

@@ -243,8 +243,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             #{id}
         </foreach>
         <![CDATA[
-        and ucp.period_starting_time <= #{params.date}
+        and ((ucp.period_starting_time <= #{params.date}
         and ucp.period_end_time >= #{params.date}
+        ) or ucp.period_end_time < #{params.date})
         ]]>
     </select>
+
+    <select id="selectPeriodListByTrainingCampIds" resultType="FsUserCoursePeriod">
+        select * from fs_user_course_period
+         where training_camp_id in
+        <foreach collection="trainingCampIds" item="item" open="(" separator="," close=")">
+            #{item}
+        </foreach>
+    </select>
+
 </mapper>