Commit 032cf221 LN

1.页面显示修改:未显示物料类型。

2.麦康尼料仓入库时API002发送错误修改
1 个父辈 785cb4b7
...@@ -286,6 +286,8 @@ public class HttpHelper { ...@@ -286,6 +286,8 @@ public class HttpHelper {
// } // }
try { try {
CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpClient httpClient = HttpClients.createDefault();
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECTION_TIMEOUT).setConnectionRequestTimeout(10000).setSocketTimeout(5000).build();
httpGet.setConfig(requestConfig);
CloseableHttpResponse response = httpClient.execute(httpGet); CloseableHttpResponse response = httpClient.execute(httpGet);
int code = response.getStatusLine().getStatusCode(); int code = response.getStatusLine().getStatusCode();
...@@ -328,6 +330,8 @@ public class HttpHelper { ...@@ -328,6 +330,8 @@ public class HttpHelper {
} }
try { try {
CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpClient httpClient = HttpClients.createDefault();
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECTION_TIMEOUT).setConnectionRequestTimeout(10000).setSocketTimeout(5000).build();
httpPost.setConfig(requestConfig);
CloseableHttpResponse response = httpClient.execute(httpPost); CloseableHttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity(); HttpEntity entity = response.getEntity();
String responseContent = EntityUtils.toString(entity, CONTENT_CHARSET); String responseContent = EntityUtils.toString(entity, CONTENT_CHARSET);
......
...@@ -318,11 +318,14 @@ public class ThirdBoxHandler extends BaseDeviceHandler{ ...@@ -318,11 +318,14 @@ public class ThirdBoxHandler extends BaseDeviceHandler{
DataLog task = taskService.findExecutingTask(cid, posName, barcode); DataLog task = taskService.findExecutingTask(cid, posName, barcode);
if (task != null && task.isPutInTask()) { if (task != null && task.isPutInTask()) {
String oldPosName=task.getPosName();
String oldPosId=task.getPosId();
//对比容量,更新库位号 //对比容量,更新库位号
StoragePos newPos=UsePosProcess(task,posCapMap); StoragePos newPos=UsePosProcess(task,posCapMap);
if(newPos!=null){ if(newPos!=null){
log.error(cid + "入仓位[" + posName + "]ReelId[" + barcode + "] 更改库位号为["+newPos.getPosName()+"]"); log.error(cid + "入仓位[" + posName + "]ReelId[" + barcode + "]原来库位["+oldPosId+"]["+oldPosName+"], 更改库位号为["+newPos.getPosName()+"],posId=["+newPos.getId()+"]");
task.setPosName(newPos.getPosName()); task.setPosName(newPos.getPosName());
task.setPosId(newPos.getId());
} }
if (executeTime > 0) { if (executeTime > 0) {
task.setExecuteTime(executeTime); task.setExecuteTime(executeTime);
......
...@@ -26,7 +26,7 @@ public class InListItem extends BasePo implements Serializable { ...@@ -26,7 +26,7 @@ public class InListItem extends BasePo implements Serializable {
item.setNum(num); item.setNum(num);
return item; return item;
} }
public static InListItem newMItem(String name, Barcode barcode, String rfid,String posName,int s){ public static InListItem newMItem(String name, Barcode barcode, String rfid,String posName,int s,String mType){
InListItem item=new InListItem(); InListItem item=new InListItem();
item.setName(name); item.setName(name);
item.setPN(barcode.getPartNumber()); item.setPN(barcode.getPartNumber());
...@@ -34,6 +34,7 @@ public class InListItem extends BasePo implements Serializable { ...@@ -34,6 +34,7 @@ public class InListItem extends BasePo implements Serializable {
item.setRfid(rfid); item.setRfid(rfid);
item.setPosName(posName); item.setPosName(posName);
item.setState(s); item.setState(s);
item.setMType(mType);
return item; return item;
} }
/** /**
......
...@@ -331,8 +331,14 @@ public class LanguageMsgService { ...@@ -331,8 +331,14 @@ public class LanguageMsgService {
newLanguageList.add(msg); newLanguageList.add(msg);
} else { } else {
boolean isUpdate = false; boolean isUpdate = false;
boolean needUpdate=false;
if(!oldMsg.getEdited()){ if(!oldMsg.getEdited()){
isNeedUpdate=true; needUpdate=true;
}
if(isNeedUpdate){
needUpdate=true;
} }
//只新增不修改 //只新增不修改
List<String> allLanList = getAllLanList(); List<String> allLanList = getAllLanList();
...@@ -340,7 +346,7 @@ public class LanguageMsgService { ...@@ -340,7 +346,7 @@ public class LanguageMsgService {
String oldValue = oldMsg.getContent(lanType); String oldValue = oldMsg.getContent(lanType);
String newValue = msg.getContent(lanType); String newValue = msg.getContent(lanType);
if (ObjectUtil.isNotEmpty(newValue)) { if (ObjectUtil.isNotEmpty(newValue)) {
if (ObjectUtil.isEmpty(oldValue)||(isNeedUpdate &&(!newValue.equals(oldValue))) ) { if (ObjectUtil.isEmpty(oldValue)||(needUpdate &&(!newValue.equals(oldValue))) ) {
oldMsg.setContent(lanType, newValue); oldMsg.setContent(lanType, newValue);
isUpdate = true; isUpdate = true;
//内容默认更改为中文 //内容默认更改为中文
......
...@@ -30,7 +30,9 @@ import com.neotel.smfcore.core.system.service.po.DataLog; ...@@ -30,7 +30,9 @@ import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil; import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.micron1053.api.MicronApi; import com.neotel.smfcore.custom.micron1053.api.MicronApi;
import com.neotel.smfcore.custom.micron1053.api.bean.Material;
import com.neotel.smfcore.custom.micron1053.api.bean.MaterialStatus; import com.neotel.smfcore.custom.micron1053.api.bean.MaterialStatus;
import com.neotel.smfcore.custom.micron1053.api.bean.TrackStatus;
import com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus; import com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -40,6 +42,7 @@ import org.springframework.stereotype.Service; ...@@ -40,6 +42,7 @@ import org.springframework.stereotype.Service;
import java.util.*; import java.util.*;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/** /**
* Created by sunke on 2021/7/12. * Created by sunke on 2021/7/12.
...@@ -343,7 +346,7 @@ public class LiteOrderCache { ...@@ -343,7 +346,7 @@ public class LiteOrderCache {
//先改为单盘上传 //先改为单盘上传
List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").in(itemIdList))); List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").in(itemIdList)));
if (dataLogList != null && !dataLogList.isEmpty()) { if (dataLogList != null && !dataLogList.isEmpty()) {
boolean isSuccess = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList); boolean isSuccess = MicronApi.Api007(order.getOrderNo(), task.getLocInfo(), dataLogList);
for (LiteOrderItem item : items) { for (LiteOrderItem item : items) {
if (itemIdList.contains(item.getId())) { if (itemIdList.contains(item.getId())) {
if (isSuccess) { if (isSuccess) {
...@@ -820,6 +823,83 @@ public class LiteOrderCache { ...@@ -820,6 +823,83 @@ public class LiteOrderCache {
} }
public synchronized void preTaskCheckOut(LiteOrder order, String operationId, List<Material> materialList) {
order.setStatus(LITEORDER_STATUS.TAILS);
order.setTaskReelCount(0);
order.setFinishedReelCount(0);
log.info("preTaskCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "]开始出库");
int taskReelCount = 0;
//提取barcode
List<String> barcodeList = materialList.stream().map(item -> item.getSerialNum()).collect(Collectors.toList());
List<StoragePos> storagePosList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.barcode").in(barcodeList)));
if (storagePosList != null && !storagePosList.isEmpty()) {
materialList = storagePosList.stream().map(item -> {
Material material = new Material();
material.setSerialNum(item.getBarcode().getBarcode());
material.setPartNumber(item.getBarcode().getPartNumber());
return material;
}).collect(Collectors.toList());
//mes提前扣除,扣除成功的直接出库,失败的标记状态
List<TrackStatus> trackStatusList = MicronApi.Api010(operationId, materialList);
if (trackStatusList != null && !trackStatusList.isEmpty()) {
for (LiteOrderItem orderItem : order.getOrderItems()) {
String ri = orderItem.getRi();
//判断是否缺料
StoragePos storagePos = storagePosList.stream().filter(pos -> pos.getBarcode().equals(ri)).findFirst().orElse(null);
if (storagePos == null) {
//缺料
orderItem.setStatus(OrderItemStatus.shortage);
} else {
TrackStatus trackStatus = trackStatusList.stream().filter(item -> ri.equals(item.getSerialNum())).findAny().orElse(null);
if (trackStatus != null) {
if (trackStatus.isSuccess()) {
// StoragePos pos = storagePosManager.getByBarcode(ri);
/*if (pos == null) {
orderItem.setStatus(OrderItemStatus.shortage);
continue;
}*/
//生成任务
DataLog dataLog = new DataLog(dataCache.getStorageById(storagePos.getStorageId()), storagePos.getBarcode(), storagePos);
dataLog.setType(OP.CHECKOUT);
dataLog.setSourceId(order.getId());
dataLog.setSourceName(order.getOrderNo());
dataLog.setSubSourceId(orderItem.getId());
dataLog.setStatus(OP_STATUS.WAIT.name());
dataLog.setOperationId(operationId);
taskService.addTaskToExecute(dataLog);
taskReelCount++;
//设置状态.正在出库
orderItem.setStatus(OrderItemStatus.executing);
log.info("preTaskCheckOut 出库单["+order.getOrderNo()+"] operatetionId ["+order.getOperationId()+"] ,pn["+orderItem.getPn()+"] ,RI["+ri+"] 验证成功,开始出库,累计出库盘数="+taskReelCount);
} else {
//标记状态为mes扣除失败
orderItem.setStatus(OrderItemStatus.executFail);
log.info("preTaskCheckOut 出库单["+order.getOrderNo()+"] operatetionId ["+order.getOperationId()+"] ,pn["+orderItem.getPn()+"] ,RI["+ri+"] 验证失败,更改状态=executFail");
}
}
}
liteOrderItemManager.save(orderItem);
}
}
}
log.info("preTaskCheckOut 出库单["+order.getOrderNo()+"] operatetionId ["+order.getOperationId()+"] 出库完成,累计任务数="+taskReelCount);
order.setTaskReelCount(taskReelCount);
order.setTotalTaskReelCount(order.getTotalTaskReelCount() + taskReelCount);
if (taskReelCount <= 0) {
if (order.isOutTails()) {
order.setStatus(LITEORDER_STATUS.TAILS_FINISHED);
}
//liteOrderCache.finishedOrderTasks(order);
}
liteOrderManager.save(order);
addOrderToMap(order);
}
/** /**
* 工单挑料,OutSide Shelf Dispatch Controlled Dispatch * 工单挑料,OutSide Shelf Dispatch Controlled Dispatch
...@@ -968,22 +1048,31 @@ public class LiteOrderCache { ...@@ -968,22 +1048,31 @@ public class LiteOrderCache {
for (LiteOrderItem item : for (LiteOrderItem item :
newItems) { newItems) {
item.setOutNum(0); item.setOutNum(0);
item.setOutReelCount(0);
int outNum = 0;
int outReelCount = 0;
for (LiteOrderItem reelItem : for (LiteOrderItem reelItem :
item.getSelectItems()) { item.getSelectItems()) {
MaterialStatus s = apiResultMap.get(reelItem.getRi()); MaterialStatus s = apiResultMap.get(reelItem.getRi());
if (s.getMaterialStatus().toUpperCase().equalsIgnoreCase("SUCCESS")) { if (s.getMaterialStatus().toUpperCase().equalsIgnoreCase("SUCCESS")) {
reelItem.setStatus(OrderItemStatus.CheckOk); reelItem.setStatus(OrderItemStatus.CheckOk);
StoragePos pos=storagePosManager.getByBarcode(s.getSerialNum()); StoragePos pos = storagePosManager.getByBarcode(s.getSerialNum());
log.info("工单【" + orderNo + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证成功,更改状态为 CheckOk ,锁定库位【"+pos.getPosName()+"】"); log.info("工单【" + orderNo + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证成功,更改状态为 CheckOk ,锁定库位【" + pos.getPosName() + "】");
lockPos.add(pos);
item.setOutNum(item.getOutNum()+pos.getBarcode().getAmount());
pos.getBarcode().setLockId(cacheOrder.getOrderNo());
pos.getBarcode().setLockName(item.getPn());
storagePosManager.save(pos);
outNum += pos.getBarcode().getAmount();
outReelCount += 1;
} else { } else {
reelItem.setStatus(OrderItemStatus.CheckFail); reelItem.setStatus(OrderItemStatus.CheckFail);
log.info("工单【" + orderNo + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证失败,更改状态为 CheckFail"); log.info("工单【" + orderNo + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证失败,更改状态为 CheckFail");
} }
} }
item.setOutNum(outNum);
item.setOutReelCount(outReelCount);
liteOrderItemManager.save(item); liteOrderItemManager.save(item);
} }
...@@ -1009,4 +1098,98 @@ public class LiteOrderCache { ...@@ -1009,4 +1098,98 @@ public class LiteOrderCache {
} }
return ""; return "";
} }
public synchronized void dispatchCheckOut(LiteOrder order ) {
order.setStatus(LITEORDER_STATUS.TAILS);
order.setTaskReelCount(0);
order.setFinishedReelCount(0);
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "]开始出库");
int taskReelCount = 0;
List<String> needOutBarcode = new ArrayList<>();
for (LiteOrderItem item :
order.getOrderItems()) {
for (LiteOrderItem selItem :
item.getSelectItems()) {
if (selItem.getStatus().equals(OrderItemStatus.CheckOk)) {
//只出checkOK的
needOutBarcode.add(selItem.getRi());
}
}
}
List<StoragePos> storagePosList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.barcode").in(needOutBarcode)));
List<Material> materialList = new ArrayList<>();
if (storagePosList != null && !storagePosList.isEmpty()) {
materialList = storagePosList.stream().map(item -> {
Material material = new Material();
material.setSerialNum(item.getBarcode().getBarcode());
material.setPartNumber(item.getBarcode().getPartNumber());
return material;
}).collect(Collectors.toList());
//mes提前扣除,扣除成功的直接出库,失败的标记状态
List<TrackStatus> trackStatusList = MicronApi.Api010(order.getOperationId(), materialList);
if (trackStatusList != null && !trackStatusList.isEmpty()) {
for (LiteOrderItem orderItem : order.getOrderItems()) {
int outNum = 0;
int outReelCount = 0;
List<LiteOrderItem> newSelItems = new ArrayList<>();
for (LiteOrderItem selItem :
orderItem.getSelectItems()) {
String ri = selItem.getRi();
StoragePos storagePos = storagePosList.stream().filter(pos -> pos.getBarcode().equals(ri)).findFirst().orElse(null);
TrackStatus trackStatus = trackStatusList.stream().filter(item -> ri.equals(item.getSerialNum())).findAny().orElse(null);
boolean sucess = false;
if (trackStatus != null && trackStatus.isSuccess()) {
sucess = true;
DataLog dataLog = new DataLog(dataCache.getStorageById(storagePos.getStorageId()), storagePos.getBarcode(), storagePos);
dataLog.setType(OP.CHECKOUT);
dataLog.setSourceId(order.getId());
dataLog.setSourceName(order.getOrderNo());
dataLog.setSubSourceId(orderItem.getId());
dataLog.setStatus(OP_STATUS.WAIT.name());
dataLog.setOperationId(order.getOperationId());
taskService.addTaskToExecute(dataLog);
taskReelCount++;
//设置状态.正在出库
selItem.setStatus(OrderItemStatus.executing);
outNum += storagePos.getBarcode().getAmount();
outReelCount += 1;
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] ,pn[" + orderItem.getPn() + "] ,RI[" + ri + "] 验证成功,开始出库,累计出库盘数=" + taskReelCount);
} else {
selItem.setStatus(OrderItemStatus.executFail);
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] ,pn[" + orderItem.getPn() + "] ,RI[" + ri + "] 验证失败,更改状态=executFail");
}
newSelItems.add(selItem);
}
orderItem.setSelectItems(newSelItems);
orderItem.setOutNum(outNum);
orderItem.setOutReelCount(outReelCount);
liteOrderItemManager.save(orderItem);
}
}
}
log.info("dispatchCheckOut 出库单[" + order.getOrderNo() + "] operatetionId [" + order.getOperationId() + "] 出库完成,累计任务数=" + taskReelCount);
order.setTaskReelCount(taskReelCount);
order.setTotalTaskReelCount(order.getTotalTaskReelCount() + taskReelCount);
if (taskReelCount <= 0) {
if (order.isOutTails()) {
order.setStatus(LITEORDER_STATUS.TAILS_FINISHED);
}
//liteOrderCache.finishedOrderTasks(order);
}
liteOrderManager.save(order);
addOrderToMap(order);
}
} }
...@@ -85,4 +85,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> { ...@@ -85,4 +85,7 @@ public interface IStoragePosManager extends IBaseManager<StoragePos> {
List<StoragePos> findExpiredOrSluggishBarcode(Date date,int type); List<StoragePos> findExpiredOrSluggishBarcode(Date date,int type);
List<StoragePos> findExistPosList(String id, List<String> list); List<StoragePos> findExistPosList(String id, List<String> list);
List<StoragePos> findInStoragesByPN( Collection<String> excludePosIds,String pn,CHECKOUT_TYPE checkOutType );
} }
...@@ -814,4 +814,18 @@ public class StoragePosManagerImpl implements IStoragePosManager { ...@@ -814,4 +814,18 @@ public class StoragePosManagerImpl implements IStoragePosManager {
Query q = new Query(c); Query q = new Query(c);
return storagePosDao.findByQuery(q); return storagePosDao.findByQuery(q);
} }
@Override
public List<StoragePos> findInStoragesByPN( Collection<String> excludePosIds,String pn,CHECKOUT_TYPE checkOutType) {
Criteria c = Criteria.where("barcode.partNumber").is(pn)
.and("id").nin(excludePosIds)
.and("enabled").is(true)//可用
.and("barcode.lockId").is(null);//没有被锁定的仓位;
Query q = new Query(c);
Sort sort = getSortByCheckOutType(checkOutType);
q.with(sort);
List<StoragePos> list = storagePosDao.findByQuery(q);
return list;
}
} }
...@@ -230,6 +230,7 @@ public class MicronApi { ...@@ -230,6 +230,7 @@ public class MicronApi {
for (StoragePos pos : for (StoragePos pos :
storagePos) { storagePos) {
if (pos.getBarcode() == null) { if (pos.getBarcode() == null) {
log.info("API002 中,库位["+pos.getPosName()+"]barcode为空,不需要发送");
continue; continue;
} }
Map<String, Object> objMap = new HashMap<>(); Map<String, Object> objMap = new HashMap<>();
......
...@@ -79,9 +79,8 @@ public class LoadingController { ...@@ -79,9 +79,8 @@ public class LoadingController {
dto.setFailure(dto.getFailure() + 1); dto.setFailure(dto.getFailure() + 1);
} else if (item.isXray()) { } else if (item.isXray()) {
dto.setXRay(dto.getXRay() + 1); dto.setXRay(dto.getXRay() + 1);
dtoMap.put(dto.getMaterialType(), dto);
} }
dtoMap.put(dto.getMaterialType(), dto);
} }
List<MaterialLoadingDto> resultList=new ArrayList< >(); List<MaterialLoadingDto> resultList=new ArrayList< >();
......
...@@ -16,6 +16,7 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos; ...@@ -16,6 +16,7 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.custom.micron1053.api.MicronApi; import com.neotel.smfcore.custom.micron1053.api.MicronApi;
import com.neotel.smfcore.custom.micron1053.loading.Bean.LoadingInfo; import com.neotel.smfcore.custom.micron1053.loading.Bean.LoadingInfo;
import com.neotel.smfcore.custom.micron1053.util.MicronDataCache;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -66,9 +67,11 @@ public class LoadingUtil { ...@@ -66,9 +67,11 @@ public class LoadingUtil {
inList.addRfid(rfid); inList.addRfid(rfid);
inList.setStatus(INLIST_STATUS.ABNORMAL); inList.setStatus(INLIST_STATUS.ABNORMAL);
log.info("为入库单["+inList.getName()+"]增加一条入库信息:barcode["+barcode.getBarcode()+"],pn["+barcode.getPartNumber()+"],rfid["+rfid+"],posName["+posName+"],s["+s+"]"); String mtype= MicronDataCache.GetReelType(barcode.getPlateSize(),barcode.getHeight());
InListItem item = InListItem.newMItem(inList.getName(), barcode, rfid, posName, s); log.info("为入库单["+inList.getName()+"]增加一条入库信息:barcode["+barcode.getBarcode()+"],mtype["+mtype+"],pn["+barcode.getPartNumber()+"],rfid["+rfid+"],posName["+posName+"],s["+s+"]");
InListItem item = InListItem.newMItem(inList.getName(), barcode, rfid, posName, s,mtype);
if(inList.getEndRfidList()!=null&& inList.getEndRfidList().contains(rfid)){ if(inList.getEndRfidList()!=null&& inList.getEndRfidList().contains(rfid)){
item.setRfidEnd(true); item.setRfidEnd(true);
} }
......
...@@ -5,6 +5,7 @@ import com.neotel.smfcore.common.bean.ResultBean; ...@@ -5,6 +5,7 @@ import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil; import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.inList.service.po.InListItem; import com.neotel.smfcore.core.inList.service.po.InListItem;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS; import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
...@@ -13,6 +14,7 @@ import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager; ...@@ -13,6 +14,7 @@ import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
import com.neotel.smfcore.core.order.service.po.LiteOrder; import com.neotel.smfcore.core.order.service.po.LiteOrder;
import com.neotel.smfcore.core.order.service.po.LiteOrderItem; import com.neotel.smfcore.core.order.service.po.LiteOrderItem;
import com.neotel.smfcore.core.order.util.OrderFileWatch; import com.neotel.smfcore.core.order.util.OrderFileWatch;
import com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE;
import com.neotel.smfcore.core.storage.rest.dto.TacticsOutDto; import com.neotel.smfcore.core.storage.rest.dto.TacticsOutDto;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
...@@ -72,6 +74,8 @@ public class MicronDispatchController { ...@@ -72,6 +74,8 @@ public class MicronDispatchController {
// } // }
@Autowired @Autowired
private ILiteOrderManager liteOrderManager; private ILiteOrderManager liteOrderManager;
@Autowired
private DataCache dataCache;
@Autowired @Autowired
private IDataLogManager dataLogManager; private IDataLogManager dataLogManager;
@Autowired @Autowired
...@@ -186,7 +190,7 @@ private IStoragePosManager storagePosManager; ...@@ -186,7 +190,7 @@ private IStoragePosManager storagePosManager;
} }
//生成工单 //生成工单
String mode="CTRLDISPATCH "; String mode="CTRLDISPATCH";
//新增为一个工单 //新增为一个工单
String orderName = ""; String orderName = "";
...@@ -241,11 +245,11 @@ private IStoragePosManager storagePosManager; ...@@ -241,11 +245,11 @@ private IStoragePosManager storagePosManager;
@AnonymousAccess @AnonymousAccess
public ResultBean itemDetial(@RequestBody Map<String,Object> params) { public ResultBean itemDetial(@RequestBody Map<String,Object> params) {
String mode=params.get("mode").toString(); String mode = params.get("mode").toString();
String itemId=params.get("itemId").toString(); String itemId = params.get("itemId").toString();
log.info(" itemDetial :mode=" + mode + ", itemId="+itemId); log.info(" itemDetial :mode=" + mode + ", itemId=" + itemId);
//判断有没有生成任务 //判断有没有生成任务
LiteOrder order=getOrderByMode(mode); LiteOrder order = getOrderByMode(mode);
if (order == null) { if (order == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
...@@ -254,18 +258,37 @@ private IStoragePosManager storagePosManager; ...@@ -254,18 +258,37 @@ private IStoragePosManager storagePosManager;
.filter(item -> (item.getId().equals(itemId))) .filter(item -> (item.getId().equals(itemId)))
.collect(Collectors.toList()); .collect(Collectors.toList());
if(items.size()<=0){ if (items.size() <= 0) {
return ResultBean.newErrorResult(-1, "smfcore.micron.notFound", "未找到数据"); return ResultBean.newErrorResult(-1, "smfcore.micron.notFound", "未找到数据");
} }
List<ItemDetialDto> detialDtos=new ArrayList<>(); LiteOrderItem selItem = items.get(0);
for ( LiteOrderItem item :items.get(0).getSelectItems() List<ItemDetialDto> detialDtos = new ArrayList<>();
){
ItemDetialDto dto=new ItemDetialDto(item.getRi(),item.getNeedNum(),item.getStatus()); for (LiteOrderItem item : selItem.getSelectItems()
) {
ItemDetialDto dto = new ItemDetialDto(item.getRi(), item.getNeedNum(), item.getStatus());
detialDtos.add(dto); detialDtos.add(dto);
} }
//判断是否需要勾选其他物料
if (selItem.getOutNum() < selItem.getNeedNum()) {
//需要勾选
CHECKOUT_TYPE checkoutType = dataCache.getCheckOutType();
List<String> availableStorageIds = dataCache.getAvailableStorageIds();
Collection<String> excludePosIds = liteOrderCache.excludeOutPosIds();
List<StoragePos> otherPosList = storagePosManager.findInStoragesByPN(excludePosIds, selItem.getPn(), checkoutType);
for (StoragePos pos :
otherPosList) {
ItemDetialDto dto = new ItemDetialDto(pos.getBarcode().getBarcode(), pos.getBarcode().getAmount(), "");
detialDtos.add(dto);
}
}
//判断是否需要勾选 //判断是否需要勾选
return ResultBean.newOkResult(detialDtos); return ResultBean.newOkResult(detialDtos);
...@@ -297,14 +320,14 @@ private IStoragePosManager storagePosManager; ...@@ -297,14 +320,14 @@ private IStoragePosManager storagePosManager;
} }
for (LiteOrderItem item : for (LiteOrderItem item :
items) { items) {
if (item.getId().equals(itemId)){ if (item.getId().equals(itemId)) {
List<Barcode> allBarcodes = new ArrayList<>(); List<Barcode> allBarcodes = new ArrayList<>();
//查找到详情,循环RI,生成API009数据 //查找到详情,循环RI,生成API009数据
for (String ri : for (String ri :
selectRiList) { selectRiList) {
StoragePos pos=storagePosManager.getByBarcode(ri); StoragePos pos = storagePosManager.getByBarcode(ri);
if(pos!=null){ if (pos != null) {
allBarcodes.add(pos.getBarcode()); allBarcodes.add(pos.getBarcode());
} }
} }
...@@ -312,32 +335,46 @@ private IStoragePosManager storagePosManager; ...@@ -312,32 +335,46 @@ private IStoragePosManager storagePosManager;
//调用API009 //调用API009
Map<String, MaterialStatus> apiResultMap = MicronApi.Api009(allBarcodes); Map<String, MaterialStatus> apiResultMap = MicronApi.Api009(allBarcodes);
List<LiteOrderItem> selectReelItems = item.selectItems;
List<StoragePos> lockPos=new ArrayList<>();
for (Barcode barcode : for (Barcode barcode :
allBarcodes) { allBarcodes) {
LiteOrderItem reelItem=new LiteOrderItem() ; LiteOrderItem reelItem = new LiteOrderItem();
StoragePos pos = storagePosManager.getByBarcode(barcode.getBarcode());
reelItem.setRi(pos.getBarcode().getBarcode());
reelItem.setNeedNum(pos.getBarcode().getAmount());
MaterialStatus s = apiResultMap.get(barcode.getBarcode()); MaterialStatus s = apiResultMap.get(barcode.getBarcode());
if (s.getMaterialStatus().toUpperCase().equalsIgnoreCase("SUCCESS")) { if (s.getMaterialStatus().toUpperCase().equalsIgnoreCase("SUCCESS")) {
reelItem.setStatus(OrderItemStatus.CheckOk); reelItem.setStatus(OrderItemStatus.CheckOk);
StoragePos pos=storagePosManager.getByBarcode(s.getSerialNum());
log.info("工单【" + order.getOrderNo() + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证成功,更改状态为 CheckOk ,锁定库位【"+pos.getPosName()+"】"); log.info("工单【" + order.getOrderNo() + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证成功,更改状态为 CheckOk ,锁定库位【" + pos.getPosName() + "】");
lockPos.add(pos);
item.setOutNum(item.getOutNum()+pos.getBarcode().getAmount()); //锁定物料
pos.getBarcode().setLockId(order.getOrderNo());
pos.getBarcode().setLockName(item.getPn());
storagePosManager.save(pos);
item.setOutNum(item.getOutNum() + pos.getBarcode().getAmount());
item.setOutNum(item.getOutNum() + pos.getBarcode().getAmount());
} else { } else {
reelItem.setStatus(OrderItemStatus.CheckFail); reelItem.setStatus(OrderItemStatus.CheckFail);
log.info("工单【" + order.getOrderNo() + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证失败,更改状态为 CheckFail"); log.info("工单【" + order.getOrderNo() + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证失败,更改状态为 CheckFail");
} }
selectReelItems.add(reelItem);
} }
item.setSelectItems(selectReelItems);
liteOrderItemManager.save(item); liteOrderItemManager.save(item);
} }
} }
//返回新增列表
//判断是否需要勾选 //判断是否需要勾选
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
...@@ -349,18 +386,16 @@ private IStoragePosManager storagePosManager; ...@@ -349,18 +386,16 @@ private IStoragePosManager storagePosManager;
@AnonymousAccess @AnonymousAccess
public ResultBean checkOut(@RequestBody Map<String,Object> params) { public ResultBean checkOut(@RequestBody Map<String,Object> params) {
String mode=params.get("mode").toString(); String mode = params.get("mode").toString();
//判断有没有生成任务 //判断有没有生成任务
LiteOrder order=getOrderByMode(mode); LiteOrder order = getOrderByMode(mode);
if (order == null) { if (order == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败"); return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
} }
//调用API010扣除库存,扣除成功的才可以出库 //调用API010扣除库存,扣除成功的才可以出库
liteOrderCache.dispatchCheckOut(order);
//工单开始出库 //工单开始出库
......
...@@ -200,7 +200,7 @@ public class MicronPreTaskController { ...@@ -200,7 +200,7 @@ public class MicronPreTaskController {
liteOrderCache.addOrderToMap(liteOrder); liteOrderCache.addOrderToMap(liteOrder);
log.info("submit 勾选后,生成工单:[" + operationId + "][" + mode + "]"); log.info("submit 勾选后,生成工单:[" + operationId + "][" + mode + "]");
//开始查询是否可以出库 //开始查询是否可以出库
checkOut(liteOrder, operationId, materialList); liteOrderCache.preTaskCheckOut(liteOrder, operationId, materialList);
} }
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
...@@ -347,79 +347,6 @@ public class MicronPreTaskController { ...@@ -347,79 +347,6 @@ public class MicronPreTaskController {
dataCache.updateCache(key,""); dataCache.updateCache(key,"");
} }
public synchronized void checkOut(LiteOrder order, String operationId, List<Material> materialList) {
order.setStatus(LITEORDER_STATUS.TAILS);
order.setTaskReelCount(0);
order.setFinishedReelCount(0);
int taskReelCount = 0;
//提取barcode
List<String> barcodeList = materialList.stream().map(item -> item.getSerialNum()).collect(Collectors.toList());
List<StoragePos> storagePosList = storagePosManager.findByQuery(new Query(Criteria.where("barcode.barcode").in(barcodeList)));
if (storagePosList != null && !storagePosList.isEmpty()) {
materialList = storagePosList.stream().map(item -> {
Material material = new Material();
material.setSerialNum(item.getBarcode().getBarcode());
material.setPartNumber(item.getBarcode().getPartNumber());
return material;
}).collect(Collectors.toList());
//mes提前扣除,扣除成功的直接出库,失败的标记状态
List<TrackStatus> trackStatusList = MicronApi.Api010(operationId, materialList);
if (trackStatusList != null && !trackStatusList.isEmpty()) {
for (LiteOrderItem orderItem : order.getOrderItems()) {
String ri = orderItem.getRi();
//判断是否缺料
StoragePos storagePos = storagePosList.stream().filter(pos -> pos.getBarcode().equals(ri)).findFirst().orElse(null);
if (storagePos == null) {
//缺料
orderItem.setStatus(OrderItemStatus.shortage);
} else {
TrackStatus trackStatus = trackStatusList.stream().filter(item -> ri.equals(item.getSerialNum())).findAny().orElse(null);
if (trackStatus != null) {
if (trackStatus.isSuccess()) {
// StoragePos pos = storagePosManager.getByBarcode(ri);
/*if (pos == null) {
orderItem.setStatus(OrderItemStatus.shortage);
continue;
}*/
//生成任务
DataLog dataLog = new DataLog(dataCache.getStorageById(storagePos.getStorageId()), storagePos.getBarcode(), storagePos);
dataLog.setType(OP.CHECKOUT);
dataLog.setSourceId(order.getId());
dataLog.setSourceName(order.getOrderNo());
dataLog.setSubSourceId(orderItem.getId());
dataLog.setStatus(OP_STATUS.WAIT.name());
dataLog.setOperationId(operationId);
taskService.addTaskToExecute(dataLog);
taskReelCount++;
//设置状态.正在出库
orderItem.setStatus(OrderItemStatus.executing);
} else {
//标记状态为mes扣除失败
orderItem.setStatus(OrderItemStatus.executFail);
}
}
}
liteOrderItemManager.save(orderItem);
}
}
}
order.setTaskReelCount(taskReelCount);
order.setTotalTaskReelCount(order.getTotalTaskReelCount() + taskReelCount);
if (taskReelCount <= 0) {
if (order.isOutTails()) {
order.setStatus(LITEORDER_STATUS.TAILS_FINISHED);
}
//liteOrderCache.finishedOrderTasks(order);
}
liteOrderManager.save(order);
liteOrderCache.addOrderToMap(order);
}
public LiteOrder getOrderByMode(String mode) { public LiteOrder getOrderByMode(String mode) {
List<LiteOrderItem> itemList = new ArrayList<>(); List<LiteOrderItem> itemList = new ArrayList<>();
......
...@@ -16,10 +16,13 @@ public class ItemDetialDto implements Serializable { ...@@ -16,10 +16,13 @@ public class ItemDetialDto implements Serializable {
@ApiModelProperty("唯一码") @ApiModelProperty("唯一码")
private String ri; private String ri;
@ApiModelProperty("需求数量") @ApiModelProperty("数量")
private int needNum = 0; private int needNum = 0;
/** /**
* 工单明细出库状态 * 工单明细出库状态 ,
* 状态为空字符串时可以勾选,
* CheckOk 表示验证成功
* CheckFail 表示验证失败
*/ */
private String status; private String status="";
} }
...@@ -55,3 +55,11 @@ POST ...@@ -55,3 +55,11 @@ POST
/rest/micron/device/rfidPutInEnd /rest/micron/device/rfidPutInEnd
RFID入库完成,参数:rfid RFID入库完成,参数:rfid
RFID出库满离开时调用
POST
/rest/micron/device/rfidOutEnd
RFID入库完成,参数:rfid
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!