Commit 96119e73 LN

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

1 个父辈 c4315609
......@@ -658,6 +658,17 @@ public class Barcode extends BasePo implements Serializable {
}
}
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) {
......
......@@ -1360,20 +1360,67 @@ public class LiteOrderCache {
LiteOrder cacheOrder = liteOrderManager.findByOrderNo(orderNo);
if (cacheOrder == null) {
log.info("未找到工单:" + orderNo + "的信息");
return "预约单不存在";
return "预约单"+orderNo+"不存在";
}
if (cacheOrder.isClosed()) {
log.info("工单:" + orderNo + "已经关闭");
return "预约单已关闭";
return "预约单"+orderNo+"已关闭";
}
if (cacheOrder.isOutTails()) {
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);
......@@ -1394,12 +1441,13 @@ public class LiteOrderCache {
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(item.getPn() + "未找到可用库位,跳过");
log.info("预约单 " + liteOrder.getOrderNo() + " 的 " + item.getPn() + "未找到可用库位,跳过");
break;
}
cacheOrder.setTaskReelCount(item.getNeedNum());
......@@ -1409,7 +1457,7 @@ public class LiteOrderCache {
Barcode barcode = pos.getBarcode();
List<Barcode> subCodeList = barcode.getSubCodeList();
for (Barcode subCode : subCodeList) {
if (pn.equals(subCode.getPartNumber())){
if (pn.equals(subCode.getPartNumber())) {
// 数量不足
if (subCode.getAmount() < needOutNum) {
throw new Exception("库存不足");
......@@ -1417,36 +1465,66 @@ public class LiteOrderCache {
subCode.setOut(true);
subCode.setOrderItemId(item.getId());
subCode.setOrderId(cacheOrder.getId());
subCode.updateExtraData("needOutNum", needOutNum + "");
if(ObjectUtil.isNotEmpty(item.getPartname())){
subCode.setPn(item.getPosName());
}
subCode = barcodeManager.save(subCode);
barcode.updateSubCodes(subCode);
barcodeManager.save(barcode);
log.info("预约单 " + liteOrder.getOrderNo() + " 的 " + item.getPn() + "找到格口:"+subCode.getBarcode());
assignNum = assignNum + subCode.getAmount();
hasSmpPn = true;
break;
}
}
if (hasSmpPn){
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.setType(OP.CHECKOUT);
dataLog.setStatus(OP_STATUS.WAIT.name());
taskService.updateQueueTask(dataLog);
if (hasSmpPn) {
boolean hasTask=false;
//判断是否有出库任务
List<DataLog> allTasks = taskService.getAllTasks();
Collection<String> operatingPosIds = new HashSet<>();
for (DataLog task : allTasks) {
if(task.isCheckOutTask()&&task.getPosName().equals((pos.getPosName()))){
//已有出库任务
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);
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);
return "";
}
......
......@@ -289,4 +289,18 @@ public class LiteOrder extends BasePo implements Serializable {
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
*/
private String ri;
/**
* 料名,例如红色/PVC
*/
private String partname;
/**
* 总需求数量
......
......@@ -62,8 +62,6 @@ public class SpBoxCheckOutController {
@Autowired
private IBarcodeManager barcodeManager;
@Autowired
private IUnclaimedManager unclaimedManager;
@Autowired
private TaskService taskService;
......@@ -82,6 +80,114 @@ public class SpBoxCheckOutController {
@Autowired
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 {
if (codeBarcode == null) {
return ResultBean.newErrorResult(-1, "", rellCodeStr + "不是有效的条码");
}
Integer taskOutNum=codeBarcode.getQty();
//1.判断料格信息与料箱信息是否匹配
if (!gekouBarcode.getBarcode().startsWith(boxBarcode.getBarcode())) {
return ResultBean.newErrorResult(-1, "", gekouCodeStr + "不是当前料箱:" + boxStr + "的格口");
......@@ -127,26 +234,11 @@ public class SpBoxCheckOutController {
if (binCodeNum > count) {
return ResultBean.newErrorResult(-1, "", boxBarcode.getBarcode() + "最多格口数" + count + ",请扫描正确的格口码");
}
// 判断是不是工单出库
boolean isOrderCheckout = StringUtils.isNotBlank(liteOrderCache.hasExecutingOrder());
LiteOrder 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 + "没有要出库的任务");
}
LiteOrder liteOrder = liteOrderCache.getExecutingOrder();
if (liteOrder!=null) {
//判断所属的工单任务是否完成
String result = handleOrderNo(liteOrder, itemId, codeBarcode.getQty());
String result = handleOrderNo(liteOrder, gekouBarcode.getPartNumber(),taskOutNum);
if (StringUtils.isNotEmpty(result)) {
return ResultBean.newErrorResult(-1, "", result);
}
......@@ -175,6 +267,7 @@ public class SpBoxCheckOutController {
if (gekouBarcode.getAmount() <= 0) {
gekouBarcode.setAmount(0);
}
gekouBarcode.updateExtraData("needOutNum", "0");
boxBarcode.updateSubCodes(gekouBarcode);
......@@ -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> orderItemList = liteOrder.getOrderItems();
for (LiteOrderItem item : orderItemList) {
if (item.getId().equals(orderItemId)) {
if (item.getPn().equals(pn)) {
if (item.getNeedNum() - item.getTotalOutNum() <= 0) {
return liteOrder.getOrderNo() + "预约单中:" + item.getPn() + "已经出库完成,不允许出库";
}
......
......@@ -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.custom.lizhen.agvBox.bean.Station;
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.ISpareNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpBoxPutInManager;
......@@ -52,9 +53,11 @@ public class SpBoxPutInController {
}
String currentRfid = station.getCurrentRfid();
// if(ObjectUtil.isEmpty(currentRfid)){
// currentRfid="CS1789B";
// }
if(ObjectUtil.isEmpty(currentRfid)){
if(LuxsanSpApi.Debug){
currentRfid="CS9999B";
}
}
// log.info("getStationInfo工位上"+currentRfid);
// currentRfid = "C0700377A";
if (StringUtils.isEmpty(currentRfid)){
......
......@@ -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.storage.service.manager.IStoragePosManager;
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.bean.SpareNo;
import com.neotel.smfcore.custom.luxsan_sp.enums.SpareNostatus;
......@@ -61,8 +63,8 @@ public class SpSpareNoController {
@AnonymousAccess
public ResultBean getAllSpareNo(String no) {
// 从远程获取入库单(已经保存的不要)+还要展示本地的入库单
// List<GetSpareNoResult> resultList = LuxsanSpApi.getSpareNo(new GetSpareNoRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
List<GetSpareNoResult> resultList = new ArrayList<>();
List<GetSpareNoResult> resultList = LuxsanSpApi.getSpareNo(new GetSpareNoRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
// List<GetSpareNoResult> resultList = new ArrayList<>();
List<SpareNo> allSpareFromDB = spareNoManager.findAll();
List<SpareNo> resultSpare = new ArrayList<>(allSpareFromDB);
List<String> spareNoDBCollection = allSpareFromDB.stream().map(SpareNo::getSpareNo).collect(Collectors.toList());
......
......@@ -78,7 +78,6 @@ public class SpUnclaimedController {
@RequestMapping("/getAllUnclaimed")
@AnonymousAccess
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<LiteOrder> allLiteOrderFromDB = liteOrderManager.findAll();
List<LiteOrder> onlyOneAllLiteOrderFromDB = new ArrayList<>();
......@@ -95,26 +94,28 @@ public class SpUnclaimedController {
List<String> allLiteOrderDBCollect = onlyOneAllLiteOrderFromDB.stream().map(LiteOrder::getOrderNo).collect(Collectors.toList());
List<Unclaimed> resultLiteOrder = new ArrayList<>();
for (LiteOrder liteOrder : onlyOneAllLiteOrderFromDB) {
Unclaimed unclaimed = new Unclaimed();
unclaimed.setCreateDate(liteOrder.getCreateDate());
unclaimed.setOrderNo(liteOrder.getOrderNo());
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());
if (liteOrder.isOutTails()){
unclaimed.setUnclaimedStatus(SpareNostatus.EXECUTING_STATUS);
} else if (liteOrder.isClosed()){
unclaimed.setUnclaimedStatus(SpareNostatus.CLOSE_STATUS);
}
unclaimedDetails.add(unclaimedDetail);
}
unclaimed.setDetailList(unclaimedDetails);
resultLiteOrder.add(unclaimed);
// Unclaimed unclaimed = new Unclaimed();
// unclaimed.setCreateDate(liteOrder.getCreateDate());
// unclaimed.setOrderNo(liteOrder.getOrderNo());
// 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);
resultLiteOrder.add(OrderToUnclaimed(liteOrder));
}
List<GetUnclaimedResult> resultList = LuxsanSpApi.getUnclaimedDetails(new GetUnclaimedRequest(SpareNostatus.FORMAL_DEPT_ID, SpareNostatus.FUNCTION_DEPT));
for (GetUnclaimedResult unclaimedResult : resultList) {
if (allLiteOrderDBCollect.contains(unclaimedResult.getOrderNo())) {
continue;
......@@ -124,14 +125,17 @@ public class SpUnclaimedController {
LiteOrder liteOrder = new LiteOrder();
liteOrder.setOrderNo(unclaimed.getOrderNo());
liteOrder.setCreateDate(unclaimed.getCreateDate());
liteOrder.setSource(unclaimed.getFunctionDept());
List<LiteOrderItem> liteOrderItems = new ArrayList<>();
for (UnclaimedDetail unclaimedDetail : unclaimed.getDetailList()) {
LiteOrderItem liteOrderItem = new LiteOrderItem();
liteOrderItem.setLine("s1");
liteOrderItem.setPn(unclaimedDetail.getPartno());
liteOrderItem.setNeedNum(unclaimedDetail.getApplyQty());
liteOrderItem.setPartname(unclaimedDetail.getPartname());
liteOrderItems.add(liteOrderItem);
}
log.info("创建出库单:"+liteOrder.getOrderNo());
liteOrder.setOrderItems(liteOrderItems);
liteOrderManager.createWithItems(liteOrder);
resultLiteOrder.add(unclaimed);
......@@ -142,6 +146,31 @@ public class SpUnclaimedController {
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("选中出库单")
@RequestMapping("/checkOrderNo")
......
......@@ -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.result.SpareInHourseDetail;
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.ISpareNoManager;
import com.neotel.smfcore.custom.luxsan_sp.service.manager.ISpBoxPutInManager;
......@@ -175,27 +176,8 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
if (spareNoDetail == null) {
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);
......@@ -203,6 +185,7 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
// 开始放入料箱
gekouBarcode.setPartNumber(codeBarcode.getPartNumber());
gekouBarcode.setAmount(gekouBarcode.getAmount() + codeBarcode.getQty());
gekouBarcode.updateExtraData("needInNum", "0");
boxBarcode.updateSubCodes(gekouBarcode);
boxBarcode.setStatus(BARCODE_STATUS.OUT_NORMAL);
......@@ -249,33 +232,66 @@ public class SpBoxPutInManagerImpl implements ISpBoxPutInManager {
returnNoManager.save(returnInventoryNo);
}
}
// 最后刷新不能回滚的
if (finish && isOrderPutIn) {
try {
// 调用入库接口
if (baseNo.getClass().equals(SpareNo.class)) {
dataLog.setSourceId(baseNo.getId());
dataLog.setSourceName(spareNo.getSpareNo());
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;
if(isOrderPutIn){
List<SpareNoDetail> detailList = baseNo.getDetailList();
SpareNoDetail spareNoDetail = null;
for (SpareNoDetail detail : detailList) {
//如果相同的话,判断数量是否大于需求数量
if (detail.getPartno().equals(codeBarcode.getPartNumber())) {
spareNoDetail = detail;
break;
}
}
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());
spareInHourseDetail.setLocationCode(location);
spareInHourseDetail.setLocationCode(location);
// 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;
public class CodeUtil {
public static String getReelCodeStr(String pn,int qty){
return pn+"&&"+qty;
}
public static CodeBarcode getCodeBarcode(String codeStr){
if (!(codeStr.contains(" ") || codeStr.contains("&&"))){
......
......@@ -83,6 +83,7 @@ public class OrderNoCache {
UnclaimedDetail unclaimedDetail = new UnclaimedDetail();
unclaimedDetail.setApplyQty(detail.getApplyQty());
unclaimedDetail.setAlrInQty(0);
unclaimedDetail.setPartname(detail.getPartname());
BeanUtils.copyProperties(detail, unclaimedDetail);
detailList.add(unclaimedDetail);
}
......
......@@ -106,15 +106,6 @@ public class SpBoxUtil {
return detail;
}
}).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;
}
......@@ -146,6 +137,7 @@ public class SpBoxUtil {
activeDetail = spareNoDetails.get(0);
}
}
//待领取
if (ObjectUtil.isNull(activeDetail)) {
par.add(0);
}else {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!