添加分组合并功能

This commit is contained in:
yangjun 2025-03-20 10:09:34 +08:00
parent 33aae96b73
commit 7be383a82d
2 changed files with 75 additions and 1 deletions

View File

@ -80,4 +80,9 @@ public class ConfigMaterialCategory implements Serializable {
private String typeId;
@TableField(exist = false)
private String medicationId;
@TableField(exist = false)
private Integer categoryRowSpan;
@TableField(exist = false)
private Integer typeRowSpan;
}

View File

@ -10,6 +10,7 @@ import com.nu.modules.ConfigMaterial.mapper.ConfigMaterialCategoryMapper;
import com.nu.modules.ConfigMaterial.mapper.ConfigMaterialMedicationMapper;
import com.nu.modules.ConfigMaterial.mapper.ConfigMaterialTypeMapper;
import com.nu.modules.ConfigMaterial.service.IConfigMaterialCategoryService;
import com.nu.modules.serviceDirective.entity.ConfigServiceDirective;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -35,7 +36,75 @@ public class ConfigMaterialCategoryServiceImpl extends ServiceImpl<ConfigMateria
@Override
public IPage<ConfigMaterialCategory> selectMaterialList(Page<ConfigMaterialCategory> page, QueryWrapper<ConfigMaterialCategory> queryWrapper) {
return baseMapper.selectMaterialList(page,queryWrapper);
IPage<ConfigMaterialCategory> pageList = baseMapper.selectMaterialList(page,queryWrapper);
List<ConfigMaterialCategory> list = pageList.getRecords();
//按照list 的categoryId字段获取相同数据开始和结束标记
String categoryId = list.get(0).getCategoryId();
int outerStart = 0; // 一级分组起始索引
for (int i = 0; i < list.size(); i++) {
ConfigMaterialCategory configMaterialCategory = list.get(i);
// 当遇到不同的categoryId时处理当前分组
if (!configMaterialCategory.getCategoryId().equals(categoryId)) {
processAllGroups(list, outerStart, i - 1); // 处理完整个一级分组
outerStart = i; // 重置一级起始位置
categoryId = configMaterialCategory.getCategoryId();
}
}
processAllGroups(list, outerStart, list.size() - 1); // 处理最后一组
return pageList;
}
/**
* 处理完整个一级分组包含二级和三级分组
*
* @param records 记录列表
* @param start 当前分组的起始索引
* @param end 当前分组的结束索引
*/
private void processAllGroups(List<ConfigMaterialCategory> records, int start, int end) {
processOuterGroup(records, start, end); // 处理一级categoryRowSpan
int innerStart = start; // 二级分组起始索引
String currentTypeId = records.get(innerStart).getTypeId();
// 二级循环处理当前一级分组内的typeId分组
for (int j = innerStart + 1; j <= end; j++) {
if (!records.get(j).getTypeId().equals(currentTypeId)) {
processMiddleGroup(records, innerStart, j - 1); // 处理完整个二级分组
innerStart = j;
currentTypeId = records.get(j).getTypeId();
}
}
processMiddleGroup(records, innerStart, end); // 处理最后一组二级数据
}
// 处理一级categoryRowSpan与之前保持一致
private void processOuterGroup(List<ConfigMaterialCategory> records, int start, int end) {
int count = end - start + 1;
if (count > 1) {
records.get(start).setCategoryRowSpan(count);
for (int i = start + 1; i <= end; i++) {
records.get(i).setCategoryRowSpan(0);
}
}
}
/**
* 处理二级typeId分组包含三级instructionTagId分组
*
* @param records 记录列表
* @param start 当前分组的起始索引
* @param end 当前分组的结束索引
*/
private void processMiddleGroup(List<ConfigMaterialCategory> records, int start, int end) {
int count = end - start + 1;
if (count > 1) {
records.get(start).setTypeRowSpan(count);
for (int i = start + 1; i <= end; i++) {
records.get(i).setTypeRowSpan(0);
}
}
}
@Override