Commit 4b90d302 zshaohui

1.扫码出库,标记红色箱子提交

1 个父辈 7f4cea81
...@@ -15,11 +15,9 @@ import com.neotel.smfcore.core.barcode.utils.CodeResolve; ...@@ -15,11 +15,9 @@ import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.device.enums.OP; import com.neotel.smfcore.core.device.enums.OP;
import com.neotel.smfcore.core.device.enums.OP_STATUS; import com.neotel.smfcore.core.device.enums.OP_STATUS;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.message.enums.MessageType; import com.neotel.smfcore.core.message.enums.MessageType;
import com.neotel.smfcore.core.message.service.manager.IMessageManager; import com.neotel.smfcore.core.message.service.manager.IMessageManager;
import com.neotel.smfcore.core.message.service.po.Message; import com.neotel.smfcore.core.message.service.po.Message;
import com.neotel.smfcore.core.message.util.DeviceMessageUtil;
import com.neotel.smfcore.core.order.LiteOrderCache; import com.neotel.smfcore.core.order.LiteOrderCache;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager; import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager; import com.neotel.smfcore.core.order.service.manager.ILiteOrderManager;
...@@ -30,7 +28,6 @@ import com.neotel.smfcore.core.storage.service.po.Storage; ...@@ -30,7 +28,6 @@ import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.manager.IDataLogManager; import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
import com.neotel.smfcore.core.system.service.po.DataLog; 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.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.agvBox.util.BoxUtil; import com.neotel.smfcore.custom.lizhen.agvBox.util.BoxUtil;
import com.neotel.smfcore.custom.luxsan.api.LuxsanApi; import com.neotel.smfcore.custom.luxsan.api.LuxsanApi;
...@@ -52,7 +49,6 @@ import com.neotel.smfcore.custom.luxsan.factory_c.common.util.CommonUtil; ...@@ -52,7 +49,6 @@ import com.neotel.smfcore.custom.luxsan.factory_c.common.util.CommonUtil;
import com.neotel.smfcore.custom.luxsan.factory_c.third.bean.MaterialLoc; import com.neotel.smfcore.custom.luxsan.factory_c.third.bean.MaterialLoc;
import com.neotel.smfcore.custom.luxsan.factory_c.third.util.MaterialLocUtil; import com.neotel.smfcore.custom.luxsan.factory_c.third.util.MaterialLocUtil;
import com.neotel.smfcore.custom.luxsan.factory_c.third.util.RawInLineUtil; import com.neotel.smfcore.custom.luxsan.factory_c.third.util.RawInLineUtil;
import com.neotel.smfcore.custom.luxsan.factory_c.wipstor.util.TaskLocUtil;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -94,10 +90,10 @@ public class CDeviceController { ...@@ -94,10 +90,10 @@ public class CDeviceController {
@Autowired @Autowired
private SmfApi smfApi; private SmfApi smfApi;
@Autowired @Autowired
private LiteOrderCache liteOrderCache; private LiteOrderCache liteOrderCache;
@Autowired @Autowired
private ILiteOrderItemManager liteOrderItemManager; private ILiteOrderItemManager liteOrderItemManager;
...@@ -128,43 +124,40 @@ public class CDeviceController { ...@@ -128,43 +124,40 @@ public class CDeviceController {
resultMap.put("w", bindGrInfo.getW()); resultMap.put("w", bindGrInfo.getW());
resultMap.put("h", bindGrInfo.getH()); resultMap.put("h", bindGrInfo.getH());
} }
} } else if (MaterialUtil.storTransfer(codeStr)) {
else if (MaterialUtil.storTransfer(codeStr)){
StorTransfer storTransfer = MaterialUtil.getStorTransferInfo(codeStr); StorTransfer storTransfer = MaterialUtil.getStorTransferInfo(codeStr);
log.info(codeStr + ":绑定储位移转信息为:" + JSON.toJSONString(storTransfer)); log.info(codeStr + ":绑定储位移转信息为:" + JSON.toJSONString(storTransfer));
resultMap.put("w", storTransfer.getW()); resultMap.put("w", storTransfer.getW());
resultMap.put("h", storTransfer.getH()); resultMap.put("h", storTransfer.getH());
} } else if (MaterialUtil.ticketReturn(codeStr)) {
else if (MaterialUtil.ticketReturn(codeStr)){
TicketReturn ticketReturn = MaterialUtil.getTicketReturnInfo(codeStr); TicketReturn ticketReturn = MaterialUtil.getTicketReturnInfo(codeStr);
log.info(codeStr + ":绑定单据退料信息为:" + JSON.toJSONString(ticketReturn)); log.info(codeStr + ":绑定单据退料信息为:" + JSON.toJSONString(ticketReturn));
resultMap.put("w", ticketReturn.getW()); resultMap.put("w", ticketReturn.getW());
resultMap.put("h", ticketReturn.getH()); resultMap.put("h", ticketReturn.getH());
} } else if (MaterialUtil.ticketTransfer(codeStr)) {
else if (MaterialUtil.ticketTransfer(codeStr)){
TicketTransfer ticketTransfer = MaterialUtil.getTicketTransferInfo(codeStr); TicketTransfer ticketTransfer = MaterialUtil.getTicketTransferInfo(codeStr);
log.info(codeStr + ":绑定单据转库信息为:" + JSON.toJSONString(ticketTransfer)); log.info(codeStr + ":绑定单据转库信息为:" + JSON.toJSONString(ticketTransfer));
resultMap.put("w", ticketTransfer.getW()); resultMap.put("w", ticketTransfer.getW());
resultMap.put("h", ticketTransfer.getH()); resultMap.put("h", ticketTransfer.getH());
} else if (MaterialUtil.returnTower(codeStr)){ } else if (MaterialUtil.returnTower(codeStr)) {
ReturnTower returnTower = MaterialUtil.getReturnTowerInfo(codeStr); ReturnTower returnTower = MaterialUtil.getReturnTowerInfo(codeStr);
resultMap.put("w", returnTower.getW()); resultMap.put("w", returnTower.getW());
resultMap.put("h", returnTower.getH()); resultMap.put("h", returnTower.getH());
} }
if (resultMap == null || resultMap.isEmpty()){ if (resultMap == null || resultMap.isEmpty()) {
return ResultBean.newErrorResult(-1,"",codeStr+"未绑定任何信息,请确认"); return ResultBean.newErrorResult(-1, "", codeStr + "未绑定任何信息,请确认");
} }
return ResultBean.newOkResult(resultMap); return ResultBean.newOkResult(resultMap);
} }
Map<String,Object> lockMap = new ConcurrentHashMap<>(); Map<String, Object> lockMap = new ConcurrentHashMap<>();
@ApiOperation("物料放入料格") @ApiOperation("物料放入料格")
@RequestMapping("/putInMaterialBin") @RequestMapping("/putInMaterialBin")
@AnonymousAccess @AnonymousAccess
public ResultBean putInMaterialBin(@RequestBody Map<String, String> paramMap) { public ResultBean putInMaterialBin(@RequestBody Map<String, String> paramMap) {
String binCodeStr = paramMap.get("binCode"); //料格 String binCodeStr = paramMap.get("binCode"); //料格
String codeStr = paramMap.get("codeStr"); //物料条码 String codeStr = paramMap.get("codeStr"); //物料条码
String materialStr = paramMap.get("materialStr"); //料串信息 String materialStr = paramMap.get("materialStr"); //料串信息
...@@ -232,12 +225,12 @@ public class CDeviceController { ...@@ -232,12 +225,12 @@ public class CDeviceController {
//设置barcode的过期时间 //设置barcode的过期时间
int days = LuxsanApi.getInDate(new GetInDateRequest(CommonUtil.plantCode, barcode.getPartNumber(), barcode.getProvider(), barcode.getDateCode())); int days = LuxsanApi.getInDate(new GetInDateRequest(CommonUtil.plantCode, barcode.getPartNumber(), barcode.getProvider(), barcode.getDateCode()));
log.info(barcode.getBarcode()+"的剩余过期时间为:"+days); log.info(barcode.getBarcode() + "的剩余过期时间为:" + days);
if (days > 0) { if (days > 0) {
Date expireDate = cn.hutool.core.date.DateUtil.offsetDay(new Date(), days); Date expireDate = cn.hutool.core.date.DateUtil.offsetDay(new Date(), days);
barcode.setExpireDate(expireDate); barcode.setExpireDate(expireDate);
} }
if (barcode.getExpireDate() != null){ if (barcode.getExpireDate() != null) {
if (System.currentTimeMillis() > barcode.getExpireDate().getTime()) { if (System.currentTimeMillis() > barcode.getExpireDate().getTime()) {
throw new ValidateException("smfcore.error.barcode.expired", "物料已过期,无法入库."); throw new ValidateException("smfcore.error.barcode.expired", "物料已过期,无法入库.");
} }
...@@ -325,7 +318,7 @@ public class CDeviceController { ...@@ -325,7 +318,7 @@ public class CDeviceController {
log.info(materialStr + "绑定退库上架,barcode为:" + barcode.getBarcode()); log.info(materialStr + "绑定退库上架,barcode为:" + barcode.getBarcode());
//调用注册接口 //调用注册接口
LuxsanApi.whRegister(barcode.getFullCode(),warhouseCode); LuxsanApi.whRegister(barcode.getFullCode(), warhouseCode);
BackToWarehouseRequest request = new BackToWarehouseRequest(); BackToWarehouseRequest request = new BackToWarehouseRequest();
request.setBIN_CODE(binCodeStr); request.setBIN_CODE(binCodeStr);
...@@ -341,11 +334,11 @@ public class CDeviceController { ...@@ -341,11 +334,11 @@ public class CDeviceController {
barcode.setBarSource(soucre); barcode.setBarSource(soucre);
barcode.setSeq(BoxHandleUtil.getSeq(boxBarcode, binCodeStr) + 1); barcode.setSeq(BoxHandleUtil.getSeq(boxBarcode, binCodeStr) + 1);
barcode.setPutInTime(System.currentTimeMillis()); barcode.setPutInTime(System.currentTimeMillis());
log.info("料格:"+binCodeStr+"barcode:"+barcode.getBarcode()+"开始保存数据库"); log.info("料格:" + binCodeStr + "barcode:" + barcode.getBarcode() + "开始保存数据库");
barcode = barcodeManager.save(barcode); barcode = barcodeManager.save(barcode);
log.info("料格:"+binCodeStr+"barcode:"+barcode.getBarcode()+"结束保存数据库"); log.info("料格:" + binCodeStr + "barcode:" + barcode.getBarcode() + "结束保存数据库");
log.info("料格:"+binCodeStr+"barcode:"+barcode.getBarcode()+"开始生成任务"); log.info("料格:" + binCodeStr + "barcode:" + barcode.getBarcode() + "开始生成任务");
generatePutInTask(barcode, boxBarcode, OP_STATUS.FINISHED.name(), currentLoc); generatePutInTask(barcode, boxBarcode, OP_STATUS.FINISHED.name(), currentLoc);
boxBarcode.updateSubCodes(barcode); boxBarcode.updateSubCodes(barcode);
boxBarcode.setAmount(boxBarcode.getAmount() + barcode.getAmount()); boxBarcode.setAmount(boxBarcode.getAmount() + barcode.getAmount());
...@@ -356,15 +349,15 @@ public class CDeviceController { ...@@ -356,15 +349,15 @@ public class CDeviceController {
inPos.setBarcode(boxBarcode); inPos.setBarcode(boxBarcode);
storagePosManager.save(inPos); storagePosManager.save(inPos);
} }
log.info("料格:"+binCodeStr+"barcode:"+barcode.getBarcode()+"结束生成任务"); log.info("料格:" + binCodeStr + "barcode:" + barcode.getBarcode() + "结束生成任务");
kafkaService.sendMachineParameterStackerAndBox(materialStr, currentLoc, barcode.getAmount(), boxBarcode.getBarcode(), 0, 1); kafkaService.sendMachineParameterStackerAndBox(materialStr, currentLoc, barcode.getAmount(), boxBarcode.getBarcode(), 0, 1);
log.info("料格:"+binCodeStr+"barcode:"+barcode.getBarcode()+"返回成功"); log.info("料格:" + binCodeStr + "barcode:" + barcode.getBarcode() + "返回成功");
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} else { } else {
log.info(barcode.getBarcode() + "不可以放到料格:" + binCodeStr+",原因为:"+canPutIn); log.info(barcode.getBarcode() + "不可以放到料格:" + binCodeStr + ",原因为:" + canPutIn);
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "不可以放到料格:" + binCodeStr+",原因为:"+canPutIn); return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "不可以放到料格:" + binCodeStr + ",原因为:" + canPutIn);
} }
} }
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "不可以放到料格:" + binCodeStr); return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "不可以放到料格:" + binCodeStr);
...@@ -381,14 +374,14 @@ public class CDeviceController { ...@@ -381,14 +374,14 @@ public class CDeviceController {
log.info("料格已经放满,收到料格信息为" + binCodeStr + ",料串信息为:" + materialStr); log.info("料格已经放满,收到料格信息为" + binCodeStr + ",料串信息为:" + materialStr);
String boxStr = BoxHandleUtil.getBoxStr(binCodeStr,true); String boxStr = BoxHandleUtil.getBoxStr(binCodeStr, true);
Barcode boxBarcode = codeResolve.resolveOneValideBarcode(boxStr); Barcode boxBarcode = codeResolve.resolveOneValideBarcode(boxStr);
//该料格有出库时, 需要清理此字段 //该料格有出库时, 需要清理此字段
boxBarcode.updateExtraData(binCodeStr,"FULL"); boxBarcode.updateExtraData(binCodeStr, "FULL");
barcodeManager.saveBarcode(boxBarcode); barcodeManager.saveBarcode(boxBarcode);
StoragePos inPos = storagePosManager.getByBarcode(boxBarcode.getBarcode()); StoragePos inPos = storagePosManager.getByBarcode(boxBarcode.getBarcode());
if (inPos != null){ if (inPos != null) {
inPos.setBarcode(boxBarcode); inPos.setBarcode(boxBarcode);
storagePosManager.save(inPos); storagePosManager.save(inPos);
} }
...@@ -400,27 +393,27 @@ public class CDeviceController { ...@@ -400,27 +393,27 @@ public class CDeviceController {
@AnonymousAccess @AnonymousAccess
public ResultBean clearMaterialStr(String materialStr) { public ResultBean clearMaterialStr(String materialStr) {
if (MaterialUtil.bindGr(materialStr)) { if (MaterialUtil.bindGr(materialStr)) {
log.info(materialStr+"绑定GR信息,需要清空"); log.info(materialStr + "绑定GR信息,需要清空");
Map<String, BindGrInfo> cacheMap = dataCache.getCache(CacheNameUtil.CACHE_BIND_GR); Map<String, BindGrInfo> cacheMap = dataCache.getCache(CacheNameUtil.CACHE_BIND_GR);
cacheMap.remove(materialStr); cacheMap.remove(materialStr);
dataCache.updateCache(CacheNameUtil.CACHE_BIND_GR, cacheMap); dataCache.updateCache(CacheNameUtil.CACHE_BIND_GR, cacheMap);
} else if (MaterialUtil.storTransfer(materialStr)){ } else if (MaterialUtil.storTransfer(materialStr)) {
log.info(materialStr+"绑定储位移转信息,需要清空"); log.info(materialStr + "绑定储位移转信息,需要清空");
Map<String, StorTransfer> cacheMap = dataCache.getCache(CacheNameUtil.CHCHE_STOR_TRANSFER); Map<String, StorTransfer> cacheMap = dataCache.getCache(CacheNameUtil.CHCHE_STOR_TRANSFER);
cacheMap.remove(materialStr); cacheMap.remove(materialStr);
dataCache.updateCache(CacheNameUtil.CHCHE_STOR_TRANSFER, cacheMap); dataCache.updateCache(CacheNameUtil.CHCHE_STOR_TRANSFER, cacheMap);
} else if (MaterialUtil.ticketReturn(materialStr)){ } else if (MaterialUtil.ticketReturn(materialStr)) {
log.info(materialStr+"单据退料,需要清空"); log.info(materialStr + "单据退料,需要清空");
Map<String, TicketReturn> cacheMap = dataCache.getCache(CacheNameUtil.CHCHE_TICKET_RETURN); Map<String, TicketReturn> cacheMap = dataCache.getCache(CacheNameUtil.CHCHE_TICKET_RETURN);
cacheMap.remove(materialStr); cacheMap.remove(materialStr);
dataCache.updateCache(CacheNameUtil.CHCHE_TICKET_RETURN, cacheMap); dataCache.updateCache(CacheNameUtil.CHCHE_TICKET_RETURN, cacheMap);
} else if (MaterialUtil.ticketTransfer(materialStr)){ } else if (MaterialUtil.ticketTransfer(materialStr)) {
log.info(materialStr+"单据转库,需要清空"); log.info(materialStr + "单据转库,需要清空");
Map<String, TicketTransfer> cacheMap = dataCache.getCache(CacheNameUtil.CHCHE_TICKET_TRANSFER); Map<String, TicketTransfer> cacheMap = dataCache.getCache(CacheNameUtil.CHCHE_TICKET_TRANSFER);
cacheMap.remove(materialStr); cacheMap.remove(materialStr);
dataCache.updateCache(CacheNameUtil.CHCHE_TICKET_TRANSFER, cacheMap); dataCache.updateCache(CacheNameUtil.CHCHE_TICKET_TRANSFER, cacheMap);
} else if (MaterialUtil.returnTower(materialStr)){ } else if (MaterialUtil.returnTower(materialStr)) {
log.info(materialStr+"绑定退库,需清空"); log.info(materialStr + "绑定退库,需清空");
Map<String, ReturnTower> cacheMap = dataCache.getCache(CacheNameUtil.CHCHE_RETURN_TOWER); Map<String, ReturnTower> cacheMap = dataCache.getCache(CacheNameUtil.CHCHE_RETURN_TOWER);
cacheMap.remove(materialStr); cacheMap.remove(materialStr);
dataCache.updateCache(CacheNameUtil.CHCHE_RETURN_TOWER, cacheMap); dataCache.updateCache(CacheNameUtil.CHCHE_RETURN_TOWER, cacheMap);
...@@ -515,7 +508,7 @@ public class CDeviceController { ...@@ -515,7 +508,7 @@ public class CDeviceController {
DataLog dataLog = taskService.addPutInTaskToExecute(storage, boxBarcode, pos, boxLoc); DataLog dataLog = taskService.addPutInTaskToExecute(storage, boxBarcode, pos, boxLoc);
kafkaService.sendMachineParameterStackerAndBox("","",0,boxBarcode.getBarcode(),0,3); kafkaService.sendMachineParameterStackerAndBox("", "", 0, boxBarcode.getBarcode(), 0, 3);
return ResultBean.newOkResult(dataLog); return ResultBean.newOkResult(dataLog);
} }
...@@ -533,7 +526,7 @@ public class CDeviceController { ...@@ -533,7 +526,7 @@ public class CDeviceController {
//判断是不是虚拟仓 //判断是不是虚拟仓
String storageId = dataLog.getStorageId(); String storageId = dataLog.getStorageId();
Storage storage = dataCache.getStorageById(storageId); Storage storage = dataCache.getStorageById(storageId);
if (storage != null && !storage.isVirtual()){ if (storage != null && !storage.isVirtual()) {
needSendList.add(dataLog); needSendList.add(dataLog);
} }
} }
...@@ -556,25 +549,25 @@ public class CDeviceController { ...@@ -556,25 +549,25 @@ public class CDeviceController {
DataLog dataLog = null; DataLog dataLog = null;
List<DataLog> allTasks = taskService.getAllTasks(); List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog task : allTasks) { for (DataLog task : allTasks) {
if (task.isCheckOutTask() && !task.isCancel() && !task.isFinished()){ if (task.isCheckOutTask() && !task.isCancel() && !task.isFinished()) {
if (barcode.getBarcode().equals(task.getBarcode())){ if (barcode.getBarcode().equals(task.getBarcode())) {
dataLog = task; dataLog = task;
break; break;
} }
} }
} }
Map<String,Long> resultMap = new HashMap<>(); Map<String, Long> resultMap = new HashMap<>();
String lineKey = "line|"; String lineKey = "line|";
if (dataLog != null){ if (dataLog != null) {
String line = dataLog.getLine(); String line = dataLog.getLine();
if (StringUtils.isNotEmpty(line)){ if (StringUtils.isNotEmpty(line)) {
lineKey = lineKey+line; lineKey = lineKey + line;
} }
} }
resultMap.put(lineKey,0L); resultMap.put(lineKey, 0L);
if(countMap != null && !countMap.isEmpty()){ if (countMap != null && !countMap.isEmpty()) {
for (String key : countMap.keySet()) { for (String key : countMap.keySet()) {
resultMap.put(key,countMap.get(key)); resultMap.put(key, countMap.get(key));
} }
} }
return ResultBean.newOkResult(resultMap); return ResultBean.newOkResult(resultMap);
...@@ -587,17 +580,17 @@ public class CDeviceController { ...@@ -587,17 +580,17 @@ public class CDeviceController {
public synchronized ResultBean reelCheckOut(@RequestParam("boxStr") String boxStr, public synchronized ResultBean reelCheckOut(@RequestParam("boxStr") String boxStr,
@RequestParam("isNormal") boolean isNormal, @RequestParam("isNormal") boolean isNormal,
@RequestParam("materialStr") String materialStr, @RequestParam("materialStr") String materialStr,
@RequestParam(value = "currentLoc",required = false) String currentLoc) { @RequestParam(value = "currentLoc", required = false) String currentLoc) {
//1.解析条码内容 //1.解析条码内容
//Barcode binCode = codeResolve.resolveOneValideBarcode(boxStr); //Barcode binCode = codeResolve.resolveOneValideBarcode(boxStr);
//解析料箱信息 //解析料箱信息
String box = BoxHandleUtil.getBoxStr(boxStr,true); String box = BoxHandleUtil.getBoxStr(boxStr, true);
Barcode boxBarcode = codeResolve.resolveOneValideBarcode(box); Barcode boxBarcode = codeResolve.resolveOneValideBarcode(box);
StoragePos inPos = storagePosManager.getByBarcode(boxBarcode.getBarcode()); StoragePos inPos = storagePosManager.getByBarcode(boxBarcode.getBarcode());
if(inPos != null){ if (inPos != null) {
boxBarcode = inPos.getBarcode(); boxBarcode = inPos.getBarcode();
//log.error("流程异常:料箱["+boxStr+"]在库位["+inPos.getPosName()+"],但物料从料格中出库"); //log.error("流程异常:料箱["+boxStr+"]在库位["+inPos.getPosName()+"],但物料从料格中出库");
} }
...@@ -625,45 +618,43 @@ public class CDeviceController { ...@@ -625,45 +618,43 @@ public class CDeviceController {
List<Barcode> barcodeList = new ArrayList<>(); List<Barcode> barcodeList = new ArrayList<>();
for (Barcode subCode : subCodeList) { for (Barcode subCode : subCodeList) {
if (boxStr.equals(subCode.getPosName())){ if (boxStr.equals(subCode.getPosName())) {
barcodeList.add(subCode); barcodeList.add(subCode);
} }
} }
//判断barcode是否为需要出库的 //判断barcode是否为需要出库的
if (!barcode.isOut()){ if (!barcode.isOut()) {
log.info(barcode.getBarcode()+"不是要出库的料盘"); log.info(barcode.getBarcode() + "不是要出库的料盘");
Barcode needOutBarcode = null; Barcode needOutBarcode = null;
for (Barcode subCode : barcodeList) { for (Barcode subCode : barcodeList) {
if (subCode.isOut()){ if (subCode.isOut()) {
needOutBarcode = subCode; needOutBarcode = subCode;
break; break;
} }
} }
if (needOutBarcode != null){ if (needOutBarcode != null) {
String orderItemId = needOutBarcode.getOrderItemId(); String orderItemId = needOutBarcode.getOrderItemId();
needOutBarcode.setOrderItemId(""); needOutBarcode.setOrderItemId("");
needOutBarcode.setOut(false); needOutBarcode.setOut(false);
log.info(needOutBarcode.getBarcode()+"需要改成不需要出库"); log.info(needOutBarcode.getBarcode() + "需要改成不需要出库");
barcodeManager.save(needOutBarcode); barcodeManager.save(needOutBarcode);
boxBarcode.updateSubCodes(needOutBarcode); boxBarcode.updateSubCodes(needOutBarcode);
barcode.setOut(true); barcode.setOut(true);
barcode.setOrderItemId(orderItemId); barcode.setOrderItemId(orderItemId);
log.info(barcode.getBarcode()+"改成要出库,orderItemId为:"+orderItemId); log.info(barcode.getBarcode() + "改成要出库,orderItemId为:" + orderItemId);
} }
} }
//4.开始生成出库任务 //4.开始生成出库任务
log.info(barcode.getBarcode() + "从" + boxStr + "出库,序列号为:" + seq+".位置为:"+currentLoc); log.info(barcode.getBarcode() + "从" + boxStr + "出库,序列号为:" + seq + ".位置为:" + currentLoc);
if (!barcode.isOut()){ if (!barcode.isOut()) {
return ResultBean.newErrorResult(-1,"",barcode.getPosName()+"没有要出库的料盘"); return ResultBean.newErrorResult(-1, "", barcode.getPosName() + "没有要出库的料盘");
} }
String orderItemId = barcode.getOrderItemId(); String orderItemId = barcode.getOrderItemId();
String orderId = ""; String orderId = "";
String orderNo = ""; String orderNo = "";
...@@ -676,42 +667,42 @@ public class CDeviceController { ...@@ -676,42 +667,42 @@ public class CDeviceController {
String brand = ""; String brand = "";
String batchCode = ""; String batchCode = "";
String targetLoc = ""; String targetLoc = "";
LiteOrderItem orderItem = liteOrderItemManager.get(orderItemId); LiteOrderItem orderItem = liteOrderItemManager.get(orderItemId);
if(orderItem != null){ if (orderItem != null) {
orderNo = orderItem.getOrderNo(); orderNo = orderItem.getOrderNo();
orderId = orderItem.getOrderId(); orderId = orderItem.getOrderId();
pkItemId = orderItem.getItemId(); pkItemId = orderItem.getItemId();
face = orderItem.getFace(); face = orderItem.getFace();
brand = orderItem.getBrand(); brand = orderItem.getBrand();
if (!"N/A".equals(orderItem.getBatchCode())){ if (!"N/A".equals(orderItem.getBatchCode())) {
batchCode = orderItem.getBatchCode(); batchCode = orderItem.getBatchCode();
} }
LiteOrder order = liteOrderManager.get(orderItem.getOrderId()); LiteOrder order = liteOrderManager.get(orderItem.getOrderId());
if (order != null){ if (order != null) {
targetLoc = order.getLoc(); targetLoc = order.getLoc();
checkType = order.getCheckType(); checkType = order.getCheckType();
} }
} }
//通知WMS //通知WMS
if (checkType == LiteorderCheckType.PICKING_CHECKOUT){ if (checkType == LiteorderCheckType.PICKING_CHECKOUT) {
try { try {
LuxsanApi.pickingIssue(new PickingIssueRequest(CommonUtil.plantCode, orderNo, pkItemId, barcode.getPartNumber() LuxsanApi.pickingIssue(new PickingIssueRequest(CommonUtil.plantCode, orderNo, pkItemId, barcode.getPartNumber()
, barcode.getWarehouseCode(), brand, face, batchCode, Arrays.asList(barcode.getBarcode()))); , barcode.getWarehouseCode(), brand, face, batchCode, Arrays.asList(barcode.getBarcode())));
//同时 更新下 缓存目的地 //同时 更新下 缓存目的地
if (StringUtils.isNotEmpty(targetLoc)){ if (StringUtils.isNotEmpty(targetLoc)) {
if (targetLoc.endsWith("BG")){ if (targetLoc.endsWith("BG")) {
log.info("自动绑定料串["+materialStr+"]目的地:C2-3F-BG"); log.info("自动绑定料串[" + materialStr + "]目的地:C2-3F-BG");
MaterialLocUtil.updateStackerLoc(materialStr,"", "C2-3F-BG",1,orderItem.getOrderNo(),barcode); MaterialLocUtil.updateStackerLoc(materialStr, "", "C2-3F-BG", 1, orderItem.getOrderNo(), barcode);
} else if (targetLoc.endsWith("CG")){ } else if (targetLoc.endsWith("CG")) {
log.info("自动绑定料串["+materialStr+"]目的地:C2-3F-CG"); log.info("自动绑定料串[" + materialStr + "]目的地:C2-3F-CG");
MaterialLocUtil.updateStackerLoc(materialStr,"", "C2-3F-CG",1,orderItem.getOrderNo(),barcode); MaterialLocUtil.updateStackerLoc(materialStr, "", "C2-3F-CG", 1, orderItem.getOrderNo(), barcode);
} else if (targetLoc.endsWith("2F")){ } else if (targetLoc.endsWith("2F")) {
log.info("自动绑定料串["+materialStr+"]目的地:C1-2F"); log.info("自动绑定料串[" + materialStr + "]目的地:C1-2F");
MaterialLocUtil.updateStackerLoc(materialStr,"", "C1-2F",1,orderItem.getOrderNo(),barcode); MaterialLocUtil.updateStackerLoc(materialStr, "", "C1-2F", 1, orderItem.getOrderNo(), barcode);
} else if (targetLoc.endsWith("1F")){ } else if (targetLoc.endsWith("1F")) {
log.info("自动绑定料串["+materialStr+"]目的地:C2-1F"); log.info("自动绑定料串[" + materialStr + "]目的地:C2-1F");
MaterialLocUtil.updateStackerLoc(materialStr,"", "C2-1F",1,orderItem.getOrderNo(),barcode); MaterialLocUtil.updateStackerLoc(materialStr, "", "C2-1F", 1, orderItem.getOrderNo(), barcode);
} }
} }
...@@ -720,16 +711,16 @@ public class CDeviceController { ...@@ -720,16 +711,16 @@ public class CDeviceController {
List<Barcode> newSubCodeList = new ArrayList<>(); List<Barcode> newSubCodeList = new ArrayList<>();
for (Barcode subCode : boxBarcode.getSubCodeList()) { for (Barcode subCode : boxBarcode.getSubCodeList()) {
if (subCode.isOut()){ if (subCode.isOut()) {
if (barcode.getPosName().equals(subCode.getPosName())){ if (barcode.getPosName().equals(subCode.getPosName())) {
newSubCodeList.add(subCode); newSubCodeList.add(subCode);
} }
} }
} }
for (Barcode subCode : newSubCodeList) { for (Barcode subCode : newSubCodeList) {
if (subCode.isOut()){ if (subCode.isOut()) {
if (barcode.getPosName().equals(subCode.getPosName())){ if (barcode.getPosName().equals(subCode.getPosName())) {
String itemId = subCode.getOrderItemId(); String itemId = subCode.getOrderItemId();
subCode.setOut(false); subCode.setOut(false);
subCode.setSelectMsg(null); subCode.setSelectMsg(null);
...@@ -738,23 +729,22 @@ public class CDeviceController { ...@@ -738,23 +729,22 @@ public class CDeviceController {
boxBarcode.updateSubCodes(subCode); boxBarcode.updateSubCodes(subCode);
//生成任务 //生成任务
generateTask(subCode,OP_STATUS.CANCEL.name(),subCode.getAmount(),OP.CHECKOUT,itemId,"",0,false); generateTask(subCode, OP_STATUS.CANCEL.name(), subCode.getAmount(), OP.CHECKOUT, itemId, "", 0, false);
log.info(subCode.getBarcode()+"隔口为:"+subCode.getPosName()+"需清除出库标记"); log.info(subCode.getBarcode() + "隔口为:" + subCode.getPosName() + "需清除出库标记");
} }
} }
} }
barcodeManager.save(boxBarcode); barcodeManager.save(boxBarcode);
if (inPos != null){ if (inPos != null) {
inPos.setBarcode(boxBarcode); inPos.setBarcode(boxBarcode);
storagePosManager.save(inPos); storagePosManager.save(inPos);
} }
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "请求PK发料失败,隔口:" + barcode.getPosName() + "出库信息已清空"); return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "请求PK发料失败,隔口:" + barcode.getPosName() + "出库信息已清空");
} }
} }
} } else {
else {
//人工出库, //人工出库,
LuxsanApi.pickingIssue(new PickingIssueRequest(CommonUtil.plantCode, "SMFW"+System.currentTimeMillis(), "0", barcode.getPartNumber() LuxsanApi.pickingIssue(new PickingIssueRequest(CommonUtil.plantCode, "SMFW" + System.currentTimeMillis(), "0", barcode.getPartNumber()
, barcode.getWarehouseCode(), "", "", "", Arrays.asList(barcode.getBarcode()))); , barcode.getWarehouseCode(), "", "", "", Arrays.asList(barcode.getBarcode())));
} }
...@@ -771,23 +761,23 @@ public class CDeviceController { ...@@ -771,23 +761,23 @@ public class CDeviceController {
dataLog.setProvider(barcode.getProvider()); dataLog.setProvider(barcode.getProvider());
dataLog.setProviderNumber(barcode.getProviderNumber()); dataLog.setProviderNumber(barcode.getProviderNumber());
dataLog.setWarehouseCode(barcode.getWarehouseCode()); dataLog.setWarehouseCode(barcode.getWarehouseCode());
if (StringUtils.isNotEmpty(currentLoc)){ if (StringUtils.isNotEmpty(currentLoc)) {
dataLog.setCurrentLoc(currentLoc); dataLog.setCurrentLoc(currentLoc);
} }
taskService.updateFinishedTask(dataLog); taskService.updateFinishedTask(dataLog);
//有出库,此料格就去除满格标志 //有出库,此料格就去除满格标志
boxBarcode.updateExtraData(barcode.getPosName(),null); boxBarcode.updateExtraData(barcode.getPosName(), null);
boxBarcode.removeFromSubCodes(barcode); boxBarcode.removeFromSubCodes(barcode);
barcodeManager.save(boxBarcode); barcodeManager.save(boxBarcode);
if(inPos != null){ if (inPos != null) {
//为保证数据一致性, pos中的box barcode也需要更新 //为保证数据一致性, pos中的box barcode也需要更新
inPos.setBarcode(boxBarcode); inPos.setBarcode(boxBarcode);
storagePosManager.save(inPos); storagePosManager.save(inPos);
} }
//清理条码档案信息 //清理条码档案信息
log.info(barcode.getBarcode()+"的库位置为空"); log.info(barcode.getBarcode() + "的库位置为空");
barcode.setPosName(""); barcode.setPosName("");
barcode.setOut(false); barcode.setOut(false);
barcode.setOrderId(""); barcode.setOrderId("");
...@@ -795,15 +785,15 @@ public class CDeviceController { ...@@ -795,15 +785,15 @@ public class CDeviceController {
barcode.setBarSource(""); barcode.setBarSource("");
barcodeManager.save(barcode); barcodeManager.save(barcode);
Map<String,String> resultMap = new HashMap<>(); Map<String, String> resultMap = new HashMap<>();
resultMap.put("binCode",boxStr); resultMap.put("binCode", boxStr);
resultMap.put("seq",seq+""); resultMap.put("seq", seq + "");
resultMap.put("barcode",barcode.getBarcode()); resultMap.put("barcode", barcode.getBarcode());
resultMap.put("pickingId",orderNo); resultMap.put("pickingId", orderNo);
resultMap.put("platSize",barcode.getPlateSize()+""); resultMap.put("platSize", barcode.getPlateSize() + "");
resultMap.put("height",barcode.getHeight()+""); resultMap.put("height", barcode.getHeight() + "");
kafkaService.sendMachineParameterStackerAndBox(materialStr,currentLoc,0,boxBarcode.getBarcode(),barcode.getAmount(),4); kafkaService.sendMachineParameterStackerAndBox(materialStr, currentLoc, 0, boxBarcode.getBarcode(), barcode.getAmount(), 4);
return ResultBean.newOkResult(resultMap); return ResultBean.newOkResult(resultMap);
} }
...@@ -812,20 +802,20 @@ public class CDeviceController { ...@@ -812,20 +802,20 @@ public class CDeviceController {
@ApiOperation("根据料箱获取目的地") @ApiOperation("根据料箱获取目的地")
@RequestMapping("/getTargetByBox") @RequestMapping("/getTargetByBox")
@AnonymousAccess @AnonymousAccess
public ResultBean getTargetByBox(String boxStr){ public ResultBean getTargetByBox(String boxStr) {
if (StringUtils.isEmpty(boxStr)) { if (StringUtils.isEmpty(boxStr)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"料箱信息"}); return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"料箱信息"});
} }
List<DataLog> allTasks = taskService.getAllTasks(); List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) { for (DataLog dataLog : allTasks) {
if (dataLog.isPutInTask() && !dataLog.isFinished() && !dataLog.isCancel()){ if (dataLog.isPutInTask() && !dataLog.isFinished() && !dataLog.isCancel()) {
if (boxStr.startsWith(dataLog.getBarcode())){ if (boxStr.startsWith(dataLog.getBarcode())) {
return ResultBean.newOkResult(dataLog.getPosName()); return ResultBean.newOkResult(dataLog.getPosName());
} }
} }
} }
return ResultBean.newErrorResult(-1,"","未找到"+boxStr+"的入库库位"); return ResultBean.newErrorResult(-1, "", "未找到" + boxStr + "的入库库位");
} }
AtomicBoolean isProcess = new AtomicBoolean(false); AtomicBoolean isProcess = new AtomicBoolean(false);
...@@ -833,13 +823,13 @@ public class CDeviceController { ...@@ -833,13 +823,13 @@ public class CDeviceController {
@ApiOperation("入料机构获取可用料格") @ApiOperation("入料机构获取可用料格")
@RequestMapping("/validBin") @RequestMapping("/validBin")
@AnonymousAccess @AnonymousAccess
public ResultBean validBin(@RequestBody Map<String,String> paramMap) { public ResultBean validBin(@RequestBody Map<String, String> paramMap) {
String stackerId = paramMap.get("stackerId"); String stackerId = paramMap.get("stackerId");
String binListStr = paramMap.get("binList"); String binListStr = paramMap.get("binList");
String source = paramMap.get("source"); String source = paramMap.get("source");
String needBinCodeStr = paramMap.get("needBinCodeStr"); String needBinCodeStr = paramMap.get("needBinCodeStr");
if (isProcess.get()){ if (isProcess.get()) {
//return ResultBean.newErrorResult(-1,"",stackerId+"上一次请求还在处理,等待处理完成后,再返回"); //return ResultBean.newErrorResult(-1,"",stackerId+"上一次请求还在处理,等待处理完成后,再返回");
} }
...@@ -849,16 +839,16 @@ public class CDeviceController { ...@@ -849,16 +839,16 @@ public class CDeviceController {
ValidBin validBin = null; ValidBin validBin = null;
try { try {
boolean ignoreWorkBox = false; boolean ignoreWorkBox = false;
String ignoreWorkStr = paramMap.get("ignoreWorkBox"); String ignoreWorkStr = paramMap.get("ignoreWorkBox");
if (StringUtils.isNotEmpty(ignoreWorkStr)){ if (StringUtils.isNotEmpty(ignoreWorkStr)) {
ignoreWorkBox = Boolean.valueOf(ignoreWorkStr); ignoreWorkBox = Boolean.valueOf(ignoreWorkStr);
} }
List<String> validBinList = new ArrayList<String>(); List<String> validBinList = new ArrayList<String>();
log.info("入料机构获取料串[" + stackerId + "]的可用料格[" + binListStr + "],入料机构为[" + source + "],需要的料格信息为:"+needBinCodeStr+",是否忽略当前工作的料箱:"+ignoreWorkStr); log.info("入料机构获取料串[" + stackerId + "]的可用料格[" + binListStr + "],入料机构为[" + source + "],需要的料格信息为:" + needBinCodeStr + ",是否忽略当前工作的料箱:" + ignoreWorkStr);
if (!MaterialUtil.bindInfo(stackerId)) { if (!MaterialUtil.bindInfo(stackerId)) {
return ResultBean.newErrorResult(-1, "error.nobind", "料串[" + stackerId + "]未绑定任何信息"); return ResultBean.newErrorResult(-1, "error.nobind", "料串[" + stackerId + "]未绑定任何信息");
...@@ -872,20 +862,20 @@ public class CDeviceController { ...@@ -872,20 +862,20 @@ public class CDeviceController {
StorTransfer storTransfer = MaterialUtil.getStorTransferInfo(stackerId); StorTransfer storTransfer = MaterialUtil.getStorTransferInfo(stackerId);
partNumber = storTransfer.getPartNumber(); partNumber = storTransfer.getPartNumber();
provider = storTransfer.getProvider(); provider = storTransfer.getProvider();
} else if (MaterialUtil.ticketTransfer(stackerId)){ } else if (MaterialUtil.ticketTransfer(stackerId)) {
TicketTransfer ticketTransfer = MaterialUtil.getTicketTransferInfo(stackerId); TicketTransfer ticketTransfer = MaterialUtil.getTicketTransferInfo(stackerId);
partNumber = ticketTransfer.getPn(); partNumber = ticketTransfer.getPn();
provider = ticketTransfer.getProvider(); provider = ticketTransfer.getProvider();
} else if (MaterialUtil.ticketReturn(stackerId)){ } else if (MaterialUtil.ticketReturn(stackerId)) {
TicketReturn ticketReturn = MaterialUtil.getTicketReturnInfo(stackerId); TicketReturn ticketReturn = MaterialUtil.getTicketReturnInfo(stackerId);
partNumber = ticketReturn.getPn(); partNumber = ticketReturn.getPn();
provider = ticketReturn.getProvider(); provider = ticketReturn.getProvider();
} else if (MaterialUtil.bindGr(stackerId)){ } else if (MaterialUtil.bindGr(stackerId)) {
BindGrInfo bindGrInfo = MaterialUtil.getBindGrInfo(stackerId); BindGrInfo bindGrInfo = MaterialUtil.getBindGrInfo(stackerId);
partNumber = bindGrInfo.getMaterialCode(); partNumber = bindGrInfo.getMaterialCode();
provider = bindGrInfo.getBrand(); provider = bindGrInfo.getBrand();
dateStr = bindGrInfo.getGrDate(); dateStr = bindGrInfo.getGrDate();
} else if (MaterialUtil.returnTower(stackerId)){ } else if (MaterialUtil.returnTower(stackerId)) {
ReturnTower returnTower = MaterialUtil.getReturnTowerInfo(stackerId); ReturnTower returnTower = MaterialUtil.getReturnTowerInfo(stackerId);
partNumber = returnTower.getPartNumber(); partNumber = returnTower.getPartNumber();
provider = returnTower.getProvider(); provider = returnTower.getProvider();
...@@ -905,21 +895,21 @@ public class CDeviceController { ...@@ -905,21 +895,21 @@ public class CDeviceController {
String warhouseCode = MaterialUtil.getWarhouseCode(stackerId); String warhouseCode = MaterialUtil.getWarhouseCode(stackerId);
stackerBarcode.setWarehouseCode(warhouseCode); stackerBarcode.setWarehouseCode(warhouseCode);
validBin = BinCacheUtil.validBin(stackerBarcode, source, binListStr,needBinCodeStr,ignoreWorkBox); validBin = BinCacheUtil.validBin(stackerBarcode, source, binListStr, needBinCodeStr, ignoreWorkBox);
if (validBin == null){ if (validBin == null) {
isProcess.set(false); isProcess.set(false);
return ResultBean.newErrorResult(-1,"",stackerId+"未找到可用料箱"); return ResultBean.newErrorResult(-1, "", stackerId + "未找到可用料箱");
} }
callAgvTask(stackerId, stackerBarcode); callAgvTask(stackerId, stackerBarcode);
} catch (Exception e) { } catch (Exception e) {
//log.info("入料机构获取可用料格:"+stackerId+"结果异常:"+e.getMessage()); //log.info("入料机构获取可用料格:"+stackerId+"结果异常:"+e.getMessage());
log.info("入料机构获取可用料格:"+stackerId+"结果异常:",e); log.info("入料机构获取可用料格:" + stackerId + "结果异常:", e);
log.info(e.getMessage()); log.info(e.getMessage());
return ResultBean.newErrorResult(-1,"",stackerId+"获取可用料格失败:"+e.getMessage()); return ResultBean.newErrorResult(-1, "", stackerId + "获取可用料格失败:" + e.getMessage());
} }
isProcess.set(false); isProcess.set(false);
log.info("入料机构获取可用料格:"+stackerId+"返回的数据为:"+JSON.toJSONString(validBin)); log.info("入料机构获取可用料格:" + stackerId + "返回的数据为:" + JSON.toJSONString(validBin));
return ResultBean.newOkResult(validBin); return ResultBean.newOkResult(validBin);
} }
...@@ -928,9 +918,9 @@ public class CDeviceController { ...@@ -928,9 +918,9 @@ public class CDeviceController {
@RequestMapping("/callEmptyBox") @RequestMapping("/callEmptyBox")
@AnonymousAccess @AnonymousAccess
public ResultBean callEmptyBox(String size, String outLet, String warehouseCode) { public ResultBean callEmptyBox(String size, String outLet, String warehouseCode) {
log.info("开始呼叫空箱,尺寸为:" + size + ",出口位置为:" + outLet+",库别为:"+warehouseCode); log.info("开始呼叫空箱,尺寸为:" + size + ",出口位置为:" + outLet + ",库别为:" + warehouseCode);
StoragePos storagePos = BoxHandleUtil.callEmptyBox(size, outLet, warehouseCode,new ArrayList<>()); StoragePos storagePos = BoxHandleUtil.callEmptyBox(size, outLet, warehouseCode, new ArrayList<>());
if (storagePos == null) { if (storagePos == null) {
return ResultBean.newErrorResult(-1, "", "未找到可用料箱"); return ResultBean.newErrorResult(-1, "", "未找到可用料箱");
} }
...@@ -994,7 +984,7 @@ public class CDeviceController { ...@@ -994,7 +984,7 @@ public class CDeviceController {
} else { } else {
return ResultBean.newErrorResult(-1, "", "当前入库的物料[" + barcode.getBarcode() + "]的料号[" + barcode.getPartNumber() + return ResultBean.newErrorResult(-1, "", "当前入库的物料[" + barcode.getBarcode() + "]的料号[" + barcode.getPartNumber() +
"],供应商["+barcode.getProvider()+"]与绑定的Gr中的料号["+bindGrInfo.getMaterialCode()+"]供应商["+bindGrInfo.getBrand()+"]不一致"); "],供应商[" + barcode.getProvider() + "]与绑定的Gr中的料号[" + bindGrInfo.getMaterialCode() + "]供应商[" + bindGrInfo.getBrand() + "]不一致");
} }
} }
...@@ -1008,7 +998,7 @@ public class CDeviceController { ...@@ -1008,7 +998,7 @@ public class CDeviceController {
//判断料格是否正常 //判断料格是否正常
Barcode boxBarcode = null; Barcode boxBarcode = null;
try { try {
String boxStr = BoxHandleUtil.getBoxStr(binCodeStr,true); String boxStr = BoxHandleUtil.getBoxStr(binCodeStr, true);
boxBarcode = codeResolve.resolveOneValideBarcode(boxStr); boxBarcode = codeResolve.resolveOneValideBarcode(boxStr);
} catch (ValidateException ve) { } catch (ValidateException ve) {
return ResultBean.newErrorResult(-1, ve.getMsgKey(), "料格条码不正确:" + binCodeStr); return ResultBean.newErrorResult(-1, ve.getMsgKey(), "料格条码不正确:" + binCodeStr);
...@@ -1056,13 +1046,13 @@ public class CDeviceController { ...@@ -1056,13 +1046,13 @@ public class CDeviceController {
return ResultBean.newErrorResult(-1, ve.getMsgKey(), ve.getDefaultMsg()); return ResultBean.newErrorResult(-1, ve.getMsgKey(), ve.getDefaultMsg());
} }
log.info("料串["+materialStr+"]上的物料["+barcode.getBarcode()+"] 放入料格完成["+binCodeStr+"]"); log.info("料串[" + materialStr + "]上的物料[" + barcode.getBarcode() + "] 放入料格完成[" + binCodeStr + "]");
//判断料格是否正常 //判断料格是否正常
Barcode boxBarcode = null; Barcode boxBarcode = null;
StoragePos inPos = null; StoragePos inPos = null;
try { try {
String boxStr = BoxHandleUtil.getBoxStr(binCodeStr,true); String boxStr = BoxHandleUtil.getBoxStr(binCodeStr, true);
boxBarcode = codeResolve.resolveOneValideBarcode(boxStr); boxBarcode = codeResolve.resolveOneValideBarcode(boxStr);
inPos = storagePosManager.getByBarcode(boxBarcode.getBarcode()); inPos = storagePosManager.getByBarcode(boxBarcode.getBarcode());
if (inPos != null) { if (inPos != null) {
...@@ -1085,13 +1075,13 @@ public class CDeviceController { ...@@ -1085,13 +1075,13 @@ public class CDeviceController {
} }
if (task != null) { if (task != null) {
if (!binCodeStr.equals(task.getPosName())){ if (!binCodeStr.equals(task.getPosName())) {
return ResultBean.newErrorResult(-1,"",binCodeStr+"与当前任务的料格"+task.getPosName()+"不匹配"); return ResultBean.newErrorResult(-1, "", binCodeStr + "与当前任务的料格" + task.getPosName() + "不匹配");
} }
barcode.setPosName(task.getPosName()); barcode.setPosName(task.getPosName());
barcode.setSeq(BoxHandleUtil.getSeq(boxBarcode,binCodeStr)+1); barcode.setSeq(BoxHandleUtil.getSeq(boxBarcode, binCodeStr) + 1);
barcode.setPutInTime(System.currentTimeMillis()); barcode.setPutInTime(System.currentTimeMillis());
boxBarcode.updateSubCodes(barcode); boxBarcode.updateSubCodes(barcode);
boxBarcode.setAmount(boxBarcode.getAmount() + barcode.getAmount()); boxBarcode.setAmount(boxBarcode.getAmount() + barcode.getAmount());
...@@ -1119,7 +1109,7 @@ public class CDeviceController { ...@@ -1119,7 +1109,7 @@ public class CDeviceController {
Barcode boxBarcode = null; Barcode boxBarcode = null;
for (String binCode : paramMap.keySet()) { for (String binCode : paramMap.keySet()) {
if (boxBarcode == null) { if (boxBarcode == null) {
String boxStr = BoxHandleUtil.getBoxStr(binCode,true); String boxStr = BoxHandleUtil.getBoxStr(binCode, true);
boxBarcode = codeResolve.resolveOneValideBarcode(boxStr); boxBarcode = codeResolve.resolveOneValideBarcode(boxStr);
} }
boxBarcode.updateHeightMap(binCode, paramMap.get(binCode)); boxBarcode.updateHeightMap(binCode, paramMap.get(binCode));
...@@ -1168,7 +1158,7 @@ public class CDeviceController { ...@@ -1168,7 +1158,7 @@ public class CDeviceController {
} }
} }
} }
log.info("入料机构获取可用料格:"+stackerId+"AGV上的箱子数为:"+count); log.info("入料机构获取可用料格:" + stackerId + "AGV上的箱子数为:" + count);
if (count < 4) { if (count < 4) {
try { try {
log.info("AGV上的料箱数量小于4,呼叫一个空料箱出来"); log.info("AGV上的料箱数量小于4,呼叫一个空料箱出来");
...@@ -1253,20 +1243,20 @@ public class CDeviceController { ...@@ -1253,20 +1243,20 @@ public class CDeviceController {
String stacker = paramMap.get("stacker");//条码编号 String stacker = paramMap.get("stacker");//条码编号
String requestSeq = paramMap.get("seq"); String requestSeq = paramMap.get("seq");
log.info("物料放到料串上,通知出库,隔口号为:" + boxPar + ",条码信息为:" + code + "当前位置为:" + currentLoc + "条码编号为:" + stacker+",请求id为:"+requestSeq); log.info("物料放到料串上,通知出库,隔口号为:" + boxPar + ",条码信息为:" + code + "当前位置为:" + currentLoc + "条码编号为:" + stacker + ",请求id为:" + requestSeq);
//如果顺序相同,直返返回ok //如果顺序相同,直返返回ok
if (StringUtils.isNotEmpty(requestSeq)) { if (StringUtils.isNotEmpty(requestSeq)) {
String lastSeq = lastSeqMap.get(boxPar); String lastSeq = lastSeqMap.get(boxPar);
if (StringUtils.isNotEmpty(lastSeq)) { if (StringUtils.isNotEmpty(lastSeq)) {
if (lastSeq.equals(requestSeq)) { if (lastSeq.equals(requestSeq)) {
log.info(boxPar+"与上一次请求的序列号:"+requestSeq+"相同,直接返回ok"); log.info(boxPar + "与上一次请求的序列号:" + requestSeq + "相同,直接返回ok");
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} else { } else {
lastSeqMap.put(boxPar, requestSeq); lastSeqMap.put(boxPar, requestSeq);
} }
} else { } else {
lastSeqMap.put(boxPar,requestSeq); lastSeqMap.put(boxPar, requestSeq);
} }
} }
...@@ -1274,17 +1264,16 @@ public class CDeviceController { ...@@ -1274,17 +1264,16 @@ public class CDeviceController {
Barcode alearyOutBarcode = null; Barcode alearyOutBarcode = null;
try { try {
if (StringUtils.isEmpty(code)) { if (StringUtils.isEmpty(code)) {
saveMessage(MessageType.ERROR.name(), currentLoc, boxPar+":未扫到条码信息"); saveMessage(MessageType.ERROR.name(), currentLoc, boxPar + ":未扫到条码信息");
} else { } else {
alearyOutBarcode = codeResolve.resolveOneValideBarcode(code); alearyOutBarcode = codeResolve.resolveOneValideBarcode(code);
} }
} catch (Exception e) { } catch (Exception e) {
log.info("解析出库的条码失败:", e); log.info("解析出库的条码失败:", e);
saveMessage(MessageType.ERROR.name(), currentLoc, boxPar+":"+code + "解析条码失败,错误信息为:" + e.getMessage()); saveMessage(MessageType.ERROR.name(), currentLoc, boxPar + ":" + code + "解析条码失败,错误信息为:" + e.getMessage());
} }
//1.解析条码内容 //1.解析条码内容
//Barcode binCode = codeResolve.resolveOneValideBarcode(boxStr); //Barcode binCode = codeResolve.resolveOneValideBarcode(boxStr);
...@@ -1354,7 +1343,7 @@ public class CDeviceController { ...@@ -1354,7 +1343,7 @@ public class CDeviceController {
if (alearyOutBarcode != null) { if (alearyOutBarcode != null) {
String barcodeStr = alearyOutBarcode.getBarcode(); String barcodeStr = alearyOutBarcode.getBarcode();
if (!barcodeStr.equals(barcode.getBarcode())) { if (!barcodeStr.equals(barcode.getBarcode())) {
saveMessage(MessageType.ERROR.name(), currentLoc, boxPar+"传入的条码为:" + barcodeStr + ",按顺序出库的条码为:" + barcode.getBarcode() + "不一致"); saveMessage(MessageType.ERROR.name(), currentLoc, boxPar + "传入的条码为:" + barcodeStr + ",按顺序出库的条码为:" + barcode.getBarcode() + "不一致");
boxBarcode.updateExtraData(CommonUtil.outExpPrefix + boxPar, boxPar); boxBarcode.updateExtraData(CommonUtil.outExpPrefix + boxPar, boxPar);
} }
} }
...@@ -1406,16 +1395,16 @@ public class CDeviceController { ...@@ -1406,16 +1395,16 @@ public class CDeviceController {
if (StringUtils.isNotEmpty(targetLoc)) { if (StringUtils.isNotEmpty(targetLoc)) {
if (targetLoc.endsWith("BG")) { if (targetLoc.endsWith("BG")) {
log.info("自动绑定料串[" + stacker + "]目的地:C2-3F-BG"); log.info("自动绑定料串[" + stacker + "]目的地:C2-3F-BG");
MaterialLocUtil.updateStackerLoc(stacker, "", "C2-3F-BG", 1, orderItem.getOrderNo(),barcode); MaterialLocUtil.updateStackerLoc(stacker, "", "C2-3F-BG", 1, orderItem.getOrderNo(), barcode);
} else if (targetLoc.endsWith("CG")) { } else if (targetLoc.endsWith("CG")) {
log.info("自动绑定料串[" + stacker + "]目的地:C2-3F-CG"); log.info("自动绑定料串[" + stacker + "]目的地:C2-3F-CG");
MaterialLocUtil.updateStackerLoc(stacker, "", "C2-3F-CG", 1, orderItem.getOrderNo(),barcode); MaterialLocUtil.updateStackerLoc(stacker, "", "C2-3F-CG", 1, orderItem.getOrderNo(), barcode);
} else if (targetLoc.endsWith("2F")){ } else if (targetLoc.endsWith("2F")) {
log.info("自动绑定料串["+stacker+"]目的地:C1-2F"); log.info("自动绑定料串[" + stacker + "]目的地:C1-2F");
MaterialLocUtil.updateStackerLoc(stacker,"", "C1-2F",1,orderItem.getOrderNo(),barcode); MaterialLocUtil.updateStackerLoc(stacker, "", "C1-2F", 1, orderItem.getOrderNo(), barcode);
} else if (targetLoc.endsWith("1F")){ } else if (targetLoc.endsWith("1F")) {
log.info("自动绑定料串["+stacker+"]目的地:C2-1F"); log.info("自动绑定料串[" + stacker + "]目的地:C2-1F");
MaterialLocUtil.updateStackerLoc(stacker,"", "C2-1F",1,orderItem.getOrderNo(),barcode); MaterialLocUtil.updateStackerLoc(stacker, "", "C2-1F", 1, orderItem.getOrderNo(), barcode);
} }
} }
...@@ -1513,12 +1502,12 @@ public class CDeviceController { ...@@ -1513,12 +1502,12 @@ public class CDeviceController {
} }
private void saveMessage(String type,String module,String message){ private void saveMessage(String type, String module, String message) {
Message msg = Message.newMsg(type, module, "", module, "", message, new String[]{}, ""); Message msg = Message.newMsg(type, module, "", module, "", message, new String[]{}, "");
messageManager.save(msg); messageManager.save(msg);
} }
private void generatePutInTask(Barcode barcode, Barcode boxBarcode,String status,String currentLoc) { private void generatePutInTask(Barcode barcode, Barcode boxBarcode, String status, String currentLoc) {
DataLog dataLog = new DataLog(); DataLog dataLog = new DataLog();
dataLog.setPosId(boxBarcode.getId()); dataLog.setPosId(boxBarcode.getId());
...@@ -1534,14 +1523,14 @@ public class CDeviceController { ...@@ -1534,14 +1523,14 @@ public class CDeviceController {
dataLog.setBatchInfo(barcode.getBatch()); dataLog.setBatchInfo(barcode.getBatch());
dataLog.setSourceName(barcode.getBarSource()); dataLog.setSourceName(barcode.getBarSource());
dataLog.setWarehouseCode(barcode.getWarehouseCode()); dataLog.setWarehouseCode(barcode.getWarehouseCode());
if (StringUtils.isNotEmpty(currentLoc)){ if (StringUtils.isNotEmpty(currentLoc)) {
dataLog.setCurrentLoc(currentLoc); dataLog.setCurrentLoc(currentLoc);
} }
dataLogManager.save(dataLog); dataLogManager.save(dataLog);
} }
private DataLog generateTask(Barcode barcode, String opStatus, int opQty, int opType, String orderItemId,String name,int extendType,boolean isBoxOut) { private DataLog generateTask(Barcode barcode, String opStatus, int opQty, int opType, String orderItemId, String name, int extendType, boolean isBoxOut) {
//生成任务 //生成任务
DataLog task = new DataLog(); DataLog task = new DataLog();
task.setStatus(opStatus); task.setStatus(opStatus);
...@@ -1595,15 +1584,14 @@ public class CDeviceController { ...@@ -1595,15 +1584,14 @@ public class CDeviceController {
} }
@ApiOperation("出料机构料串是否放满") @ApiOperation("出料机构料串是否放满")
@RequestMapping("/starckerIsPutInFull") @RequestMapping("/starckerIsPutInFull")
@AnonymousAccess @AnonymousAccess
public ResultBean starckerIsPutInFull(String stacker,boolean isFull) { public ResultBean starckerIsPutInFull(String stacker, boolean isFull) {
//kafkaService.sendMachineParameterStackerAndBox(stacker, "", 0, "", 0, 6); //kafkaService.sendMachineParameterStackerAndBox(stacker, "", 0, "", 0, 6);
log.info("料串["+stacker+"]是否放满:["+isFull+"]"); log.info("料串[" + stacker + "]是否放满:[" + isFull + "]");
int status = isFull ? 2 : 1; int status = isFull ? 2 : 1;
MaterialLocUtil.updateStackerLoc(stacker,"","",status,"",null); MaterialLocUtil.updateStackerLoc(stacker, "", "", status, "", null);
return ResultBean.newOkResult(""); return ResultBean.newOkResult("");
} }
...@@ -1613,48 +1601,48 @@ public class CDeviceController { ...@@ -1613,48 +1601,48 @@ public class CDeviceController {
@AnonymousAccess @AnonymousAccess
public ResultBean putInBoxCanLeave(String boxStr) { public ResultBean putInBoxCanLeave(String boxStr) {
//kafkaService.sendMachineParameterStackerAndBox(stacker, "", 0, "", 0, 6); //kafkaService.sendMachineParameterStackerAndBox(stacker, "", 0, "", 0, 6);
log.info("入料机构是否可以放走料箱:"+boxStr); log.info("入料机构是否可以放走料箱:" + boxStr);
String newBoxStr = BoxUtil.getBoxStr(boxStr); String newBoxStr = BoxUtil.getBoxStr(boxStr);
Barcode barcode = codeResolve.resolveOneValideBarcode(newBoxStr); Barcode barcode = codeResolve.resolveOneValideBarcode(newBoxStr);
if (barcode == null){ if (barcode == null) {
return ResultBean.newErrorResult(-1,"",boxStr+"解析错误"); return ResultBean.newErrorResult(-1, "", boxStr + "解析错误");
} }
Map<String,String> countMap = new HashMap<>(); Map<String, String> countMap = new HashMap<>();
boolean full = true; boolean full = true;
List<Barcode> subCodeList = barcode.getSubCodeList(); List<Barcode> subCodeList = barcode.getSubCodeList();
if (subCodeList == null || subCodeList.isEmpty()){ if (subCodeList == null || subCodeList.isEmpty()) {
full = false; full = false;
return ResultBean.newOkResult(full); return ResultBean.newOkResult(full);
} else { } else {
for (Barcode subCode : subCodeList) { for (Barcode subCode : subCodeList) {
String posName = subCode.getPosName(); String posName = subCode.getPosName();
if (StringUtils.isNotEmpty(posName)){ if (StringUtils.isNotEmpty(posName)) {
countMap.put(posName,posName); countMap.put(posName, posName);
} }
} }
} }
String barcodeStr = barcode.getBarcode(); String barcodeStr = barcode.getBarcode();
if (barcodeStr.startsWith("C13") || barcodeStr.startsWith("C15")){ if (barcodeStr.startsWith("C13") || barcodeStr.startsWith("C15")) {
String key = barcodeStr + "-01"; String key = barcodeStr + "-01";
String value = countMap.get(key); String value = countMap.get(key);
if (StringUtils.isEmpty(value)){ if (StringUtils.isEmpty(value)) {
log.info(key+"料箱未满"); log.info(key + "料箱未满");
full = false; full = false;
} }
} else { } else {
for (int i = 1; i <= 6; i++) { for (int i = 1; i <= 6; i++) {
String key = barcodeStr + "-0" + i; String key = barcodeStr + "-0" + i;
String value = countMap.get(key); String value = countMap.get(key);
if (StringUtils.isEmpty(value)){ if (StringUtils.isEmpty(value)) {
log.info(key+"料箱未满"); log.info(key + "料箱未满");
full = false; full = false;
//break; //break;
} }
} }
} }
ResultBean resultBean = ResultBean.newOkResult(full); ResultBean resultBean = ResultBean.newOkResult(full);
if (!full){ if (!full) {
resultBean.setCode(-1); resultBean.setCode(-1);
return resultBean; return resultBean;
} }
...@@ -1674,14 +1662,14 @@ public class CDeviceController { ...@@ -1674,14 +1662,14 @@ public class CDeviceController {
String destination = materialLoc.getDestination(); String destination = materialLoc.getDestination();
if (StringUtils.isEmpty(destination)) { if (StringUtils.isEmpty(destination)) {
destination = ""; destination = "";
}else { } else {
destination = destination.replaceAll("-","/"); destination = destination.replaceAll("-", "/");
} }
resultMap.put("destination", destination); resultMap.put("destination", destination);
return ResultBean.newOkResult(resultMap); return ResultBean.newOkResult(resultMap);
} }
Map<String,Object> lockBoxMap = new ConcurrentHashMap<>(); Map<String, Object> lockBoxMap = new ConcurrentHashMap<>();
@ApiOperation("根据条码进行物料出库") @ApiOperation("根据条码进行物料出库")
@RequestMapping("/reelFromBoxByCode") @RequestMapping("/reelFromBoxByCode")
...@@ -1691,7 +1679,9 @@ public class CDeviceController { ...@@ -1691,7 +1679,9 @@ public class CDeviceController {
String code = paramMap.get("code"); //条码编号 String code = paramMap.get("code"); //条码编号
String currentLoc = paramMap.get("currentLoc"); //当前位置 String currentLoc = paramMap.get("currentLoc"); //当前位置
String stacker = paramMap.get("stacker");//条码编号 String stacker = paramMap.get("stacker");//条码编号
log.info("根据条码进行物料出库,code为:" + code + ",当前位置为:" + currentLoc + ",条码编号为:" + stacker); String boxPar = paramMap.get("boxPar"); //隔口号
log.info("根据条码进行物料出库,code为:" + code + ",当前位置为:" + currentLoc + ",料串编号为:" + stacker + ",隔口号为:" + boxPar);
//判断是不是有效的条码信息 //判断是不是有效的条码信息
if (StringUtils.isEmpty(code)) { if (StringUtils.isEmpty(code)) {
saveMessage(MessageType.ERROR.name(), currentLoc, "未扫到条码信息"); saveMessage(MessageType.ERROR.name(), currentLoc, "未扫到条码信息");
...@@ -1715,192 +1705,212 @@ public class CDeviceController { ...@@ -1715,192 +1705,212 @@ public class CDeviceController {
lockBoxMap.put(currentLoc, lockObj); lockBoxMap.put(currentLoc, lockObj);
} }
synchronized (lockBoxMap.get(currentLoc)) { synchronized (lockBoxMap.get(currentLoc)) {
String boxPar = barcode.getPosName(); //判断当前隔口与要出的物料是否一致
String box = BoxHandleUtil.getBoxStr(boxPar, true); String posName = barcode.getPosName();
Barcode boxBarcode = codeResolve.resolveOneValideBarcode(box); if (!posName.equals(boxPar)) {
StoragePos inPos = storagePosManager.getByBarcode(boxBarcode.getBarcode()); //直接清空库存
if (inPos != null) { String currentBoxStr = BoxHandleUtil.getBoxStr(posName, true);
boxBarcode = inPos.getBarcode(); Barcode currentBoxBarcode = codeResolve.resolveOneValideBarcode(currentBoxStr);
} StoragePos currentBoxPos = storagePosManager.getByBarcode(currentBoxBarcode.getBarcode());
//获取当前隔口的物料信息 if (currentBoxPos != null) {
List<Barcode> subCodeList = boxBarcode.getSubCodeList(); currentBoxBarcode = currentBoxPos.getBarcode();
List<Barcode> barcodeList = new ArrayList<>();
for (Barcode subCode : subCodeList) {
if (boxPar.equals(subCode.getPosName())) {
barcodeList.add(subCode);
} }
} String errorMsg = notifyCurrentBarcodeToWms(barcode, currentLoc, stacker);
//判断当前出库的物料,是不是要出库的物料 //标记一下信息
boolean needOut = false; currentBoxBarcode.updateExtraData(CommonUtil.outExpPrefix + posName, posName);
if (barcode.isOut()) { currentBoxBarcode.removeFromSubCodes(barcode);
needOut = true; barcodeManager.save(currentBoxBarcode);
if (currentBoxPos != null) {
//为保证数据一致性, pos中的box barcode也需要更新
currentBoxPos.setBarcode(currentBoxBarcode);
storagePosManager.save(currentBoxPos);
}
//当前barcode信息清空
barcode = clearCurrentBarcodeInfo(barcode);
barcodeManager.save(barcode);
if (StringUtils.isNotEmpty(errorMsg)) {
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "通知WMS报错:" + errorMsg + ",库存已经清空,请确认");
}
//返回给客户端信息
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "不在当前隔口:" + boxPar + "中,库存已经清空,请确认");
} else { } else {
Barcode needOutBarcode = null; //如果是相同的隔口,判断是否是当前要出库的物料
for (Barcode subCode : barcodeList) { String currentBoxStr = BoxHandleUtil.getBoxStr(boxPar, true);
if (subCode.isOut()) { Barcode currentBoxBarcode = codeResolve.resolveOneValideBarcode(currentBoxStr);
needOutBarcode = subCode; StoragePos currentBoxPos = storagePosManager.getByBarcode(currentBoxBarcode.getBarcode());
break; if (currentBoxPos != null) {
currentBoxBarcode = currentBoxPos.getBarcode();
}
List<Barcode> currentBoxParBarcodeList = new ArrayList<>();
List<Barcode> subCodeList = currentBoxBarcode.getSubCodeList();
if (subCodeList == null) {
subCodeList = new ArrayList<>();
}
for (Barcode subCode : subCodeList) {
if (boxPar.equals(subCode.getPosName())) {
currentBoxParBarcodeList.add(subCode);
} }
} }
if (needOutBarcode != null) { //获取到当前要出的顺序是否一致
String orderItemId = needOutBarcode.getOrderItemId(); Barcode seqBarcode = null;
needOutBarcode.setOrderItemId(""); int seq = BoxHandleUtil.getSeq(currentBoxBarcode, boxPar);
needOutBarcode.setOut(false); for (Barcode subCode : currentBoxParBarcodeList) {
log.info(needOutBarcode.getBarcode() + "需要改成不需要出库"); if (seq == subCode.getSeq()) {
barcodeManager.save(needOutBarcode); seqBarcode = subCode;
boxBarcode.updateSubCodes(needOutBarcode); break;
barcode.setOut(true);
barcode.setOrderItemId(orderItemId);
boxBarcode.updateSubCodes(barcode);
barcodeManager.save(barcode);
boxBarcode.UpdateSubCode(barcode);
barcodeManager.save(boxBarcode);
if (inPos != null){
inPos.setBarcode(boxBarcode);
storagePosManager.save(inPos);
} }
log.info(barcode.getBarcode() + "改成要出库,orderItemId为:" + orderItemId);
needOut = true;
} }
} if (!barcode.getBarcode().equals(seqBarcode.getBarcode())) {
if (!needOut) { saveMessage(MessageType.ERROR.name(), currentLoc, boxPar + "传入的条码为:" + barcode.getBarcode() + ",按顺序出库的条码为:" + barcode.getBarcode() + "不一致");
return ResultBean.newErrorResult(1, "", boxPar); currentBoxBarcode.updateExtraData(CommonUtil.outExpPrefix + boxPar, boxPar);
} }
//通知wms,生成出库任务 //如果当前物料不是出库的,找一个出库的料盘
String orderItemId = barcode.getOrderItemId(); if (!barcode.isOut()) {
String orderId = ""; Barcode needOutBarcode = null;
String orderNo = ""; for (Barcode subCode : currentBoxParBarcodeList) {
if (subCode.isOut()) {
if (StringUtils.isNotEmpty(orderItemId)) { needOutBarcode = subCode;
int checkType = -1; break;
String pkItemId = ""; }
String face = "";
String brand = "";
String batchCode = "";
String targetLoc = "";
LiteOrderItem orderItem = liteOrderItemManager.get(orderItemId);
if (orderItem != null) {
orderNo = orderItem.getOrderNo();
orderId = orderItem.getOrderId();
pkItemId = orderItem.getItemId();
face = orderItem.getFace();
brand = orderItem.getBrand();
if (!"N/A".equals(orderItem.getBatchCode())) {
batchCode = orderItem.getBatchCode();
} }
LiteOrder order = liteOrderManager.get(orderItem.getOrderId()); if (needOutBarcode != null) {
if (order != null) { String orderItemId = needOutBarcode.getOrderItemId();
targetLoc = order.getLoc(); needOutBarcode.setOrderItemId("");
checkType = order.getCheckType(); needOutBarcode.setOut(false);
log.info(needOutBarcode.getBarcode() + "需要改成不需要出库");
barcodeManager.save(needOutBarcode);
currentBoxBarcode.updateSubCodes(needOutBarcode);
barcode.setOut(true);
barcode.setOrderItemId(orderItemId);
barcodeManager.save(barcode);
currentBoxBarcode.updateSubCodes(barcode);
log.info(barcode.getBarcode() + "改成要出库,orderItemId为:" + orderItemId);
} }
} }
String errorMsg = notifyCurrentBarcodeToWms(barcode, currentLoc, stacker);
//标记一下信息
if (!barcode.isOut()) {
currentBoxBarcode.updateExtraData(CommonUtil.outExpPrefix + posName, posName);
}
currentBoxBarcode.removeFromSubCodes(barcode);
barcodeManager.save(currentBoxBarcode);
if (currentBoxPos != null) {
//为保证数据一致性, pos中的box barcode也需要更新
currentBoxPos.setBarcode(currentBoxBarcode);
storagePosManager.save(currentBoxPos);
}
//当前barcode信息清空
barcode = clearCurrentBarcodeInfo(barcode);
barcodeManager.save(barcode);
//通知WMS if (StringUtils.isNotEmpty(errorMsg)) {
if (checkType == LiteorderCheckType.PICKING_CHECKOUT) { return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "通知WMS报错:" + errorMsg + ",库存已经清空,请确认");
try { }
LuxsanApi.pickingIssue(new PickingIssueRequest(CommonUtil.plantCode, orderNo, pkItemId, barcode.getPartNumber()
, barcode.getWarehouseCode(), brand, face, batchCode, Arrays.asList(barcode.getBarcode())));
//同时 更新下 缓存目的地
if (StringUtils.isNotEmpty(targetLoc)) {
if (targetLoc.endsWith("BG")) {
log.info("自动绑定料串[" + stacker + "]目的地:C2-3F-BG");
MaterialLocUtil.updateStackerLoc(stacker, "", "C2-3F-BG", 1, orderItem.getOrderNo(), barcode);
} else if (targetLoc.endsWith("CG")) {
log.info("自动绑定料串[" + stacker + "]目的地:C2-3F-CG");
MaterialLocUtil.updateStackerLoc(stacker, "", "C2-3F-CG", 1, orderItem.getOrderNo(), barcode);
} else if (targetLoc.endsWith("2F")) {
log.info("自动绑定料串[" + stacker + "]目的地:C1-2F");
MaterialLocUtil.updateStackerLoc(stacker, "", "C1-2F", 1, orderItem.getOrderNo(), barcode);
} else if (targetLoc.endsWith("1F")) {
log.info("自动绑定料串[" + stacker + "]目的地:C2-1F");
MaterialLocUtil.updateStackerLoc(stacker, "", "C2-1F", 1, orderItem.getOrderNo(), barcode);
}
}
} catch (Exception e) { Map<String, String> resultMap = new HashMap<>();
log.info(barcode.getBarcode() + "PK发料失败:" + e.getMessage() + ",隔口:" + barcode.getPosName() + "需要清空出库信息"); resultMap.put("binCode", boxPar);
resultMap.put("barcode", barcode.getBarcode());
resultMap.put("pickingId", "");
resultMap.put("platSize", barcode.getPlateSize() + "");
resultMap.put("height", barcode.getHeight() + "");
kafkaService.sendMachineParameterStackerAndBox(stacker, currentLoc, 0, currentBoxBarcode.getBarcode(), barcode.getAmount(), 4);
return ResultBean.newOkResult(resultMap);
}
}
}
List<Barcode> newSubCodeList = new ArrayList<>(); private Barcode clearCurrentBarcodeInfo(Barcode barcode) {
for (Barcode subCode : boxBarcode.getSubCodeList()) { barcode.setPosName("");
if (subCode.isOut()) { barcode.setOut(false);
if (barcode.getPosName().equals(subCode.getPosName())) { barcode.setOrderId("");
newSubCodeList.add(subCode); barcode.setOrderItemId("");
} barcode.setBarSource("");
} return barcode;
} }
for (Barcode subCode : newSubCodeList) { private String notifyCurrentBarcodeToWms(Barcode barcode, String currentLoc,String stacker) {
if (subCode.isOut()) { String errorMsg = "";
if (barcode.getPosName().equals(subCode.getPosName())) { String orderItemId = barcode.getOrderItemId();
String itemId = subCode.getOrderItemId(); int checkType = -1;
subCode.setOut(false); LiteOrder order = null;
subCode.setSelectMsg(null); LiteOrderItem orderItem = null;
subCode.setOrderItemId(null); if (StringUtils.isEmpty(orderItemId)) {
barcodeManager.save(subCode); orderItem = liteOrderItemManager.get(orderItemId);
if (orderItem != null) {
boxBarcode.updateSubCodes(subCode); order = liteOrderManager.get(orderItem.getOrderId());
//生成任务 if (order != null) {
generateTask(subCode, OP_STATUS.CANCEL.name(), subCode.getAmount(), OP.CHECKOUT, itemId, "", 0, false); checkType = order.getCheckType();
log.info(subCode.getBarcode() + "隔口为:" + subCode.getPosName() + "需清除出库标记");
}
}
}
barcodeManager.save(boxBarcode);
if (inPos != null) {
inPos.setBarcode(boxBarcode);
storagePosManager.save(inPos);
}
return ResultBean.newErrorResult(-1, "", barcode.getBarcode() + "请求PK发料失败,隔口:" + barcode.getPosName() + "出库信息已清空");
}
} }
}
}
//判断是手动出库,还是pk出库
if (checkType == LiteorderCheckType.PICKING_CHECKOUT) {
String batchCode = orderItem.getBatchCode();
if (!"N/A".equals(batchCode)) {
batchCode = orderItem.getBatchCode();
} else { } else {
//人工出库, batchCode = "";
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()); try {
dataLog.setSubSourceId(orderItemId); LuxsanApi.pickingIssue(new PickingIssueRequest(CommonUtil.plantCode, order.getOrderNo(), orderItem.getItemId(), barcode.getPartNumber()
dataLog.setSourceId(orderId); , barcode.getWarehouseCode(), orderItem.getBrand(), orderItem.getFace(), batchCode, Arrays.asList(barcode.getBarcode())));
dataLog.setSourceName(orderNo); //绑定线体
dataLog.setType(OP.CHECKOUT); String targetLoc = order.getLoc();
dataLog.setStatus(OP_STATUS.FINISHED.name()); if (StringUtils.isNotEmpty(targetLoc)){
dataLog.setPosName(boxPar); if (targetLoc.endsWith("BG")) {
dataLog.setNormal(true); log.info("自动绑定料串[" + stacker + "]目的地:C2-3F-BG");
dataLog.setDateCode(barcode.getDateCode()); MaterialLocUtil.updateStackerLoc(stacker, "", "C2-3F-BG", 1, orderItem.getOrderNo(),barcode);
dataLog.setBatchInfo(barcode.getBatch()); } else if (targetLoc.endsWith("CG")) {
dataLog.setProvider(barcode.getProvider()); log.info("自动绑定料串[" + stacker + "]目的地:C2-3F-CG");
dataLog.setProviderNumber(barcode.getProviderNumber()); MaterialLocUtil.updateStackerLoc(stacker, "", "C2-3F-CG", 1, orderItem.getOrderNo(),barcode);
dataLog.setWarehouseCode(barcode.getWarehouseCode()); } else if (targetLoc.endsWith("2F")){
if (StringUtils.isNotEmpty(currentLoc)) { log.info("自动绑定料串["+stacker+"]目的地:C1-2F");
dataLog.setCurrentLoc(currentLoc); MaterialLocUtil.updateStackerLoc(stacker,"", "C1-2F",1,orderItem.getOrderNo(),barcode);
} else if (targetLoc.endsWith("1F")){
log.info("自动绑定料串["+stacker+"]目的地:C2-1F");
MaterialLocUtil.updateStackerLoc(stacker,"", "C2-1F",1,orderItem.getOrderNo(),barcode);
}
}
} catch (ValidateException e) {
errorMsg = e.getDefaultMsg();
} }
taskService.updateFinishedTask(dataLog); } else {
//有出库,此料格就去除满格标志 try {
boxBarcode.updateExtraData(barcode.getPosName(), null); LuxsanApi.pickingIssue(new PickingIssueRequest(CommonUtil.plantCode, "SMFW" + System.currentTimeMillis(), "0", barcode.getPartNumber()
boxBarcode.removeFromSubCodes(barcode); , barcode.getWarehouseCode(), "", "", "", Arrays.asList(barcode.getBarcode())));
barcodeManager.save(boxBarcode); } catch (ValidateException e) {
if (inPos != null) { errorMsg = e.getDefaultMsg();
//为保证数据一致性, pos中的box barcode也需要更新
inPos.setBarcode(boxBarcode);
storagePosManager.save(inPos);
} }
//清理条码档案信息 }
log.info(barcode.getBarcode() + "的库位设置为空"); //生成出库任务
barcode.setPosName(""); if (order == null){
barcode.setOut(false); order = new LiteOrder();
barcode.setOrderId(""); }
barcode.setOrderItemId(""); if (orderItem == null){
barcode.setBarSource(""); orderItem = new LiteOrderItem();
barcodeManager.save(barcode); }
generateCurrentBarcodeTask(barcode, barcode.getPosName(), orderItem.getId(), order.getId(), order.getOrderNo(), currentLoc);
return errorMsg;
}
Map<String, String> resultMap = new HashMap<>();
resultMap.put("binCode", boxPar); private void generateCurrentBarcodeTask(Barcode barcode, String posName, String orderItemId, String orderId, String orderNo, String currentLoc) {
resultMap.put("barcode", barcode.getBarcode()); DataLog dataLog = new DataLog(new Storage(), barcode, new StoragePos());
resultMap.put("pickingId", orderNo); dataLog.setSubSourceId(orderItemId);
resultMap.put("platSize", barcode.getPlateSize() + ""); dataLog.setSourceId(orderId);
resultMap.put("height", barcode.getHeight() + ""); dataLog.setSourceName(orderNo);
kafkaService.sendMachineParameterStackerAndBox(stacker, currentLoc, 0, boxBarcode.getBarcode(), barcode.getAmount(), 4); dataLog.setType(OP.CHECKOUT);
return ResultBean.newOkResult(resultMap); dataLog.setStatus(OP_STATUS.FINISHED.name());
dataLog.setPosName(posName);
dataLog.setNormal(true);
dataLog.setDateCode(barcode.getDateCode());
dataLog.setBatchInfo(barcode.getBatch());
dataLog.setProvider(barcode.getProvider());
dataLog.setProviderNumber(barcode.getProviderNumber());
dataLog.setWarehouseCode(barcode.getWarehouseCode());
if (StringUtils.isNotEmpty(currentLoc)) {
dataLog.setCurrentLoc(currentLoc);
} }
taskService.updateFinishedTask(dataLog);
} }
} }
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!