Browse Source

分拣回库高度

master
常熟吴彦祖 12 hours ago
parent
commit
eb83d1cb9c
  1. 20
      src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/impl/HaiAnWcsApiServiceImpl.java
  2. 22
      src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaAutoWarehouseServiceImpl.java
  3. 15
      src/main/java/com/gaotao/modules/autoWareHourceHaian/staticData/HaiAnHeightStaticData.java

20
src/main/java/com/gaotao/modules/autoWareHourceHaian/api/service/impl/HaiAnWcsApiServiceImpl.java

@ -111,17 +111,21 @@ public class HaiAnWcsApiServiceImpl implements HaiAnWcsApiService {
&& !HaiAnAssembleTypeStaticData.TYPE_SORT_OUTBOUND.equals(assembleType)) {
throw new IllegalArgumentException("组盘业务类型type仅支持1入库组盘、2分拣放回、3分拣出库");
}
// 最终出口只保留通知回库的高度。其它组盘即使上游带了高度也改成空串,避免再补低于600 - rqrq
if (HaiAnAssembleTypeStaticData.TYPE_SORT_RETURN.equals(assembleType)) {
if (inData == null || !HaiAnHeightStaticData.isAllowed(inData.getHeight())) {
throw new IllegalArgumentException("通知回库必须选择托盘高度,仅支持低于600、600-1100、1100-1650");
}
inData.setHeight(inData.getHeight().trim().toUpperCase());
} else if (inData != null) {
inData.setHeight("");
// 出站只卡通知回库。组盘入库和提交分拣的空高度必须保留成空串,不能在这里补档或拒绝 - rqrq
String outboundHeight = HaiAnHeightStaticData.resolveAssembleHeight(
assembleType, inData == null ? null : inData.getHeight());
if (outboundHeight == null) {
throw new IllegalArgumentException("通知回库必须选择托盘高度,仅支持低于600、600-1100、1100-1650");
}
if (inData != null) {
inData.setHeight(outboundHeight);
}
ObjectMapper objectMapper2 = new ObjectMapper();
Map<String, Object> request = objectMapper2.convertValue(inData, new TypeReference<Map<String, Object>>() {});
// 空串可能在转 Map 时丢掉,组盘入库和提交分拣仍要把 height 显式写成空串传给立库 - rqrq
if (request != null) {
request.put("height", outboundHeight);
}
Long logId = null;
// 保留已收到的响应原文供失败回填;未获得响应时保持null,避免伪造WCS回执 - rqrq

22
src/main/java/com/gaotao/modules/autoWareHourceHaian/service/impl/HaiAnPdaAutoWarehouseServiceImpl.java

@ -1805,13 +1805,10 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
throw new RuntimeException("组盘业务类型type仅支持1入库组盘、2分拣放回、3分拣出库");
}
// 3. 只有通知回库(type=2)必须使用页面选择的高度。组盘入库、分拣出库、结束分拣和直接组盘都传空,不复用托盘旧高度,也不补低于600 - rqrq
String height = "";
if (HaiAnAssembleTypeStaticData.TYPE_SORT_RETURN.equals(assembleType)) {
if (!HaiAnHeightStaticData.isAllowed(request.getHeight())) {
throw new RuntimeException("通知回库必须选择托盘高度,仅支持低于600、600-1100、1100-1650");
}
height = request.getHeight().trim().toUpperCase();
// 3. 只有通知回库(type=2)校验高度。组盘入库、提交分拣、结束分拣、直接组盘传空串,空值合法 - rqrq
String height = HaiAnHeightStaticData.resolveAssembleHeight(assembleType, request.getHeight());
if (height == null) {
throw new RuntimeException("通知回库必须选择托盘高度,仅支持低于600、600-1100、1100-1650");
}
// 4. 统一解析endFlag:显式值必须是Y/N;未传时按Type推导(1=Y,其它=N) - rqrq
@ -2188,13 +2185,14 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
request.setItemNo(1);
request.setOriBarcode(oriBarcode);
if (sortedSourcePallet) {
// 被分拣放回:type=2,endFlag=Y 告诉立库本包闭环可走 - rqrq
// 被分拣放回:type=2,endFlag=Y 告诉立库本包闭环可走。这一条才校验高度 - rqrq
request.setType(HaiAnAssembleTypeStaticData.TYPE_SORT_RETURN);
request.setEndFlag(HaiAnAssembleTypeStaticData.END_FLAG_YES);
} else {
// 人工工作盘提交增量属于分拣出库,显式传type=3;endFlag=N表示本次尚未结束分拣 - rqrq
// 工作盘提交分拣是 type=3,不选高度。先清掉入参,避免空值被通知回库规则拦住 - rqrq
request.setType(HaiAnAssembleTypeStaticData.TYPE_SORT_OUTBOUND);
request.setEndFlag(HaiAnAssembleTypeStaticData.END_FLAG_NO);
request.setHeight("");
}
HaiAnAssemblePalletRequest assembleRequest = buildAssembleRequest(request, palletInfo, detailRows);
// 本次有增量才联动申请单立库取出及海安任务状态;与WCS下发处于同一事务,外呼失败回滚标记 - rqrq
@ -2800,6 +2798,8 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
request.setItemNo(1);
request.setType(HaiAnAssembleTypeStaticData.TYPE_INBOUND); // 入库组盘 - rqrq
request.setEndFlag(HaiAnAssembleTypeStaticData.END_FLAG_YES); // 运输入库为本次组盘闭环动作 - rqrq
// 组盘入库不选高度,空串合法,不能沿用托盘上一次通知回库留下的档位 - rqrq
request.setHeight("");
// 报文构建在单一方法完成:必填type校验、endFlag规则和cargoInfos组装统一核对,失败不外呼 - rqrq
HaiAnAssemblePalletRequest assembleRequest = buildAssembleRequest(request, palletInfo, newDetailRows);
// 运输入库高度固定空串;A0206空盘传空cargoInfos,其余按位置/层数/条码组装,组包失败不下发WCS - rqrq
@ -2938,6 +2938,8 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
request.setItemNo(1);
request.setType(HaiAnAssembleTypeStaticData.TYPE_INBOUND);
request.setEndFlag(HaiAnAssembleTypeStaticData.END_FLAG_YES);
// 直接组盘不选高度,报文固定空串 - rqrq
request.setHeight("");
HaiAnAssemblePalletRequest assembleRequest = buildAssembleRequest(request, palletInfo, newDetailRows);
// 直接组盘目标位置固定为入库口,不使用托盘当前location_code - rqrq
assembleRequest.setAssemblyPosition(assemblyPosition);
@ -3058,6 +3060,8 @@ public class HaiAnPdaAutoWarehouseServiceImpl implements HaiAnPdaAutoWarehouseSe
request.setOriBarcode(oriBarcode);
request.setType(HaiAnAssembleTypeStaticData.TYPE_SORT_OUTBOUND);
request.setEndFlag(HaiAnAssembleTypeStaticData.END_FLAG_YES);
// 结束分拣不选高度,空串合法 - rqrq
request.setHeight("");
// 组装报文沿用生成的taskNo、type=3、endFlag=Y及增量或空cargoInfos;组包失败回滚本地状态且不外呼 - rqrq
HaiAnAssemblePalletRequest assembleRequest = buildAssembleRequest(request, palletInfo, detailRows);
// 结束分拣本次带增量时同样回写申请单立库取出与海安任务状态;空包不更新,外呼失败回滚 - rqrq

15
src/main/java/com/gaotao/modules/autoWareHourceHaian/staticData/HaiAnHeightStaticData.java

@ -34,4 +34,19 @@ public final class HaiAnHeightStaticData {
public static boolean isAllowed(String height) {
return height != null && ALLOWED_HEIGHTS.contains(height.trim().toUpperCase());
}
/**
* 组盘下发高度。只有通知回库 type=2 必须是允许档位,不合法时返回 null,由调用方拒绝。
* 组盘入库、提交分拣、结束分拣、直接组盘一律返回空串:空值合法,不读托盘旧高度,也不补低于600。- rqrq
*/
public static String resolveAssembleHeight(Integer assembleType, String height) {
if (assembleType != null
&& HaiAnAssembleTypeStaticData.TYPE_SORT_RETURN.intValue() == assembleType.intValue()) {
if (!isAllowed(height)) {
return null;
}
return height.trim().toUpperCase();
}
return "";
}
}
Loading…
Cancel
Save