diff --git a/minio_data/.minio.sys/buckets/.bloomcycle.bin/xl.meta b/minio_data/.minio.sys/buckets/.bloomcycle.bin/xl.meta index a222be5..7b4d10b 100644 Binary files a/minio_data/.minio.sys/buckets/.bloomcycle.bin/xl.meta and b/minio_data/.minio.sys/buckets/.bloomcycle.bin/xl.meta differ diff --git a/minio_data/.minio.sys/buckets/.usage-cache.bin.bkp/xl.meta b/minio_data/.minio.sys/buckets/.usage-cache.bin.bkp/xl.meta index 44bb2bf..e004016 100644 Binary files a/minio_data/.minio.sys/buckets/.usage-cache.bin.bkp/xl.meta and b/minio_data/.minio.sys/buckets/.usage-cache.bin.bkp/xl.meta differ diff --git a/minio_data/.minio.sys/buckets/.usage-cache.bin/xl.meta b/minio_data/.minio.sys/buckets/.usage-cache.bin/xl.meta index 5d743d5..8172249 100644 Binary files a/minio_data/.minio.sys/buckets/.usage-cache.bin/xl.meta and b/minio_data/.minio.sys/buckets/.usage-cache.bin/xl.meta differ diff --git a/minio_data/.minio.sys/buckets/.usage.json/xl.meta b/minio_data/.minio.sys/buckets/.usage.json/xl.meta index 9c2ab0e..f5f0143 100644 Binary files a/minio_data/.minio.sys/buckets/.usage.json/xl.meta and b/minio_data/.minio.sys/buckets/.usage.json/xl.meta differ diff --git a/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin.bkp/xl.meta b/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin.bkp/xl.meta index f70f5be..dcf83ac 100644 Binary files a/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin.bkp/xl.meta and b/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin.bkp/xl.meta differ diff --git a/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin/xl.meta b/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin/xl.meta index ddd7e8c..b4cf950 100644 Binary files a/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin/xl.meta and b/minio_data/.minio.sys/buckets/000000-assets/.usage-cache.bin/xl.meta differ diff --git a/minio_data/.minio.sys/buckets/assets/.usage-cache.bin.bkp/xl.meta b/minio_data/.minio.sys/buckets/assets/.usage-cache.bin.bkp/xl.meta index 7d13aa9..6333f9d 100644 Binary files a/minio_data/.minio.sys/buckets/assets/.usage-cache.bin.bkp/xl.meta and b/minio_data/.minio.sys/buckets/assets/.usage-cache.bin.bkp/xl.meta differ diff --git a/minio_data/.minio.sys/buckets/assets/.usage-cache.bin/xl.meta b/minio_data/.minio.sys/buckets/assets/.usage-cache.bin/xl.meta index 8482067..cb44746 100644 Binary files a/minio_data/.minio.sys/buckets/assets/.usage-cache.bin/xl.meta and b/minio_data/.minio.sys/buckets/assets/.usage-cache.bin/xl.meta differ diff --git a/src/main/java/org/springblade/modules/martial/service/impl/MartialScheduleArrangeServiceImpl.java b/src/main/java/org/springblade/modules/martial/service/impl/MartialScheduleArrangeServiceImpl.java index cc0c213..ebb6012 100644 --- a/src/main/java/org/springblade/modules/martial/service/impl/MartialScheduleArrangeServiceImpl.java +++ b/src/main/java/org/springblade/modules/martial/service/impl/MartialScheduleArrangeServiceImpl.java @@ -458,10 +458,14 @@ public class MartialScheduleArrangeServiceImpl implements IMartialScheduleArrang } // 自动拆分大组:如果人数过多,拆分成多个小组 - // 改进策略:根据人数动态拆分,确保能充分利用所有时间槽 - // 目标:让分组数量接近可用时间槽数量,实现均匀分配 + // 优先使用项目配置的单位容纳人数(maxParticipants) int maxPeoplePerGroup; - if (members.size() <= scheduleConfig.getMaxPeoplePerGroup()) { + Integer projectMax = project.getMaxParticipants(); + if (projectMax != null && projectMax > 0) { + // 使用项目配置的单位容纳人数 + maxPeoplePerGroup = projectMax; + log.debug("项目 '{}' 使用自定义容纳人数: {}", projectName, projectMax); + } else if (members.size() <= scheduleConfig.getMaxPeoplePerGroup()) { // 35人以内不拆分 maxPeoplePerGroup = members.size(); } else { @@ -585,8 +589,22 @@ public class MartialScheduleArrangeServiceImpl implements IMartialScheduleArrang log.info("总共初始化了 {} 个场地×时间段组合", slots.size()); - // 按预计时长降序排序(先安排时间长的) - groups.sort((a, b) -> b.getEstimatedDuration() - a.getEstimatedDuration()); + // 排序策略: 集体项目(projectType=2)优先,同类型按预计时长降序 + groups.sort((a, b) -> { + // 1. 集体项目优先于单人项目 + int aType = a.getProjectType() != null ? a.getProjectType() : 1; + int bType = b.getProjectType() != null ? b.getProjectType() : 1; + if (aType != bType) { + return bType - aType; // 2(集体) > 1(单人) + } + // 2. 同类型按预计时长降序(先安排时间长的) + int aDuration = a.getEstimatedDuration() != null ? a.getEstimatedDuration() : 0; + int bDuration = b.getEstimatedDuration() != null ? b.getEstimatedDuration() : 0; + return bDuration - aDuration; + }); + + log.info("排序后分组顺序(集体优先): {}", + groups.stream().map(g -> g.getGroupName() + "(type=" + g.getProjectType() + ")").collect(java.util.stream.Collectors.joining(", "))); // 使用轮询算法进行均匀分配 int assignedCount = 0;