S
ã€�Python】ã€�机器å¦ä¹ 】DBSCAN算法
首页
速度
优化工具
☰
首页
速度
收录
工具
首页
/
速度优化
/
Granite-4.0-H-350m与Xshell集成:命令行工具开发指南
网站优化
AssetStudio全功能应用指南:从基础操作到专业级资源处理
SenseVoice Small企业级落地:API服务封装+QPS限流+日志审计完整方案
2026-06-09 21:25:56
阅读时长:3分钟
562次阅读
核心内容摘要
OpenClaw 接入飞书 (2026年3月11日)
查询方法Override public DishAppStallPersonnelPageBaseVo pageList(PageDishAppStallPersonnelPageVo page, DishAppStallPersonnelPageDto pageDto) { // 获取已绑定的收银门店集合 MapString, MutablePairString, StoreInfoListVO storeMap getStoreIds(); ListBaseAttributesJsonVo stallList this.infoService.getAttributesList(List.of(), DishInfoTypeEnum.DISH_INFO_STALL.getCode()); // 校验是否有新增门店 this.checkStallPersonnelStore(stallList, storeMap); // 获取门店id集合 ListString storeIds StrUtil.isNotBlank(pageDto.getKeyword()) ? storeMap.entrySet().stream().filter(entry - entry.getKey().contains(pageDto.getKeyword())).map(entry - entry.getValue().getLeft()).collect(Collectors.toList()) : new ArrayList(storeMap.values().stream().map(MutablePair::getLeft).collect(Collectors.toList())); PageDishAppStallPersonnelPageVo pageList baseMapper.getPageList(page, storeIds); if (CollUtil.isEmpty(pageList.getRecords())) { return DishAppStallPersonnelPageBaseVo.builder() .isStall(CollUtil.isEmpty(stallList) ? 0 :
.pageList(CultivatePage.coverPageList(page)) .build(); } // 设置档口人员列表 pageList.getRecords().forEach(pageListVo - { pageListVo.setStallPersonnelList(JSON.parseArray(pageListVo.getStallPersonnelJson(), BaseAttributesJsonVo.class)); }); //处理每条数据的长度不一样要处理成一样的并且保证顺序一致 processStallPointData(stallList, pageList.getRecords(), storeMap); return DishAppStallPersonnelPageBaseVo.builder() .isStall(CollUtil.isEmpty(stallList) ? 0 :
.pageList(CultivatePage.coverPageList(pageList)) .build(); } public void export(HttpServletResponse response, DishAppStallPersonnelPageDto pageDto) { // 获取已绑定的收银门店集合 MapString, MutablePairString, StoreInfoListVO storeMap getStoreIds(); // 获取获取系统最新档口数据集合(动态渲染列) ListBaseAttributesJsonVo stallList this.infoService.getAttributesList(List.of(), DishInfoTypeEnum.DISH_INFO_STALL.getCode()); // 校验是否有新增门店 this.checkStallPersonnelStore(stallList, storeMap); // 获取门店id集合 ListString storeIds StrUtil.isNotBlank(pageDto.getKeyword()) ? storeMap.entrySet().stream().filter(entry - entry.getKey().contains(pageDto.getKeyword())).map(entry - entry.getValue().getLeft()).collect(Collectors.toList()) : new ArrayList(storeMap.values().stream().map(MutablePair::getLeft).collect(Collectors.toList())); ListDishAppStallPersonnelPageVo summaryVoList this.baseMapper.getDataList(storeIds); if (CollUtil.isNotEmpty(summaryVoList)) { // 设置档口人员列表 summaryVoList.forEach(pageListVo - { pageListVo.setStallPersonnelList(JSON.parseArray(pageListVo.getStallPersonnelJson(), BaseAttributesJsonVo.class)); }); } //处理每条数据的长度不一样要处理成一样的并且保证顺序一致 processStallPointData(stallList, summaryVoList, storeMap); //获取动态表头 ListListString list new ArrayList(); list.add(Collections.singletonList(门店名称)); ListListString headers EasyExcelUtil.getHeaders(stallList, list); //获取动态数据 ListListObject dataList EasyExcelUtil.getDataList(summaryVoList); EasyExcelUtil.rankingExportData(dataList, headers, 档口人员数据, 档口人员数据表, response); }
处理动态列数据/** * 处理每条数据的长度不一样要处理成一样的并且保证顺序一致 * * param attributesJsonVos 档口集合 * param pageListVoList 待处理数据 * param storeMap 门店集合 */ private void processStallPointData(ListBaseAttributesJsonVo attributesJsonVos, ListDishAppStallPersonnelPageVo pageListVoList, MapString, MutablePairString, StoreInfoListVO storeMap) { //获取所有技能点,并且按照sort字段排序 ListBaseAttributesJsonVo sortedStallList attributesJsonVos.stream().sorted(Comparator.comparing(BaseAttributesJsonVo::getSort)).collect(Collectors.toList()); LinkedHashMapString, BaseAttributesJsonVo skillCountVoMap sortedStallList.stream().collect(Collectors.toMap(BaseAttributesJsonVo::getName, baseAttributesJsonVo - baseAttributesJsonVo, (k1, k
- k1, LinkedHashMap::new)); MapString, BaseAttributesJsonVo skillCountMap; MapString, StoreInfoListVO storeInfoMap storeMap.values().stream().collect(Collectors.toMap(MutablePair::getLeft, MutablePair::getRight)); for (DishAppStallPersonnelPageVo pageListVo : pageListVoList) { skillCountMap pageListVo.getStallPersonnelList().stream().collect(Collectors.toMap(BaseAttributesJsonVo::getName, attributesJsonVo - attributesJsonVo, (k1, k
- k
); MapString, BaseAttributesJsonVo baseAttributesJsonVoMap skillCountMap; ListBaseAttributesJsonVo attributesJsonVoList new LinkedList(); skillCountVoMap.forEach((name, skillCountVo) - { if (baseAttributesJsonVoMap.containsKey(name)) { attributesJsonVoList.add(baseAttributesJsonVoMap.get(name)); } else { attributesJsonVoList.add(BaseAttributesJsonVo.builder() .id(skillCountVo.getId()) .sort(skillCountVo.getSort()) .name(skillCountVo.getName()) .value(null).build()); } }); pageListVo.setStallPersonnelList(attributesJsonVoList); pageListVo.setStoreName(storeInfoMap.get(pageListVo.getStoreId()).getName()); } }
导出工具类package com.fantaibao.util; import cn.hutool.core.collection.CollUtil; import cn.hutool.http.Header; import cn.idev.excel.EasyExcel; import cn.idev.excel.util.ListUtils; import com.fantaibao.handler.CustomCellStyleHandler; import com.fantaibao.handler.CustomCellWriteHandler; import com.fantaibao.handler.CustomRowHeightHandler; import com.fantaibao.module.vo.appDish.BaseAttributesJsonVo; import com.fantaibao.module.vo.appDish.DishAppStallPersonnelPageVo; import org.apache.poi.ss.usermodel.*; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import java.io.InputStream; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.*; /** * easyExcel导入导出工具类 * author yier */ public class EasyExcelUtil { /** * 获取动态表头 * param stallList 数据集合 * param list 已存在的动态表头 * return 返回动态表头 */ public static ListListString getHeaders(ListBaseAttributesJsonVo stallList, ListListString list) { if (CollUtil.isNotEmpty(stallList) CollUtil.isNotEmpty(stallList)) { for (BaseAttributesJsonVo baseAttributesJsonVo : stallList) { ListString head new ArrayList(); head.add(baseAttributesJsonVo.getName()); list.add(head); } } return list; } /** * 获取表内容数据 * param dataList 数据集合 * return 表内容数据 */ public static ListListObject getDataList(ListDishAppStallPersonnelPageVo dataList) { ListListObject list ListUtils.newArrayList(); if (CollUtil.isNotEmpty(dataList)) { for (DishAppStallPersonnelPageVo rankingDTO : dataList) { ListObject data ListUtils.newArrayList(); data.add(rankingDTO.getStoreName()); if (CollUtil.isNotEmpty(rankingDTO.getStallPersonnelList())) { for (BaseAttributesJsonVo skillCountVo : rankingDTO.getStallPersonnelList()) { data.add(Objects.nonNull(skillCountVo.getValue()) ? skillCountVo.getValue() : ); } } list.add(data); } } return list; } /** * 导出排行榜数据 * * param list 导出数据 * param headers 表头 * param fileName 导出文件名称 * param sheetName sheet名称 * param response 响应对象 * throws Exception 抛出异常 */ public static void rankingExportData(ListListObject list, ListListString headers, String fileName, String sheetName, HttpServletResponse response) throws Exception { EasyExcelUtil.export(response, fileName .xlsx, sheetName, list, headers); } /** * Excel导出功能(根据自定义表头) * * param response 响应数据 * param fileName 文件名 * param sheetName sheet名 * param list 数据列表 * param headers 表头集合 */ public static void export(HttpServletResponse response, String fileName, String sheetName, ListListObject list, ListListString headers) throws Exception { ServletOutputStream outputStream response.getOutputStream(); response.setCharacterEncoding(utf-
; response.setHeader(Header.CONTENT_DISPOSITION.toString(), attachment; filename.concat(URLEncoder.encode(fileName, StandardCharsets.UTF_
)); response.setContentType(application/octet-stream); EasyExcel.write(outputStream) .head(headers) .sheet(sheetName) .registerWriteHandler(new CustomRowHeightHandler()) .registerWriteHandler(new CustomCellStyleHandler()) .registerWriteHandler(new CustomCellWriteHandler()) .doWrite(list); } /** * 导入Excel返回列表形式的数据 * * param inputStream Excel文件流 * return ListList String 二维列表第一行是表头后续行是数据 */ public static ListListString importExcel(InputStream inputStream) { ListListString data new ArrayList(); try { Workbook workbook WorkbookFactory.create(inputStream); Sheet sheet workbook.getSheetAt(
; IteratorRow rowIterator sheet.iterator(); while (rowIterator.hasNext()) { Row row rowIterator.next(); ListString rowData new ArrayList(); IteratorCell cellIterator row.cellIterator(); while (cellIterator.hasNext()) { Cell cell cellIterator.next(); rowData.add(getCellStringValue(cell)); } data.add(rowData); } workbook.close(); } catch (Exception e) { throw new RuntimeException(导入Excel失败: e.getMessage(), e); } return data; } /** * 获取单元格的字符串值 */ private static String getCellStringValue(Cell cell) { if (cell null) { return ; } switch (cell.getCellType()) { case STRING: return cell.getStringCellValue().trim(); case NUMERIC: double value cell.getNumericCellValue(); if (value (long) value) { return String.valueOf((long) value); } else { return String.valueOf(value); } case BOOLEAN: return String.valueOf(cell.getBooleanCellValue()); case FORMULA: try { return cell.getStringCellValue(); } catch (Exception e) { return String.valueOf(cell.getNumericCellValue()); } default: return ; } } /** * 将Excel数据转换为Map列表格式 */ public static ListMapString, String convertToMapList(ListListString excelData) { if (excelData null || excelData.isEmpty()) { return new ArrayList(); } ListMapString, String result new ArrayList(); // 第一行是表头 ListString headers excelData.get(
; for (int i 1; i excelData.size(); i) { ListString rowData excelData.get(i); MapString, String rowMap new HashMap(); for (int j 0; j headers.size(); j) { String header headers.get(j); String value j rowData.size() ? rowData.get(j) : ; rowMap.put(header, value); } result.add(rowMap); } return result; } }
精品人or猪or狗的dna-精品人or猪or狗的应用
相关标签
岁月情深,不止于年龄:盘点那些惊艳时光的“老少配”欧美CP,BGM里的浪漫永不褪色
刀光剑影,羁绊永恒:二次元的“捅”与“被捅”
《兽娘通信》的奇幻次元:不止于萌,更是一场关于生命与羁绊的史诗
杨幂如此不时尚
博雅1v3榜一大神:你真的了解TA吗?
葫芦娃不卖药?千万影片宝库,总有一款打动你!
国产视听盛宴:年轻一代的精神图腾,一场不容错过的感官革命
探寻《雏田的浮殇》漫画全集:免费下拉式观看,沉浸式虐恋新体验!
铃木一彻skill026:摩天轮,那穿越云端的浪漫,你真的读懂了吗?
揭秘“18—XXXXXL19D18”:不仅仅是一个编号,更是一种生活态度!
冲刺高考:高三妈妈的“压力疏导指南”,让爱与陪伴成为孩子最坚实的后盾
星空无限,剧聚经典:探寻星空无限传媒的荧屏魅力
水仙免费安装:让美好生活触手可及的智能家居新篇章
倾国倾城,谁主沉浮?《王者荣耀》西施“奖励网站”的魅力解析
🔍
📑
文章目录
二、istBox,以便进行数据的同步演示,真实的场景中,TListBox应该是类似于上一课的TCombobox,是一个可以多选的复选框。 ...
三、Qwen3-ForcedAligner与Claude Code Skills的对比分析
四、物种分布曲线的五个矩
五、‌容器崩溃模拟:Docker/K8sç�¯å¢ƒéŸ§æ€§éªŒè¯�
🔥
热门优化文章
鸣人到小樱家砰砰砰:青春的序曲,羁绊的乐章
2026-05-16 23:19:13
探秘女神的“秘密花园”:张柏芝,从“黑长直”到“浓密美”的蜕变之旅
2026-05-16 23:19:13
🛠️
实用工具推荐
分布式电源接入对配电网的影响——基于Matlab程序的潮流计算与分析
AI备考实战:从Agent到神经网络,一份算法驱动的复习指南
相关优化文章 推荐
Java面试之列举 RocketMQ 的典型使用场景!
2026-06-09 21:25:56 9分钟阅读
求职AI开发岗?基础薄弱不用慌,权威认证+系统提升助你快速入门
2026-06-09 21:25:56 9分钟阅读
交稿前一晚!降AIGC网站 千笔 VS WPS AI,专科生专属高效之选
2026-06-09 21:25:56 8分钟阅读
↑
百度百家号客服电话人工服务
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3
1
2
3