Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 526bc5c3
由
LN
编写于
2022-05-24 15:12:32 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
齐套缺料改为:分开计算每个工单缺少多少盘, 然后最后把总盘数加起来
1 个父辈
fda73de1
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
156 行增加
和
28 行删除
src/main/java/com/neotel/smfcore/core/order/OrderPnCache.java
src/main/java/com/neotel/smfcore/core/order/OrderPnCache.java
查看文件 @
526bc5c
...
...
@@ -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!
Cancel
请
注册
或
登录
后发表评论