Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 9b717212
由
zshaohui
编写于
2023-10-08 11:09:22 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.立臻看板功能提交
2.缺料预警限制30个去掉 3.料仓已满,不增加出库任务
1 个父辈
c0583e42
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
24 个修改的文件
包含
314 行增加
和
70 行删除
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
src/main/java/com/neotel/smfcore/core/kanban/rest/BoxKanbanController.java
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/BoxTaskDto.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/bean/dto/OrderDto.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/system/rest/bean/dto/TaskDto.java
src/main/java/com/neotel/smfcore/core/system/rest/bean/query/TaskQueryCondition.java
src/main/java/com/neotel/smfcore/core/system/service/po/DataLog.java
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/bean/StorageExport.java
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/rest/InnerBoxRestController.java
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/util/PreWarningItemCache.java
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/util/StorageExportUtil.java
src/main/java/com/neotel/smfcore/custom/lizhen/kanban/bacheng/BcKanbanController.java
src/main/java/com/neotel/smfcore/custom/lizhen/kanban/bacheng/bean/Status.java
src/main/java/com/neotel/smfcore/custom/lizhen/kanban/bacheng/bean/dto/BcStationDto.java
src/main/java/com/neotel/smfcore/custom/lizhen/kanban/bacheng/bean/dto/BcStorageDto.java
src/main/java/com/neotel/smfcore/custom/lizhen/kanban/common/KanbanUtils.java
src/main/java/com/neotel/smfcore/custom/lizhen/report/bacheng/BCReportController.java
src/main/resources/config/application.yml
src/main/resources/log4j2-spring.xml
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
查看文件 @
9b71721
...
...
@@ -152,6 +152,8 @@ public class DataInitManager {
//功能菜单(不包含父级菜单),key为path
Map
<
String
,
Menu
>
functionMenuMap
=
new
HashMap
<>();
//巴城电子看板
addNewFunctionMenu
(
0
,
null
,
"bcElecKanban"
,
"电子看板"
,
"bcElecKanban"
,
"elecKanban/index"
,
"kanban"
,
functionMenuMap
);
//AGV看板
addNewFunctionMenu
(
1
,
null
,
"agvkanban"
,
"AGV看板"
,
"agvkanban"
,
"agv/agvkanban/index"
,
"agv"
,
functionMenuMap
);
...
...
@@ -313,7 +315,7 @@ public class DataInitManager {
addNewFunctionMenu
(
134
,
null
,
"virWarehous"
,
"虚拟仓"
,
"virWarehous"
,
"virWarehous/virWarehous/index"
,
"feeding"
,
functionMenuMap
);
//内外仓电子看板
addNewFunctionMenu
(
1
,
null
,
"elecKanban"
,
"电子看板"
,
"elecKanban"
,
"elecKanban/index"
,
"kanban"
,
functionMenuMap
);
//
addNewFunctionMenu(1,null,"elecKanban", "电子看板","elecKanban", "elecKanban/index","kanban",functionMenuMap);
addNewFunctionMenu
(
135
,
null
,
"sysInventory"
,
"盘点出库"
,
"sysInventory"
,
"system/sysInventory/index"
,
"mIDList"
,
functionMenuMap
);
//汇总报表
...
...
src/main/java/com/neotel/smfcore/core/device/rest/DeviceController.java
查看文件 @
9b71721
...
...
@@ -349,10 +349,21 @@ public class DeviceController {
}
}
else
{
resultMap
.
put
(
"result"
,
"104"
);
errorMsg
=
"["
+
barcode
.
getBarcode
()
+
"]未找到可用的["
+
barcode
.
getPlateSize
()
+
"x"
+
barcode
.
getHeight
()
+
"]仓位"
;
resultMap
.
put
(
"msg"
,
errorMsg
);
boolean
hasPos
=
false
;
for
(
Storage
storage
:
storageList
)
{
if
(
storage
.
canPutIn
(
barcode
.
getPlateSize
(),
barcode
.
getHeight
()))
{
resultMap
.
put
(
"result"
,
"103"
);
errorMsg
=
"["
+
barcode
.
getBarcode
()
+
"]料仓已满,等待物料出库重新分配新库位,未找到可用的["
+
barcode
.
getPlateSize
()
+
"x"
+
barcode
.
getHeight
()
+
"]仓位"
;
resultMap
.
put
(
"msg"
,
errorMsg
);
hasPos
=
true
;
break
;
}
}
if
(!
hasPos
){
resultMap
.
put
(
"result"
,
"104"
);
errorMsg
=
"["
+
barcode
.
getBarcode
()
+
"]未找到可用的["
+
barcode
.
getPlateSize
()
+
"x"
+
barcode
.
getHeight
()
+
"]仓位"
;
resultMap
.
put
(
"msg"
,
errorMsg
);
}
}
}
catch
(
ValidateException
ve
)
{
errorMsg
=
ve
.
getMessage
();
...
...
src/main/java/com/neotel/smfcore/core/kanban/rest/BoxKanbanController.java
查看文件 @
9b71721
...
...
@@ -178,7 +178,7 @@ public class BoxKanbanController {
String
blurry
=
criteria
.
getBlurry
();
if
(
ObjectUtil
.
isNotEmpty
(
blurry
))
{
String
[]
blurrys
=
blurry
.
split
(
","
);
String
[]
valueArray
=
new
String
[]{
datalog
.
getPosName
(),
datalog
.
getStorageName
(),
datalog
.
getCid
(),
datalog
.
getPartNumber
(),
datalog
.
getBarcode
(),
datalog
.
getSourceName
()};
String
[]
valueArray
=
new
String
[]{
datalog
.
getPosName
(),
datalog
.
getStorageName
(),
datalog
.
getCid
(),
datalog
.
getPartNumber
(),
datalog
.
getBarcode
(),
datalog
.
getSourceName
()
,
datalog
.
getExport
()
};
for
(
String
s
:
blurrys
)
{
if
(
ObjectUtil
.
isNotEmpty
(
s
)){
for
(
String
v
:
...
...
src/main/java/com/neotel/smfcore/core/kanban/rest/bean/dto/BoxTaskDto.java
查看文件 @
9b71721
...
...
@@ -93,6 +93,9 @@ public class BoxTaskDto {
@ApiModelProperty
(
"亮灯料架颜色"
)
private
String
lightColor
=
""
;
@ApiModelProperty
(
"出口位置"
)
private
String
export
=
""
;
@ApiModelProperty
(
"创建时间"
)
private
Date
createDate
=
new
Date
();
@ApiModelProperty
(
"更新时间"
)
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
9b71721
...
...
@@ -25,6 +25,7 @@ import com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager;
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.storage.bean.InventoryItem
;
import
com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE
;
import
com.neotel.smfcore.core.storage.enums.DeviceType
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
...
...
@@ -36,6 +37,7 @@ import com.neotel.smfcore.core.system.util.TaskService;
import
com.neotel.smfcore.custom.lizhen.LizhenApi
;
import
com.neotel.smfcore.custom.lizhen.innerBox.enums.ExtendType
;
import
com.neotel.smfcore.custom.lizhen.innerBox.util.StorageExportUtil
;
import
com.neotel.smfcore.custom.lizhen.report.bean.query.ReportQueryCondition
;
import
com.sun.org.apache.regexp.internal.RE
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -494,7 +496,7 @@ public class LiteOrderCache {
}
//获取是否有出料口
String
exportStr
=
StorageExportUtil
.
getExportByOrderNo
(
cacheOrder
.
getOrderNo
());
String
exportStr
=
StorageExportUtil
.
getExportByOrderNo
(
cacheOrder
.
getOrderNo
()
,
true
);
if
(
StringUtils
.
isBlank
(
exportStr
))
{
log
.
info
(
cacheOrder
.
getOrderNo
()
+
"没有空闲的出料口"
);
return
"没有空闲的出料口"
;
...
...
@@ -634,6 +636,7 @@ public class LiteOrderCache {
task
.
setH
(
pos
.
getBarcode
().
getHeight
());
task
.
setDescribe
(
pos
.
getBarcode
().
getDescribe
());
task
.
setKeeperCode
(
pos
.
getBarcode
().
getKeeperCode
());
task
.
setExport
(
exportStr
);
// task = dataLogDao.save(task);
taskService
.
addTaskToExecute
(
task
);
}
...
...
@@ -652,16 +655,21 @@ public class LiteOrderCache {
if
(
taskReelCount
<=
0
)
{
finishedOrderTasks
(
cacheOrder
);
}
//任务数大于0,更新出口位置
if
(
taskReelCount
>
0
)
{
cacheOrder
.
setExport
(
exportStr
);
}
liteOrderManager
.
save
(
cacheOrder
);
liteOrderMap
.
put
(
cacheOrder
.
getOrderNo
(),
cacheOrder
);
if
(
taskReelCount
<=
0
)
{
//return "工单无可执行的任务";
return
"smfcore.order.out.noTask"
;
}
log
.
info
(
cacheOrder
.
getOrderNo
()+
"分配出料口为:"
+
exportStr
+
"line为:"
+
cacheOrder
.
getLine
()+
"剩余任务数为:"
+
taskReelCount
);
StorageExportUtil
.
updateExport
(
exportStr
,
cacheOrder
.
getOrderNo
(),
cacheOrder
.
getLine
(),
taskReelCount
);
return
""
;
...
...
@@ -1210,4 +1218,47 @@ public class LiteOrderCache {
}
return
storagePos
;
}
public
List
<
LiteOrderItem
>
getLackItems
(
Collection
<
LiteOrder
>
liteOrders
)
{
List
<
LiteOrderItem
>
lackItems
=
new
ArrayList
<>();
//排除虚拟仓的
List
<
String
>
storageIds
=
new
ArrayList
<>();
for
(
Storage
storage
:
dataCache
.
getAllStorage
().
values
())
{
//if (!storage.isVirtual()) {
storageIds
.
add
(
storage
.
getId
());
//}
}
//得到库存信息
Map
<
String
,
InventoryItem
>
inventoryMap
=
dataCache
.
getAllInventory
(
storageIds
,
null
);
if
(
inventoryMap
!=
null
)
{
for
(
LiteOrder
liteOrder
:
liteOrders
)
{
//状态是未关闭的,未出库的
if
(!
liteOrder
.
isClosed
())
{
List
<
LiteOrderItem
>
items
=
liteOrder
.
getOrderItems
();
for
(
LiteOrderItem
orderItem
:
items
)
{
for
(
DataLog
dataLog
:
taskService
.
getAllTasks
())
{
if
(
orderItem
.
getId
().
equals
(
dataLog
.
getSubSourceId
())
&&
!
dataLog
.
isCancel
())
{
continue
;
}
}
if
(
orderItem
.
getOutReelCount
()
<
orderItem
.
getNeedReelCount
())
{
InventoryItem
inventoryItem
=
inventoryMap
.
get
(
orderItem
.
getPn
());
if
(
inventoryItem
!=
null
)
{
if
(
inventoryItem
.
getStockReel
()
/*- inventoryItem.getLockReel()*/
-
inventoryItem
.
getBindReel
()
>
0
)
{
inventoryItem
.
setBindReel
(
inventoryItem
.
getBindReel
()
+
1
);
}
else
{
lackItems
.
add
(
orderItem
);
}
inventoryMap
.
put
(
orderItem
.
getPn
(),
inventoryItem
);
}
else
{
lackItems
.
add
(
orderItem
);
}
}
}
}
}
}
return
lackItems
;
}
}
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
查看文件 @
9b71721
...
...
@@ -321,6 +321,8 @@ public class OrderController {
public
OrderDto
detial
(
@RequestParam
(
required
=
false
)
String
id
,
@RequestParam
(
required
=
false
)
String
orderNo
,
@RequestParam
(
required
=
false
)
String
warehouseCode
,
@RequestParam
(
required
=
false
)
String
brand
)
{
List
<
LiteOrderItem
>
lackItemList
=
liteOrderCache
.
getLackItems
(
liteOrderCache
.
getAllLiteOrder
());
if
(!
ObjectUtils
.
isEmpty
(
id
))
{
LiteOrder
liteOrder
=
liteOrderManager
.
get
(
id
);
if
(
liteOrder
!=
null
)
{
...
...
@@ -338,9 +340,20 @@ public class OrderController {
continue
;
}
}
if
(!
dto
.
isClosed
())
{
orderItem
.
setLack
(
isLack
(
lackItemList
,
orderItem
));
}
orderItemsByWarehouseCode
.
add
(
orderItem
);
}
if
(
orderItemsByWarehouseCode
!=
null
&&
!
orderItemsByWarehouseCode
.
isEmpty
()){
orderItemsByWarehouseCode
=
orderItemsByWarehouseCode
.
stream
().
sorted
(
Comparator
.
comparing
(
LiteOrderItem
::
isLack
).
reversed
()).
collect
(
Collectors
.
toList
());
}
dto
.
setOrderItems
(
orderItemMapper
.
toDto
(
orderItemsByWarehouseCode
));
if
(
dto
.
isClosed
()
&&
dto
.
getStatus
()
!=
LITEORDER_STATUS
.
CLOSED
)
{
dto
.
setClosed
(
false
);
}
return
dto
;
}
}
else
if
(!
ObjectUtils
.
isEmpty
(
orderNo
))
{
...
...
@@ -360,9 +373,20 @@ public class OrderController {
continue
;
}
}
if
(!
dto
.
isClosed
())
{
orderItem
.
setLack
(
isLack
(
lackItemList
,
orderItem
));
}
orderItemsByWarehouseCode
.
add
(
orderItem
);
}
if
(
orderItemsByWarehouseCode
!=
null
&&
!
orderItemsByWarehouseCode
.
isEmpty
()){
orderItemsByWarehouseCode
=
orderItemsByWarehouseCode
.
stream
().
sorted
(
Comparator
.
comparing
(
LiteOrderItem
::
isLack
).
reversed
()).
collect
(
Collectors
.
toList
());
}
dto
.
setOrderItems
(
orderItemMapper
.
toDto
(
orderItemsByWarehouseCode
));
if
(
dto
.
isClosed
()
&&
dto
.
getStatus
()
!=
LITEORDER_STATUS
.
CLOSED
)
{
dto
.
setClosed
(
false
);
}
return
dto
;
}
}
...
...
@@ -370,6 +394,17 @@ public class OrderController {
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
private
boolean
isLack
(
List
<
LiteOrderItem
>
lackItemList
,
LiteOrderItem
item
)
{
if
(
lackItemList
!=
null
&&
!
lackItemList
.
isEmpty
())
{
for
(
LiteOrderItem
orderItem
:
lackItemList
)
{
if
(
orderItem
.
getId
().
equals
(
item
.
getId
()))
{
return
true
;
}
}
}
return
false
;
}
@ApiOperation
(
"修改工单数量"
)
@PostMapping
(
value
=
"/updateNum"
)
...
...
src/main/java/com/neotel/smfcore/core/order/rest/bean/dto/OrderDto.java
查看文件 @
9b71721
...
...
@@ -110,4 +110,7 @@ public class OrderDto implements Serializable {
@ApiModelProperty
(
"工单完成时间"
)
private
Date
finishDate
;
@ApiModelProperty
(
"出口位置"
)
private
String
export
=
""
;
}
src/main/java/com/neotel/smfcore/core/order/rest/bean/query/OrderQueryCondition.java
查看文件 @
9b71721
...
...
@@ -11,7 +11,7 @@ import java.util.List;
@Data
public
class
OrderQueryCondition
{
@QueryCondition
(
blurry
=
"orderNo"
)
@QueryCondition
(
blurry
=
"orderNo
,export
"
)
private
String
blurry
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
)
...
...
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
查看文件 @
9b71721
...
...
@@ -151,6 +151,10 @@ public class LiteOrder extends BasePo implements Serializable {
*/
private
Date
finishDate
;
/**
* 出口位置
*/
private
String
export
=
""
;
public
void
setClosed
(
boolean
value
){
this
.
closed
=
value
;
...
...
src/main/java/com/neotel/smfcore/core/system/rest/bean/dto/TaskDto.java
查看文件 @
9b71721
...
...
@@ -143,6 +143,9 @@ public class TaskDto implements Serializable {
@ApiModelProperty
(
"如果是出库任务,需要记录入库时间"
)
private
Date
putInDate
;
@ApiModelProperty
(
"出口位置"
)
private
String
export
=
""
;
public
String
getTaskColor
()
{
if
(
ObjectUtil
.
isNotEmpty
(
lightColor
))
{
return
"#"
+
lightColor
;
...
...
src/main/java/com/neotel/smfcore/core/system/rest/bean/query/TaskQueryCondition.java
查看文件 @
9b71721
...
...
@@ -14,7 +14,7 @@ import java.util.Date;
@ApiModel
(
"查询条件"
)
public
class
TaskQueryCondition
{
@QueryCondition
(
blurry
=
"barcode,partNumber,posName,sourceName,subSourceInfo,memo"
)
@QueryCondition
(
blurry
=
"barcode,partNumber,posName,sourceName,subSourceInfo,memo
,export
"
)
@ApiModelProperty
(
"模糊搜索"
)
private
String
blurry
;
...
...
src/main/java/com/neotel/smfcore/core/system/service/po/DataLog.java
查看文件 @
9b71721
...
...
@@ -362,6 +362,12 @@ public class DataLog extends BasePo implements Serializable {
*/
private
int
height
=
0
;
/**
* 出口位置
*/
private
String
export
=
""
;
public
String
getBarcode
()
{
if
(
barcode
==
null
){
return
""
;
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/bean/StorageExport.java
查看文件 @
9b71721
...
...
@@ -22,4 +22,9 @@ public class StorageExport {
* 当前料仓剩余未出的需求单数量
*/
private
int
remainTaskCount
=
0
;
/**
* 是否禁用
*/
private
boolean
disable
=
false
;
}
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/rest/InnerBoxRestController.java
查看文件 @
9b71721
...
...
@@ -147,7 +147,7 @@ public class InnerBoxRestController {
List
<
DataLog
>
dataLogList
=
taskService
.
getAllTasks
();
for
(
DataLog
dataLog
:
dataLogList
)
{
if
(
StringUtils
.
isNotBlank
(
dataLog
.
getSourceId
())){
if
(
dataLog
.
getSourceId
().
equals
(
opTask
.
getSourceId
())){
if
(
dataLog
.
getSourceId
().
equals
(
opTask
.
getSourceId
())
&&
!
dataLog
.
getBarcode
().
equals
(
opTask
.
getBarcode
())
){
if
(!
dataLog
.
isFinished
()){
remainTaskCount
++;
}
...
...
@@ -449,11 +449,11 @@ public class InnerBoxRestController {
String
sourceName
=
dataLog
.
getSourceName
();
String
sourceId
=
dataLog
.
getSourceId
();
if
(
StringUtils
.
isNotBlank
(
sourceId
)
&&
StringUtils
.
isNotBlank
(
sourceName
))
{
String
export
=
StorageExportUtil
.
getExportByOrderNo
(
sourceNam
e
);
log
.
info
(
dataLog
.
getBarcode
()
+
"获取出料口信息为:"
+
export
);
resultMap
.
put
(
"export"
,
export
);
//String export = StorageExportUtil.getExportByOrderNo(sourceName,fals
e);
log
.
info
(
dataLog
.
getBarcode
()
+
"获取出料口信息为:"
+
dataLog
.
getExport
()
);
resultMap
.
put
(
"export"
,
dataLog
.
getExport
()
);
}
else
{
String
export
=
StorageExportUtil
.
getExportByOrderNo
(
""
);
String
export
=
StorageExportUtil
.
getExportByOrderNo
(
""
,
false
);
log
.
info
(
dataLog
.
getBarcode
()
+
"手动出库获取出料口信息为:"
+
export
);
resultMap
.
put
(
"export"
,
export
);
}
...
...
@@ -491,19 +491,20 @@ public class InnerBoxRestController {
@AnonymousAccess
public
ResultBean
getExport
(
String
export
)
{
StorageExport
storageExport
=
StorageExportUtil
.
getExport
(
export
);
if
(
StringUtils
.
isNotBlank
(
storageExport
.
getHSerial
())){
if
(
StringUtils
.
isNotBlank
(
storageExport
.
getHSerial
()))
{
int
remainTaskCount
=
0
;
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
for
(
DataLog
dataLog
:
allTasks
)
{
if
(
dataLog
.
isCheckOutTask
()
&&
storageExport
.
getHSerial
().
equals
(
dataLog
.
getSourceName
())){
if
(!
dataLog
.
isFinished
()
&&
!
dataLog
.
isCancel
()){
remainTaskCount
++;
if
(
dataLog
.
isCheckOutTask
()
&&
storageExport
.
getHSerial
().
equals
(
dataLog
.
getSourceName
()))
{
if
(!
dataLog
.
isFinished
()
&&
!
dataLog
.
isCancel
())
{
remainTaskCount
++;
}
}
}
storageExport
.
setRemainTaskCount
(
remainTaskCount
);
StorageExportUtil
.
updateExport
(
export
,
storageExport
);
StorageExportUtil
.
updateExport
(
export
,
storageExport
);
}
log
.
info
(
export
+
"获取出料口信息为:"
+
JSON
.
toJSONString
(
storageExport
));
return
ResultBean
.
newOkResult
(
storageExport
);
}
...
...
@@ -525,18 +526,43 @@ public class InnerBoxRestController {
public
ResultBean
boxOutStation
(
String
export
)
{
StorageExport
storageExport
=
StorageExportUtil
.
getExport
(
export
);
String
hSerial
=
storageExport
.
getHSerial
();
StorageExport
outStationExport
=
new
StorageExport
();
outStationExport
.
setDisable
(
storageExport
.
isDisable
());
outStationExport
.
setLine
(
storageExport
.
getLine
());
outStationExport
.
setHSerial
(
hSerial
);
outStationExport
.
setRemainTaskCount
(
storageExport
.
getRemainTaskCount
());
if
(
StringUtils
.
isNotBlank
(
hSerial
))
{
LiteOrder
order
=
liteOrderCache
.
getOrderSortItems
(
hSerial
);
if
(
order
!=
null
)
{
//工单未结束,满箱离开
if
(!
order
.
isClosed
()
&&
!
order
.
isTaskFinished
())
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
export
+
"工位任务未完成,暂不离开"
);
StorageExportUtil
.
updateExport
(
export
+
StorageExportUtil
.
OUT_STATION
,
outStationExport
);
log
.
info
(
hSerial
+
":工单未结束,满箱离开,信息为:"
+
JSON
.
toJSONString
(
outStationExport
));
return
ResultBean
.
newOkResult
(
storageExport
);
}
}
}
StorageExportUtil
.
clearExport
(
export
);
StorageExportUtil
.
updateExport
(
export
+
StorageExportUtil
.
OUT_STATION
,
storageExport
);
log
.
info
(
export
+
StorageExportUtil
.
OUT_STATION
+
"料箱离开工位,信息为:"
+
JSON
.
toJSONString
(
storageExport
));
return
ResultBean
.
newOkResult
(
storageExport
);
StorageExportUtil
.
updateExport
(
export
+
StorageExportUtil
.
OUT_STATION
,
outStationExport
);
log
.
info
(
export
+
StorageExportUtil
.
OUT_STATION
+
"料箱离开工位,信息为:"
+
JSON
.
toJSONString
(
outStationExport
));
return
ResultBean
.
newOkResult
(
outStationExport
);
}
@ApiOperation
(
"禁用出料口"
)
@AnonymousAccess
@RequestMapping
(
"/disableExport"
)
public
ResultBean
disableExport
(
String
name
,
int
type
)
{
StorageExport
storageExport
=
StorageExportUtil
.
getExport
(
name
);
if
(
type
==
1
)
{
storageExport
.
setDisable
(
true
);
}
else
{
storageExport
.
setDisable
(
false
);
}
StorageExportUtil
.
updateExport
(
name
,
storageExport
);
return
ResultBean
.
newOkResult
(
""
);
}
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/util/PreWarningItemCache.java
查看文件 @
9b71721
...
...
@@ -69,7 +69,7 @@ public class PreWarningItemCache {
List
<
PreWarningItem
>
lineItems
=
new
ArrayList
<>();
String
firstItemLine
=
""
;
//每次最多出多少盘
int
maxReelCount
=
30
;
//
int maxReelCount = 30;
//如果取不到,从数据库中取
if
(
queueItemList
==
null
||
queueItemList
.
isEmpty
())
{
queueItemList
=
preWarningItemManager
.
findAll
();
...
...
@@ -93,9 +93,9 @@ public class PreWarningItemCache {
if
(
itemLine
.
equals
(
firstItemLine
))
{
lineItems
.
add
(
preWarningItem
);
}
if
(
lineItems
.
size
()
>=
maxReelCount
)
{
/*
if (lineItems.size() >= maxReelCount) {
break;
}
}
*/
}
}
if
(!
lineItems
.
isEmpty
())
{
...
...
@@ -150,6 +150,7 @@ public class PreWarningItemCache {
liteOrder
.
setTotalTaskReelCount
(
orderItems
.
size
());
liteOrder
.
setTaskReelCount
(
orderItems
.
size
());
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
log
.
info
(
"生成工单信息为:"
+
liteOrder
.
getOrderNo
());
liteOrderCache
.
addOrderToMap
(
liteOrder
);
}
//工单生成后,从缓存中清除
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/util/StorageExportUtil.java
查看文件 @
9b71721
...
...
@@ -5,13 +5,18 @@ import com.neotel.smfcore.common.utils.StringUtils;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.custom.lizhen.innerBox.bean.StorageExport
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
javax.annotation.PostConstruct
;
import
java.util.LinkedHashSet
;
import
java.util.Map
;
import
java.util.Set
;
import
java.util.concurrent.ConcurrentHashMap
;
import
java.util.stream.Collectors
;
import
java.util.stream.Stream
;
@Slf4j
@Component
...
...
@@ -26,14 +31,14 @@ public class StorageExportUtil {
public
static
final
String
OUT_STATION
=
"_outStation"
;
private
static
String
disableExport
=
""
;
/*
private static String disableExport = "";
@Value("${disable.export}")
void setDisableExport(String export) {
if (StringUtils.isNotBlank(export)) {
disableExport = export;
}
}
}
*/
private
static
String
manualCheckoutExport
=
""
;
...
...
@@ -47,29 +52,35 @@ public class StorageExportUtil {
//出料口名称
private
final
static
String
[]
exportStr
=
new
String
[]{
"MU1_1"
,
"MU1_2"
,
"MU2
_1"
,
"MU4_1"
,
"MU4_2"
,
"MU5_1"
,
"MU5_2"
};
private
final
static
String
[]
exportStr
Arr
=
new
String
[]{
"MU1_1"
,
"MU1_2"
,
"MU2_1"
,
"MU3
_1"
,
"MU4_1"
,
"MU4_2"
,
"MU5_1"
,
"MU5_2"
};
//料仓前缀
p
rivate
static
final
String
EXPORT_PREFIX
=
"Storage_Export"
;
p
ublic
static
final
String
EXPORT_PREFIX
=
"Storage_Export"
;
//出口信息缓存
p
rivate
static
Map
<
String
,
StorageExport
>
exportMap
=
new
ConcurrentHashMap
<>();
p
ublic
static
Map
<
String
,
StorageExport
>
exportMap
=
new
ConcurrentHashMap
<>();
//初始化出料口信息
@PostConstruct
void
initExport
()
{
for
(
String
export
:
exportStr
)
{
StorageExport
storageExport
=
dataCache
.
getCache
(
EXPORT_PREFIX
+
"_"
+
export
);
if
(
storageExport
==
null
)
{
storageExport
=
new
StorageExport
();
for
(
String
exportStr
:
exportStrArr
)
{
StorageExport
exportStation
=
dataCache
.
getCache
(
EXPORT_PREFIX
+
"_"
+
exportStr
);
if
(
exportStation
==
null
)
{
exportStation
=
new
StorageExport
();
}
exportMap
.
put
(
exportStr
,
exportStation
);
String
exportOutStationKey
=
exportStr
+
OUT_STATION
;
StorageExport
exportOutStation
=
dataCache
.
getCache
(
EXPORT_PREFIX
+
"_"
+
exportOutStationKey
);
if
(
exportOutStation
!=
null
)
{
exportMap
.
put
(
exportOutStationKey
,
exportStation
);
}
exportMap
.
put
(
export
,
storageExport
);
dataCache
.
updateCache
(
EXPORT_PREFIX
+
"_"
+
export
,
storageExport
);
//dataCache.updateCache(EXPORT_PREFIX + "_" + export, storageExport);
}
}
//根据工单号,获取目的地信息
public
static
synchronized
String
getExportByOrderNo
(
String
orderNo
)
{
public
static
synchronized
String
getExportByOrderNo
(
String
orderNo
,
boolean
hasSameOrder
)
{
if
(
StringUtils
.
isBlank
(
orderNo
))
{
return
manualCheckoutExport
;
}
...
...
@@ -78,23 +89,41 @@ public class StorageExportUtil {
for
(
Map
.
Entry
<
String
,
StorageExport
>
entry
:
exportMap
.
entrySet
())
{
StorageExport
export
=
entry
.
getValue
();
if
(
orderNo
.
equals
(
export
.
getHSerial
()))
{
if
(
hasSameOrder
)
{
//log.info(orderNo + "出库时,上一次工单未拉走,暂不出库");
return
""
;
}
exportStr
=
entry
.
getKey
();
break
;
}
}
//判断是否为新工单
if
(
StringUtils
.
isBlank
(
exportStr
))
{
for
(
Map
.
Entry
<
String
,
StorageExport
>
entry
:
exportMap
.
entrySet
())
{
//按key进行升序排列
Set
<
Map
.
Entry
<
String
,
StorageExport
>>
sortMap
=
exportMap
.
entrySet
().
stream
().
sorted
(
Map
.
Entry
.
comparingByKey
()).
collect
(
Collectors
.
toCollection
(
LinkedHashSet:
:
new
));
for
(
Map
.
Entry
<
String
,
StorageExport
>
entry
:
sortMap
)
{
//判断是否有禁用工位信息
if
(
StringUtils
.
isNotBlank
(
disableExport
))
{
/*
if (StringUtils.isNotBlank(disableExport)) {
if (disableExport.contains(entry.getKey())) {
continue;
}
}*/
//分配工单时候,手动出库排除
if
(
StringUtils
.
isNotBlank
(
manualCheckoutExport
)){
if
(
entry
.
getKey
().
startsWith
(
manualCheckoutExport
)){
continue
;
}
}
if
(
entry
.
getKey
().
contains
(
StorageExportUtil
.
OUT_STATION
))
{
continue
;
}
StorageExport
export
=
entry
.
getValue
();
if
(
export
.
isDisable
())
{
continue
;
}
if
(
StringUtils
.
isBlank
(
export
.
getHSerial
()))
{
exportStr
=
entry
.
getKey
();
break
;
...
...
@@ -107,18 +136,20 @@ public class StorageExportUtil {
//清空出料口信息
public
static
void
clearExport
(
String
key
)
{
if
(
exportMap
.
get
(
key
)
!=
null
)
{
log
.
info
(
"清除出料口信息为:"
+
JSON
.
toJSONString
(
exportMap
.
get
(
key
)));
StorageExport
storageExport
=
new
StorageExport
();
exportMap
.
put
(
key
,
storageExport
);
dataCache
.
updateCache
(
EXPORT_PREFIX
+
"_"
+
key
,
storageExport
);
StorageExport
oldExport
=
exportMap
.
get
(
key
);
if
(
oldExport
!=
null
)
{
log
.
info
(
"清除出料口信息为:"
+
JSON
.
toJSONString
(
oldExport
));
StorageExport
newExport
=
new
StorageExport
();
newExport
.
setDisable
(
oldExport
.
isDisable
());
exportMap
.
put
(
key
,
newExport
);
dataCache
.
updateCache
(
EXPORT_PREFIX
+
"_"
+
key
,
newExport
);
}
}
public
static
void
updateExport
(
String
outlet
,
StorageExport
storageExport
)
{
boolean
hasOutLet
=
false
;
for
(
String
export
:
exportSt
r
)
{
if
(
outlet
.
startsWith
(
export
))
{
for
(
String
export
Str
:
exportStrAr
r
)
{
if
(
outlet
.
startsWith
(
export
Str
))
{
hasOutLet
=
true
;
break
;
}
...
...
@@ -132,7 +163,7 @@ public class StorageExportUtil {
//更新出料口信息
public
static
void
updateExport
(
String
key
,
String
hSerial
,
String
line
,
int
remainTaskCount
)
{
boolean
hasOutLet
=
false
;
for
(
String
export
:
exportStr
)
{
for
(
String
export
:
exportStr
Arr
)
{
if
(
export
.
equals
(
key
))
{
hasOutLet
=
true
;
break
;
...
...
@@ -140,19 +171,21 @@ public class StorageExportUtil {
}
if
(
hasOutLet
)
{
StorageExport
storageExport
=
exportMap
.
get
(
key
);
if
(
storageExport
==
null
)
{
storage
Export
=
new
StorageExport
();
}
StorageExport
new
Export
=
new
StorageExport
();
if
(
StringUtils
.
isNotBlank
(
hSerial
))
{
storage
Export
.
setHSerial
(
hSerial
);
new
Export
.
setHSerial
(
hSerial
);
}
if
(
StringUtils
.
isNotBlank
(
line
))
{
storage
Export
.
setLine
(
line
);
new
Export
.
setLine
(
line
);
}
storageExport
.
setRemainTaskCount
(
remainTaskCount
);
newExport
.
setRemainTaskCount
(
remainTaskCount
);
newExport
.
setDisable
(
storageExport
.
isDisable
());
//storageExport.setRemainTaskCount(100);
exportMap
.
put
(
key
,
storage
Export
);
dataCache
.
updateCache
(
EXPORT_PREFIX
+
"_"
+
key
,
storage
Export
);
exportMap
.
put
(
key
,
new
Export
);
dataCache
.
updateCache
(
EXPORT_PREFIX
+
"_"
+
key
,
new
Export
);
}
}
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/kanban/bacheng/BcKanbanController.java
0 → 100644
查看文件 @
9b71721
此文件的差异被折叠,
点击展开。
src/main/java/com/neotel/smfcore/custom/lizhen/kanban/bacheng/bean/Status.java
0 → 100644
查看文件 @
9b71721
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
kanban
.
bacheng
.
bean
;
import
lombok.Data
;
@Data
public
class
Status
{
/**
* 空闲
*/
public
static
final
int
idle
=
1
;
/**
* 执行任务
*/
public
static
final
int
performTask
=
2
;
/**
* 故障
*/
public
static
final
int
fault
=
3
;
}
src/main/java/com/neotel/smfcore/custom/lizhen/kanban/bacheng/bean/dto/BcStationDto.java
0 → 100644
查看文件 @
9b71721
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
kanban
.
bacheng
.
bean
.
dto
;
import
lombok.Data
;
@Data
public
class
BcStationDto
{
private
String
name
;
private
int
status
;
}
src/main/java/com/neotel/smfcore/custom/lizhen/kanban/bacheng/bean/dto/BcStorageDto.java
0 → 100644
查看文件 @
9b71721
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
kanban
.
bacheng
.
bean
.
dto
;
import
lombok.Data
;
@Data
public
class
BcStorageDto
{
private
String
cid
;
private
int
status
;
private
int
total
;
private
int
use
;
private
int
noUse
;
}
src/main/java/com/neotel/smfcore/custom/lizhen/kanban/common/KanbanUtils.java
查看文件 @
9b71721
...
...
@@ -25,6 +25,8 @@ public class KanbanUtils {
private
static
String
F5
;
private
static
String
F4
;
private
static
IDataLogManager
dataLogManager
;
private
static
IStoragePosManager
storagePosManager
;
...
...
@@ -155,12 +157,15 @@ public class KanbanUtils {
String
f2Line
=
dataCache
.
getCache
(
"F2Line"
).
toString
();
String
f3Line
=
dataCache
.
getCache
(
"F3Line"
).
toString
();
String
f5Line
=
dataCache
.
getCache
(
"F5Line"
).
toString
();
String
f4Line
=
dataCache
.
getCache
(
"F4Line"
).
toString
();
if
(
F2
.
equals
(
floor
))
{
lineList
=
new
ArrayList
<>(
Arrays
.
asList
(
f2Line
.
split
(
","
)));
}
else
if
(
F3
.
equals
(
floor
))
{
lineList
=
new
ArrayList
<>(
Arrays
.
asList
(
f3Line
.
split
(
","
)));
}
else
if
(
F5
.
equals
(
floor
))
{
lineList
=
new
ArrayList
<>(
Arrays
.
asList
(
f5Line
.
split
(
","
)));
}
else
if
(
F4
.
equals
(
floor
))
{
lineList
=
new
ArrayList
<>(
Arrays
.
asList
(
f4Line
.
split
(
","
)));
}
return
lineList
;
}
...
...
@@ -199,4 +204,9 @@ public class KanbanUtils {
private
void
setF5Floor
(
String
floor
)
{
F5
=
floor
;
}
@Value
(
"${lizhen.F4.name}"
)
private
void
setF4Floor
(
String
floor
)
{
F4
=
floor
;
}
}
src/main/java/com/neotel/smfcore/custom/lizhen/report/bacheng/BCReportController.java
查看文件 @
9b71721
...
...
@@ -153,7 +153,7 @@ public class BCReportController {
@AnonymousAccess
public
PageData
getExpire
(
BcQuery
query
,
Pageable
pageable
)
{
Query
q
=
QueryHelp
.
getQuery
(
query
);
q
.
addCriteria
(
Criteria
.
where
(
"barcode"
).
exists
(
true
)
.
and
(
"barcode.expireDate"
).
lt
(
new
Date
())
);
q
.
addCriteria
(
Criteria
.
where
(
"barcode"
).
exists
(
true
)
/*.and("barcode.expireDate").lt(new Date())*/
);
PageData
<
StoragePos
>
pageData
=
storagePosManager
.
findByPage
(
q
,
pageable
);
List
<
BCExpire
>
expireList
=
getBCExpire
(
pageData
.
getContent
());
return
new
PageData
(
expireList
,
pageData
.
getTotalElements
());
...
...
@@ -169,7 +169,7 @@ public class BCReportController {
@AnonymousAccess
public
void
expireDownload
(
BcQuery
query
,
Pageable
pageable
,
HttpServletResponse
response
){
Query
q
=
QueryHelp
.
getQuery
(
query
);
q
.
addCriteria
(
Criteria
.
where
(
"barcode"
).
exists
(
true
)
.
and
(
"barcode.expireDate"
).
lt
(
new
Date
())
);
q
.
addCriteria
(
Criteria
.
where
(
"barcode"
).
exists
(
true
)
/*.and("barcode.expireDate").lt(new Date())*/
);
try
{
FileUtil
.
downloadExcel
(
q
,
pageable
,
response
,
new
IExcelDownLoad
()
{
...
...
src/main/resources/config/application.yml
查看文件 @
9b71721
...
...
@@ -14,8 +14,8 @@ api:
brandQtyUrl
:
#http://172.30.170.199:8082/api/wcs/brandQty #gr标签满卷数
importUrl
:
#http://10.42.222.52:8001/smf-core/ext/forward/getDataLogs #内仓导入外仓picking虚拟仓数据
checkReelMeasure
:
#http://10.190.25.149:8001/Sct/CheckReelMeasure #散料量测接口
plant
:
werks
:
plant
:
2810
werks
:
2810
outerFactory
:
...
...
@@ -40,7 +40,7 @@ lizhen:
url
:
http://172.30.97.63:8001/smf-core/api/Mes/machineCallMaterial
F4
:
name
:
4F
line
:
B03-4FSMT-11,B03-4FSMT-01
,B03-4FSMT-13,B03-4FSMT-14,B03-4FSMT-03,B03-4FSMT-04,B03-4FSMT-12,B03-4FSMT-02
line
:
B03-4FSMT-11,B03-4FSMT-01
url
:
http://172.25.252.12:8001/smf-core/api/Mes/machineCallMaterial
...
...
@@ -59,10 +59,9 @@ forward:
name
:
B15
url
:
http://10.42.176.209:8001/smf-core
#禁用工位信息
disable
:
export
:
MU_1,MU_2
#手动出库料箱
manualcheckout
:
export
:
MU3_1
...
...
@@ -100,5 +99,5 @@ app:
type
:
"
"
menu
:
show
:
menu,workOrder,virWarehous,warehouseMaintenance,innerInventory,expiredReport,menu,innerChangeReport,innerProLimitReport
show
:
hide
:
\ No newline at end of file
src/main/resources/log4j2-spring.xml
查看文件 @
9b71721
...
...
@@ -15,17 +15,17 @@
<Policies>
<TimeBasedTriggeringPolicy
modulate=
"true"
interval=
"1"
/>
</Policies>
<DefaultRolloverStrategy
max=
"
18
0"
/>
<DefaultRolloverStrategy
max=
"
3
0"
/>
</RollingFile>
<RollingFile
name=
"lizhen"
fileName=
"${LOG_HOME}/${LOG_MES}"
filePattern=
"${LOG_HOME}/%d{yyyy-MM-dd}.${LOG_
NAME
}"
append=
"true"
>
filePattern=
"${LOG_HOME}/%d{yyyy-MM-dd}.${LOG_
MES
}"
append=
"true"
>
<PatternLayout
charset=
"GB18030"
pattern=
"%d{yyyy-MM-dd HH:mm:ss:SSS} %-5level [%file:%line] - %msg%n"
/>
<Policies>
<TimeBasedTriggeringPolicy
modulate=
"true"
interval=
"1"
/>
</Policies>
<DefaultRolloverStrategy
max=
"
180
"
/>
<DefaultRolloverStrategy
max=
"
7
"
/>
</RollingFile>
</appenders>
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论