Commit b5b93d76 zshaohui

1.虚拟回仓问题修复

2.移库/获取库位 锁定问题修改
1 个父辈 339dbb7a
......@@ -912,19 +912,27 @@ public class DeviceController {
storageList.add(storage);
List<String> cidList = new ArrayList<>();
cidList.add(storage.getCid());
List<String> needRemoveLockPosId = new ArrayList<>();
while (pos == null) {
loopCount++;
if (loopCount >= 10) {
log.info(barcode.getBarcode() + "已循环查找10次 直接跳出循环");
if (loopCount >= 20) {
log.info(barcode.getBarcode() + "已循环查找20次 直接跳出循环");
break;
}
//优先找B结束的,如果没有再找F的
String endStr = "B";
if (loopCount >= 10){
endStr = "F";
}
pos = taskService.findEmptyPosForMoveIn(storageList, barcode, "", "", needMovePosName, endStr);
if (pos == null) {
if ("F".equals(endStr)){
} else {
endStr = "F";
pos = taskService.findEmptyPosForMoveIn(storageList, barcode, "", "", needMovePosName, endStr);
}
}
if (pos == null) {
log.info("需要移动的库位"+needMovePosName+"未找到对应的库位信息");
break;
......@@ -947,6 +955,7 @@ public class DeviceController {
reelLocInfo.setLockPosName(pos.getPosName());
reelLocInfo.setLockPosId(pos.getId());
ReelLockPosUtil.addReelLockPosInfo(reelLocInfo, cidList);
needRemoveLockPosId.add(pos.getId());
pos = null;
posName = "";
} else {
......@@ -1006,6 +1015,12 @@ public class DeviceController {
}
}
}
//判断有没有锁定的异常库位
if (needRemoveLockPosId != null && !needRemoveLockPosId.isEmpty()){
for (String posId : needRemoveLockPosId) {
ReelLockPosUtil.removeReelLockPosInfo(posId);
}
}
}
}
//然后找lock库位,有的话返回
......
......@@ -90,7 +90,7 @@ public class MessageUtils {
public static final String smfcore="smfcore";
private static String defLanguage = "";
@Value("${app.defLanguage: zh-CN}")
@Value("${app.defLanguage: en}")
public void setDefLanguage(String defLanguage) {
MessageUtils.defLanguage = defLanguage;
}
......@@ -122,7 +122,11 @@ public class MessageUtils {
//-----------------以下为从缓存读取资源-------------------------------------
public static Locale getDefaultLocal(){
if(ObjectUtil.isNotEmpty(defLanguage)){
return new Locale(defLanguage);
if ("en".equals(defLanguage)){
return new Locale("en","US");
} else if ("zh".equals(defLanguage)){
return new Locale("zh-CH");
}
}
return new Locale("zh-CH");
}
......
......@@ -349,7 +349,7 @@ public class LiteOrderCache {
log.error("工单[" + orderNo + "]的任务[" + task.getBarcode() + "]完成时,状态为:" + task.getStatus());
}
if (order.getFinishedReelCount() >= order.getTaskReelCount()) {
if (order.getTaskReelCount() > 0 && order.getFinishedReelCount() >= order.getTaskReelCount()) {
log.info("工单[" + orderNo + "]的出库任务已完成,共出库:" + order.getFinishedReelCount() + " 盘");
finishedOrderTasks(order);
}
......@@ -1019,8 +1019,8 @@ public class LiteOrderCache {
StoragePos pos = null;
for (String storageId : taskPosIdMap.keySet()) {
try {
log.info("休眠100毫秒");
Thread.sleep(100);
log.info("休眠200毫秒");
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
......
......@@ -577,65 +577,41 @@ public class OrderController {
String reelId = paramsMap.get("barcode");
Integer num = Integer.valueOf(paramsMap.get("num"));
Barcode barcode = barcodeManager.findByBarcode(reelId);
if (barcode == null) {
throw new ValidateException("smfcore.error.barcode.invalid", "未找到有效的条码", new String[]{reelId});
}
//判断数量是否大于条码数量
if (num > barcode.getAmount()) {
throw new ValidateException("smfcore.error.virtualOut.num", "数量不能超过{0}", new String[]{barcode.getAmount() + ""});
}
LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo);
LiteOrder liteOrder = liteOrderCache.getLiteOrder(orderNo);
if (liteOrder == null){
liteOrder = liteOrderManager.findByOrderNo(orderNo);
}
if (liteOrder == null) {
throw new ValidateException("smfcore.valueNotFind", "未找到{0}[{1}]", new String[]{"orderNo", orderNo});
}
if (!liteOrder.isTaskFinished() && !liteOrder.isNew()) {
log.info("工单[" + orderNo + "]正在执行");
throw new ValidateException("smfcore.order.out.executing", "工单正在执行");
}
if (liteOrder.isClosed()) {
throw new ValidateException("smfcore.order.hasClose", "工单[" + orderNo + "]已关闭,无法出库", new String[]{"orderNo", orderNo});
}
LiteOrderItem findItem = findVirtualItem(liteOrder,barcode,true);
if (findItem == null) {
/*if (findItem == null) {
findItem=findVirtualItem(liteOrder,barcode,false);
}
}*/
if (findItem == null) {
throw new ValidateException("smfcore.error.virtualOut.noItem", "工单{0}中未找到对应的PN或物料编号", new String[]{liteOrder.getOrderNo() + ""});
} else {
//增加一条出库完成记录
addVirtualOutToFinished(liteOrder, barcode, num, SecurityUtils.getCurrentUsername());
findItem.setOutNum(findItem.getOutNum() + num);
findItem.setTotalOutNum(findItem.getTotalOutNum() + num);
findItem.setOutReelCount(findItem.getOutReelCount() + 1);
findItem.setTotalOutReelCount(findItem.getTotalOutReelCount() + 1);
//findItem.setNeedReelCount(findItem.getNeedReelCount() + 1);
liteOrderItemManager.save(findItem);
liteOrder.updateOrderItems(findItem);
//工单未关闭的话,检查状态,全部都出完进行关闭
boolean closed = true;
for (LiteOrderItem liteOrderItem : liteOrder.getOrderItems()) {
if (!liteOrderItem.isOutFinished() || !liteOrderItem.isOutReelFinished()) {
closed = false;
break;
}
}
if (closed) {
liteOrder.setClosed(closed);
log.info("工单【" + liteOrder.getOrderNo() + "】虚拟回仓【" + barcode.getPartNumber() + "-" + barcode.getBarcode() + "】数量【" + num + "】后,所有料已出完,关闭工单");
}
liteOrderManager.save(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
addVirtualOutToFinished(liteOrder, barcode, num, SecurityUtils.getCurrentUsername(),findItem);
}
return ResultBean.newOkResult("");
}
public void addVirtualOutToFinished( LiteOrder liteOrder, Barcode barcode,Integer num, String opUser) {
public void addVirtualOutToFinished( LiteOrder liteOrder, Barcode barcode,Integer num, String opUser,LiteOrderItem findItem) {
try {
DataLog dataLog = new DataLog();
......@@ -663,6 +639,10 @@ public class OrderController {
dataLog.setSourceName(liteOrder.getOrderNo());
dataLog.setSourceId(liteOrder.getId());
dataLog.setSubSourceId(findItem.getId());
dataLog.setSubSourceInfo(findItem.getFeederInfo());
dataLog.setLine(liteOrder.getLine());
dataLog.updateAppendData("feederInfo", findItem.getFeederInfo());
log.info(opUser + "虚拟回仓: PN【"+barcode.getPartNumber()+"】条码【" + barcode.getBarcode() + "】 工单号【" + liteOrder.getOrderNo() + "】数量【" + num + "】");
dataLog.setType(OP.CHECKOUT);
......@@ -686,7 +666,7 @@ public class OrderController {
LiteOrderItem findItem = null;
for (LiteOrderItem item :
liteOrder.getOrderItems()) {
if (checkNum && item.getTotalOutNum() >= item.getNeedNum()) {
if (checkNum && item.getTotalOutNum() >= item.getNeedNum() && item.getNeedReelCount() <= item.getTotalOutReelCount()) {
continue;
}
if(item.getRi() != null && item.getRi().equals(barcode.getBarcode())){
......
......@@ -731,6 +731,9 @@ public class TaskService {
return task;
}
public StoragePos findEmptyPosForPutIn(List<Storage> storageList, Barcode barcode, String inRFID, String lastPosId) throws ValidateException{
return findEmptyPosForPutIn(storageList,barcode,inRFID,lastPosId,"","");
}
/**
* 查找可以入库的空位
......@@ -739,7 +742,7 @@ public class TaskService {
* @param barcode
* @return
*/
public StoragePos findEmptyPosForPutIn(List<Storage> storageList, Barcode barcode, String inRFID, String lastPosId) throws ValidateException {
public StoragePos findEmptyPosForPutIn(List<Storage> storageList, Barcode barcode, String inRFID, String lastPosId,String needMovePosName,String endStr) throws ValidateException {
verifyBarcodePutIn(storageList, barcode, inRFID);
List<String> storageIds=new ArrayList<>();
......@@ -827,7 +830,7 @@ public class TaskService {
}
});
return findEmptyPosInStorages(barcode, availbleStorageList, hasOutTaskStorageIds, lastPosId);
return findEmptyPosInStorages(barcode, availbleStorageList, hasOutTaskStorageIds, lastPosId,needMovePosName,endStr);
}
......@@ -847,6 +850,9 @@ public class TaskService {
for (DataLog task : allTasksa) {
if (task.isPutInTask()) {
if (task.isFinished() || task.isCancel()){
continue;
}
if (task.getBarcode().equals(barcode.getBarcode())) {
//同一个条码的入库任务
for (Storage storage : storageList) {
......
......@@ -98,7 +98,7 @@ public class JkemController {
@PostMapping(value = "/jkem/service/store/emptyPosForPutin")
@ResponseBody
@AnonymousAccess
public synchronized Map<String, Object> emptyPosForPutin(HttpServletRequest request) {
public Map<String, Object> emptyPosForPutin(HttpServletRequest request) {
String code = request.getParameter("code");
String cids = request.getParameter("cids");
String rfid = request.getParameter("rfid");
......@@ -302,12 +302,27 @@ public class JkemController {
List<String> needRemoveLockPosId = new ArrayList<>();
String endStr = "B";
while (pos == null) {
loopCount++;
if (loopCount >= 10) {
log.info(barcode.getBarcode() + "已循环查找10次 直接跳出循环");
if (loopCount >= 30) {
log.info(barcode.getBarcode() + "已循环查找30次 直接跳出循环");
break;
}
pos = taskService.findEmptyPosForPutIn(findNewStorageList, barcode, rfid, lastPosId);
if (loopCount >= 15){
endStr = "F";
}
pos = taskService.findEmptyPosForPutIn(findNewStorageList, barcode, rfid, lastPosId,barcode.getBarcode(),endStr);
if (pos == null){
if ("B".equals(endStr)){
endStr = "F";
} else {
endStr = "B";
}
pos = taskService.findEmptyPosForPutIn(findNewStorageList, barcode, rfid, lastPosId,barcode.getBarcode(),endStr);
}
if (pos == null) {
break;
}
......
......@@ -224,7 +224,7 @@ public class StorageExportUtil {
return export;
}
public static synchronized void updateExportByTask(String export, String barcode, String feederInfo, String orderNo,String status,String partNumber) {
public static void updateExportByTask(String export, String barcode, String feederInfo, String orderNo,String status,String partNumber) {
log.info("工单任务修改出料口信息:"+export+"barcode为:"+barcode+",站位信息为:"+feederInfo+"工单号为:"+orderNo+",状态为:"+status);
StorageExport storageExport = exportMap.get(export);
String hSerial = storageExport.getHSerial();
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!