Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit ad6cd77e
由
sunke
编写于
2022-07-15 15:04:49 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
产线补料和补料料盘出库功能
1 个父辈
dd9699b8
隐藏空白字符变更
内嵌
并排
正在显示
14 个修改的文件
包含
677 行增加
和
268 行删除
pom.xml
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
src/main/java/com/neotel/smfcore/common/utils/QueryHelp.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLPShelfHandler.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
src/main/java/com/neotel/smfcore/core/order/rest/RepleOrderController.java
src/main/java/com/neotel/smfcore/core/order/rest/bean/query/OrderQueryCondition.java
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
src/main/java/com/neotel/smfcore/core/outList/util/OutListCache.java
src/main/java/com/neotel/smfcore/core/system/rest/TaskController.java
src/main/java/com/neotel/smfcore/security/service/manager/IMenuManager.java
src/main/java/com/neotel/smfcore/security/service/manager/impl/MenuManagerImpl.java
src/main/java/com/neotel/smfcore/security/service/po/Menu.java
pom.xml
查看文件 @
ad6cd77
...
...
@@ -230,6 +230,11 @@
<artifactId>
commons-httpclient
</artifactId>
<version>
3.1
</version>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
easyexcel
</artifactId>
<version>
3.1.1
</version>
</dependency>
</dependencies>
...
...
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
查看文件 @
ad6cd77
...
...
@@ -44,6 +44,11 @@ public class DataInitManager {
@Autowired
MainTimer
mainTimer
;
//@Value("${menu.show}")
private
String
[]
menuShowList
=
new
String
[]{
"productionLineReple"
,
"productionLineOut"
};
//@Value("${menu.hide}")
private
String
[]
menuHideList
=
new
String
[]{};
@Autowired
PermissionInitUtil
annotationUtil
;
...
...
@@ -74,46 +79,24 @@ public class DataInitManager {
String
userName
=
Constants
.
SUPER_USERNAME
;
User
admin
=
userManager
.
findByUserName
(
userName
);
if
(
admin
==
null
)
{
log
.
info
(
"开始创建默认菜单..."
);
Set
<
String
>
menuIdSet
=
MenuInitNew
();
log
.
info
(
"开始创建默认用户..."
);
Set
<
String
>
groupIds
=
new
HashSet
<>();
Role
role
=
new
Role
(
menuIdSet
,
Constants
.
ROLE_ADMIN
,
"管理员"
);
Role
role
=
new
Role
(
new
HashSet
<>(),
"admin"
,
"admin"
);
role
=
roleManager
.
save
(
role
);
log
.
info
(
"创建默认角色:"
+
role
.
toString
());
Role
operator
=
new
Role
(
menuIdSet
,
Constants
.
ROLE_OPERATOR
,
"操作员
"
);
Role
operator
=
new
Role
(
new
HashSet
<>(),
"operator"
,
"operator
"
);
operator
=
roleManager
.
save
(
operator
);
log
.
info
(
"创建默认角色:"
+
operator
.
toString
());
admin
=
new
User
(
userName
,
"admin@qq.com"
,
"zh-CN"
,
role
.
getId
(),
"$2a$10$Egp1/gvFlt7zhlXVfEFw4OfWQCGPw0ClmMcc6FjTnvXNRVf9zdMRa"
,
true
,
true
,
new
Date
(),
groupIds
,
""
,
""
);
userManager
.
save
(
admin
);
admin
=
new
User
(
userName
,
"admin@qq.com"
,
"zh-CN"
,
role
.
getId
(),
"$2a$10$Egp1/gvFlt7zhlXVfEFw4OfWQCGPw0ClmMcc6FjTnvXNRVf9zdMRa"
,
true
,
true
,
new
Date
(),
groupIds
,
""
,
""
);
admin
=
userManager
.
save
(
admin
);
log
.
info
(
"创建默认用户:"
+
admin
.
toString
());
log
.
info
(
"创建默认菜单完成..."
);
}
else
{
log
.
info
(
"初始化环境完成..."
);
}
List
<
Menu
>
helpMenus
=
menuManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"title"
).
is
(
"帮助"
)));
if
(
helpMenus
==
null
||
helpMenus
.
size
()
<=
0
)
{
Menu
helpAbout
=
Menu
.
CreatePMenu
(
"帮助"
,
30
,
"help"
,
2
,
"help"
);
Menu
instruMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"instruction"
,
"说明书"
,
1
,
"instruction"
,
"system/instruction/index"
,
""
,
0
,
"aboutBook"
);
Menu
aboutMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"about"
,
"关于"
,
1
,
"about"
,
"system/about/index"
,
""
,
0
,
"message"
);
createMenus
(
helpAbout
,
instruMenu
,
aboutMenu
);
}
List
<
Menu
>
menus
=
menuManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"path"
).
ne
(
""
)));
for
(
Menu
me
:
menus
)
{
if
(
me
.
getTitleKey
()
==
null
||
me
.
getTitleKey
()
==
""
)
{
me
.
setTitleKey
(
me
.
getPath
());
menuManager
.
saveMenu
(
me
);
}
}
updateMenu
(
menuShowList
,
menuHideList
);
mainTimer
.
init
();
...
...
@@ -130,162 +113,89 @@ public class DataInitManager {
Message
message
=
Message
.
newMsg
(
MessageType
.
INFO
,
"server"
,
""
,
""
,
"smfcore.messages.serverStart"
,
"服务器启动"
,
null
);
messageManager
.
save
(
message
);
}
catch
(
Exception
exception
)
{
log
.
error
(
"初始化环境出错..."
+
exception
.
toString
()
);
log
.
error
(
"初始化环境出错..."
,
exception
);
}
}
private
int
sortValue
=
0
;
private
List
<
Menu
>
createMenus
(
Menu
pMenu
,
Menu
...
subMenus
)
{
List
<
Menu
>
list
=
new
ArrayList
<
Menu
>();
try
{
sortValue
++;
pMenu
.
setSubCount
(
subMenus
.
length
);
pMenu
.
setMenuSort
(
sortValue
*
10
);
if
(
pMenu
.
getPath
().
isEmpty
())
{
pMenu
.
setPath
(
"sys-"
+
sortValue
*
10
);
}
pMenu
=
menuManager
.
saveMenu
(
pMenu
);
list
.
add
(
pMenu
);
// list.addAll(createSubPerMenus(pMenu));
if
(
subMenus
.
length
>
0
)
{
int
i
=
0
;
for
(
Menu
subm
:
subMenus
)
{
List
<
Menu
>
childMenus
=
new
ArrayList
<>();
if
(
subm
.
getChildren
()
!=
null
)
{
childMenus
=
new
ArrayList
<>(
subm
.
getChildren
());
}
i
++;
int
subSort
=
sortValue
*
10
+
i
;
subm
.
setMenuSort
(
subSort
);
subm
.
setSubCount
(
childMenus
.
size
());
subm
.
setPid
(
pMenu
.
getId
());
subm
.
setChildren
(
new
ArrayList
<>());
subm
=
menuManager
.
saveMenu
(
subm
);
list
.
add
(
subm
);
// list.addAll(createSubPerMenus(subm));
for
(
Menu
childMenu
:
childMenus
)
{
i
++;
subSort
=
sortValue
*
10
+
i
;
childMenu
.
setMenuSort
(
subSort
);
childMenu
.
setSubCount
(
0
);
childMenu
.
setPid
(
subm
.
getId
());
childMenu
.
setChildren
(
new
ArrayList
<>());
childMenu
=
menuManager
.
saveMenu
(
childMenu
);
list
.
add
(
childMenu
);
}
}
}
}
catch
(
Exception
ex
)
{
log
.
error
(
"创建菜单【"
+
pMenu
.
getTitle
()
+
"】及其子菜单时出错:"
+
ex
.
toString
());
}
return
list
;
private
void
addNewFunctionMenu
(
Menu
parentMenu
,
final
List
<
Menu
>
children
,
final
Integer
type
,
final
String
permission
,
final
String
title
,
final
Integer
menuSort
,
final
String
path
,
final
String
component
,
final
String
pid
,
final
Integer
subCount
,
final
String
icon
,
Map
<
String
,
Menu
>
functionMenuMap
){
Menu
menu
=
new
Menu
(
children
,
type
,
permission
,
title
,
menuSort
,
path
,
component
,
pid
,
subCount
,
icon
);
menu
.
setParentMenu
(
parentMenu
);
functionMenuMap
.
put
(
menu
.
getPath
(),
menu
);
}
private
Set
<
String
>
MenuInitNew
()
{
private
Map
<
String
,
Menu
>
getAllMenuMap
()
{
List
<
Menu
>
menus
=
new
ArrayList
<
Menu
>();
// //设备看板
// Menu menukanban = new Menu(new ArrayList<Menu>(), 1, "boxkanban", "设备看板", 1, "lockMaterial", "lockMaterial/material/index", "", 0, "kanban");
// menus.addAll(createMenus(menukanban));
Map
<
String
,
Menu
>
functionMenuMap
=
new
HashMap
<>();
//物料管理:工单出库,查找出库(UID出库,PN出库),物料标签,料盒操作,出库策略,工单设置
Menu
poutOut
=
Menu
.
CreatePMenu
(
"物料管理"
,
20
,
"order"
,
2
,
"workOrder"
);
// Menu menuOrder = new Menu(new ArrayList<Menu>(), 1, "workOrder", "工单出库", 1, "workOrder", "neolight/workOrder/index", "", 0, "orderOut");
// Menu menuOrder = new Menu(new ArrayList<Menu>(), 1, "billworkOrder", "工单", 1, "billworkOrder", "neolight/billworkOrder/index", "", 0, "orderOut");
Menu
out
=
Menu
.
CreatePMenu
(
"查找出库"
,
20
,
"searchOut"
,
2
,
"findOut"
);
Menu
menuOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"checkOut"
,
"UID出库"
,
1
,
"singleOuput"
,
"neolight/singleOuput/index"
,
""
,
0
,
"export1"
);
Menu
celueOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"tacticsOuput"
,
"PN出库"
,
1
,
"tacticsOuput"
,
"neolight/tacticsOuput/index"
,
""
,
0
,
"tacticsOuput"
);
Menu
mslOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"mslOut"
,
"湿敏管理"
,
1
,
"mslOut"
,
"neolight/mslOut/index"
,
""
,
0
,
"tacticsOuput"
);
celueOut
.
setHidden
(
true
);
out
.
setChildren
(
Arrays
.
asList
((
new
Menu
[]{
menuOut
,
celueOut
,
mslOut
})));
// Menu reelOut = new Menu(new ArrayList<Menu>(), 1, "reelOut", "料盘出库", 1, "reelOut", "system/reelOut/index", "", 0, "swagger");
Menu
posOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"posOutput"
,
"库位出库"
,
1
,
"posOutput"
,
"system/posOutput/index"
,
""
,
0
,
"swagger"
);
Menu
groupOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"labelOuput"
,
"物料标签"
,
1
,
"labelOuput"
,
"neolight/labelOuput/index"
,
""
,
0
,
"mgroup"
);
Menu
materialBox
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"materialBox"
,
"料盒操作"
,
1
,
"materialBox"
,
"neolight/materialBox/index"
,
""
,
0
,
"mIbox"
);
Menu
outSet
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"outSetting"
,
"出库策略"
,
1
,
"outSetting"
,
"system/outSetting/index"
,
""
,
0
,
"outSet"
);
Menu
inOrderMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"inList"
,
"入库单"
,
1
,
"inList"
,
"system/inList/index"
,
""
,
0
,
"headIcon"
);
Menu
zhuanruMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"dumpWarehousing"
,
"转储入库"
,
1
,
"dumpWarehousing"
,
"system/dumpWarehousing/index"
,
""
,
0
,
"dumpWarehousing"
);
Menu
singleMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"singleDiskWarehousing"
,
"单盘入库"
,
1
,
"singleDiskWarehousing"
,
"system/singleDiskWarehousing/index"
,
""
,
0
,
"singleDiskWarehousing"
);
Menu
sluggishMaterials
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"sluggishMaterials"
,
"呆滞物料"
,
1
,
"sluggishMaterials"
,
"system/sluggishMaterials/index"
,
""
,
0
,
"sMaterial"
);
Menu
safetyInventory
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"safetyInventory"
,
"安全库存"
,
1
,
"safetyInventory"
,
"system/safetyInventory/index"
,
""
,
0
,
"safeInventory"
);
Menu
outListMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"outList"
,
"转储出库"
,
1
,
"outList"
,
"system/outList/index"
,
""
,
0
,
"outList"
);
Menu
orderSetMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"orderSet"
,
"齐套"
,
1
,
"orderSet"
,
"system/orderSet/index"
,
""
,
0
,
"outS"
);
groupOut
.
setHidden
(
true
);
materialBox
.
setHidden
(
true
);
outSet
.
setHidden
(
true
);
posOut
.
setHidden
(
true
);
// menus.addAll(createMenus(poutOut, menuOrder, out,reelOut,posOut,groupOut,materialBox,outSet,inOrderMenu,zhuanruMenu,singleMenu,sluggishMaterials,safetyInventory,outListMenu,orderSetMenu));
menus
.
addAll
(
createMenus
(
poutOut
,
out
,
posOut
,
groupOut
,
materialBox
,
outSet
,
inOrderMenu
,
zhuanruMenu
,
singleMenu
,
sluggishMaterials
,
safetyInventory
,
outListMenu
,
orderSetMenu
));
Menu
orderM
=
Menu
.
CreatePMenu
(
"工单管理"
,
20
,
"orderManager"
,
2
,
"orderManager"
);
Menu
menuOrder
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"billworkOrder"
,
"工单"
,
1
,
"billworkOrder"
,
"neolight/billworkOrder/index"
,
""
,
0
,
"orderOut"
);
Menu
reelOut
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"reelOut"
,
"工单料盘出库"
,
1
,
"reelOut"
,
"system/reelOut/index"
,
""
,
0
,
"swagger"
);
Menu
orderSheetMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"orderSheet"
,
"工单合单"
,
1
,
"orderSheet"
,
"system/orderSheet/index"
,
""
,
0
,
"orderSheet"
);
Menu
orderShortageOutMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"orderShortageOut"
,
"工单欠料发料"
,
1
,
"orderShortageOut"
,
"system/orderShortageOut/index"
,
""
,
0
,
"orderShortageOut"
);
Menu
orderShortageSheetMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"orderShortageSheet"
,
"合单欠料"
,
1
,
"orderShortageSheet"
,
"system/orderShortageSheet/index"
,
""
,
0
,
"orderShortageSheet"
);
// orderSheetMenu.setHidden(true);
// orderShortageOutMenu.setHidden(true);
// orderShortageSheetMenu.setHidden(true);
menus
.
addAll
(
createMenus
(
orderM
,
menuOrder
,
reelOut
,
orderSheetMenu
,
orderShortageOutMenu
,
orderShortageSheetMenu
));
Menu
poutOut
=
Menu
.
CreatePMenu
(
"物料管理"
,
20
,
"order"
,
2
,
"workOrder"
,
null
);
Menu
out
=
Menu
.
CreatePMenu
(
"查找出库"
,
20
,
"searchOut"
,
2
,
"findOut"
,
poutOut
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"checkOut"
,
"UID出库"
,
1
,
"singleOuput"
,
"neolight/singleOuput/index"
,
""
,
0
,
"export1"
,
functionMenuMap
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"tacticsOuput"
,
"PN出库"
,
1
,
"tacticsOuput"
,
"neolight/tacticsOuput/index"
,
""
,
0
,
"tacticsOuput"
,
functionMenuMap
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"mslOut"
,
"湿敏管理"
,
1
,
"mslOut"
,
"neolight/mslOut/index"
,
""
,
0
,
"tacticsOuput"
,
functionMenuMap
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"posOutput"
,
"库位出库"
,
1
,
"posOutput"
,
"system/posOutput/index"
,
""
,
0
,
"swagger"
,
functionMenuMap
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"labelOuput"
,
"物料标签"
,
1
,
"labelOuput"
,
"neolight/labelOuput/index"
,
""
,
0
,
"mgroup"
,
functionMenuMap
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"materialBox"
,
"料盒操作"
,
1
,
"materialBox"
,
"neolight/materialBox/index"
,
""
,
0
,
"mIbox"
,
functionMenuMap
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"outSetting"
,
"出库策略"
,
1
,
"outSetting"
,
"system/outSetting/index"
,
""
,
0
,
"outSet"
,
functionMenuMap
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"inList"
,
"入库单"
,
1
,
"inList"
,
"system/inList/index"
,
""
,
0
,
"headIcon"
,
functionMenuMap
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"dumpWarehousing"
,
"转储入库"
,
1
,
"dumpWarehousing"
,
"system/dumpWarehousing/index"
,
""
,
0
,
"dumpWarehousing"
,
functionMenuMap
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"singleDiskWarehousing"
,
"单盘入库"
,
1
,
"singleDiskWarehousing"
,
"system/singleDiskWarehousing/index"
,
""
,
0
,
"singleDiskWarehousing"
,
functionMenuMap
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"sluggishMaterials"
,
"呆滞物料"
,
1
,
"sluggishMaterials"
,
"system/sluggishMaterials/index"
,
""
,
0
,
"sMaterial"
,
functionMenuMap
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"safetyInventory"
,
"安全库存"
,
1
,
"safetyInventory"
,
"system/safetyInventory/index"
,
""
,
0
,
"safeInventory"
,
functionMenuMap
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"outList"
,
"转储出库"
,
1
,
"outList"
,
"system/outList/index"
,
""
,
0
,
"outList"
,
functionMenuMap
);
addNewFunctionMenu
(
out
,
new
ArrayList
<
Menu
>(),
1
,
"orderSet"
,
"齐套"
,
1
,
"orderSet"
,
"system/orderSet/index"
,
""
,
0
,
"outS"
,
functionMenuMap
);
Menu
orderM
=
Menu
.
CreatePMenu
(
"工单管理"
,
20
,
"orderManager"
,
2
,
"orderManager"
,
null
);
addNewFunctionMenu
(
orderM
,
new
ArrayList
<
Menu
>(),
1
,
"billworkOrder"
,
"工单"
,
1
,
"billworkOrder"
,
"neolight/billworkOrder/index"
,
""
,
0
,
"orderOut"
,
functionMenuMap
);
addNewFunctionMenu
(
orderM
,
new
ArrayList
<
Menu
>(),
1
,
"reelOut"
,
"工单料盘出库"
,
1
,
"reelOut"
,
"system/reelOut/index"
,
""
,
0
,
"swagger"
,
functionMenuMap
);
addNewFunctionMenu
(
orderM
,
new
ArrayList
<
Menu
>(),
1
,
"orderSheet"
,
"工单合单"
,
1
,
"orderSheet"
,
"system/orderSheet/index"
,
""
,
0
,
"orderSheet"
,
functionMenuMap
);
addNewFunctionMenu
(
orderM
,
new
ArrayList
<
Menu
>(),
1
,
"orderShortageOut"
,
"工单欠料发料"
,
1
,
"orderShortageOut"
,
"system/orderShortageOut/index"
,
""
,
0
,
"orderShortageOut"
,
functionMenuMap
);
addNewFunctionMenu
(
orderM
,
new
ArrayList
<
Menu
>(),
1
,
"orderShortageSheet"
,
"合单欠料"
,
1
,
"orderShortageSheet"
,
"system/orderShortageSheet/index"
,
""
,
0
,
"orderShortageSheet"
,
functionMenuMap
);
//产线补料 :productionLineReple 产线补料出库:productionLineOut
addNewFunctionMenu
(
orderM
,
new
ArrayList
<
Menu
>(),
1
,
"productionLineReple"
,
"产线补料"
,
1
,
"productionLineReple"
,
"system/productionLineReple/index"
,
""
,
0
,
"orderShortageSheet"
,
functionMenuMap
);
addNewFunctionMenu
(
orderM
,
new
ArrayList
<
Menu
>(),
1
,
"productionLineOut"
,
"补料料盘出库"
,
1
,
"productionLineOut"
,
"system/productionLineOut/index"
,
""
,
0
,
"orderShortageSheet"
,
functionMenuMap
);
//MSD管理:MSD库存.MSD追溯性.MSD设置
Menu
msd
=
Menu
.
CreatePMenu
(
"MSD管理"
,
20
,
"msd"
,
2
,
"MSD"
);
Menu
msdManage
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"msdManage"
,
"MSD库存"
,
1
,
"msdManage"
,
"neolight/msdManage/index"
,
""
,
0
,
"MSDManager"
);
Menu
msdData
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"msdData"
,
"MSD追溯性"
,
1
,
"msdData"
,
"neolight/msdData/index"
,
""
,
0
,
"MSDData"
);
Menu
msdSetting
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"msdSetting"
,
"MSD设置"
,
1
,
"msdSetting"
,
"neolight/msdSetting/index"
,
""
,
0
,
"MSDSet"
);
msd
.
setHidden
(
true
);
menus
.
addAll
(
createMenus
(
msd
,
msdManage
,
msdData
,
msdSetting
));
Menu
msd
=
Menu
.
CreatePMenu
(
"MSD管理"
,
20
,
"msd"
,
2
,
"MSD"
,
null
);
addNewFunctionMenu
(
msd
,
new
ArrayList
<
Menu
>(),
1
,
"msdManage"
,
"MSD库存"
,
1
,
"msdManage"
,
"neolight/msdManage/index"
,
""
,
0
,
"MSDManager"
,
functionMenuMap
);
addNewFunctionMenu
(
msd
,
new
ArrayList
<
Menu
>(),
1
,
"msdData"
,
"MSD追溯性"
,
1
,
"msdData"
,
"neolight/msdData/index"
,
""
,
0
,
"MSDData"
,
functionMenuMap
);
addNewFunctionMenu
(
msd
,
new
ArrayList
<
Menu
>(),
1
,
"msdSetting"
,
"MSD设置"
,
1
,
"msdSetting"
,
"neolight/msdSetting/index"
,
""
,
0
,
"MSDSet"
,
functionMenuMap
);
//锡膏管理:设备概览.库存.追溯性.设置
Menu
solderPaste
=
Menu
.
CreatePMenu
(
"锡膏管理"
,
20
,
"solderPaste"
,
2
,
"sMana"
);
Menu
solderPasteKanban
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"solderPasteKanban"
,
"设备概览"
,
1
,
"solderPasteKanban"
,
"neolight/solderPasteKanban/index"
,
""
,
0
,
"sKanban"
);
Menu
solderPasteManage
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"solderPasteManage"
,
"库存"
,
1
,
"solderPasteManage"
,
"neolight/solderPasteManage/index"
,
""
,
0
,
"solder"
);
Menu
solderPasteData
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"solderPasteData"
,
"追溯性"
,
1
,
"solderPasteData"
,
"neolight/solderPasteData/index"
,
""
,
0
,
"sData"
);
Menu
solderPasteSetting
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"solderPasteSetting"
,
"设置"
,
1
,
"solderPasteSetting"
,
"neolight/solderPasteSetting/index"
,
""
,
0
,
"system"
);
solderPaste
.
setHidden
(
true
);
menus
.
addAll
(
createMenus
(
solderPaste
,
solderPasteKanban
,
solderPasteManage
,
solderPasteData
,
solderPasteSetting
));
Menu
solderPaste
=
Menu
.
CreatePMenu
(
"锡膏管理"
,
20
,
"solderPaste"
,
2
,
"sMana"
,
null
);
addNewFunctionMenu
(
solderPaste
,
new
ArrayList
<
Menu
>(),
1
,
"solderPasteKanban"
,
"设备概览"
,
1
,
"solderPasteKanban"
,
"neolight/solderPasteKanban/index"
,
""
,
0
,
"sKanban"
,
functionMenuMap
);
addNewFunctionMenu
(
solderPaste
,
new
ArrayList
<
Menu
>(),
1
,
"solderPasteManage"
,
"库存"
,
1
,
"solderPasteManage"
,
"neolight/solderPasteManage/index"
,
""
,
0
,
"solder"
,
functionMenuMap
);
addNewFunctionMenu
(
solderPaste
,
new
ArrayList
<
Menu
>(),
1
,
"solderPasteData"
,
"追溯性"
,
1
,
"solderPasteData"
,
"neolight/solderPasteData/index"
,
""
,
0
,
"sData"
,
functionMenuMap
);
addNewFunctionMenu
(
solderPaste
,
new
ArrayList
<
Menu
>(),
1
,
"solderPasteSetting"
,
"设置"
,
1
,
"solderPasteSetting"
,
"neolight/solderPasteSetting/index"
,
""
,
0
,
"system"
,
functionMenuMap
);
//物料管理:元器件,条形码,条码设置
Menu
pMenuWl
=
Menu
.
CreatePMenu
(
"档案管理"
,
30
,
"materiel "
,
2
,
"BOM"
);
Menu
menucom
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"component:list"
,
"元器件"
,
1
,
"componentParts"
,
"parts/component/index"
,
""
,
0
,
"server"
);
Menu
pMenuWl
=
Menu
.
CreatePMenu
(
"档案管理"
,
30
,
"materiel "
,
2
,
"BOM"
,
null
);
addNewFunctionMenu
(
pMenuWl
,
new
ArrayList
<
Menu
>(),
1
,
"component:list"
,
"元器件"
,
1
,
"componentParts"
,
"parts/component/index"
,
""
,
0
,
"server"
,
functionMenuMap
);
// Menu menubarcode = new Menu(new ArrayList<Menu>(), 1, "barcode:list", "条形码", 1, "barcode", "barcode/barcode/index", "", 0, "chart");
// Menu sysSetting = new Menu(new ArrayList<Menu>(), 1, "barcode", "条码设置", 1, "barcodeSetting", "system/barcodeSetting/index", "", 0, "barcode");
// menus.addAll(createMenus(pMenuWl, menucom, menubarcode,sysSetting));
menus
.
addAll
(
createMenus
(
pMenuWl
,
menucom
));
Menu
pMenuBarcode
=
Menu
.
CreatePMenu
(
"条形码"
,
30
,
"barcodes "
,
2
,
"barcodeMenu"
);
Menu
menubarcode
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"barcode:list"
,
"条码管理"
,
1
,
"barcode"
,
"barcode/barcode/index"
,
""
,
0
,
"chart"
);
Menu
sysSetting
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"barcode"
,
"条码设置"
,
1
,
"barcodeSetting"
,
"system/barcodeSetting/index"
,
""
,
0
,
"barcode"
);
menus
.
addAll
(
createMenus
(
pMenuBarcode
,
menubarcode
,
sysSetting
));
Menu
pMenuBarcode
=
Menu
.
CreatePMenu
(
"条形码"
,
30
,
"barcodes "
,
2
,
"barcodeMenu"
,
null
);
addNewFunctionMenu
(
pMenuBarcode
,
new
ArrayList
<
Menu
>(),
1
,
"barcode:list"
,
"条码管理"
,
1
,
"barcode"
,
"barcode/barcode/index"
,
""
,
0
,
"chart"
,
functionMenuMap
);
addNewFunctionMenu
(
pMenuBarcode
,
new
ArrayList
<
Menu
>(),
1
,
"barcode"
,
"条码设置"
,
1
,
"barcodeSetting"
,
"system/barcodeSetting/index"
,
""
,
0
,
"barcode"
,
functionMenuMap
);
//日志管理:物料日志
Menu
pMenuLog
=
Menu
.
CreatePMenu
(
"日志管理"
,
30
,
"log"
,
2
,
"log"
);
Menu
menuLog
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"taskLog"
,
"物料日志"
,
1
,
"taskLog"
,
"neolight/taskLog/index"
,
""
,
0
,
"education"
);
Menu
msgLog
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"message"
,
"消息查询"
,
1
,
"message"
,
"neolight/message/index"
,
""
,
0
,
"messagefind"
);
Menu
exceptionLog
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"interfaceException"
,
"接口异常"
,
1
,
"interfaceException"
,
"neolight/interfaceException/index"
,
""
,
0
,
"interfaceException"
);
exceptionLog
.
setHidden
(
true
);
menus
.
addAll
(
createMenus
(
pMenuLog
,
menuLog
,
msgLog
,
exceptionLog
));
Menu
pMenuLog
=
Menu
.
CreatePMenu
(
"日志管理"
,
30
,
"log"
,
2
,
"log"
,
null
);
addNewFunctionMenu
(
pMenuLog
,
new
ArrayList
<
Menu
>(),
1
,
"taskLog"
,
"物料日志"
,
1
,
"taskLog"
,
"neolight/taskLog/index"
,
""
,
0
,
"education"
,
functionMenuMap
);
addNewFunctionMenu
(
pMenuLog
,
new
ArrayList
<
Menu
>(),
1
,
"message"
,
"消息查询"
,
1
,
"message"
,
"neolight/message/index"
,
""
,
0
,
"messagefind"
,
functionMenuMap
);
addNewFunctionMenu
(
pMenuLog
,
new
ArrayList
<
Menu
>(),
1
,
"interfaceException"
,
"接口异常"
,
1
,
"interfaceException"
,
"neolight/interfaceException/index"
,
""
,
0
,
"interfaceException"
,
functionMenuMap
);
// //报表:出入库、库存
// Menu pMenuReport = Menu.CreatePMenu("报表", 30, "report", 2, "inOutData");
...
...
@@ -294,10 +204,9 @@ public class DataInitManager {
// menus.addAll(createMenus(pMenuReport, inOutMenu,inventoryMenu));
//可观测性:物料追踪
Menu
guanceMenu
=
Menu
.
CreatePMenu
(
"可观测性"
,
30
,
"observability"
,
2
,
"scanKey"
);
Menu
zuizongMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"materialChart"
,
"物料追踪"
,
1
,
"materialChart"
,
"neolight/materialChart/index"
,
""
,
0
,
"maChart"
);
guanceMenu
.
setHidden
(
true
);
menus
.
addAll
(
createMenus
(
guanceMenu
,
zuizongMenu
));
Menu
guanceMenu
=
Menu
.
CreatePMenu
(
"可观测性"
,
30
,
"observability"
,
2
,
"scanKey"
,
null
);
addNewFunctionMenu
(
guanceMenu
,
new
ArrayList
<
Menu
>(),
1
,
"materialChart"
,
"物料追踪"
,
1
,
"materialChart"
,
"neolight/materialChart/index"
,
""
,
0
,
"maChart"
,
functionMenuMap
);
// //物联网:共享文件夹
// Menu pMenuWulian = Menu.CreatePMenu("物联网", 30, "internet", 2, "interMenu");
...
...
@@ -307,41 +216,137 @@ public class DataInitManager {
//设置:料仓管理,菜单管理
Menu
poutSet
=
Menu
.
CreatePMenu
(
"设置"
,
30
,
"system"
,
2
,
"system"
);
Menu
menuStorage
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"storage:list"
,
"设备管理"
,
1
,
"bunker"
,
"storage/storage/index"
,
""
,
0
,
"database"
);
Menu
menuStoragePos
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"storagePos:list"
,
"库位管理"
,
1
,
"storagePos"
,
"storagePos/storagePos/index"
,
""
,
0
,
"tree-table"
);
Menu
menuMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"menu:list"
,
"菜单管理"
,
1
,
"menu"
,
"system/menu/index"
,
""
,
0
,
"menu"
);
Menu
poutSet
=
Menu
.
CreatePMenu
(
"设置"
,
30
,
"system"
,
2
,
"system"
,
null
);
addNewFunctionMenu
(
poutSet
,
new
ArrayList
<
Menu
>(),
1
,
"storage:list"
,
"设备管理"
,
1
,
"bunker"
,
"storage/storage/index"
,
""
,
0
,
"database"
,
functionMenuMap
);
addNewFunctionMenu
(
poutSet
,
new
ArrayList
<
Menu
>(),
1
,
"storagePos:list"
,
"库位管理"
,
1
,
"storagePos"
,
"storagePos/storagePos/index"
,
""
,
0
,
"tree-table"
,
functionMenuMap
);
addNewFunctionMenu
(
poutSet
,
new
ArrayList
<
Menu
>(),
1
,
"menu:list"
,
"菜单管理"
,
1
,
"menu"
,
"system/menu/index"
,
""
,
0
,
"menu"
,
functionMenuMap
);
// Menu sysSet = new Menu(new ArrayList<Menu>(), 1, "sysSetting", "系统设置", 1, "sysSetting", "system/sysSetting/index", "", 0, "sysSet");
// Menu translationSet = new Menu(new ArrayList<Menu>(), 1, "translation", "资源翻译", 1, "translation", "system/translation/index", "", 0, "translation");
// Menu shelfMenu = new Menu(new ArrayList<Menu>(), 1, "shelfSetting", "料架设置", 1, "shelfSetting", "system/shelfSetting/index", "", 0, "translation");
// outSet.setHidden(true);
// orderSet.setHidden(true);
menuMenu
.
setHidden
(
true
);
// translationSet.setHidden(true);
menus
.
addAll
(
createMenus
(
poutSet
,
menuStorage
,
menuStoragePos
,
menuMenu
));
//用户管理:用户管理,角色管理
Menu
pMenuUser
=
Menu
.
CreatePMenu
(
"用户管理"
,
30
,
"userManager"
,
2
,
"Steve-Jobs"
);
Menu
menuUser
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"user:list"
,
"用户管理"
,
1
,
"peoples"
,
"system/user/index"
,
""
,
0
,
"peoples"
);
Menu
menuRole
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"role:list"
,
"角色管理"
,
1
,
"role"
,
"system/role/index"
,
""
,
0
,
"role"
);
Menu
pMenuUser
=
Menu
.
CreatePMenu
(
"用户管理"
,
30
,
"userManager"
,
2
,
"Steve-Jobs"
,
null
);
addNewFunctionMenu
(
pMenuUser
,
new
ArrayList
<
Menu
>(),
1
,
"user:list"
,
"用户管理"
,
1
,
"peoples"
,
"system/user/index"
,
""
,
0
,
"peoples"
,
functionMenuMap
);
addNewFunctionMenu
(
pMenuUser
,
new
ArrayList
<
Menu
>(),
1
,
"role:list"
,
"角色管理"
,
1
,
"role"
,
"system/role/index"
,
""
,
0
,
"role"
,
functionMenuMap
);
menus
.
addAll
(
createMenus
(
pMenuUser
,
menuUser
,
menuRole
));
Menu
helpAbout
=
Menu
.
CreatePMenu
(
"帮助"
,
30
,
"help"
,
2
,
"help"
);
Menu
instruMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"instruction"
,
"说明书"
,
1
,
"instruction"
,
"system/instruction/index"
,
""
,
0
,
"aboutBook"
);
Menu
aboutMenu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"about"
,
"关于"
,
1
,
"about"
,
"system/about/index"
,
""
,
0
,
"message"
);
instruMenu
.
setHidden
(
true
);
menus
.
addAll
(
createMenus
(
helpAbout
,
instruMenu
,
aboutMenu
));
Menu
helpAbout
=
Menu
.
CreatePMenu
(
"帮助"
,
30
,
"help"
,
2
,
"help"
,
null
);
addNewFunctionMenu
(
helpAbout
,
new
ArrayList
<
Menu
>(),
1
,
"instruction"
,
"说明书"
,
1
,
"instruction"
,
"system/instruction/index"
,
""
,
0
,
"aboutBook"
,
functionMenuMap
);
addNewFunctionMenu
(
helpAbout
,
new
ArrayList
<
Menu
>(),
1
,
"about"
,
"关于"
,
1
,
"about"
,
"system/about/index"
,
""
,
0
,
"message"
,
functionMenuMap
);
Set
<
String
>
menuIdSet
=
new
HashSet
<
String
>()
{};
for
(
Menu
menu
:
menus
)
{
log
.
info
(
"创建默认菜单:"
+
menu
.
toString
());
menuIdSet
.
add
(
menu
.
getId
());
return
functionMenuMap
;
}
private
void
updateMenu
(
String
[]
menuListToShow
,
String
[]
menuListToHide
){
List
<
Menu
>
dbMenus
=
menuManager
.
findAll
();
if
(
dbMenus
.
isEmpty
()){
log
.
info
(
"创建默认菜单..."
);
menuListToShow
=
new
String
[]{
"lockMaterial"
,
//设备看板
"singleOuput"
,
"tacticsOuput"
,
"outSetting"
,
"componentParts"
,
"barcode"
,
"barcodeSetting"
,
"taskLog"
,
//"orderSetting",//工单设置
"inOutData"
,
//报表->出入库
"inventory"
,
//报表->库存
"bunker"
,
//设备管理
"storagePos"
,
//库位管理
//"sysSetting", //系统设置
"peoples"
,
//用户管理
"role"
//角色管理
};
}
Map
<
String
,
Menu
>
allMenus
=
getAllMenuMap
();
Set
<
String
>
showIdSet
=
showMenu
(
allMenus
,
menuListToShow
);
Set
<
String
>
hideIdSet
=
hideMenu
(
allMenus
,
menuListToHide
);
if
(!
showIdSet
.
isEmpty
()
||
!
hideIdSet
.
isEmpty
()){
List
<
Role
>
roles
=
roleManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"name"
).
is
(
"admin"
)));
Role
roleAdmin
=
roles
.
get
(
0
);
Set
<
String
>
roleMenus
=
roleAdmin
.
getMenus
();
roleMenus
.
addAll
(
showIdSet
);
roleMenus
.
removeAll
(
hideIdSet
);
roleManager
.
saveRole
(
roleAdmin
);
}
return
menuIdSet
;
}
/**
* 展示菜单
*/
private
Set
<
String
>
showMenu
(
Map
<
String
,
Menu
>
allMenu
,
String
[]
menuListToShow
){
Set
<
String
>
showIdSet
=
new
HashSet
<>();
for
(
String
showPath
:
menuListToShow
)
{
Menu
showMenu
=
allMenu
.
get
(
showPath
);
if
(
showMenu
!=
null
){
showMenu
=
createMenu
(
showMenu
);
log
.
info
(
"展示菜单:"
+
showMenu
.
getPath
());
addToMenuIdSet
(
showIdSet
,
showMenu
);
}
else
{
log
.
error
(
"展示菜单:"
+
showPath
+
"不存在"
);
}
}
return
showIdSet
;
}
/**
* 循环添加菜单ID(父级菜单也会添加)
*/
private
void
addToMenuIdSet
(
Set
<
String
>
menuIdSet
,
Menu
menu
){
menuIdSet
.
add
(
menu
.
getId
());
if
(
menu
.
getParentMenu
()
!=
null
){
addToMenuIdSet
(
menuIdSet
,
menu
.
getParentMenu
());
}
}
/**
* 隐藏菜单
*/
private
Set
<
String
>
hideMenu
(
Map
<
String
,
Menu
>
allMenu
,
String
[]
menuListToHide
){
Set
<
String
>
hideIdSet
=
new
HashSet
<>();
for
(
String
showPath
:
menuListToHide
)
{
Menu
hideMenu
=
allMenu
.
get
(
showPath
);
if
(
hideMenu
!=
null
){
hideMenu
=
menuManager
.
findByPath
(
hideMenu
.
getPath
());
if
(
hideMenu
!=
null
){
hideMenu
.
setHidden
(
true
);
menuManager
.
saveMenu
(
hideMenu
);
log
.
info
(
"隐藏菜单:"
+
hideMenu
.
getPath
());
addToMenuIdSet
(
hideIdSet
,
hideMenu
);
}
}
else
{
log
.
error
(
"菜单:"
+
showPath
+
"不存在"
);
}
}
return
hideIdSet
;
}
/**
* 循环创建父级菜单
*/
private
Menu
createMenu
(
Menu
menu
){
Menu
dbMenu
=
menuManager
.
findByPath
(
menu
.
getPath
());
if
(
dbMenu
==
null
){
//数据库不存在,需要插入
Menu
parentMenu
=
menu
.
getParentMenu
();
if
(
parentMenu
!=
null
){
parentMenu
=
createMenu
(
parentMenu
);
menu
.
setPid
(
parentMenu
.
getId
());
menu
.
setParentMenu
(
parentMenu
);
}
log
.
info
(
"创建菜单:"
+
menu
.
toString
());
dbMenu
=
menuManager
.
saveMenu
(
menu
);
}
return
dbMenu
;
}
}
src/main/java/com/neotel/smfcore/common/utils/QueryHelp.java
查看文件 @
ad6cd77
...
...
@@ -18,7 +18,8 @@ import java.util.regex.Pattern;
@Slf4j
public
class
QueryHelp
{
public
static
<
C
>
Query
getQuery
(
C
c
){
public
static
<
C
>
List
<
Criteria
>
toCriteria
(
C
c
){
//Criteria criteria = new Criteria();
List
<
Criteria
>
allCriteria
=
Lists
.
newArrayList
();
if
(
c
!=
null
){
...
...
@@ -135,6 +136,10 @@ public class QueryHelp {
log
.
error
(
e
.
getMessage
(),
e
);
}
}
return
allCriteria
;
}
public
static
<
C
>
Query
getQuery
(
C
c
){
List
<
Criteria
>
allCriteria
=
toCriteria
(
c
);
if
(
allCriteria
.
isEmpty
()){
return
new
Query
();
}
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/NLPShelfHandler.java
查看文件 @
ad6cd77
...
...
@@ -261,11 +261,6 @@ public class NLPShelfHandler extends BaseDeviceHandler{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.shelfNotExist"
,
"{0}对应的料架不存在"
,
new
String
[]{
cid
}
);
}
String
groupId
=
storage
.
getGroupId
();
// String groupName = "";
// Group group = groupManager.get(groupId);
// if(group != null){
// groupName = group.getGroupName();
// }
if
(
groupId
.
equals
(
""
)){
groupId
=
"-1"
;
}
...
...
@@ -297,10 +292,9 @@ public class NLPShelfHandler extends BaseDeviceHandler{
// }
//数据库有信息,实际无料
if
(
noReelPosErrorList
.
length
>
0
){
Query
query
=
new
Query
(
Criteria
.
where
(
"posName"
).
in
(
noReelPosErrorList
));
Query
query
=
new
Query
(
Criteria
.
where
(
"posName"
).
in
(
noReelPosErrorList
));
List
<
StoragePos
>
posList
=
storagePosManager
.
findByQuery
(
query
);
for
(
StoragePos
pos:
posList
)
{
for
(
StoragePos
pos:
posList
)
{
if
(!
pos
.
isUsed
()){
ngToOk
.
add
(
pos
.
getPosName
());
log
.
info
(
"sensorChange 客户端上传 noReelPosErrorList 库位["
+
pos
.
getPosName
()+
"]数据库无信息,放入ngToOk"
);
...
...
@@ -319,12 +313,9 @@ public class NLPShelfHandler extends BaseDeviceHandler{
List
<
String
>
outNgList
=
new
ArrayList
<>();
if
(
hasReelPosList
!=
null
){
List
<
String
>
newList
=
new
ArrayList
<>();
for
(
String
posName
:
hasReelPosList
)
{
for
(
String
posName
:
hasReelPosList
)
{
StoragePos
pos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
pos
==
null
)
{
log
.
info
(
"sensorChange 未找到库位 hasReelPosList ["
+
posName
+
"]"
);
continue
;
...
...
@@ -390,11 +381,11 @@ public class NLPShelfHandler extends BaseDeviceHandler{
try
{
//判断是否是入库单入库
if
(
queueTask
.
getInType
()
==
5
)
{
InList
inList
=
inListCache
.
getInList
(
queueTask
.
getSourceName
());
Barcode
barcode
=
barcodeManager
.
findByBarcode
(
queueTask
.
getBarcode
());
InListItem
item
=
inListCache
.
UpdateInList
(
queueTask
.
getSourceName
(),
pos
,
barcode
);
if
(
item
!=
null
)
{
InList
inList
=
inListCache
.
getInList
(
queueTask
.
getSourceName
());
//入库完成,调用 7.2转储单入库过账接口
TransferOrderInInfo
inInfo
=
new
TransferOrderInInfo
(
inList
.
getName
(),
inList
.
getDocType
(),
queueTask
.
getBarcode
(),
item
.
getBaseCode
(),
item
.
getInLgort
(),
queueTask
.
getNum
());
boolean
result
=
HikApi
.
transferOrderInApi
(
queueTask
.
getOperator
(),
inInfo
);
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
ad6cd77
...
...
@@ -454,15 +454,15 @@ public class LiteOrderCache implements ITaskListener {
if
(
isShortageOut
)
{
log
.
info
(
"工单["
+
cacheOrder
.
getOrderNo
()
+
"]缺料出库: 物料号["
+
pn
+
"] ,需求数量["
+
orderItem
.
getWemng
()
+
"], 未找到元器件信息 "
);
shortage
=
true
;
//判断库存 使用最小库存盘数:当前盘数<=最小库存盘数时,需要截料
if
(
component
.
getMinStoreNum
()>
0
&&
reelNum
<=
component
.
getMinStoreNum
()){
needJieliao
=
true
;
}
}
else
{
log
.
info
(
"工单["
+
cacheOrder
.
getOrderNo
()
+
"] 物料号["
+
pn
+
"] ,需求数量["
+
orderItem
.
getWemng
()
+
"], 未找到元器件信息, 缺料 "
);
return
materialShortPro
(
userName
,
cacheOrder
);
}
}
//判断库存 使用最小库存盘数:当前盘数<=最小库存盘数时,需要截料
if
(
component
.
getMinStoreNum
()>
0
&&
reelNum
<=
component
.
getMinStoreNum
()){
needJieliao
=
true
;
}
//判断库存数量是否小于需求数量,小于直接返回缺料
if
(
storageNum
<
orderItem
.
getQty
()){
if
(
isShortageOut
){
...
...
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
查看文件 @
ad6cd77
...
...
@@ -145,6 +145,7 @@ public class OrderController {
query
.
addCriteria
(
Criteria
.
where
(
"status"
).
is
(
LITEORDER_STATUS
.
EXECUTING
));
}
}
query
.
addCriteria
(
Criteria
.
where
(
"replenishmentNo"
).
isNull
());
PageData
<
LiteOrder
>
orderList
=
liteOrderManager
.
findByPage
(
query
,
pageable
);
PageData
<
OrderDto
>
resultList
=
orderMapper
.
toDto
(
orderList
);
return
resultList
;
...
...
@@ -320,7 +321,7 @@ public class OrderController {
User
user
=
userManager
.
findByUserName
(
SecurityUtils
.
getCurrentUsername
());
//查询正在执行的工单列表
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
is
(
LITEORDER_STATUS
.
EXECUTING
));
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
is
(
LITEORDER_STATUS
.
EXECUTING
)
.
and
(
"replenishmentNo"
).
isNull
()
);
//根据开始出库时间排序
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"startOutTime"
);
query
.
with
(
sort
);
...
...
@@ -480,7 +481,7 @@ public class OrderController {
private
List
<
LiteOrder
>
getExecuteOrders
(
User
user
)
{
//查询正在执行的工单列表
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
is
(
LITEORDER_STATUS
.
EXECUTING
));
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
is
(
LITEORDER_STATUS
.
EXECUTING
)
.
and
(
"replenishmentNo"
).
isNull
()
);
//根据开始出库时间排序
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"startOutTime"
);
query
.
with
(
sort
);
...
...
src/main/java/com/neotel/smfcore/core/order/rest/RepleOrderController.java
0 → 100644
查看文件 @
ad6cd77
package
com
.
neotel
.
smfcore
.
core
.
order
.
rest
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.FileUtil
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.language.util.MessageUtils
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.OrderPnCache
;
import
com.neotel.smfcore.core.order.bean.OrderBoxInfo
;
import
com.neotel.smfcore.core.order.bean.OrderPnInfo
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.rest.bean.dto.OrderDto
;
import
com.neotel.smfcore.core.order.rest.bean.dto.OrderPnDto
;
import
com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderItemMapper
;
import
com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapper
;
import
com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderPnMapper
;
import
com.neotel.smfcore.core.order.rest.bean.query.OrderQueryCondition
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.order.util.OrderFileWatch
;
import
com.neotel.smfcore.core.system.rest.bean.dto.TaskDto
;
import
com.neotel.smfcore.core.system.rest.bean.mapstruct.TaskMapper
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.hikvision.bean.HikOrderInfo
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.bean.FileProperties
;
import
com.neotel.smfcore.security.service.manager.IGroupManager
;
import
com.neotel.smfcore.security.service.manager.IUserManager
;
import
com.neotel.smfcore.security.service.po.Group
;
import
com.neotel.smfcore.security.service.po.User
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.domain.Sort
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.util.ObjectUtils
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.*
;
@Slf4j
@Api
(
tags
=
"产线补料工单管理"
)
@RestController
@RequestMapping
(
"/api/productionLineReple"
)
@RequiredArgsConstructor
public
class
RepleOrderController
{
@Autowired
private
ILiteOrderManager
liteOrderManager
;
@Autowired
private
IUserManager
userManager
;
@Autowired
private
IGroupManager
groupManager
;
@Autowired
private
final
OrderMapper
orderMapper
;
@Autowired
private
final
OrderItemMapper
orderItemMapper
;
@Autowired
private
LiteOrderCache
liteOrderCache
;
@Autowired
private
final
FileProperties
properties
;
@Autowired
private
OrderFileWatch
orderFileWatch
;
@Autowired
private
DataCache
dataCache
;
@Autowired
private
TaskService
taskService
;
@Autowired
private
TaskMapper
taskMapper
;
@Autowired
private
OrderPnMapper
orderPnMapper
;
@Autowired
private
OrderPnCache
orderPnCache
;
private
String
currOrderNo
=
""
;
@ApiOperation
(
"查询补料工单"
)
@GetMapping
@PreAuthorize
(
"@el.check('productionLineReple')"
)
public
PageData
<
OrderDto
>
query
(
OrderQueryCondition
criteria
,
Pageable
pageable
)
{
//Query query = QueryHelp.getQuery(criteria);
List
<
Criteria
>
criteriaList
=
QueryHelp
.
toCriteria
(
criteria
);
if
(
criteria
.
getStatus
()
!=
null
)
{
if
(
criteria
.
getStatus
()
==
1
)
{
criteriaList
.
add
(
Criteria
.
where
(
"status"
).
is
(
LITEORDER_STATUS
.
CLOSED
));
//query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.CLOSED));
}
else
if
(
criteria
.
getStatus
()
==
2
)
{
criteriaList
.
add
(
Criteria
.
where
(
"status"
).
ne
(
LITEORDER_STATUS
.
CLOSED
));
//query.addCriteria(Criteria.where("status").ne(LITEORDER_STATUS.CLOSED));
}
else
if
(
criteria
.
getStatus
()
==
3
){
criteriaList
.
add
(
Criteria
.
where
(
"status"
).
is
(
LITEORDER_STATUS
.
EXECUTING
));
//query.addCriteria(Criteria.where("status").is(LITEORDER_STATUS.EXECUTING));
}
}
//query.addCriteria();criteriaList
criteriaList
.
add
(
Criteria
.
where
(
"replenishmentNo"
).
ne
(
null
));
Query
query
=
new
Query
();
if
(!
criteriaList
.
isEmpty
()){
query
=
new
Query
(
new
Criteria
().
andOperator
(
criteriaList
));
}
PageData
<
LiteOrder
>
orderList
=
liteOrderManager
.
findByPage
(
query
,
pageable
);
PageData
<
OrderDto
>
resultList
=
orderMapper
.
toDto
(
orderList
);
return
resultList
;
}
@ApiOperation
(
"产线补料工单详情"
)
@GetMapping
(
"/detial"
)
@PreAuthorize
(
"@el.check('productionLineReple:detial')"
)
@AnonymousAccess
public
OrderDto
detial
(
@RequestParam
(
required
=
false
)
String
id
,
@RequestParam
(
required
=
false
)
String
orderNo
)
{
if
(!
ObjectUtils
.
isEmpty
(
id
))
{
LiteOrder
liteOrder
=
liteOrderManager
.
get
(
id
);
if
(
liteOrder
!=
null
)
{
OrderDto
dto
=
orderMapper
.
toDto
(
liteOrder
);
dto
.
setOrderItems
(
orderItemMapper
.
toDto
(
liteOrder
.
getOrderItems
()));
return
dto
;
}
}
else
if
(!
ObjectUtils
.
isEmpty
(
orderNo
))
{
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
!=
null
)
{
OrderDto
dto
=
orderMapper
.
toDto
(
liteOrder
);
dto
.
setOrderItems
(
orderItemMapper
.
toDto
(
liteOrder
.
getOrderItems
()));
return
dto
;
}
}
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
@ApiOperation
(
"产线补料工单出库"
)
@PostMapping
(
value
=
"/out"
)
@PreAuthorize
(
"@el.check('productionLineReple')"
)
public
ResultBean
checkOut
(
@RequestBody
Map
<
String
,
Object
>
mapValues
)
{
String
orderNo
=
mapValues
.
get
(
"orderNo"
).
toString
();
boolean
isShortageOut
=
false
;
if
(
mapValues
.
containsKey
(
"shortageOut"
))
{
String
shortageOut
=
mapValues
.
get
(
"shortageOut"
).
toString
();
if
(
ObjectUtil
.
isNotEmpty
(
shortageOut
)
&&
shortageOut
.
toString
().
equals
(
"true"
))
{
isShortageOut
=
true
;
}
}
if
(
orderNo
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueNotFind"
,
"未找到{0}[{1}]"
,
new
String
[]{
"orderNo"
,
orderNo
});
}
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
SecurityUtils
.
getCurrentUsername
(),
liteOrder
.
getOrderNo
(),
isShortageOut
,
false
);
if
(
ObjectUtil
.
isEmpty
(
result
))
{
return
ResultBean
.
newOkResult
(
result
);
}
else
if
(
result
.
equals
(
"smfcore.order.out.short"
)){
return
ResultBean
.
newErrorResult
(
99
,
result
,
result
);
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
result
,
result
);
}
}
@ApiOperation
(
"关闭产线补料工单"
)
@PostMapping
(
value
=
"/closeOrder"
)
@PreAuthorize
(
"@el.check('productionLineReple')"
)
public
ResultBean
closeOrder
(
@RequestBody
Map
<
String
,
String
>
mapValues
)
{
String
orderNo
=
mapValues
.
get
(
"orderNo"
);
if
(
orderNo
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
String
result
=
liteOrderCache
.
closeOrder
(
orderNo
);
if
(
ObjectUtil
.
isEmpty
(
result
))
{
return
ResultBean
.
newOkResult
(
result
,
result
,
result
);
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
result
,
result
);
}
}
@ApiOperation
(
"料盘出库界面,获取执行的工单列表"
)
@GetMapping
(
"/executeOrders"
)
@PreAuthorize
(
"@el.check('reelOut')"
)
public
List
<
OrderDto
>
queryExecuteOrder
()
{
//查询正在执行的工单列表
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
is
(
LITEORDER_STATUS
.
EXECUTING
).
and
(
"replenishmentNo"
).
ne
(
null
));
//根据开始出库时间排序
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"startOutTime"
);
query
.
with
(
sort
);
List
<
LiteOrder
>
orderList
=
liteOrderManager
.
findByQuery
(
query
);
List
<
OrderDto
>
resultList
=
new
ArrayList
<>();
boolean
findOrder
=
false
;
//只返回当前有任务的工单
for
(
LiteOrder
order
:
orderList
)
{
List
<
DataLog
>
tasks
=
getOrderTaskByUser
(
order
,
true
);
if
(
tasks
.
size
()
>
0
)
{
OrderDto
dto
=
orderMapper
.
toDto
(
order
);
dto
.
setTaskCount
(
tasks
.
size
());
if
(
ObjectUtil
.
isNotEmpty
(
currOrderNo
))
{
if
(
order
.
getOrderNo
().
equals
(
currOrderNo
))
findOrder
=
true
;
dto
.
setInOperate
(
true
);
}
resultList
.
add
(
dto
);
}
}
if
(
ObjectUtil
.
isNotEmpty
(
currOrderNo
))
{
if
(!
findOrder
)
{
log
.
info
(
"当前产线补料工单 ["
+
currOrderNo
+
"] 已不在出库工单列表中,清理当前产线补料"
);
currOrderNo
=
""
;
}
}
return
resultList
;
}
@ApiOperation
(
"料盘出库界面,获取当前产线补料任务列表"
)
@GetMapping
(
"/reelOutTasks"
)
@PreAuthorize
(
"@el.check('reelOut')"
)
public
List
<
TaskDto
>
queryReelOutTasks
(
@RequestParam
Map
<
String
,
String
>
paramsMap
)
{
//查询正在执行的工单列表
String
orderNo
=
currOrderNo
;
if
(
ObjectUtil
.
isEmpty
(
orderNo
))
{
return
new
ArrayList
<>();
}
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueNotFind"
,
"未找到{0}[{1}]"
,
new
String
[]{
"orderNo"
,
orderNo
});
}
if
(
liteOrder
.
isNew
()
||
liteOrder
.
isClosed
())
{
throw
new
ValidateException
(
"smfcore.order.notExecute"
,
"工单[{0}]不在出库中"
,
new
String
[]{
liteOrder
.
getOrderNo
()});
}
List
<
DataLog
>
taskList
=
getOrderTaskByUser
(
liteOrder
,
false
);
return
taskMapper
.
toDto
(
taskList
);
}
@ApiOperation
(
"料盘出库界面,切换到下一个工单"
)
@PostMapping
(
"/nextOrder"
)
@PreAuthorize
(
"@el.check('reelOut')"
)
public
ResultBean
nextOrder
(
@RequestParam
Map
<
String
,
String
>
paramsMap
)
{
if
(
ObjectUtil
.
isNotEmpty
(
currOrderNo
))
{
//判断上个工单是否已完成
LiteOrder
preOrder
=
liteOrderCache
.
findOrderByNo
(
currOrderNo
);
List
<
DataLog
>
preTasks
=
getOrderTaskByUser
(
preOrder
,
true
);
if
(
preTasks
.
size
()
>
0
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.order.preNotEnd"
,
"工单["
+
preOrder
.
getOrderNo
()
+
"]还有["
+
preTasks
.
size
()
+
"]个出库任务未结束"
,
new
String
[]{
currOrderNo
,
preTasks
.
size
()
+
""
});
}
}
List
<
LiteOrder
>
orderList
=
getExecuteOrders
();
if
(
orderList
.
size
()
<=
0
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.order.noOrder"
,
"暂无可操作的工单"
);
}
LiteOrder
liteOrder
=
orderList
.
get
(
0
);
//设置此工单的任务可以发送给料架
List
<
DataLog
>
taskList
=
getOrderTaskByUser
(
liteOrder
,
true
);
for
(
DataLog
datalog
:
taskList
)
{
datalog
.
setInOperate
(
true
);
taskService
.
updateQueueTask
(
datalog
);
}
return
ResultBean
.
newOkResult
(
"smfcore.order.nextOk"
,
"成功切换到下一个工单"
,
""
);
}
@ApiOperation
(
"齐套页面,获取齐套数据"
)
@GetMapping
(
"/orderSet"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
List
<
OrderPnDto
>
orderSetData
(
)
{
List
<
OrderPnInfo
>
orderPnInfos
=
orderPnCache
.
getDataList
();
List
<
OrderPnDto
>
dtos
=
orderPnMapper
.
toDto
(
orderPnInfos
);
return
dtos
;
}
@ApiOperation
(
"齐套页面,刷新齐套数据"
)
@PostMapping
(
"/orderSet/update"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
ResultBean
updateOrderSet
(
HttpServletRequest
request
)
{
boolean
result
=
orderPnCache
.
reloadData
();
if
(!
result
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.orderSet.reloadData.fail"
,
"刷新数据失败,请稍后再试"
);
}
List
<
OrderPnInfo
>
orderPnInfos
=
orderPnCache
.
getDataList
();
List
<
OrderPnDto
>
dtos
=
orderPnMapper
.
toDto
(
orderPnInfos
);
return
ResultBean
.
newOkResult
(
dtos
);
}
@ApiOperation
(
"导出齐套列表"
)
@GetMapping
(
value
=
"/orderSet/download"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
void
download
(
HttpServletResponse
response
,
HttpServletRequest
request
)
throws
IOException
{
List
<
OrderPnInfo
>
orderPnInfos
=
orderPnCache
.
getDataList
();
download
(
orderPnInfos
,
response
,
request
.
getLocale
());
}
public
void
download
(
List
<
OrderPnInfo
>
orderPnInfoList
,
HttpServletResponse
response
,
Locale
locale
)
throws
IOException
{
String
pn
=
MessageUtils
.
getText
(
"smfcore.orderSet.barcode"
,
locale
,
"物料编号"
);
String
lackNum
=
MessageUtils
.
getText
(
"smfcore.orderSet.partNumber"
,
locale
,
"缺料数"
);
String
reelCount
=
MessageUtils
.
getText
(
"smfcore.orderSet.proDate"
,
locale
,
"缺料盘数"
);
List
<
Map
<
String
,
Object
>>
list
=
new
ArrayList
<>();
for
(
OrderPnInfo
orderPnInfo
:
orderPnInfoList
)
{
Map
<
String
,
Object
>
map
=
new
LinkedHashMap
<>();
map
.
put
(
pn
,
orderPnInfo
.
getPartNumber
());
map
.
put
(
lackNum
,
orderPnInfo
.
getLackNum
());
map
.
put
(
reelCount
,
orderPnInfo
.
getReelCount
());
list
.
add
(
map
);
}
FileUtil
.
downloadExcel
(
list
,
response
);
}
private
List
<
LiteOrder
>
getExecuteOrders
()
{
//查询正在执行的工单列表
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
is
(
LITEORDER_STATUS
.
EXECUTING
).
and
(
"replenishmentNo"
).
not
());
//根据开始出库时间排序
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"startOutTime"
);
query
.
with
(
sort
);
List
<
LiteOrder
>
orderList
=
liteOrderManager
.
findByQuery
(
query
);
List
<
LiteOrder
>
returnList
=
new
ArrayList
<>();
//只返回当前有任务的工单
for
(
LiteOrder
order
:
orderList
)
{
List
<
DataLog
>
taskList
=
getOrderTaskByUser
(
order
,
true
);
if
(
taskList
.
size
()
>
0
)
{
returnList
.
add
(
order
);
}
}
return
returnList
;
}
private
List
<
DataLog
>
getOrderTaskByUser
(
LiteOrder
liteOrder
,
boolean
onlyNotEndTask
)
{
if
(
liteOrder
.
isNew
()
||
liteOrder
.
isClosed
())
{
return
new
ArrayList
<>();
}
//查询正在执行的工单列表
List
<
DataLog
>
returnTasks
=
new
ArrayList
<>();
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
for
(
DataLog
datalog
:
allTasks
)
{
if
(
datalog
.
isAddOutbound
()){
continue
;
}
//是否需要判断任务是否已结束
if
(
onlyNotEndTask
)
{
if
(
datalog
.
isEnd
()
||
datalog
.
isFinished
()
||
datalog
.
isCancel
())
{
continue
;
}
}
if
(
datalog
.
isOrderTask
()
&&
datalog
.
getSourceId
().
equals
(
liteOrder
.
getId
()))
{
//判断是否再自己的权限范围内
returnTasks
.
add
(
datalog
);
}
}
return
returnTasks
;
}
}
src/main/java/com/neotel/smfcore/core/order/rest/bean/query/OrderQueryCondition.java
查看文件 @
ad6cd77
...
...
@@ -12,7 +12,7 @@ import java.util.List;
@Data
public
class
OrderQueryCondition
{
@QueryCondition
(
blurry
=
"orderNo,jobNo
,replenishmentNo
"
)
@QueryCondition
(
blurry
=
"orderNo,jobNo"
)
private
String
blurry
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
)
...
...
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
查看文件 @
ad6cd77
...
...
@@ -175,6 +175,16 @@ public class LiteOrder extends BasePo implements Serializable {
*/
private
Boolean
complete
=
false
;
/**
* 包含的工单信息,存数据库
*/
private
List
<
String
>
subWknumList
;
/**
* 面别
*/
private
String
wktype
;
public
Integer
getBoxNum
(){
if
(
boxInfos
!=
null
){
return
boxInfos
.
size
();
...
...
@@ -298,6 +308,8 @@ public class LiteOrder extends BasePo implements Serializable {
this
.
setUpdateDate
(
new
Date
());
this
.
setEndDate
(
outInfo
.
getEndD
());
this
.
setWemng
(
outInfo
.
getWemng
());
this
.
setWktype
(
outInfo
.
getWktype
());
this
.
setSubWknumList
(
outInfo
.
getSubWknumList
());
if
(
orderItems
==
null
){
orderItems
=
new
ArrayList
<>();
}
...
...
src/main/java/com/neotel/smfcore/core/outList/util/OutListCache.java
查看文件 @
ad6cd77
...
...
@@ -227,8 +227,8 @@ public class OutListCache implements ITaskListener {
boolean
shortage
=
false
;
List
<
String
>
availableStorageIds
=
dataCache
.
getAvailableStorageIds
();
Map
<
String
,
List
<
StoragePos
>>
needOutPosMap
=
new
HashMap
<>();
//挑出的需要出库的料列表,key=
pn
,value=库位
Map
<
String
,
Integer
>
jieliaoPosMap
=
new
HashMap
<>();
//需要截料的物料列表,key=PosName,value=此转储出库单使用数量
Map
<
String
,
List
<
StoragePos
>>
needOutPosMap
=
new
HashMap
<>();
//挑出的需要出库的料列表,key=
itemId
,value=库位
List
<
String
>
itemPosNameList
=
new
ArrayList
<>();
//获取此转储出库单出库的所有物料
for
(
OutListItem
outListItem
:
outList
.
getOutListItems
())
{
String
pn
=
outListItem
.
getMaterialNo
();
...
...
@@ -241,9 +241,9 @@ public class OutListCache implements ITaskListener {
//查找PN的所有库存,PN=pn,未锁定,qty 从大到小,入库时间正序
List
<
StoragePos
>
posList
=
storagePosManager
.
findOrderItemInStorage
(
availableStorageIds
,
pn
,
taskService
.
excludePosIds
());
log
.
info
(
"共找到"
+
posList
.
size
()+
"盘"
+
pn
+
"的物料"
);
int
storageNum
=
0
;
for
(
StoragePos
pos
:
posList
)
{
for
(
StoragePos
pos
:
posList
)
{
storageNum
+=
pos
.
getBarcode
().
getAmount
();
}
...
...
@@ -271,59 +271,22 @@ public class OutListCache implements ITaskListener {
}
List
<
StoragePos
>
itemPosList
=
new
ArrayList
<>();
List
<
String
>
itemPosNameList
=
new
ArrayList
<>();
//此PN未完成
int
targetNum
=
needNum
;
for
(
int
i
=
0
;
i
<
posList
.
size
();
i
++
)
{
List
<
StoragePos
>
forPosList
=
new
ArrayList
<>();
for
(
StoragePos
pos
:
posList
)
{
if
(!
needOutPosMap
.
containsKey
(
pos
.
getPosName
()))
{
forPosList
.
add
(
pos
);
}
}
//循环剩余的库位,查找
int
forIndex
=
-
1
;
for
(
StoragePos
pos
:
forPosList
)
{
forIndex
++;
boolean
isLast
=
(
forIndex
==
(
forPosList
.
size
()
-
1
));
//不需要截料,也不按照整盘比,按照数量满足或最后一盘来出
if
(
pos
.
getBarcode
().
getAmount
()
>=
targetNum
||
isLast
)
{
itemPosList
.
add
(
pos
);
itemPosNameList
.
add
(
pos
.
getPosName
());
targetNum
-=
pos
.
getBarcode
().
getAmount
();
break
;
}
//循环剩余的库位,查找
//int forIndex = -1;
for
(
StoragePos
pos
:
posList
)
{
if
(!
itemPosNameList
.
contains
(
pos
.
getPosName
())){
itemPosList
.
add
(
pos
);
itemPosNameList
.
add
(
pos
.
getPosName
());
targetNum
-=
pos
.
getBarcode
().
getAmount
();
if
(
targetNum
<=
0
)
{
break
;
}
}
if
(
targetNum
<=
0
)
{
break
;
}
}
// StoragePos tempPos = null;
// for (StoragePos pos :
// posList) {
// //已经在出库列表
// if (itemPosNameList.contains(pos.getPosName())) {
// continue;
// }
// //不需要截料,也不按照整盘比,直接数量最大的发料
// itemPosList.add(pos);
// itemPosNameList.add(pos.getPosName());
// targetNum -= pos.getBarcode().getAmount();
//
// if (targetNum <= 0) {
// break;
// }
// }
//判断数量是否满足
if
(
targetNum
>
0
)
{
int
outNum
=
needNum
-
targetNum
;
...
...
@@ -337,7 +300,7 @@ public class OutListCache implements ITaskListener {
}
}
//可以出库
needOutPosMap
.
put
(
pn
,
itemPosList
);
needOutPosMap
.
put
(
outListItem
.
getId
()
,
itemPosList
);
}
log
.
info
(
"开始执行转储出库单["
+
name
+
"] "
);
...
...
@@ -353,9 +316,8 @@ public class OutListCache implements ITaskListener {
for
(
OutListItem
outListItem
:
outList
.
getOutListItems
())
{
int
itemReelCount
=
0
;
int
itemOutCount
=
0
;
List
<
StoragePos
>
posList
=
needOutPosMap
.
get
(
outListItem
.
getMaterialNo
());
for
(
StoragePos
pos
:
posList
)
{
List
<
StoragePos
>
posList
=
needOutPosMap
.
get
(
outListItem
.
getId
());
for
(
StoragePos
pos
:
posList
)
{
DataLog
task
=
taskService
.
newTask
(
pos
);
task
.
setSourceId
(
outList
.
getId
());
...
...
src/main/java/com/neotel/smfcore/core/system/rest/TaskController.java
查看文件 @
ad6cd77
...
...
@@ -7,6 +7,8 @@ import com.neotel.smfcore.common.bean.PageData;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.core.barcode.bean.CodeBean
;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
...
...
@@ -22,6 +24,7 @@ import io.swagger.annotations.Api;
import
io.swagger.annotations.ApiOperation
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.logging.log4j.util.Strings
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.mongodb.core.query.Criteria
;
...
...
@@ -58,6 +61,9 @@ public class TaskController {
@Autowired
private
IUserManager
userManager
;
@Autowired
protected
CodeResolve
codeResolve
;
// @ApiOperation("导出用户数据")
// @GetMapping(value = "/download")
// @PreAuthorize("@el.check('user:list')")
...
...
@@ -69,6 +75,12 @@ public class TaskController {
@GetMapping
(
"/history"
)
@PreAuthorize
(
"@el.check('taskLog')"
)
public
PageData
<
TaskDto
>
query
(
TaskQueryCondition
criteria
,
Pageable
pageable
)
{
String
barcode
=
criteria
.
getBarcode
();
if
(
Strings
.
isNotBlank
(
barcode
)){
CodeBean
codebean
=
codeResolve
.
resolveSingleCode
(
criteria
.
getBarcode
());
String
reelId
=
codebean
.
getCodeStr
();
criteria
.
setBarcode
(
reelId
);
}
String
un_End
=
"UN_END"
;
boolean
unEnd
=
false
;
boolean
finished
=
false
;
...
...
src/main/java/com/neotel/smfcore/security/service/manager/IMenuManager.java
查看文件 @
ad6cd77
...
...
@@ -84,4 +84,6 @@ public interface IMenuManager extends IBaseManager<Menu> {
void
delete
(
Set
<
Menu
>
menuSet
)
throws
ValidateException
;
Menu
saveMenu
(
Menu
menu
)
throws
ValidateException
;
Menu
findByPath
(
String
path
);
}
src/main/java/com/neotel/smfcore/security/service/manager/impl/MenuManagerImpl.java
查看文件 @
ad6cd77
...
...
@@ -341,4 +341,9 @@ public class MenuManagerImpl implements IMenuManager {
// redisUtils.delByKeys(CacheKey.ROLE_ID, roles.stream().map(Role::getId).collect(Collectors.toSet()));
// }
@Override
public
Menu
findByPath
(
String
path
){
return
menuDao
.
findOneByCondition
(
new
String
[]{
"path"
},
new
String
[]{
path
});
}
}
src/main/java/com/neotel/smfcore/security/service/po/Menu.java
查看文件 @
ad6cd77
...
...
@@ -19,6 +19,7 @@ import cn.hutool.core.util.ObjectUtil;
import
com.neotel.smfcore.common.base.BasePo
;
import
com.neotel.smfcore.core.language.util.MessageUtils
;
import
lombok.*
;
import
org.springframework.data.annotation.Transient
;
import
org.springframework.data.mongodb.core.mapping.Document
;
import
java.io.Serializable
;
...
...
@@ -98,6 +99,12 @@ public class Menu extends BasePo implements Serializable {
*/
private
String
titleKey
;
/**
* 父级菜单,主要用于初始化菜单,不存数据库
*/
@Transient
private
Menu
parentMenu
;
public
Boolean
getHasChildren
()
{
if
(
subCount
==
0
){
return
false
;
...
...
@@ -158,17 +165,17 @@ public class Menu extends BasePo implements Serializable {
/**
* 此方法用于构建权限菜单,type=2
*/
public
static
Menu
CreatePerMenu
(
final
String
permission
,
final
String
title
,
final
String
pid
)
{
Menu
menu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
2
,
permission
,
title
,
999
,
""
,
""
,
pid
,
0
,
false
,
false
,
false
,
""
,
""
,
""
);
return
menu
;
}
//
public static Menu CreatePerMenu( final String permission, final String title, final String pid ) {
//
Menu menu=new Menu(new ArrayList<Menu>(),2,permission,title,999,"","",pid,0,false,false,false,"","","");
//
return menu;
//
}
/**
* 此方法用户创建只用于显示的一级菜单,type=0
*/
public
static
Menu
CreatePMenu
(
final
String
title
,
final
Integer
menuSort
,
final
String
path
,
final
Integer
subCount
,
final
String
icon
)
{
public
static
Menu
CreatePMenu
(
final
String
title
,
final
Integer
menuSort
,
final
String
path
,
final
Integer
subCount
,
final
String
icon
,
Menu
parentMenu
)
{
String
titleKey
=
path
;
Menu
menu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
0
,
""
,
title
,
menuSort
,
path
,
""
,
""
,
subCount
,
false
,
false
,
false
,
title
,
icon
,
titleKey
);
Menu
menu
=
new
Menu
(
new
ArrayList
<
Menu
>(),
0
,
""
,
title
,
menuSort
,
path
,
""
,
""
,
subCount
,
false
,
false
,
false
,
title
,
icon
,
titleKey
,
parentMenu
);
return
menu
;
}
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论