Commit 526bc5c3 LN

齐套缺料改为:分开计算每个工单缺少多少盘, 然后最后把总盘数加起来

1 个父辈 fda73de1
......@@ -15,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
......@@ -97,11 +98,13 @@ public class OrderPnCache {
}
log.info("开始更新齐套数据----------");
//需要每个工单单独计算缺料数,最后把总盘数加起来
List<LiteOrder> liteOrders = liteOrderManager.findUnEndOrdersList();
orderPnInfoMap = new HashMap<>();
Map<String, Integer> needPnMap = new HashMap<>();
//先查找订单需求的所有PN
List<String> pnList = new ArrayList<>();
for (LiteOrder order :
liteOrders) {
if (order.isClosed()) {
......@@ -115,13 +118,7 @@ public class OrderPnCache {
String pn = item.getMaterialNo();
int needNum = item.getQty() - item.getOutNum();
if (needNum > 0) {
Integer recordNum = needPnMap.get(pn);
if (recordNum == null) {
recordNum = needNum;
} else {
recordNum += needNum;
}
needPnMap.put(pn, recordNum);
pnList.add(pn);
}
}
}
......@@ -129,11 +126,10 @@ public class OrderPnCache {
//查询总库存
Map<String, InventoryItem> inventoryItemMap = dataCache.getAllInventory(null, "");
List<String> pnList = new ArrayList<>(needPnMap.keySet());
for (String pn : pnList
) {
Integer needNum = needPnMap.get(pn);
//先取库存数,判断是否缺料
InventoryItem inventoryItem = inventoryItemMap.get(pn);
if (inventoryItem == null) {
......@@ -141,29 +137,59 @@ public class OrderPnCache {
inventoryItem.setPartNumber(pn);
}
int stockCount = inventoryItem.getStockCount() - inventoryItem.getLockCount();
int lackNum = needNum - stockCount;
if (lackNum <= 0) {
continue;
}
Component component = componentManager.findOneByPN(pn);
int reelAmount = 1000;//每盘料数量
if (component != null) {
reelAmount = component.getAmount();
if (reelAmount == 0) {
reelAmount = 1000;
int leftNum=stockCount;
int allNeedNum=0;
int allLackNum=0;
int allNeedReel=0;
int reelAmount=0;
for (LiteOrder order :
liteOrders) {
if (order.isClosed()) {
continue;
}
}
for (LiteOrderItem item :
order.getOrderItems()) {
if (item.isOutFinished()) {
continue;
}
if(item.getMaterialNo().equals(pn)){
int orderNeedNum = item.getQty() - item.getOutNum();
allNeedNum+=orderNeedNum;
if(leftNum>=orderNeedNum){
leftNum=leftNum-orderNeedNum;
}else{
if(reelAmount<=0){
reelAmount=getPnReelCount(pn);
}
int needReel = 1;
if (lackNum % reelAmount == 0) {
needReel = lackNum / reelAmount;
} else {
needReel = Math.floorDiv(lackNum, reelAmount) + 1;
//判断是否还可以出一半
int orderLackNum=orderNeedNum;
if(leftNum>0){
orderLackNum=orderNeedNum- leftNum;
leftNum=0;
}
int orderNeedReel=1;
if (orderLackNum % reelAmount == 0) {
orderNeedReel = orderLackNum / reelAmount;
} else {
orderNeedReel = Math.floorDiv(orderLackNum, reelAmount) + 1;
}
allLackNum+=orderLackNum;
allNeedReel+=orderNeedReel;
}
}
}
}
OrderPnInfo pnInfo = new OrderPnInfo(pn, needNum, lackNum, stockCount, reelAmount, needReel, new Date());
orderPnInfoMap.put(pn, pnInfo);
if(allNeedReel>0){
OrderPnInfo pnInfo = new OrderPnInfo(pn, allNeedNum, allLackNum, stockCount, reelAmount, allNeedReel, new Date());
orderPnInfoMap.put(pn, pnInfo);
}
}
log.info("结束更新齐套数据,共有[" + orderPnInfoMap.size() + "]元器件缺料----------");
......@@ -171,6 +197,108 @@ public class OrderPnCache {
return true;
}
/**
* 获取指定元器件每盘的数量
* @param pn
* @return
*/
private int getPnReelCount(String pn){
Component component = componentManager.findOneByPN(pn);
int reelAmount = 1000;//每盘料数量
if (component != null) {
reelAmount = component.getAmount();
if (reelAmount == 0) {
reelAmount = 1000;
}
}
return reelAmount;
}
//
// public synchronized boolean reloadData() {
// //如果十分钟内才更新过,就不需要再更新了
// if(orderPnInfoMap!=null&&orderPnInfoMap.size()>0){
// long timeSpans=System.currentTimeMillis()-lastUpdateDate.getTime();
// int m=(int)(timeSpans/1000/60);
// if(m<5){
// return false;
// }
// }
//
// log.info("开始更新齐套数据----------");
// //需要每个工单单独计算缺料数,最后把总盘数加起来
// List<LiteOrder> liteOrders = liteOrderManager.findUnEndOrdersList();
//
// orderPnInfoMap = new HashMap<>();
//
// Map<String, Integer> needPnMap = new HashMap<>();
// for (LiteOrder order :
// liteOrders) {
// if (order.isClosed()) {
// continue;
// }
// for (LiteOrderItem item :
// order.getOrderItems()) {
// if (item.isOutFinished()) {
// continue;
// }
// String pn = item.getMaterialNo();
// int needNum = item.getQty() - item.getOutNum();
// if (needNum > 0) {
// Integer recordNum = needPnMap.get(pn);
// if (recordNum == null) {
// recordNum = needNum;
// } else {
// recordNum += needNum;
// }
// needPnMap.put(pn, recordNum);
// }
// }
// }
//
//
// //查询总库存
// Map<String, InventoryItem> inventoryItemMap = dataCache.getAllInventory(null, "");
// List<String> pnList = new ArrayList<>(needPnMap.keySet());
//
// for (String pn : pnList
// ) {
// Integer needNum = needPnMap.get(pn);
// //先取库存数,判断是否缺料
// InventoryItem inventoryItem = inventoryItemMap.get(pn);
// if (inventoryItem == null) {
// inventoryItem = new InventoryItem();
// inventoryItem.setPartNumber(pn);
// }
// int stockCount = inventoryItem.getStockCount() - inventoryItem.getLockCount();
// int lackNum = needNum - stockCount;
// if (lackNum <= 0) {
// continue;
// }
//
// Component component = componentManager.findOneByPN(pn);
// int reelAmount = 1000;//每盘料数量
// if (component != null) {
// reelAmount = component.getAmount();
// if (reelAmount == 0) {
// reelAmount = 1000;
// }
// }
//
// int needReel = 1;
// if (lackNum % reelAmount == 0) {
// needReel = lackNum / reelAmount;
// } else {
// needReel = Math.floorDiv(lackNum, reelAmount) + 1;
// }
//
// OrderPnInfo pnInfo = new OrderPnInfo(pn, needNum, lackNum, stockCount, reelAmount, needReel, new Date());
// orderPnInfoMap.put(pn, pnInfo);
// }
//
// log.info("结束更新齐套数据,共有[" + orderPnInfoMap.size() + "]元器件缺料----------");
// lastUpdateDate = new Date();
// return true;
// }
}
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!