Commit 032cf221 LN

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

2.麦康尼料仓入库时API002发送错误修改
1 个父辈 785cb4b7
......@@ -286,6 +286,8 @@ public class HttpHelper {
// }
try {
CloseableHttpClient httpClient = HttpClients.createDefault();
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECTION_TIMEOUT).setConnectionRequestTimeout(10000).setSocketTimeout(5000).build();
httpGet.setConfig(requestConfig);
CloseableHttpResponse response = httpClient.execute(httpGet);
int code = response.getStatusLine().getStatusCode();
......@@ -328,6 +330,8 @@ public class HttpHelper {
}
try {
CloseableHttpClient httpClient = HttpClients.createDefault();
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(CONNECTION_TIMEOUT).setConnectionRequestTimeout(10000).setSocketTimeout(5000).build();
httpPost.setConfig(requestConfig);
CloseableHttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
String responseContent = EntityUtils.toString(entity, CONTENT_CHARSET);
......
......@@ -318,11 +318,14 @@ public class ThirdBoxHandler extends BaseDeviceHandler{
DataLog task = taskService.findExecutingTask(cid, posName, barcode);
if (task != null && task.isPutInTask()) {
String oldPosName=task.getPosName();
String oldPosId=task.getPosId();
//对比容量,更新库位号
StoragePos newPos=UsePosProcess(task,posCapMap);
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.setPosId(newPos.getId());
}
if (executeTime > 0) {
task.setExecuteTime(executeTime);
......
......@@ -26,7 +26,7 @@ public class InListItem extends BasePo implements Serializable {
item.setNum(num);
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();
item.setName(name);
item.setPN(barcode.getPartNumber());
......@@ -34,6 +34,7 @@ public class InListItem extends BasePo implements Serializable {
item.setRfid(rfid);
item.setPosName(posName);
item.setState(s);
item.setMType(mType);
return item;
}
/**
......
......@@ -331,8 +331,14 @@ public class LanguageMsgService {
newLanguageList.add(msg);
} else {
boolean isUpdate = false;
boolean needUpdate=false;
if(!oldMsg.getEdited()){
isNeedUpdate=true;
needUpdate=true;
}
if(isNeedUpdate){
needUpdate=true;
}
//只新增不修改
List<String> allLanList = getAllLanList();
......@@ -340,7 +346,7 @@ public class LanguageMsgService {
String oldValue = oldMsg.getContent(lanType);
String newValue = msg.getContent(lanType);
if (ObjectUtil.isNotEmpty(newValue)) {
if (ObjectUtil.isEmpty(oldValue)||(isNeedUpdate &&(!newValue.equals(oldValue))) ) {
if (ObjectUtil.isEmpty(oldValue)||(needUpdate &&(!newValue.equals(oldValue))) ) {
oldMsg.setContent(lanType, newValue);
isUpdate = true;
//内容默认更改为中文
......
......@@ -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.TaskService;
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.TrackStatus;
import com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -40,6 +42,7 @@ import org.springframework.stereotype.Service;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
* Created by sunke on 2021/7/12.
......@@ -331,32 +334,32 @@ public class LiteOrderCache {
// if (StringUtils.isNotBlank(task.getLocInfo()) && task.getLocInfo().startsWith("-")) {
if ( ObjectUtil.isNotEmpty(order.getMode())&& StringUtils.isNotBlank(task.getLocInfo()) ) {
String locInfo = task.getLocInfo();
List<String> itemIdList = new ArrayList<>();
itemIdList.add(task.getSubSourceId());
String locInfo = task.getLocInfo();
List<String> itemIdList = new ArrayList<>();
itemIdList.add(task.getSubSourceId());
// for (LiteOrderItem item : items) {
// if (locInfo.contains(item.getLocInfo())) {
// itemIdList.add(item.getId());
// }
// }
//先改为单盘上传
List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").in(itemIdList)));
if (dataLogList != null && !dataLogList.isEmpty()) {
boolean isSuccess = MicronApi.Api007(order.getOrderNo(), order.getId(), dataLogList);
for (LiteOrderItem item : items) {
if (itemIdList.contains(item.getId())) {
if (isSuccess) {
item.setStatus(OrderItemStatus.notify_success);
} else {
item.setStatus(OrderItemStatus.notify_fail);
//先改为单盘上传
List<DataLog> dataLogList = dataLogManager.findByQuery(new Query(Criteria.where("subSourceId").in(itemIdList)));
if (dataLogList != null && !dataLogList.isEmpty()) {
boolean isSuccess = MicronApi.Api007(order.getOrderNo(), task.getLocInfo(), dataLogList);
for (LiteOrderItem item : items) {
if (itemIdList.contains(item.getId())) {
if (isSuccess) {
item.setStatus(OrderItemStatus.notify_success);
} else {
item.setStatus(OrderItemStatus.notify_fail);
}
}
liteOrderItemManager.save(item);
}
liteOrderItemManager.save(item);
order.setOrderItems(items);
}
order.setOrderItems(items);
}
}
......@@ -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
......@@ -968,22 +1048,31 @@ public class LiteOrderCache {
for (LiteOrderItem item :
newItems) {
item.setOutNum(0);
item.setOutReelCount(0);
int outNum = 0;
int outReelCount = 0;
for (LiteOrderItem reelItem :
item.getSelectItems()) {
MaterialStatus s = apiResultMap.get(reelItem.getRi());
if (s.getMaterialStatus().toUpperCase().equalsIgnoreCase("SUCCESS")) {
reelItem.setStatus(OrderItemStatus.CheckOk);
StoragePos pos=storagePosManager.getByBarcode(s.getSerialNum());
log.info("工单【" + orderNo + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证成功,更改状态为 CheckOk ,锁定库位【"+pos.getPosName()+"】");
lockPos.add(pos);
item.setOutNum(item.getOutNum()+pos.getBarcode().getAmount());
StoragePos pos = storagePosManager.getByBarcode(s.getSerialNum());
log.info("工单【" + orderNo + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证成功,更改状态为 CheckOk ,锁定库位【" + pos.getPosName() + "】");
pos.getBarcode().setLockId(cacheOrder.getOrderNo());
pos.getBarcode().setLockName(item.getPn());
storagePosManager.save(pos);
outNum += pos.getBarcode().getAmount();
outReelCount += 1;
} else {
reelItem.setStatus(OrderItemStatus.CheckFail);
log.info("工单【" + orderNo + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证失败,更改状态为 CheckFail");
}
}
item.setOutNum(outNum);
item.setOutReelCount(outReelCount);
liteOrderItemManager.save(item);
}
......@@ -1009,4 +1098,98 @@ public class LiteOrderCache {
}
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> {
List<StoragePos> findExpiredOrSluggishBarcode(Date date,int type);
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 {
Query q = new Query(c);
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 {
for (StoragePos pos :
storagePos) {
if (pos.getBarcode() == null) {
log.info("API002 中,库位["+pos.getPosName()+"]barcode为空,不需要发送");
continue;
}
Map<String, Object> objMap = new HashMap<>();
......
......@@ -79,9 +79,8 @@ public class LoadingController {
dto.setFailure(dto.getFailure() + 1);
} else if (item.isXray()) {
dto.setXRay(dto.getXRay() + 1);
dtoMap.put(dto.getMaterialType(), dto);
}
dtoMap.put(dto.getMaterialType(), dto);
}
List<MaterialLoadingDto> resultList=new ArrayList< >();
......
......@@ -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.custom.micron1053.api.MicronApi;
import com.neotel.smfcore.custom.micron1053.loading.Bean.LoadingInfo;
import com.neotel.smfcore.custom.micron1053.util.MicronDataCache;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -66,9 +67,11 @@ public class LoadingUtil {
inList.addRfid(rfid);
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)){
item.setRfidEnd(true);
}
......
......@@ -5,6 +5,7 @@ import com.neotel.smfcore.common.bean.ResultBean;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil;
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.order.LiteOrderCache;
import com.neotel.smfcore.core.order.enums.LITEORDER_STATUS;
......@@ -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.LiteOrderItem;
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.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.StoragePos;
......@@ -72,6 +74,8 @@ public class MicronDispatchController {
// }
@Autowired
private ILiteOrderManager liteOrderManager;
@Autowired
private DataCache dataCache;
@Autowired
private IDataLogManager dataLogManager;
@Autowired
......@@ -186,7 +190,7 @@ private IStoragePosManager storagePosManager;
}
//生成工单
String mode="CTRLDISPATCH ";
String mode="CTRLDISPATCH";
//新增为一个工单
String orderName = "";
......@@ -241,11 +245,11 @@ private IStoragePosManager storagePosManager;
@AnonymousAccess
public ResultBean itemDetial(@RequestBody Map<String,Object> params) {
String mode=params.get("mode").toString();
String itemId=params.get("itemId").toString();
log.info(" itemDetial :mode=" + mode + ", itemId="+itemId);
String mode = params.get("mode").toString();
String itemId = params.get("itemId").toString();
log.info(" itemDetial :mode=" + mode + ", itemId=" + itemId);
//判断有没有生成任务
LiteOrder order=getOrderByMode(mode);
LiteOrder order = getOrderByMode(mode);
if (order == null) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}
......@@ -254,18 +258,37 @@ private IStoragePosManager storagePosManager;
.filter(item -> (item.getId().equals(itemId)))
.collect(Collectors.toList());
if(items.size()<=0){
if (items.size() <= 0) {
return ResultBean.newErrorResult(-1, "smfcore.micron.notFound", "未找到数据");
}
List<ItemDetialDto> detialDtos=new ArrayList<>();
LiteOrderItem selItem = items.get(0);
for ( LiteOrderItem item :items.get(0).getSelectItems()
){
ItemDetialDto dto=new ItemDetialDto(item.getRi(),item.getNeedNum(),item.getStatus());
List<ItemDetialDto> detialDtos = new ArrayList<>();
for (LiteOrderItem item : selItem.getSelectItems()
) {
ItemDetialDto dto = new ItemDetialDto(item.getRi(), item.getNeedNum(), item.getStatus());
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);
......@@ -297,14 +320,14 @@ private IStoragePosManager storagePosManager;
}
for (LiteOrderItem item :
items) {
if (item.getId().equals(itemId)){
if (item.getId().equals(itemId)) {
List<Barcode> allBarcodes = new ArrayList<>();
//查找到详情,循环RI,生成API009数据
for (String ri :
selectRiList) {
StoragePos pos=storagePosManager.getByBarcode(ri);
if(pos!=null){
StoragePos pos = storagePosManager.getByBarcode(ri);
if (pos != null) {
allBarcodes.add(pos.getBarcode());
}
}
......@@ -312,31 +335,45 @@ private IStoragePosManager storagePosManager;
//调用API009
Map<String, MaterialStatus> apiResultMap = MicronApi.Api009(allBarcodes);
List<StoragePos> lockPos=new ArrayList<>();
List<LiteOrderItem> selectReelItems = item.selectItems;
for (Barcode barcode :
allBarcodes) {
LiteOrderItem reelItem=new LiteOrderItem() ;
MaterialStatus s = apiResultMap.get(barcode.getBarcode());
if (s.getMaterialStatus().toUpperCase().equalsIgnoreCase("SUCCESS")) {
reelItem.setStatus(OrderItemStatus.CheckOk);
StoragePos pos=storagePosManager.getByBarcode(s.getSerialNum());
log.info("工单【" + order.getOrderNo() + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证成功,更改状态为 CheckOk ,锁定库位【"+pos.getPosName()+"】");
lockPos.add(pos);
item.setOutNum(item.getOutNum()+pos.getBarcode().getAmount());
} else {
reelItem.setStatus(OrderItemStatus.CheckFail);
log.info("工单【" + order.getOrderNo() + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证失败,更改状态为 CheckFail");
}
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());
if (s.getMaterialStatus().toUpperCase().equalsIgnoreCase("SUCCESS")) {
reelItem.setStatus(OrderItemStatus.CheckOk);
log.info("工单【" + order.getOrderNo() + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证成功,更改状态为 CheckOk ,锁定库位【" + pos.getPosName() + "】");
//锁定物料
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 {
reelItem.setStatus(OrderItemStatus.CheckFail);
log.info("工单【" + order.getOrderNo() + "】PN [" + item.getPn() + "] RI [" + item.getRi() + "] API009 验证失败,更改状态为 CheckFail");
}
liteOrderItemManager.save(item);
selectReelItems.add(reelItem);
}
item.setSelectItems(selectReelItems);
liteOrderItemManager.save(item);
}
}
//返回新增列表
//判断是否需要勾选
return ResultBean.newOkResult("");
......@@ -349,18 +386,16 @@ private IStoragePosManager storagePosManager;
@AnonymousAccess
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) {
return ResultBean.newErrorResult(-1, "smfcore.micron.operationFailure", "操作失败");
}
//调用API010扣除库存,扣除成功的才可以出库
liteOrderCache.dispatchCheckOut(order);
//工单开始出库
......
......@@ -200,7 +200,7 @@ public class MicronPreTaskController {
liteOrderCache.addOrderToMap(liteOrder);
log.info("submit 勾选后,生成工单:[" + operationId + "][" + mode + "]");
//开始查询是否可以出库
checkOut(liteOrder, operationId, materialList);
liteOrderCache.preTaskCheckOut(liteOrder, operationId, materialList);
}
return ResultBean.newOkResult("");
}
......@@ -347,79 +347,6 @@ public class MicronPreTaskController {
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) {
List<LiteOrderItem> itemList = new ArrayList<>();
......
......@@ -16,10 +16,13 @@ public class ItemDetialDto implements Serializable {
@ApiModelProperty("唯一码")
private String ri;
@ApiModelProperty("需求数量")
@ApiModelProperty("数量")
private int needNum = 0;
/**
* 工单明细出库状态
* 工单明细出库状态 ,
* 状态为空字符串时可以勾选,
* CheckOk 表示验证成功
* CheckFail 表示验证失败
*/
private String status;
private String status="";
}
......@@ -55,3 +55,11 @@ POST
/rest/micron/device/rfidPutInEnd
RFID入库完成,参数:rfid
RFID出库满离开时调用
POST
/rest/micron/device/rfidOutEnd
RFID入库完成,参数:rfid
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!