Commit 2e1dfce2 zshaohui

1.半成品仓单据出库bug修复

2.接收批量手动tower预警
3.原材料退库上架时,先去获取信息
4.原材料人工出库,调用发料接口
5.单据领料查询就保存
1 个父辈 1b95f712
......@@ -1560,13 +1560,15 @@ public class LiteOrderCache {
}
int taskReelCount = 0;
int taskNum = 0;
//转库可以出hold,置为空
//List<String> holdPosIdList = getHoldPosIdList(cacheOrder);
List<String> holdPosIdList = new ArrayList<>();
for (LiteOrderItem orderItem : cacheOrder.getOrderItems()) {
int taskNum = 0;
int remainNum = orderItem.getNeedNum() - orderItem.getTotalOutNum();
if (remainNum <= 0) {
continue;
......
......@@ -310,11 +310,11 @@ public class LizhenController {
@ApiOperation("手动发料信息转发Tower")
@RequestMapping("/manualTower")
@AnonymousAccess
public Map<String, String> manualTower(@RequestBody List<ManualTower> itemList) {
public Map<String, String> manualTower(@RequestBody JSONObject jsonObject) {
//转发到3楼料仓服务器
log.info("收到WMS手动发料数据为:" + JSON.toJSONString(itemList));
log.info("收到WMS手动发料数据为:" + JSON.toJSONString(jsonObject));
try {
String result = HttpHelper.postJson(manualTowerUrl, itemList);
String result = HttpHelper.postJson(manualTowerUrl, jsonObject);
log.info("WMS手动发料转发结果为:" + result);
return JSON.parseObject(result, Map.class);
} catch (ApiException e) {
......
......@@ -4,27 +4,30 @@ import lombok.Data;
@Data
public class ManualTower {
private String PLANT_CODE; // 厂区
private String PICKING_ID; // 挑料编码
private String ROW_ID; // 假设这是一个唯一标识符,可以使用String
private int ITEM_NO; // 项目号,使用int,如果可能超出int范围,则使用long
private String PLANT_CODE; // 工厂代码
private String MATERIAL_CODE; // 料号
private String LINE; // 线别
private String MACHINE_NAME; // 机台名
private String MACHINE; // 原为MACHINE,但为避免与机台名冲突,改为机台类型
private String MACHINE; // 机台(可能与MACHINE_NAME重复,但保持原样)
private String FACE; // 面别
private String SLOT; // 料站
private String SUBSLOT; // 左右料站
private String MO; // 工单
private String BRAND; // 制造商
private String BATCH_CODE; // 批次号
private int LEFT_QTY; // 剩余数量,假设为浮点数,根据需要可改为Integer
private int LEFT_QTY; // 剩余数量,使用int,根据需求调整
private int LEFT_PCBS; // 剩余板数
private int LEFT_TIMES; // 剩余时间,假设为浮点数,根据需要可改为其他类型
private int LEFT_TIMES; // 剩余时间,根据时间单位可能需要调整为long或特定时间类型
private int PRIORITY; // 优先级
private int PRODUCT_BOARDS; // 主板数
private int STATUS; // 状态
private String RECIEVE_TYPE; // 接收类型
private int STATUS; // 状态,如果状态值很多且有具体含义,考虑使用枚举
private String MACHINE_TYPE; // 机台类型
private String RECIEVE_TYPE; // 接收类型,注意拼写错误,应为RECEIVE_TYPE
private String PITCH; // 摊位
private int TAP_LENGTH; // 料盘长度,假设为浮点数
private double TAP_LENGTH; // 料盘长度,假设需要较高的精度
private int REQ_REEL; // 需求卷数
private int REQ_QTY; // 需求数量
private String MODEL; // 机种
}
......@@ -1137,6 +1137,42 @@ public class LuxsanApi extends DefaultSmfApiListener {
}
public static Barcode fetchReel(Barcode barcode) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("reel_code", barcode.getBarcode());
log.info(barcode.getBarcode() + "fetchReel调用参数为:" + JSON.toJSONString(paramMap));
try {
String resultStr = HttpHelper.postJson(fetchReelUrl, paramMap);
log.info(barcode.getBarcode() + "fetchReel调用结果为:" + resultStr);
JSONObject resultObj = JSONObject.parseObject(resultStr);
String msgty = resultObj.getString("MSGTY");
if ("S".equals(msgty)){
JSONObject dataObj = resultObj.getJSONObject("DATA");
String labelId = dataObj.getString("label_id");
int reelQty = dataObj.getIntValue("reel_qty");
String warehouseCode = dataObj.getString("warehouse_code");
if (StringUtils.isNotBlank(warehouseCode)){
barcode.setWarehouseCode(warehouseCode);
}
if (StringUtils.isNotBlank(labelId)){
barcode.setLabelId(labelId);
}
if (reelQty != 0){
barcode.setAmount(reelQty);
}
return barcode;
}
} catch (Exception e) {
log.info(barcode.getBarcode()+"fetchReel调用失败:"+e.getMessage());
}
return null;
}
@Override
public void outTaskStatusChange(String outNotifyUrl, DataLog task) {
//pickingIssue(new PickingIssueRequest());
......@@ -1148,6 +1184,15 @@ public class LuxsanApi extends DefaultSmfApiListener {
}
private static String fetchReelUrl;
@Value("${api.fetchReel}")
public void setFetchReelUrl(String url) {
LuxsanApi.fetchReelUrl = url;
}
private static String batchCheckReelUrl;
@Value("${api.batchCheckReel}")
......
......@@ -562,17 +562,17 @@ public class CDeviceController {
String orderItemId = barcode.getOrderItemId();
LiteOrderItem orderItem = null;
if (StringUtils.isNotEmpty(orderItemId)) {
orderItem = liteOrderItemManager.get(orderItemId);
}
String orderNo = "";
String orderId = "";
String orderNo = "";
if (StringUtils.isNotEmpty(orderItemId)) {
int checkType = -1;
String pkItemId = "";
String face = "";
String brand = "";
String batchCode = "";
LiteOrderItem orderItem = liteOrderItemManager.get(orderItemId);
if(orderItem != null){
orderNo = orderItem.getOrderNo();
orderId = orderItem.getOrderId();
......@@ -588,7 +588,6 @@ public class CDeviceController {
}
}
//通知WMS
if (checkType == LiteorderCheckType.PICKING_CHECKOUT){
try {
......@@ -629,9 +628,13 @@ public class CDeviceController {
}
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "请求PK发料失败,隔口:" + barcode.getPosName() + "出库信息已清空");
}
}
}
else {
//人工出库,
LuxsanApi.pickingIssue(new PickingIssueRequest(CommonUtil.plantCode, "SMFW"+System.currentTimeMillis(), "0", barcode.getPartNumber()
, barcode.getWarehouseCode(), "", "", "", Arrays.asList(barcode.getBarcode())));
}
DataLog dataLog = new DataLog(new Storage(), barcode, new StoragePos());
dataLog.setSubSourceId(orderItemId);
......
......@@ -72,9 +72,16 @@ public class ReturnTowerController {
}
String warehouseCode = barcode.getWarehouseCode();
if (StringUtils.isEmpty(warehouseCode)){
Barcode reelBarcode = LuxsanApi.fetchReel(barcode);
if (reelBarcode == null){
return ResultBean.newErrorResult(-1, "", "未找到"+barcode.getBarcode()+"的库别信息");
}
warehouseCode = reelBarcode.getWarehouseCode();
if (StringUtils.isEmpty(warehouseCode)) {
return ResultBean.newErrorResult(-1, "", "未找到"+barcode.getBarcode()+"的库别信息");
}
}
//获取尺寸信息
BrandQtyResult result = LuxsanApi.brandQtyUrl(new BrandQtyRequest(barcode.getPartNumber(), barcode.getProvider()));
......
......@@ -65,9 +65,9 @@ public class TicketController {
List<FetchMoveTicketResult> ticketList = new ArrayList<>();
LiteOrder order = liteOrderCache.getOrderSortItems(ticket);
if (order == null){
ticketList = LuxsanApi.fetchMoveTicket(new FetchMoveTicketRequest(CommonUtil.plantCode, ticket));
} else {
if (order == null) {
order = ticketToLiteOrder(ticket);
}
for (LiteOrderItem orderItem : order.getOrderItems()) {
FetchMoveTicketResult result = new FetchMoveTicketResult();
result.setTICKET_ITEM(orderItem.getTicketItem());
......@@ -83,9 +83,6 @@ public class TicketController {
result.setBRAND(orderItem.getBrand());
ticketList.add(result);
}
}
return ResultBean.newOkResult(FetchMoveTicketDto.convertFetchMoveTicketDto(ticketList));
}
......@@ -120,35 +117,7 @@ public class TicketController {
}
} else {
liteOrder = new LiteOrder();
liteOrder.setOrderNo(ticket);
List<LiteOrderItem> itemList = new ArrayList<>();
List<FetchMoveTicketResult> ticketList = LuxsanApi.fetchMoveTicket(new FetchMoveTicketRequest(CommonUtil.plantCode, ticket));
for (FetchMoveTicketResult result : ticketList) {
LiteOrderItem item = new LiteOrderItem();
item.setNeedNum(result.getQTY());
item.setWarehouseCode(result.getSRC_WAREHOUSE());
item.setPn(result.getMATERIAL_CODE());
item.setTicketItem(result.getTICKET_ITEM());
item.setMaterialCode(result.getMATERIAL_CODE());
item.setSrcPlant(result.getSRC_PLANT());
item.setDstPlant(result.getDST_PLANT());
item.setSrcWarehouse(result.getSRC_WAREHOUSE());
item.setDstWarehouse(result.getDST_WAREHOUSE());
item.setSrcBatch(result.getSRC_BATCH());
item.setDstBatch(result.getDST_BATCH());
item.setQty(result.getQTY());
item.setMoveType(result.getMOVE_TYPE());
item.setBrand(result.getBRAND());
itemList.add(item);
}
liteOrder.setOrderItems(itemList);
liteOrder.setCheckType(LiteorderCheckType.TICKET_CHECKOUT);
liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
liteOrder = ticketToLiteOrder(ticket);
}
String result = "";
......@@ -358,4 +327,36 @@ public class TicketController {
return ResultBean.newOkResult("");
}
private LiteOrder ticketToLiteOrder(String ticket) {
LiteOrder liteOrder = new LiteOrder();
liteOrder.setOrderNo(ticket);
List<LiteOrderItem> itemList = new ArrayList<>();
List<FetchMoveTicketResult> ticketList = LuxsanApi.fetchMoveTicket(new FetchMoveTicketRequest(CommonUtil.plantCode, ticket));
for (FetchMoveTicketResult result : ticketList) {
LiteOrderItem item = new LiteOrderItem();
item.setNeedNum(result.getQTY());
item.setWarehouseCode(result.getSRC_WAREHOUSE());
item.setPn(result.getMATERIAL_CODE());
item.setTicketItem(result.getTICKET_ITEM());
item.setMaterialCode(result.getMATERIAL_CODE());
item.setSrcPlant(result.getSRC_PLANT());
item.setDstPlant(result.getDST_PLANT());
item.setSrcWarehouse(result.getSRC_WAREHOUSE());
item.setDstWarehouse(result.getDST_WAREHOUSE());
item.setSrcBatch(result.getSRC_BATCH());
item.setDstBatch(result.getDST_BATCH());
item.setQty(result.getQTY());
item.setMoveType(result.getMOVE_TYPE());
item.setBrand(result.getBRAND());
itemList.add(item);
}
liteOrder.setOrderItems(itemList);
liteOrder.setCheckType(LiteorderCheckType.TICKET_CHECKOUT);
liteOrder = liteOrderManager.createWithItems(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
return liteOrder;
}
}
......@@ -27,6 +27,8 @@ public class TicketUtil {
item.setDstBatch(ticketResult.getDST_BATCH());
item.setNeedNum(ticketResult.getQTY());
item.setMoveType(ticketResult.getMOVE_TYPE());
item.setQty(ticketResult.getQTY());
item.setMaterialCode(ticketResult.getMATERIAL_CODE());
itemList.add(item);
}
liteOrder.setOrderItems(itemList);
......
......@@ -179,3 +179,5 @@ api:
#批量禁用料
batchCheckReel: http://10.68.27.68:8001/Npm/CheckReelBatch
fetchReel: http://10.68.30.22:8082/api/mlb/FetchReel
......@@ -179,3 +179,5 @@ api:
#批量禁用料
batchCheckReel: http://10.68.27.68:8001/Npm/CheckReelBatch
fetchReel: http://10.42.220.171:8082/api/mlb/FetchReel
\ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!