package com.zy.asrs.entity.param; import com.core.common.DateUtils; import com.zy.asrs.entity.WrkDetl; import lombok.Data; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /* * Created by Monkey D. Luffy on 2025.10.28 * */ @Data public class OrderMesXGHYParam { private String barcode ; //托盘条码(徐工时间戳) = snowflakeIdWorker.nextId() zpallet private int palletizingNo; //码垛位编号(位置) private List matList; //木箱集合 @Data public static class Box { private String packageGroupNo; //包装组号(徐工没有,只有箱号卷号一对一) //null private String outOrIn; //out 出;in入; /* * 接口1=》不合格品出库二楼: 不合格品出库 * 接口2=》正常出库二楼: 拆包装检出库 * 2楼机械臂入库:成品入库 * 1楼退库:退货入库 * 盘点出库:盘点出库 * 盘点入库:盘点入库 * 1楼手动出库:成品出库 * 组货单出:成品出库 * */ private String stockType; //单据类型 private String boxNo; //箱号 private String boxPos; //位置 1 2 3 origin 木箱位置 private String boxType; //木箱类型 木箱类型 brand brand$ private String wideInWidth; // 4.5μm×588mm matnr 中的 4.5 private String thickness; //4.5μm×588mm matnr 中的 588 private String rollType = "纸轴"; //木箱类型 brand brand$ private List rolls; //卷集合 @Data public static class Roll { private String boxNo; //箱号 batch private String rollNo; //卷号 model private String specs; //规格 4.5μm×588mm matnr private String length; //长度 price private String splices; //接头 specs private String netWeight; //净重 weight private String grossWeight; //毛重 volume private String fqTime = DateUtils.convert(new Date(), DateUtils.yyyyMMddHHmmss_F); // private String orderSerialNumber; //WMS流水号 ERP无需理会 private String orderSerialNumberMsg = "orderSerialNumber为WMS流水号===ERP无需理会"; // public Roll() { } public Roll(WrkDetl sampleWrkDetl) { this.boxNo = sampleWrkDetl.getBatch(); this.rollNo = sampleWrkDetl.getModel(); this.specs = sampleWrkDetl.getMatnr(); this.length = sampleWrkDetl.getPrice().toString(); this.splices = sampleWrkDetl.getSpecs(); this.netWeight = sampleWrkDetl.getWeight().toString(); this.grossWeight = sampleWrkDetl.getVolume().toString(); this.orderSerialNumber = sampleWrkDetl.getOrderNo(); } @Override public String toString() { return String.format( "\tRoll(rollNo=%s, specs=%s, length=%s, splices=%s, netWeight=%s, grossWeight=%s, fqTime=%s, boxNo=%s, orderSerialNumber=%s, orderSerialNumberMsg=%s)\n", rollNo, specs, length, splices, netWeight, grossWeight, fqTime, boxNo, orderSerialNumber, orderSerialNumberMsg ); } } @Override public String toString() { return String.format( "Box(boxNo=%s, boxPos=%s, packageGroupNo=%s, outOrIn=%s, stockType=%s, boxType=%s, rollType=%s, wideInWidth=%s, thickness=%s, rolls=\n%s)", boxNo, boxPos, packageGroupNo, outOrIn, stockType, boxType, rollType, wideInWidth, thickness, rolls.toString() ); } } public OrderMesXGHYParam() { } public OrderMesXGHYParam(List wrkDetls,String outOrIn) { // 按batch字段分组,每个batch对应一个Box Map> batchGroup = wrkDetls.stream() .collect(Collectors.groupingBy(WrkDetl::getBatch)); List boxList = new ArrayList<>(); // 处理每个batch分组 for (Map.Entry> entry : batchGroup.entrySet()) { String batch = entry.getKey(); List batchWrkDetls = entry.getValue(); // 创建Box对象 OrderMesXGHYParam.Box box = new OrderMesXGHYParam.Box(); box.setBoxNo(batch); // batch对应boxNo box.setOutOrIn(outOrIn); // batch对应boxNo // 按model字段分组,每个model对应一个roll Map> modelGroup = batchWrkDetls.stream() .collect(Collectors.groupingBy(WrkDetl::getModel)); List rollList = new ArrayList<>(); String wideInWidth = null; String thickness = null; String boxPos = null; String boxType = null; String stockType = null; //单据类型 String packageGroupNo = null; //包装组号(徐工没有,只有箱号卷号一对一) //null // 处理每个model分组 for (Map.Entry> modelEntry : modelGroup.entrySet()) { List modelWrkDetls = modelEntry.getValue(); // 取第一个WrkDetl来创建roll(因为同一个model的roll信息应该相同) WrkDetl sampleWrkDetl = modelWrkDetls.get(0); String matnr = sampleWrkDetl.getMatnr(); // 使用正则表达式提取数字部分 // 先按"μm×"分割,再按"mm"分割 String[] firstSplit = matnr.split("μm×"); if (firstSplit.length == 2) { wideInWidth = firstSplit[0]; // 5.2 String[] secondSplit = firstSplit[1].split("mm"); if (secondSplit.length > 0) { thickness = secondSplit[0]; // 834.1 } } boxPos = sampleWrkDetl.getOrigin(); boxType = sampleWrkDetl.getBrand$(); stockType = sampleWrkDetl.getManu(); packageGroupNo = sampleWrkDetl.getDeadTime(); OrderMesXGHYParam.Box.Roll roll = new OrderMesXGHYParam.Box.Roll(sampleWrkDetl); rollList.add(roll); } box.setWideInWidth(wideInWidth); box.setThickness(thickness); box.setBoxPos(boxPos); box.setBoxType(boxType); box.setStockType(stockType); box.setPackageGroupNo(packageGroupNo); box.setRolls(rollList); boxList.add(box); } // 设置到主对象中 this.matList = boxList; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("OrderMesXGHYParam(\n"); sb.append(" barcode=").append(barcode).append(",\n"); sb.append(" palletizingNo=").append(palletizingNo).append(",\n"); sb.append(" matList=[\n"); if (matList != null) { for (int i = 0; i < matList.size(); i++) { sb.append("\t").append(matList.get(i).toString().replace("\n", "\n\t")); if (i < matList.size() - 1) { sb.append(",\n"); } else { sb.append("\n"); } } } sb.append(" ]\n"); sb.append(")"); return sb.toString(); } }