Commit 96119e73 LN

出库单入库单的品名保存到barcode的pn

1 个父辈 c4315609
...@@ -658,6 +658,17 @@ public class Barcode extends BasePo implements Serializable { ...@@ -658,6 +658,17 @@ public class Barcode extends BasePo implements Serializable {
} }
} }
return null; return null;
} public Barcode getSubCodeByGeKou(String getkou) {
if (subCodeList == null) {
return null;
}
for (Barcode barcode : subCodeList
) {
if (barcode.getBarcode().equals(getkou)) {
return barcode;
}
}
return null;
} }
public synchronized void UpdateSubCode(Barcode barcode) { public synchronized void UpdateSubCode(Barcode barcode) {
......
...@@ -1360,20 +1360,67 @@ public class LiteOrderCache { ...@@ -1360,20 +1360,67 @@ public class LiteOrderCache {
LiteOrder cacheOrder = liteOrderManager.findByOrderNo(orderNo); LiteOrder cacheOrder = liteOrderManager.findByOrderNo(orderNo);
if (cacheOrder == null) { if (cacheOrder == null) {
log.info("未找到工单:" + orderNo + "的信息"); log.info("未找到工单:" + orderNo + "的信息");
return "预约单不存在"; return "预约单"+orderNo+"不存在";
} }
if (cacheOrder.isClosed()) { if (cacheOrder.isClosed()) {
log.info("工单:" + orderNo + "已经关闭"); log.info("工单:" + orderNo + "已经关闭");
return "预约单已关闭"; return "预约单"+orderNo+"已关闭";
} }
if (cacheOrder.isOutTails()) { if (cacheOrder.isOutTails()) {
log.info("工单:" + orderNo + "正在执行中"); log.info("工单:" + orderNo + "正在执行中");
return "预约单正在执行中"; return "预约单"+orderNo+"正在执行中";
} }
log.info("开始执行预约单"); log.info("开始执行预约单:" + liteOrder.getOrderNo());
//先验证是否可出
for (LiteOrderItem item : cacheOrder.getOrderItems()) {
String pn = item.getPn();
int needNum = item.getNeedNum();
int totalOutNum = item.getTotalOutNum();
int assignNum = 0;
int needOutNum = needNum - totalOutNum;
while (assignNum < needOutNum) {
List<String> storageIdList = new ArrayList<>();
for (Storage storage : dataCache.getAllStorage().values()) {
storageIdList.add(storage.getId());
}
Collection<String> excludePosIds = excludeOutPosIds();
excludePosIds = new ArrayList<>();
CHECKOUT_TYPE checkOutType = dataCache.getCheckOutType();
//获取可用库位
StoragePos pos = storagePosManager.findPartNumberInStorages(storageIdList, pn, excludePosIds, checkOutType, "");
if (pos == null) {
log.info("预约单 " + liteOrder.getOrderNo() + " 的物料 " + item.getPn() + "未找到");
return "预约单" + liteOrder.getOrderNo() + " 的物料 " + item.getPn() + "未找到";
}
cacheOrder.setTaskReelCount(item.getNeedNum());
//进行标记
boolean hasSmpPn = false;
Barcode barcode = pos.getBarcode();
List<Barcode> subCodeList = barcode.getSubCodeList();
for (Barcode subCode : subCodeList) {
if (pn.equals(subCode.getPartNumber())) {
// 数量不足
if (subCode.getAmount() < needOutNum) {
return "预约单" + liteOrder.getOrderNo() + " 的物料 " + item.getPn() + "数量" + subCode.getAmount() + "不足";
}
assignNum = assignNum + subCode.getAmount();
hasSmpPn = true;
break;
}
}
}
}
cacheOrder.setStatus(LITEORDER_STATUS.TAILS); cacheOrder.setStatus(LITEORDER_STATUS.TAILS);
...@@ -1394,12 +1441,13 @@ public class LiteOrderCache { ...@@ -1394,12 +1441,13 @@ public class LiteOrderCache {
storageIdList.add(storage.getId()); storageIdList.add(storage.getId());
} }
Collection<String> excludePosIds = excludeOutPosIds(); Collection<String> excludePosIds = excludeOutPosIds();
excludePosIds = new ArrayList<>();
CHECKOUT_TYPE checkOutType = dataCache.getCheckOutType(); CHECKOUT_TYPE checkOutType = dataCache.getCheckOutType();
//获取可用库位 //获取可用库位
StoragePos pos = storagePosManager.findPartNumberInStorages(storageIdList, pn, excludePosIds, checkOutType, ""); StoragePos pos = storagePosManager.findPartNumberInStorages(storageIdList, pn, excludePosIds, checkOutType, "");
if (pos == null) { if (pos == null) {
log.info(item.getPn() + "未找到可用库位,跳过"); log.info("预约单 " + liteOrder.getOrderNo() + " 的 " + item.getPn() + "未找到可用库位,跳过");
break; break;
} }
cacheOrder.setTaskReelCount(item.getNeedNum()); cacheOrder.setTaskReelCount(item.getNeedNum());
...@@ -1409,7 +1457,7 @@ public class LiteOrderCache { ...@@ -1409,7 +1457,7 @@ public class LiteOrderCache {
Barcode barcode = pos.getBarcode(); Barcode barcode = pos.getBarcode();
List<Barcode> subCodeList = barcode.getSubCodeList(); List<Barcode> subCodeList = barcode.getSubCodeList();
for (Barcode subCode : subCodeList) { for (Barcode subCode : subCodeList) {
if (pn.equals(subCode.getPartNumber())){ if (pn.equals(subCode.getPartNumber())) {
// 数量不足 // 数量不足
if (subCode.getAmount() < needOutNum) { if (subCode.getAmount() < needOutNum) {
throw new Exception("库存不足"); throw new Exception("库存不足");
...@@ -1417,36 +1465,66 @@ public class LiteOrderCache { ...@@ -1417,36 +1465,66 @@ public class LiteOrderCache {
subCode.setOut(true); subCode.setOut(true);
subCode.setOrderItemId(item.getId()); subCode.setOrderItemId(item.getId());
subCode.setOrderId(cacheOrder.getId()); subCode.setOrderId(cacheOrder.getId());
subCode.updateExtraData("needOutNum", needOutNum + "");
if(ObjectUtil.isNotEmpty(item.getPartname())){
subCode.setPn(item.getPosName());
}
subCode = barcodeManager.save(subCode); subCode = barcodeManager.save(subCode);
barcode.updateSubCodes(subCode); barcode.updateSubCodes(subCode);
barcodeManager.save(barcode); barcodeManager.save(barcode);
log.info("预约单 " + liteOrder.getOrderNo() + " 的 " + item.getPn() + "找到格口:"+subCode.getBarcode());
assignNum = assignNum + subCode.getAmount(); assignNum = assignNum + subCode.getAmount();
hasSmpPn = true; hasSmpPn = true;
break; break;
} }
} }
if (hasSmpPn){ if (hasSmpPn) {
boxCheckOutNum = boxCheckOutNum + 1;
Storage storage = dataCache.getStorageById(pos.getStorageId()); boolean hasTask=false;
DataLog dataLog = new DataLog(storage, barcode, pos); //判断是否有出库任务
dataLog.setSourceId(cacheOrder.getId()); List<DataLog> allTasks = taskService.getAllTasks();
dataLog.setSourceName(cacheOrder.getOrderNo()); Collection<String> operatingPosIds = new HashSet<>();
dataLog.setType(OP.CHECKOUT); for (DataLog task : allTasks) {
dataLog.setStatus(OP_STATUS.WAIT.name()); if(task.isCheckOutTask()&&task.getPosName().equals((pos.getPosName()))){
taskService.updateQueueTask(dataLog); //已有出库任务
if(task.isFinished()||task.isCancel()||task.isEnd()){
continue;
}
hasTask=true;
break;
}
}
if(hasTask){
boxCheckOutNum = boxCheckOutNum + 1;
log.info("预约单 " + liteOrder.getOrderNo() + " pn="+pn+",找到要出库的箱子 "+barcode.getBarcode()+",料箱已有出库任务,不重新创建出库任务");
}else{
boxCheckOutNum = boxCheckOutNum + 1;
Storage storage = dataCache.getStorageById(pos.getStorageId());
DataLog dataLog = new DataLog(storage, barcode, pos);
dataLog.setSourceId(cacheOrder.getId());
dataLog.setSourceName(cacheOrder.getOrderNo());
dataLog.setSubSourceId(item.getItemId());
dataLog.setType(OP.CHECKOUT);
dataLog.setStatus(OP_STATUS.WAIT.name());
taskService.updateQueueTask(dataLog);
log.info("预约单 " + liteOrder.getOrderNo() + " pn="+pn+",找到要出库的箱子 "+barcode.getBarcode()+",创建出库任务,总出库箱子数:"+boxCheckOutNum);
}
} }
} }
} }
if (boxCheckOutNum <= 0){ if (boxCheckOutNum <= 0) {
finishedOrderTasks(liteOrder); finishedOrderTasks(liteOrder);
return orderNo+"未找到可以执行的任务"; log.info("预约单 " + liteOrder.getOrderNo() + " 未找到可执行的任务");
return orderNo + "未找到可以执行的任务";
} else {
log.info("预约单 " + liteOrder.getOrderNo() + " 共出库 "+boxCheckOutNum);
} }
liteOrderMap.put(orderNo, cacheOrder);
liteOrderMap.put(orderNo,cacheOrder);
liteOrderManager.save(cacheOrder); liteOrderManager.save(cacheOrder);
return ""; return "";
} }
......
...@@ -289,4 +289,18 @@ public class LiteOrder extends BasePo implements Serializable { ...@@ -289,4 +289,18 @@ public class LiteOrder extends BasePo implements Serializable {
orderItems.add(item); orderItems.add(item);
} }
public LiteOrderItem getOrderItemByPn(String pn){
if (orderItems == null) {
orderItems = new ArrayList<>();
}
for (LiteOrderItem item :
orderItems) {
if(item.getPn().equals(pn)){
return item;
}
}
return null;
}
} }
...@@ -25,6 +25,10 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li ...@@ -25,6 +25,10 @@ public class LiteOrderItem extends BasePo implements Serializable ,Comparable<Li
*/ */
private String ri; private String ri;
/**
* 料名,例如红色/PVC
*/
private String partname;
/** /**
* 总需求数量 * 总需求数量
......
...@@ -62,8 +62,6 @@ public class SpBoxCheckOutController { ...@@ -62,8 +62,6 @@ public class SpBoxCheckOutController {
@Autowired @Autowired
private IBarcodeManager barcodeManager; private IBarcodeManager barcodeManager;
@Autowired
private IUnclaimedManager unclaimedManager;
@Autowired @Autowired
private TaskService taskService; private TaskService taskService;
...@@ -82,6 +80,114 @@ public class SpBoxCheckOutController { ...@@ -82,6 +80,114 @@ public class SpBoxCheckOutController {
@Autowired @Autowired
private DataCache dataCache; private DataCache dataCache;
@ApiOperation("根据料箱号和格口号,自动取出")
@RequestMapping("/taksOutReel")
@AnonymousAccess
public synchronized ResultBean taksOutReel(@RequestBody Map<String, String> paramMap) {
String boxStr = paramMap.get("boxStr").trim();
String gekouCodeStr = paramMap.get("binCodeStr").trim();
Integer taskOutNum=Integer.parseInt(paramMap.get("outNum").trim()) ;
log.info("reelOutBox : boxStr=" + boxStr + ",taskOutNum=" + taskOutNum + ",binCodeStr=" + gekouCodeStr);
//解析料箱信息
Barcode boxBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + boxStr);
if (boxBarcode == null) {
return ResultBean.newErrorResult(-1, "", boxStr + "不是有效的条码");
}
//解析料格信息
Barcode gekouBarcode = codeResolve.resolveOneValideBarcode("=2x2=" + gekouCodeStr);
if (gekouBarcode == null) {
return ResultBean.newErrorResult(-1, "", gekouCodeStr + "不是有效的条码");
}
//1.判断料格信息与料箱信息是否匹配
if (!gekouBarcode.getBarcode().startsWith(boxBarcode.getBarcode())) {
return ResultBean.newErrorResult(-1, "", gekouCodeStr + "不是当前料箱:" + boxStr + "的格口");
}
int binCodeNum = Integer.parseInt(gekouCodeStr.split("-")[1]);
//判断格口数量是否超出
int count =boxBarcode.getMaxSubNum();
if (binCodeNum > count) {
return ResultBean.newErrorResult(-1, "", boxBarcode.getBarcode() + "最多格口数" + count + ",请扫描正确的格口码");
}
//判断格口物料数量
Barcode reelInfo=boxBarcode.getSubCodeByGeKou(gekouCodeStr);
if(reelInfo==null){
return ResultBean.newErrorResult(-1, "", gekouCodeStr + "未找到物料信息");
}
if(reelInfo.getQty()<taskOutNum){
return ResultBean.newErrorResult(-1, "", gekouCodeStr + "物料"+reelInfo.getQty()+"数量"+reelInfo.getQty()+"不足");
}
// 判断是不是工单出库
LiteOrder liteOrder = liteOrderCache.getExecutingOrder();
if (liteOrder!=null) {
//判断所属的工单任务是否完成
String result = handleOrderNo(liteOrder, gekouBarcode.getPartNumber(),taskOutNum);
if (StringUtils.isNotEmpty(result)) {
return ResultBean.newErrorResult(-1, "", result);
}
} else {
return ResultBean.newErrorResult(-1, "", gekouCodeStr + "没有要出库的任务");
}
//4.开始拿出料箱
gekouBarcode.setAmount(gekouBarcode.getAmount() -taskOutNum);
gekouBarcode.updateExtraData("needOutNum", "0");
if (gekouBarcode.getAmount() <= 0) {
gekouBarcode.setAmount(0);
}
boxBarcode.updateSubCodes(gekouBarcode);
//5.寻找空库位
StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
if (pos == null){
return ResultBean.newErrorResult(-1,"",boxStr+"未找到可用的库位");
}
log.info("reelOutBox : boxStr=" + boxStr + ",binCodeStr=" + gekouCodeStr + "出库完成,数量" + taskOutNum + ",剩余数量:" + gekouBarcode.getAmount());
//6.生成出库任务
DataLog dataLog = new DataLog();
dataLog.setBarcode(CodeUtil.getReelCodeStr(reelInfo.getPartNumber(),taskOutNum));
dataLog.setPartNumber(reelInfo.getPartNumber());
dataLog.setOperator(SecurityUtils.getLoginUsername());
dataLog.setStatus(OP_STATUS.FINISHED.name());
dataLog.setPosName(gekouBarcode.getBarcode());
dataLog.setNum(taskOutNum);
dataLog.setType(OP.CHECKOUT);
if (liteOrder != null) {
dataLog.setSourceId(liteOrder.getId());
dataLog.setSourceName(liteOrder.getOrderNo());
}
taskService.updateFinishedTask(dataLog);
boxBarcode.setStatus(BARCODE_STATUS.OUT_NORMAL);
pos.setBarcode(boxBarcode);
pos.setUsed(true);
storagePosManager.save(pos);
barcodeManager.save(gekouBarcode);
barcodeManager.save(boxBarcode);
//更新库存
Storage storage=dataCache.getStorageById(pos.getStorageId());
dataCache.updateInventoryAmount(storage.getCid(),reelInfo.getPartNumber(), -taskOutNum);
Map<String,String> res=new HashMap<>();
res.put("PN",reelInfo.getPartNumber());
res.put("InPutNum",taskOutNum+"");
res.put("CurrNum",gekouBarcode.getAmount()+"");
res.put("Code",gekouBarcode.getBarcode());
return ResultBean.newOkResult("",CodeUtil.getReelCodeStr(reelInfo.getPartNumber(),taskOutNum)+"出库成功",res);
}
//以料格为维度,一个料格 //以料格为维度,一个料格
...@@ -115,6 +221,7 @@ public class SpBoxCheckOutController { ...@@ -115,6 +221,7 @@ public class SpBoxCheckOutController {
if (codeBarcode == null) { if (codeBarcode == null) {
return ResultBean.newErrorResult(-1, "", rellCodeStr + "不是有效的条码"); return ResultBean.newErrorResult(-1, "", rellCodeStr + "不是有效的条码");
} }
Integer taskOutNum=codeBarcode.getQty();
//1.判断料格信息与料箱信息是否匹配 //1.判断料格信息与料箱信息是否匹配
if (!gekouBarcode.getBarcode().startsWith(boxBarcode.getBarcode())) { if (!gekouBarcode.getBarcode().startsWith(boxBarcode.getBarcode())) {
return ResultBean.newErrorResult(-1, "", gekouCodeStr + "不是当前料箱:" + boxStr + "的格口"); return ResultBean.newErrorResult(-1, "", gekouCodeStr + "不是当前料箱:" + boxStr + "的格口");
...@@ -127,26 +234,11 @@ public class SpBoxCheckOutController { ...@@ -127,26 +234,11 @@ public class SpBoxCheckOutController {
if (binCodeNum > count) { if (binCodeNum > count) {
return ResultBean.newErrorResult(-1, "", boxBarcode.getBarcode() + "最多格口数" + count + ",请扫描正确的格口码"); return ResultBean.newErrorResult(-1, "", boxBarcode.getBarcode() + "最多格口数" + count + ",请扫描正确的格口码");
} }
// 判断是不是工单出库 // 判断是不是工单出库
boolean isOrderCheckout = StringUtils.isNotBlank(liteOrderCache.hasExecutingOrder()); LiteOrder liteOrder = liteOrderCache.getExecutingOrder();
LiteOrder liteOrder = null; if (liteOrder!=null) {
if (isOrderCheckout) {
liteOrder = liteOrderManager.get(gekouBarcode.getOrderId());
if (liteOrder == null || liteOrder.isClosed()) {
return ResultBean.newErrorResult(-1, "", boxBarcode.getBarcode() + "工单" + liteOrder.getOrderNo() + "已关闭,无法再出库");
}
//4.判断当前需不需要出库
String itemId = gekouBarcode.getOrderItemId();
if (StringUtils.isEmpty(itemId)) {
return ResultBean.newErrorResult(-1, "", boxStr + "没有要出库的任务");
}
//判断所属的工单任务是否完成 //判断所属的工单任务是否完成
String result = handleOrderNo(liteOrder, itemId, codeBarcode.getQty()); String result = handleOrderNo(liteOrder, gekouBarcode.getPartNumber(),taskOutNum);
if (StringUtils.isNotEmpty(result)) { if (StringUtils.isNotEmpty(result)) {
return ResultBean.newErrorResult(-1, "", result); return ResultBean.newErrorResult(-1, "", result);
} }
...@@ -175,6 +267,7 @@ public class SpBoxCheckOutController { ...@@ -175,6 +267,7 @@ public class SpBoxCheckOutController {
if (gekouBarcode.getAmount() <= 0) { if (gekouBarcode.getAmount() <= 0) {
gekouBarcode.setAmount(0); gekouBarcode.setAmount(0);
} }
gekouBarcode.updateExtraData("needOutNum", "0");
boxBarcode.updateSubCodes(gekouBarcode); boxBarcode.updateSubCodes(gekouBarcode);
...@@ -221,11 +314,11 @@ public class SpBoxCheckOutController { ...@@ -221,11 +314,11 @@ public class SpBoxCheckOutController {
} }
private String handleOrderNo(LiteOrder liteOrder, String orderItemId, int amount) { private String handleOrderNo(LiteOrder liteOrder, String pn, int amount) {
List<LiteOrderItem> newOrderItemList = new ArrayList<>(); List<LiteOrderItem> newOrderItemList = new ArrayList<>();
List<LiteOrderItem> orderItemList = liteOrder.getOrderItems(); List<LiteOrderItem> orderItemList = liteOrder.getOrderItems();
for (LiteOrderItem item : orderItemList) { for (LiteOrderItem item : orderItemList) {
if (item.getId().equals(orderItemId)) { if (item.getPn().equals(pn)) {
if (item.getNeedNum() - item.getTotalOutNum() <= 0) { if (item.getNeedNum() - item.getTotalOutNum() <= 0) {
return liteOrder.getOrderNo() + "预约单中:" + item.getPn() + "已经出库完成,不允许出库"; return liteOrder.getOrderNo() + "预约单中:" + item.getPn() + "已经出库完成,不允许出库";
} }
......
...@@ -13,6 +13,7 @@ import com.neotel.smfcore.core.system.service.dao.impl.DataLogDaoImpl; ...@@ -13,6 +13,7 @@ import com.neotel.smfcore.core.system.service.dao.impl.DataLogDaoImpl;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.lizhen.agvBox.bean.Station; import com.neotel.smfcore.custom.lizhen.agvBox.bean.Station;
import com.neotel.smfcore.custom.lizhen.agvBox.util.StationCacheUtil; import com.neotel.smfcore.custom.lizhen.agvBox.util.StationCacheUtil;
import com.neotel.smfcore.custom.luxsan_sp.api.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IReturnNoManager; import com.neotel.smfcore.custom.luxsan_sp.service.manager.IReturnNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpareNoManager; import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpareNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpBoxPutInManager; import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpBoxPutInManager;
...@@ -52,9 +53,11 @@ public class SpBoxPutInController { ...@@ -52,9 +53,11 @@ public class SpBoxPutInController {
} }
String currentRfid = station.getCurrentRfid(); String currentRfid = station.getCurrentRfid();
// if(ObjectUtil.isEmpty(currentRfid)){ if(ObjectUtil.isEmpty(currentRfid)){
// currentRfid="CS1789B"; if(LuxsanSpApi.Debug){
// } currentRfid="CS9999B";
}
}
// log.info("getStationInfo工位上"+currentRfid); // log.info("getStationInfo工位上"+currentRfid);
// currentRfid = "C0700377A"; // currentRfid = "C0700377A";
if (StringUtils.isEmpty(currentRfid)){ if (StringUtils.isEmpty(currentRfid)){
......
...@@ -6,6 +6,8 @@ import com.neotel.smfcore.common.utils.StringUtils; ...@@ -6,6 +6,8 @@ import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager; import com.neotel.smfcore.core.barcode.service.manager.IBarcodeManager;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.custom.luxsan_sp.api.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.GetSpareNoRequest;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetSpareNoResult; import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.GetSpareNoResult;
import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo; import com.neotel.smfcore.custom.luxsan_sp.bean.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus; import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
...@@ -61,8 +63,8 @@ public class SpSpareNoController { ...@@ -61,8 +63,8 @@ public class SpSpareNoController {
@AnonymousAccess @AnonymousAccess
public ResultBean getAllSpareNo(String no) { public ResultBean getAllSpareNo(String no) {
// 从远程获取入库单(已经保存的不要)+还要展示本地的入库单 // 从远程获取入库单(已经保存的不要)+还要展示本地的入库单
// List<GetSpareNoResult> resultList = LuxsanSpApi.getSpareNo(new GetSpareNoRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT)); List<GetSpareNoResult> resultList = LuxsanSpApi.getSpareNo(new GetSpareNoRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
List<GetSpareNoResult> resultList = new ArrayList<>(); // List<GetSpareNoResult> resultList = new ArrayList<>();
List<SpareNo> allSpareFromDB = spareNoManager.findAll(); List<SpareNo> allSpareFromDB = spareNoManager.findAll();
List<SpareNo> resultSpare = new ArrayList<>(allSpareFromDB); List<SpareNo> resultSpare = new ArrayList<>(allSpareFromDB);
List<String> spareNoDBCollection = allSpareFromDB.stream().map(SpareNo::getSpareNo).collect(Collectors.toList()); List<String> spareNoDBCollection = allSpareFromDB.stream().map(SpareNo::getSpareNo).collect(Collectors.toList());
......
...@@ -78,7 +78,6 @@ public class SpUnclaimedController { ...@@ -78,7 +78,6 @@ public class SpUnclaimedController {
@RequestMapping("/getAllUnclaimed") @RequestMapping("/getAllUnclaimed")
@AnonymousAccess @AnonymousAccess
public ResultBean getAllUnclaimed(String no) { public ResultBean getAllUnclaimed(String no) {
List<GetUnclaimedResult> resultList = LuxsanSpApi.getUnclaimedDetails(new GetUnclaimedRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
// List<GetUnclaimedResult> resultList = new ArrayList<>(); // List<GetUnclaimedResult> resultList = new ArrayList<>();
List<LiteOrder> allLiteOrderFromDB = liteOrderManager.findAll(); List<LiteOrder> allLiteOrderFromDB = liteOrderManager.findAll();
List<LiteOrder> onlyOneAllLiteOrderFromDB = new ArrayList<>(); List<LiteOrder> onlyOneAllLiteOrderFromDB = new ArrayList<>();
...@@ -95,26 +94,28 @@ public class SpUnclaimedController { ...@@ -95,26 +94,28 @@ public class SpUnclaimedController {
List<String> allLiteOrderDBCollect = onlyOneAllLiteOrderFromDB.stream().map(LiteOrder::getOrderNo).collect(Collectors.toList()); List<String> allLiteOrderDBCollect = onlyOneAllLiteOrderFromDB.stream().map(LiteOrder::getOrderNo).collect(Collectors.toList());
List<Unclaimed> resultLiteOrder = new ArrayList<>(); List<Unclaimed> resultLiteOrder = new ArrayList<>();
for (LiteOrder liteOrder : onlyOneAllLiteOrderFromDB) { for (LiteOrder liteOrder : onlyOneAllLiteOrderFromDB) {
Unclaimed unclaimed = new Unclaimed(); // Unclaimed unclaimed = new Unclaimed();
unclaimed.setCreateDate(liteOrder.getCreateDate()); // unclaimed.setCreateDate(liteOrder.getCreateDate());
unclaimed.setOrderNo(liteOrder.getOrderNo()); // unclaimed.setOrderNo(liteOrder.getOrderNo());
List<UnclaimedDetail> unclaimedDetails = new ArrayList<>(); // List<UnclaimedDetail> unclaimedDetails = new ArrayList<>();
for (LiteOrderItem orderItem : liteOrder.getOrderItems()) { // for (LiteOrderItem orderItem : liteOrder.getOrderItems()) {
UnclaimedDetail unclaimedDetail = new UnclaimedDetail(); // UnclaimedDetail unclaimedDetail = new UnclaimedDetail();
unclaimedDetail.setPartno(orderItem.getPn()); // unclaimedDetail.setPartno(orderItem.getPn());
unclaimedDetail.setOrderNo(orderItem.getOrderNo()); // unclaimedDetail.setOrderNo(orderItem.getOrderNo());
unclaimedDetail.setApplyQty(orderItem.getNeedNum()); // unclaimedDetail.setApplyQty(orderItem.getNeedNum());
unclaimedDetail.setAlrInQty(orderItem.getTotalOutNum()); // unclaimedDetail.setAlrInQty(orderItem.getTotalOutNum());
if (liteOrder.isOutTails()){ // unclaimedDetail.setPartname(orderItem.getPartname());
unclaimed.setUnclaimedStatus(SpareNostatus.EXECUTING_STATUS); // if (liteOrder.isOutTails()){
} else if (liteOrder.isClosed()){ // unclaimed.setUnclaimedStatus(SpareNostatus.EXECUTING_STATUS);
unclaimed.setUnclaimedStatus(SpareNostatus.CLOSE_STATUS); // } else if (liteOrder.isClosed()){
} // unclaimed.setUnclaimedStatus(SpareNostatus.CLOSE_STATUS);
unclaimedDetails.add(unclaimedDetail); // }
} // unclaimedDetails.add(unclaimedDetail);
unclaimed.setDetailList(unclaimedDetails); // }
resultLiteOrder.add(unclaimed); // unclaimed.setDetailList(unclaimedDetails);
resultLiteOrder.add(OrderToUnclaimed(liteOrder));
} }
List<GetUnclaimedResult> resultList = LuxsanSpApi.getUnclaimedDetails(new GetUnclaimedRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
for (GetUnclaimedResult unclaimedResult : resultList) { for (GetUnclaimedResult unclaimedResult : resultList) {
if (allLiteOrderDBCollect.contains(unclaimedResult.getOrderNo())) { if (allLiteOrderDBCollect.contains(unclaimedResult.getOrderNo())) {
continue; continue;
...@@ -124,14 +125,17 @@ public class SpUnclaimedController { ...@@ -124,14 +125,17 @@ public class SpUnclaimedController {
LiteOrder liteOrder = new LiteOrder(); LiteOrder liteOrder = new LiteOrder();
liteOrder.setOrderNo(unclaimed.getOrderNo()); liteOrder.setOrderNo(unclaimed.getOrderNo());
liteOrder.setCreateDate(unclaimed.getCreateDate()); liteOrder.setCreateDate(unclaimed.getCreateDate());
liteOrder.setSource(unclaimed.getFunctionDept());
List<LiteOrderItem> liteOrderItems = new ArrayList<>(); List<LiteOrderItem> liteOrderItems = new ArrayList<>();
for (UnclaimedDetail unclaimedDetail : unclaimed.getDetailList()) { for (UnclaimedDetail unclaimedDetail : unclaimed.getDetailList()) {
LiteOrderItem liteOrderItem = new LiteOrderItem(); LiteOrderItem liteOrderItem = new LiteOrderItem();
liteOrderItem.setLine("s1"); liteOrderItem.setLine("s1");
liteOrderItem.setPn(unclaimedDetail.getPartno()); liteOrderItem.setPn(unclaimedDetail.getPartno());
liteOrderItem.setNeedNum(unclaimedDetail.getApplyQty()); liteOrderItem.setNeedNum(unclaimedDetail.getApplyQty());
liteOrderItem.setPartname(unclaimedDetail.getPartname());
liteOrderItems.add(liteOrderItem); liteOrderItems.add(liteOrderItem);
} }
log.info("创建出库单:"+liteOrder.getOrderNo());
liteOrder.setOrderItems(liteOrderItems); liteOrder.setOrderItems(liteOrderItems);
liteOrderManager.createWithItems(liteOrder); liteOrderManager.createWithItems(liteOrder);
resultLiteOrder.add(unclaimed); resultLiteOrder.add(unclaimed);
...@@ -142,6 +146,31 @@ public class SpUnclaimedController { ...@@ -142,6 +146,31 @@ public class SpUnclaimedController {
return ResultBean.newOkResult(resultLiteOrder); return ResultBean.newOkResult(resultLiteOrder);
} }
private Unclaimed OrderToUnclaimed(LiteOrder liteOrder){
Unclaimed unclaimed = new Unclaimed();
unclaimed.setCreateDate(liteOrder.getCreateDate());
unclaimed.setOrderNo(liteOrder.getOrderNo());
unclaimed.setFunctionDept(liteOrder.getSource());
List<UnclaimedDetail> unclaimedDetails = new ArrayList<>();
for (LiteOrderItem orderItem : liteOrder.getOrderItems()) {
UnclaimedDetail unclaimedDetail = new UnclaimedDetail();
unclaimedDetail.setPartno(orderItem.getPn());
unclaimedDetail.setOrderNo(orderItem.getOrderNo());
unclaimedDetail.setApplyQty(orderItem.getNeedNum());
unclaimedDetail.setAlrInQty(orderItem.getTotalOutNum());
unclaimedDetail.setPartname(orderItem.getPartname());
if (liteOrder.isOutTails()){
unclaimed.setUnclaimedStatus(SpareNostatus.EXECUTING_STATUS);
} else if (liteOrder.isClosed()){
unclaimed.setUnclaimedStatus(SpareNostatus.CLOSE_STATUS);
}
unclaimedDetails.add(unclaimedDetail);
}
unclaimed.setDetailList(unclaimedDetails);
return unclaimed;
}
@ApiOperation("选中出库单") @ApiOperation("选中出库单")
@RequestMapping("/checkOrderNo") @RequestMapping("/checkOrderNo")
......
...@@ -19,6 +19,7 @@ import com.neotel.smfcore.custom.luxsan_sp.api.LuxsanSpApi; ...@@ -19,6 +19,7 @@ import com.neotel.smfcore.custom.luxsan_sp.api.LuxsanSpApi;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.SpareInHourseRequest; import com.neotel.smfcore.custom.luxsan_sp.api.bean.request.SpareInHourseRequest;
import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.SpareInHourseDetail; import com.neotel.smfcore.custom.luxsan_sp.api.bean.result.SpareInHourseDetail;
import com.neotel.smfcore.custom.luxsan_sp.bean.*; import com.neotel.smfcore.custom.luxsan_sp.bean.*;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.IReturnNoManager; import com.neotel.smfcore.custom.luxsan_sp.service.manager.IReturnNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpareNoManager; import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpareNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpBoxPutInManager; import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpBoxPutInManager;
...@@ -175,27 +176,8 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager { ...@@ -175,27 +176,8 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
if (spareNoDetail == null) { if (spareNoDetail == null) {
throw new Exception(codeBarcode.getPartNumber() + "没有入退库需求,请检查是否存在或者不符合入退库数量"); throw new Exception(codeBarcode.getPartNumber() + "没有入退库需求,请检查是否存在或者不符合入退库数量");
} }
//数量加
spareNoDetail.setAlrInQty(spareNoDetail.getAlrInQty() + codeBarcode.getQty());
baseNo.updateDetailList(spareNoDetail);
log.info("开始判断是否完成入库单");
for (SpareNoDetail noDetail : baseNo.getDetailList()) {
if (noDetail.getInQty() > noDetail.getAlrInQty()) {
log.info("入库未完成");
finish = false;
break;
}
log.info("入料noDetail.getInQty()" + noDetail.getInQty() + "noDetail.getAlrInQty()" + noDetail.getAlrInQty());
}
} }
// 寻找空库位 // 寻找空库位
StoragePos pos = SpBoxUtil.locOnePos(boxBarcode); StoragePos pos = SpBoxUtil.locOnePos(boxBarcode);
...@@ -203,6 +185,7 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager { ...@@ -203,6 +185,7 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
// 开始放入料箱 // 开始放入料箱
gekouBarcode.setPartNumber(codeBarcode.getPartNumber()); gekouBarcode.setPartNumber(codeBarcode.getPartNumber());
gekouBarcode.setAmount(gekouBarcode.getAmount() + codeBarcode.getQty()); gekouBarcode.setAmount(gekouBarcode.getAmount() + codeBarcode.getQty());
gekouBarcode.updateExtraData("needInNum", "0");
boxBarcode.updateSubCodes(gekouBarcode); boxBarcode.updateSubCodes(gekouBarcode);
boxBarcode.setStatus(BARCODE_STATUS.OUT_NORMAL); boxBarcode.setStatus(BARCODE_STATUS.OUT_NORMAL);
...@@ -249,33 +232,66 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager { ...@@ -249,33 +232,66 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
returnNoManager.save(returnInventoryNo); returnNoManager.save(returnInventoryNo);
} }
} }
// 最后刷新不能回滚的 if(isOrderPutIn){
if (finish && isOrderPutIn) { List<SpareNoDetail> detailList = baseNo.getDetailList();
try {
// 调用入库接口 SpareNoDetail spareNoDetail = null;
if (baseNo.getClass().equals(SpareNo.class)) {
dataLog.setSourceId(baseNo.getId()); for (SpareNoDetail detail : detailList) {
dataLog.setSourceName(spareNo.getSpareNo()); //如果相同的话,判断数量是否大于需求数量
List<SpareInHourseDetail> details = new ArrayList<>(); if (detail.getPartno().equals(codeBarcode.getPartNumber())) {
for (SpareNoDetail detail : baseNo.getDetailList()) { spareNoDetail = detail;
SpareInHourseDetail spareInHourseDetail = new SpareInHourseDetail(); break;
spareInHourseDetail.setInQty(detail.getInQty()); }
spareInHourseDetail.setPartno(detail.getPartno()); }
String location = boxStr; if(spareNoDetail!=null) {
//数量加
spareNoDetail.setAlrInQty(spareNoDetail.getAlrInQty() + codeBarcode.getQty());
baseNo.updateDetailList(spareNoDetail);
log.info("开始判断是否完成入库单");
for (SpareNoDetail noDetail : baseNo.getDetailList()) {
if (noDetail.getInQty() > noDetail.getAlrInQty()) {
log.info("入库未完成");
finish = false;
break;
}
log.info("入料noDetail.getInQty()" + noDetail.getInQty() + "noDetail.getAlrInQty()" + noDetail.getAlrInQty());
}
// 最后刷新不能回滚的
if (finish ) {
try {
// 调用入库接口
if (baseNo.getClass().equals(SpareNo.class)) {
dataLog.setSourceId(baseNo.getId());
dataLog.setSourceName(spareNo.getSpareNo());
((SpareNo) baseNo).setStatus(SpareNostatus.CLOSE_STATUS+"");
((SpareNo) baseNo).setConfirmed(false);
log.info("入库单已完成,关闭入库单" + baseNo.getNo() );
List<SpareInHourseDetail> details = new ArrayList<>();
for (SpareNoDetail detail : baseNo.getDetailList()) {
SpareInHourseDetail spareInHourseDetail = new SpareInHourseDetail();
spareInHourseDetail.setInQty(detail.getInQty());
spareInHourseDetail.setPartno(detail.getPartno());
String location = boxStr;
// String location = SpareNostatus.LOCATION_CODE.get(baseNo.getWhCode()); // String location = SpareNostatus.LOCATION_CODE.get(baseNo.getWhCode());
spareInHourseDetail.setLocationCode(location); spareInHourseDetail.setLocationCode(location);
// spareInHourseDetail.setLocationCode(binBarcode.getBarcode()); // spareInHourseDetail.setLocationCode(binBarcode.getBarcode());
details.add(spareInHourseDetail); details.add(spareInHourseDetail);
}
LuxsanSpApi.spareInHourse(new SpareInHourseRequest(baseNo.getDeptId(), baseNo.getNo(), baseNo.getWhCode(), details));
spareNo.setConfirmed(true);
log.info("入库单通知API成功,更改状态为已确认:" + baseNo.getNo() );
}
} catch (Exception e) {
log.info("调用入库接口失败,失败原因" + e.getMessage());
spareNo.setConfirmed(false);
throw new Exception(e.getMessage());
} finally {
spareNoManager.save(spareNo);
} }
LuxsanSpApi.spareInHourse(new SpareInHourseRequest(baseNo.getDeptId(), baseNo.getNo(), baseNo.getWhCode(), details));
spareNo.setConfirmed(true);
} }
}catch (Exception e) {
log.info("调用入库接口失败,失败原因"+e.getMessage());
spareNo.setConfirmed(false);
throw new Exception(e.getMessage());
}finally {
spareNoManager.save(spareNo);
} }
} }
......
...@@ -8,6 +8,10 @@ import lombok.extern.slf4j.Slf4j; ...@@ -8,6 +8,10 @@ import lombok.extern.slf4j.Slf4j;
public class CodeUtil { public class CodeUtil {
public static String getReelCodeStr(String pn,int qty){
return pn+"&&"+qty;
}
public static CodeBarcode getCodeBarcode(String codeStr){ public static CodeBarcode getCodeBarcode(String codeStr){
if (!(codeStr.contains(" ") || codeStr.contains("&&"))){ if (!(codeStr.contains(" ") || codeStr.contains("&&"))){
......
...@@ -83,6 +83,7 @@ public class OrderNoCache { ...@@ -83,6 +83,7 @@ public class OrderNoCache {
UnclaimedDetail unclaimedDetail = new UnclaimedDetail(); UnclaimedDetail unclaimedDetail = new UnclaimedDetail();
unclaimedDetail.setApplyQty(detail.getApplyQty()); unclaimedDetail.setApplyQty(detail.getApplyQty());
unclaimedDetail.setAlrInQty(0); unclaimedDetail.setAlrInQty(0);
unclaimedDetail.setPartname(detail.getPartname());
BeanUtils.copyProperties(detail, unclaimedDetail); BeanUtils.copyProperties(detail, unclaimedDetail);
detailList.add(unclaimedDetail); detailList.add(unclaimedDetail);
} }
......
...@@ -106,15 +106,6 @@ public class SpBoxUtil { ...@@ -106,15 +106,6 @@ public class SpBoxUtil {
return detail; return detail;
} }
}).collect(Collectors.toList()); }).collect(Collectors.toList());
// Unclaimed orderNo = orderNoCache.getExecutingOrderNo();
// spareNoDetails = orderNo.getDetailList().stream().map(unclaimedDetail -> {
// SpareNoDetail detail = new SpareNoDetail();
// detail.setAlrInQty(unclaimedDetail.getAlrInQty());
// detail.setInQty(unclaimedDetail.getApplyQty());
// detail.setPartno(unclaimedDetail.getPartno());
// detail.setPartname(unclaimedDetail.getPartname());
// return detail;
// }).collect(Collectors.toList());
} }
return spareNoDetails; return spareNoDetails;
} }
...@@ -146,6 +137,7 @@ public class SpBoxUtil { ...@@ -146,6 +137,7 @@ public class SpBoxUtil {
activeDetail = spareNoDetails.get(0); activeDetail = spareNoDetails.get(0);
} }
} }
//待领取
if (ObjectUtil.isNull(activeDetail)) { if (ObjectUtil.isNull(activeDetail)) {
par.add(0); par.add(0);
}else { }else {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!