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<Box> 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<Roll> 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<WrkDetl> wrkDetls,String outOrIn) {
|
// 按batch字段分组,每个batch对应一个Box
|
Map<String, List<WrkDetl>> batchGroup = wrkDetls.stream()
|
.collect(Collectors.groupingBy(WrkDetl::getBatch));
|
|
List<OrderMesXGHYParam.Box> boxList = new ArrayList<>();
|
|
// 处理每个batch分组
|
for (Map.Entry<String, List<WrkDetl>> entry : batchGroup.entrySet()) {
|
String batch = entry.getKey();
|
List<WrkDetl> batchWrkDetls = entry.getValue();
|
|
// 创建Box对象
|
OrderMesXGHYParam.Box box = new OrderMesXGHYParam.Box();
|
box.setBoxNo(batch); // batch对应boxNo
|
box.setOutOrIn(outOrIn); // batch对应boxNo
|
|
// 按model字段分组,每个model对应一个roll
|
Map<String, List<WrkDetl>> modelGroup = batchWrkDetls.stream()
|
.collect(Collectors.groupingBy(WrkDetl::getModel));
|
|
List<OrderMesXGHYParam.Box.Roll> 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<String, List<WrkDetl>> modelEntry : modelGroup.entrySet()) {
|
List<WrkDetl> 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();
|
}
|
}
|