feat: 支持调度页面分组拖拽排序

- SaveDispatchDTO 新增 groupOrders 字段支持分组排序
- saveDispatch 方法处理分组排序,更新 schedule_detail.sort_order 和 schedule_group.display_order

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
This commit is contained in:
Z-WICK
2026-01-26 13:33:10 +08:00
co-authored by factory-droid[bot]
parent adeeeb4be2
commit 3ed0bf266a
3 changed files with 103 additions and 18 deletions
@@ -26,6 +26,12 @@ public class SaveDispatchDTO {
@Schema(description = "调整列表") @Schema(description = "调整列表")
private List<DetailAdjustment> adjustments; private List<DetailAdjustment> adjustments;
/**
* 分组排序列表
*/
@Schema(description = "分组排序列表")
private List<GroupOrder> groupOrders;
/** /**
* 明细调整 * 明细调整
*/ */
@@ -47,6 +53,39 @@ public class SaveDispatchDTO {
} }
/**
* 分组排序
*/
@Data
@Schema(description = "分组排序")
public static class GroupOrder {
/**
* 分组ID
*/
@Schema(description = "分组ID")
private Long groupId;
/**
* 分组顺序
*/
@Schema(description = "分组顺序")
private Integer groupOrder;
/**
* 场地ID
*/
@Schema(description = "场地ID")
private Long venueId;
/**
* 时间段索引
*/
@Schema(description = "时间段索引")
private Integer timeSlotIndex;
}
/** /**
* 参赛者顺序 * 参赛者顺序
*/ */
@@ -968,11 +968,33 @@ public class MartialScheduleServiceImpl extends ServiceImpl<MartialScheduleMappe
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean saveDispatch(org.springblade.modules.martial.pojo.dto.SaveDispatchDTO dto) { public boolean saveDispatch(org.springblade.modules.martial.pojo.dto.SaveDispatchDTO dto) {
if (dto.getAdjustments() == null || dto.getAdjustments().isEmpty()) { // 1. 处理分组排序
return true; if (dto.getGroupOrders() != null && !dto.getGroupOrders().isEmpty()) {
for (org.springblade.modules.martial.pojo.dto.SaveDispatchDTO.GroupOrder go : dto.getGroupOrders()) {
if (go.getGroupId() == null || go.getGroupOrder() == null) {
continue;
}
// 更新 schedule_detail 表中该分组的 sort_order
List<MartialScheduleDetail> details = scheduleDetailMapper.selectList(
new QueryWrapper<MartialScheduleDetail>()
.eq("schedule_group_id", go.getGroupId())
.eq("is_deleted", 0)
);
for (MartialScheduleDetail detail : details) {
detail.setSortOrder(go.getGroupOrder());
scheduleDetailMapper.updateById(detail);
}
// 同时更新 schedule_group 表的 display_order
MartialScheduleGroup group = scheduleGroupMapper.selectById(go.getGroupId());
if (group != null) {
group.setDisplayOrder(go.getGroupOrder());
scheduleGroupMapper.updateById(group);
}
}
} }
// 批量更新所有参赛者出场顺序 // 2. 处理参赛者出场顺序
if (dto.getAdjustments() != null && !dto.getAdjustments().isEmpty()) {
for (org.springblade.modules.martial.pojo.dto.SaveDispatchDTO.DetailAdjustment adjustment : dto.getAdjustments()) { for (org.springblade.modules.martial.pojo.dto.SaveDispatchDTO.DetailAdjustment adjustment : dto.getAdjustments()) {
for (org.springblade.modules.martial.pojo.dto.SaveDispatchDTO.ParticipantOrder po : adjustment.getParticipants()) { for (org.springblade.modules.martial.pojo.dto.SaveDispatchDTO.ParticipantOrder po : adjustment.getParticipants()) {
MartialScheduleParticipant participant = scheduleParticipantMapper.selectById(po.getId()); MartialScheduleParticipant participant = scheduleParticipantMapper.selectById(po.getId());
@@ -982,6 +1004,7 @@ public class MartialScheduleServiceImpl extends ServiceImpl<MartialScheduleMappe
} }
} }
} }
}
return true; return true;
} }
@@ -172,11 +172,33 @@ public class ScheduleDispatchServiceImpl implements IScheduleDispatchService {
@CacheEvict(value = "scheduleResult", allEntries = true) @CacheEvict(value = "scheduleResult", allEntries = true)
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean saveDispatch(org.springblade.modules.martial.pojo.dto.SaveDispatchDTO dto) { public boolean saveDispatch(org.springblade.modules.martial.pojo.dto.SaveDispatchDTO dto) {
if (dto.getAdjustments() == null || dto.getAdjustments().isEmpty()) { // 1. 处理分组排序
return true; if (dto.getGroupOrders() != null && !dto.getGroupOrders().isEmpty()) {
for (org.springblade.modules.martial.pojo.dto.SaveDispatchDTO.GroupOrder go : dto.getGroupOrders()) {
if (go.getGroupId() == null || go.getGroupOrder() == null) {
continue;
}
// 更新 schedule_detail 表中该分组的 sort_order
List<MartialScheduleDetail> details = scheduleDetailMapper.selectList(
new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<MartialScheduleDetail>()
.eq("schedule_group_id", go.getGroupId())
.eq("is_deleted", 0)
);
for (MartialScheduleDetail detail : details) {
detail.setSortOrder(go.getGroupOrder());
scheduleDetailMapper.updateById(detail);
}
// 同时更新 schedule_group 表的 display_order
MartialScheduleGroup group = scheduleGroupMapper.selectById(go.getGroupId());
if (group != null) {
group.setDisplayOrder(go.getGroupOrder());
scheduleGroupMapper.updateById(group);
}
}
} }
// 批量更新所有参赛者出场顺序 // 2. 处理参赛者出场顺序
if (dto.getAdjustments() != null && !dto.getAdjustments().isEmpty()) {
for (org.springblade.modules.martial.pojo.dto.SaveDispatchDTO.DetailAdjustment adjustment : dto.getAdjustments()) { for (org.springblade.modules.martial.pojo.dto.SaveDispatchDTO.DetailAdjustment adjustment : dto.getAdjustments()) {
for (org.springblade.modules.martial.pojo.dto.SaveDispatchDTO.ParticipantOrder po : adjustment.getParticipants()) { for (org.springblade.modules.martial.pojo.dto.SaveDispatchDTO.ParticipantOrder po : adjustment.getParticipants()) {
MartialScheduleParticipant participant = scheduleParticipantMapper.selectById(po.getId()); MartialScheduleParticipant participant = scheduleParticipantMapper.selectById(po.getId());
@@ -186,6 +208,7 @@ public class ScheduleDispatchServiceImpl implements IScheduleDispatchService {
} }
} }
} }
}
return true; return true;
} }