diff --git a/klp-common/src/main/java/com/klp/common/utils/poi/ExcelUtil.java b/klp-common/src/main/java/com/klp/common/utils/poi/ExcelUtil.java index 06fc93c0..773abe33 100644 --- a/klp-common/src/main/java/com/klp/common/utils/poi/ExcelUtil.java +++ b/klp-common/src/main/java/com/klp/common/utils/poi/ExcelUtil.java @@ -29,6 +29,7 @@ import java.io.UnsupportedEncodingException; import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Set; /** * Excel相关处理 @@ -149,6 +150,33 @@ public class ExcelUtil { builder.doWrite(list); } + /** + * 导出excel(仅导出指定列) + * + * @param list 导出数据集合 + * @param sheetName 工作表的名称 + * @param clazz 实体类 + * @param includeColumnFieldNames 需要导出的字段名集合(Java字段名,非Excel列名) + * @param response 响应体 + */ + public static void exportExcel(List list, String sheetName, Class clazz, + Set includeColumnFieldNames, + HttpServletResponse response) { + try { + resetResponse(sheetName, response); + ServletOutputStream os = response.getOutputStream(); + EasyExcel.write(os, clazz) + .autoCloseStream(false) + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + .registerConverter(new ExcelBigNumberConvert()) + .includeColumnFieldNames(includeColumnFieldNames) + .sheet(sheetName) + .doWrite(list); + } catch (IOException e) { + throw new RuntimeException("导出Excel异常"); + } + } + /** * 单表多数据模板导出 模板格式为 {.属性} * diff --git a/klp-ui/src/api/wms/coil.js b/klp-ui/src/api/wms/coil.js index 1731c628..0d71a0e4 100644 --- a/klp-ui/src/api/wms/coil.js +++ b/klp-ui/src/api/wms/coil.js @@ -488,4 +488,12 @@ export function listLightCoil(data) { timeout: 600000, data: data }) +} + +// 获取可导出的列元数据 +export function getExportColumns() { + return request({ + url: '/wms/materialCoil/exportColumns', + method: 'get', + }) } \ No newline at end of file diff --git a/klp-ui/src/views/wms/report/receive.vue b/klp-ui/src/views/wms/report/receive.vue index 4d48bf4b..21bd8ca3 100644 --- a/klp-ui/src/views/wms/report/receive.vue +++ b/klp-ui/src/views/wms/report/receive.vue @@ -56,6 +56,7 @@ 查询 导出 + 自定义导出 列设置 保存报表 @@ -84,11 +85,45 @@ + + + +
+ +
+ 全选 + 反选 + 清空 +
+
+
+ +
+
{{ gName }}
+
+ {{ field.label }} +
+
+
+
+ +
- + diff --git a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java index 4ff45e3f..d6054043 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsMaterialCoilController.java @@ -5,6 +5,9 @@ import java.math.BigDecimal; import java.util.List; import java.util.Map; import java.util.Arrays; +import java.util.Set; +import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.stream.Collectors; import java.util.HashMap; @@ -30,6 +33,7 @@ import com.klp.common.core.validate.AddGroup; import com.klp.common.core.validate.EditGroup; import com.klp.common.enums.BusinessType; import com.klp.common.utils.poi.ExcelUtil; +import com.klp.common.utils.StringUtils; import com.klp.domain.bo.WmsMaterialCoilBo; import com.klp.domain.bo.WmsMaterialCoilReportSummaryBo; import com.klp.domain.vo.dashboard.CoilTrimStatisticsVo; @@ -130,6 +134,70 @@ public class WmsMaterialCoilController extends BaseController { List list = iWmsMaterialCoilService.queryExportList(bo); ExcelUtil.exportExcel(list, "钢卷物料表", WmsMaterialCoilExportVo.class, response); } + + /** + * 个性化导出:前端传入要导出的字段名,仅导出选中列 + * columns 参数为逗号分隔的 Java 字段名,如 "itemTypeDesc,enterCoilNo,netWeight" + * 不传 columns 时等同于 /exportAll 导出全部字段 + */ + @Log(title = "钢卷物料表", businessType = BusinessType.EXPORT) + @PostMapping("/exportCustom") + public void exportCustom(WmsMaterialCoilBo bo, + @RequestParam(required = false) String columns, + HttpServletResponse response) { + List list = iWmsMaterialCoilService.queryExportListAll(bo); + if (StringUtils.isNotBlank(columns)) { + Set includeFields = new HashSet<>(Arrays.asList(columns.split(","))); + ExcelUtil.exportExcel(list, "钢卷物料表", WmsMaterialCoilAllExportVo.class, includeFields, response); + } else { + ExcelUtil.exportExcel(list, "钢卷物料表", WmsMaterialCoilAllExportVo.class, response); + } + } + + /** + * 获取可导出的列元数据(供前端列选择器使用) + * 返回 { "fieldName": "中文列名" } 的映射,基于完整导出字段 + */ + @GetMapping("/exportColumns") + public R> getExportColumns() { + Map columns = new LinkedHashMap<>(); + columns.put("itemTypeDesc", "类型"); + columns.put("warehouseName", "逻辑库区"); + columns.put("actualWarehouseName", "实际库区"); + columns.put("enterCoilNo", "入场卷号"); + columns.put("supplierCoilNo", "厂家卷号"); + columns.put("currentCoilNo", "成品卷号"); + columns.put("createTime", "日期"); + columns.put("exportTime", "发货时间"); + columns.put("exportBy", "发货人"); + columns.put("netWeight", "重量"); + columns.put("purpose", "用途"); + columns.put("trimmingRequirement", "切边要求"); + columns.put("packagingRequirement", "包装种类"); + columns.put("qualityStatus", "产品质量"); + columns.put("packingStatus", "原料材质"); + columns.put("statusDesc", "库存状态"); + columns.put("remark", "备注"); + columns.put("itemName", "名称"); + columns.put("length", "长度"); + columns.put("specification", "规格"); + columns.put("material", "材质"); + columns.put("manufacturer", "厂家"); + columns.put("surfaceTreatmentDesc", "表面处理"); + columns.put("zincLayer", "锌层"); + columns.put("itemId", "物品ID"); + columns.put("dataTypeText", "数据类型"); + columns.put("temperGrade", "调制度"); + columns.put("coatingType", "镀层种类"); + columns.put("businessPurpose", "业务用途"); + columns.put("isRelatedToOrderText", "是否与订单相关"); + columns.put("saleName", "销售人员"); + columns.put("actualThickness", "实测厚度"); + columns.put("transferType", "调拨类型"); + columns.put("team", "班组"); + return R.ok(columns); + } + /** * 导出钢卷物料表列表(完整字段版本) * 导出全部字段 diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilAllExportVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilAllExportVo.java index 550405fb..dc2ff6cf 100644 --- a/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilAllExportVo.java +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsMaterialCoilAllExportVo.java @@ -78,6 +78,7 @@ public class WmsMaterialCoilAllExportVo { private BigDecimal netWeight; // 班组 + @ExcelProperty(value = "班组") private String team; /**