Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 8c3d6f1c
由
LN
编写于
2023-02-27 16:27:20 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.取消的工单出库任务,如果当前任务料仓离线,自动补发一盘。2.1053:MI接口修改,增加MT页面接口。
1 个父辈
49c24a90
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
169 行增加
和
35 行删除
src/main/java/com/neotel/smfcore/core/barcode/rest/bean/dto/BarcodeDto.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/system/rest/bean/dto/TaskDto.java
src/main/java/com/neotel/smfcore/custom/micron1053/bean/dto/MIBoxDto.java
src/main/java/com/neotel/smfcore/custom/micron1053/controller/MicronStatusController.java
src/main/java/com/neotel/smfcore/core/barcode/rest/bean/dto/BarcodeDto.java
查看文件 @
8c3d6f1
...
@@ -251,4 +251,6 @@ public class BarcodeDto implements Serializable {
...
@@ -251,4 +251,6 @@ public class BarcodeDto implements Serializable {
@ApiModelProperty
(
"入库时间+呆滞日期"
)
@ApiModelProperty
(
"入库时间+呆滞日期"
)
private
Date
sluggishTime
;
private
Date
sluggishTime
;
@ApiModelProperty
(
"制造商物料编号"
)
private
String
mpn
;
}
}
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
8c3d6f1
...
@@ -10,6 +10,7 @@ import com.neotel.smfcore.common.utils.SecurityUtils;
...
@@ -10,6 +10,7 @@ import com.neotel.smfcore.common.utils.SecurityUtils;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.api.SmfApi
;
import
com.neotel.smfcore.core.api.SmfApi
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.device.util.DataCache
;
...
@@ -25,6 +26,7 @@ import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
...
@@ -25,6 +26,7 @@ import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.DevicesStatusUtil
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -256,6 +258,8 @@ public class LiteOrderCache {
...
@@ -256,6 +258,8 @@ public class LiteOrderCache {
order
.
setTaskReelCount
(
order
.
getTaskReelCount
()
-
1
);
order
.
setTaskReelCount
(
order
.
getTaskReelCount
()
-
1
);
order
.
setTotalTaskReelCount
(
order
.
getTotalTaskReelCount
()-
1
);
order
.
setTotalTaskReelCount
(
order
.
getTotalTaskReelCount
()-
1
);
log
.
info
(
"工单["
+
orderNo
+
"]的任务"
+
task
.
getPartNumber
()
+
"["
+
task
.
getBarcode
()
+
"]已取消,任务数-1="
+
order
.
getFinishedReelCount
()
+
"/"
+
order
.
getTaskReelCount
());
log
.
info
(
"工单["
+
orderNo
+
"]的任务"
+
task
.
getPartNumber
()
+
"["
+
task
.
getBarcode
()
+
"]已取消,任务数-1="
+
order
.
getFinishedReelCount
()
+
"/"
+
order
.
getTaskReelCount
());
checkoutAgain
(
task
,
order
);
}
}
else
if
(
task
.
isFinished
())
{
else
if
(
task
.
isFinished
())
{
order
.
setFinishedReelCount
(
order
.
getFinishedReelCount
()
+
1
);
order
.
setFinishedReelCount
(
order
.
getFinishedReelCount
()
+
1
);
...
@@ -328,6 +332,68 @@ public class LiteOrderCache {
...
@@ -328,6 +332,68 @@ public class LiteOrderCache {
}
}
}
}
private
LiteOrder
checkoutAgain
(
DataLog
task
,
LiteOrder
order
)
{
try
{
//出库任务,如果是工单任务,如果此料仓离线,需要补发一盘
if
(
ObjectUtil
.
isNotEmpty
(
task
.
getSourceId
()))
{
StatusBean
bean
=
DevicesStatusUtil
.
getStatusBean
(
task
.
getCid
());
if
(
bean
!=
null
&&
(!
bean
.
timeOut
()))
{
//如果当前料仓在线,不处理
return
order
;
}
}
//取工单
String
orderNo
=
task
.
getSourceName
();
if
(
Strings
.
isNullOrEmpty
(
orderNo
))
{
return
order
;
}
if
(
order
.
isClosed
()
||
order
.
isTaskFinished
())
{
return
order
;
}
for
(
LiteOrderItem
item
:
order
.
getOrderItems
())
{
if
(
ObjectUtil
.
isNotEmpty
(
item
.
getPn
())
&&
item
.
getPn
().
equals
(
task
.
getPartNumber
()))
{
List
<
String
>
availableStorageIds
=
dataCache
.
getAvailableStorageIds
();
if
(
availableStorageIds
.
contains
(
task
.
getStorageId
()))
{
availableStorageIds
.
remove
(
task
.
getStorageId
());
}
CHECKOUT_TYPE
checkoutType
=
dataCache
.
getCheckOutType
();
Collection
<
String
>
excludePosIds
=
excludeOutPosIds
();
StoragePos
pos
=
storagePosManager
.
findPartNumberInStorages
(
availableStorageIds
,
item
.
getPn
(),
excludePosIds
,
checkoutType
);
if
(
pos
==
null
)
{
log
.
error
(
"工单["
+
orderNo
+
"],PN["
+
item
.
getPn
()
+
"]出库任务被取消,补发失败:未找到可以出库的物料 "
);
break
;
}
else
{
log
.
info
(
"工单["
+
orderNo
+
"],PN["
+
item
.
getPn
()
+
"]出库任务被取消,重新补发: 库位号=["
+
pos
.
getPosName
()
+
"],RI=["
+
pos
.
getBarcode
().
getBarcode
()
+
"] num:"
+
pos
.
getBarcode
().
getAmount
());
DataLog
newTasktask
=
newTask
(
pos
);
newTasktask
.
setSourceId
(
order
.
getId
());
newTasktask
.
setSourceName
(
order
.
getOrderNo
());
newTasktask
.
setSubSourceId
(
item
.
getId
());
newTasktask
.
setSubSourceInfo
(
item
.
getFeederInfo
());
newTasktask
.
setType
(
OP
.
CHECKOUT
);
newTasktask
.
setLightColor
(
task
.
getLightColor
());
newTasktask
.
setStatus
(
OP_STATUS
.
WAIT
.
name
());
newTasktask
.
setSingleOut
(
task
.
isSingleOut
());
taskService
.
addTaskToExecute
(
task
);
}
}
}
order
.
setTaskReelCount
(
order
.
getTaskReelCount
()
+
1
);
order
.
setTotalTaskReelCount
(
order
.
getTotalTaskReelCount
()
+
1
);
log
.
info
(
"工单["
+
orderNo
+
"]任务["
+
task
.
getPosName
()+
"]取消,补发结束,任务数["
+
order
.
getTaskReelCount
()
+
"]"
);
liteOrderManager
.
save
(
order
);
liteOrderMap
.
put
(
order
.
getOrderNo
(),
order
);
}
catch
(
Exception
ex
){
log
.
error
(
"任务["
+
task
.
getPosName
()+
"]["
+
task
.
getPartNumber
()+
"]["
+
task
.
getBarcode
()+
"]取消时,对应工单["
+
task
.
getSourceId
()+
"]["
+
task
.
getSourceName
()+
"]补发任务出错:"
+
ex
.
getMessage
());
}
return
order
;
}
public
ORDER_COLOR
getNextColor
()
{
public
ORDER_COLOR
getNextColor
()
{
//设置颜色
//设置颜色
Set
<
String
>
currentColors
=
new
HashSet
<>();
Set
<
String
>
currentColors
=
new
HashSet
<>();
...
@@ -640,4 +706,6 @@ public class LiteOrderCache {
...
@@ -640,4 +706,6 @@ public class LiteOrderCache {
}
}
return
null
;
return
null
;
}
}
}
}
src/main/java/com/neotel/smfcore/core/system/rest/bean/dto/TaskDto.java
查看文件 @
8c3d6f1
...
@@ -148,5 +148,6 @@ public class TaskDto implements Serializable {
...
@@ -148,5 +148,6 @@ public class TaskDto implements Serializable {
}
}
return
""
;
return
""
;
}
}
@ApiModelProperty
(
"位置信息,如料架编号,托盘编号,移栽编号,皮带线编号,机器人编号等"
)
private
String
locInfo
=
""
;
}
}
src/main/java/com/neotel/smfcore/custom/micron1053/bean/dto/MIBoxDto.java
查看文件 @
8c3d6f1
...
@@ -13,6 +13,8 @@ public class MIBoxDto implements Serializable {
...
@@ -13,6 +13,8 @@ public class MIBoxDto implements Serializable {
@ApiModelProperty
(
"CID"
)
@ApiModelProperty
(
"CID"
)
private
String
cid
;
private
String
cid
;
@ApiModelProperty
(
"name"
)
private
String
name
;
@ApiModelProperty
(
"料仓状态: 0=离线,1=正常运行,2=报警"
)
@ApiModelProperty
(
"料仓状态: 0=离线,1=正常运行,2=报警"
)
private
int
status
=
0
;
private
int
status
=
0
;
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/controller/MicronStatusController.java
查看文件 @
8c3d6f1
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
controller
;
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
controller
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.DateUtil
;
import
com.neotel.smfcore.common.utils.DateUtil
;
import
com.neotel.smfcore.core.device.bean.BoxStatusBean
;
import
com.neotel.smfcore.core.device.bean.BoxStatusBean
;
...
@@ -53,7 +54,7 @@ public class MicronStatusController {
...
@@ -53,7 +54,7 @@ public class MicronStatusController {
@ApiOperation
(
"设备状态页面"
)
@ApiOperation
(
"设备状态页面"
)
@GetMapping
(
"/equipView"
)
@GetMapping
(
"/equipView"
)
@AnonymousAccess
@AnonymousAccess
public
MicronEquipStatusDto
view
()
{
public
MicronEquipStatusDto
view
(
HttpServletRequest
servletRequest
)
{
MicronEquipStatusDto
dto
=
new
MicronEquipStatusDto
();
MicronEquipStatusDto
dto
=
new
MicronEquipStatusDto
();
dto
.
setMsgList
(
new
ArrayList
<>());
dto
.
setMsgList
(
new
ArrayList
<>());
dto
.
setStatusMap
(
new
HashMap
<>());
dto
.
setStatusMap
(
new
HashMap
<>());
...
@@ -83,7 +84,7 @@ public class MicronStatusController {
...
@@ -83,7 +84,7 @@ public class MicronStatusController {
for
(
String
boxName
:
for
(
String
boxName
:
boxList
)
{
boxList
)
{
//查找料仓
//查找料仓
MicronEquipStatus
s
=
getBoxEquip
(
boxName
);
MicronEquipStatus
s
=
getBoxEquip
(
boxName
,
servletRequest
.
getLocale
()
);
dto
.
getStatusMap
().
put
(
s
.
getEquipName
(),
s
.
getStatus
()
);
dto
.
getStatusMap
().
put
(
s
.
getEquipName
(),
s
.
getStatus
()
);
if
(
s
.
getMsgList
()!=
null
&&
s
.
getMsgList
().
size
()>
0
)
{
if
(
s
.
getMsgList
()!=
null
&&
s
.
getMsgList
().
size
()>
0
)
{
dto
.
getMsgList
().
addAll
(
s
.
getMsgList
());
dto
.
getMsgList
().
addAll
(
s
.
getMsgList
());
...
@@ -107,7 +108,7 @@ public class MicronStatusController {
...
@@ -107,7 +108,7 @@ public class MicronStatusController {
return
cids
;
return
cids
;
}
}
private
MicronEquipStatus
getBoxEquip
(
String
boxName
)
{
private
MicronEquipStatus
getBoxEquip
(
String
boxName
,
Locale
locale
)
{
List
<
String
>
cids
=
getCidsByBoxName
(
boxName
);
List
<
String
>
cids
=
getCidsByBoxName
(
boxName
);
MicronEquipStatus
dto
=
new
MicronEquipStatus
(
boxName
,
0
,
0
,
System
.
currentTimeMillis
(),
new
ArrayList
<>());
MicronEquipStatus
dto
=
new
MicronEquipStatus
(
boxName
,
0
,
0
,
System
.
currentTimeMillis
(),
new
ArrayList
<>());
...
@@ -131,8 +132,9 @@ public class MicronStatusController {
...
@@ -131,8 +132,9 @@ public class MicronStatusController {
dto
.
setStatus
(
2
);
dto
.
setStatus
(
2
);
}
}
if
(
ObjectUtil
.
isNotEmpty
(
s
.
getMsg
()))
{
String
msg
=
s
.
getShowMsg
(
locale
);
dto
.
getMsgList
().
add
(
new
EquipMsg
(
s
.
getCid
(),
s
.
getStatus
(),
s
.
getMsg
(),
new
Date
()));
if
(
ObjectUtil
.
isNotEmpty
(
msg
))
{
dto
.
getMsgList
().
add
(
new
EquipMsg
(
s
.
getCid
(),
s
.
getStatus
(),
msg
,
new
Date
(
s
.
getTime
())));
}
}
}
}
}
}
...
@@ -218,47 +220,67 @@ public class MicronStatusController {
...
@@ -218,47 +220,67 @@ public class MicronStatusController {
@AnonymousAccess
@AnonymousAccess
public
MIStatusDto
MIView
(
String
boxName
,
HttpServletRequest
servletRequest
)
{
public
MIStatusDto
MIView
(
String
boxName
,
HttpServletRequest
servletRequest
)
{
MIStatusDto
result
=
new
MIStatusDto
();
MIStatusDto
result
=
new
MIStatusDto
();
String
[]
cids
=
new
String
[]{};
String
[]
nameList
=
new
String
[]{};
String
robotName
=
"R1"
;
String
robotName
=
"R1"
;
if
(
boxName
.
equals
(
"MI1"
))
{
if
(
boxName
.
equals
(
"MI1"
))
{
cids
=
new
String
[]{
"M1"
,
"M2"
,
"M3"
,
"M4"
};
nameList
=
new
String
[]{
"M1"
,
"M2"
,
"M3"
,
"M4"
};
robotName
=
"R1"
;
robotName
=
"R1"
;
}
else
if
(
boxName
.
equals
(
"MI2"
))
{
}
else
if
(
boxName
.
equals
(
"MI2"
))
{
cids
=
new
String
[]{
"M5"
,
"M6"
,
"M7"
,
"M8"
};
nameList
=
new
String
[]{
"M5"
,
"M6"
,
"M7"
,
"M8"
};
robotName
=
"R2"
;
robotName
=
"R2"
;
}
}
List
<
String
>
itemKey
=
new
ArrayList
<>();
List
<
MIBoxDto
>
boxDtos
=
new
ArrayList
<>();
List
<
MIBoxDto
>
boxDtos
=
new
ArrayList
<>();
for
(
String
cid
:
for
(
String
name
:
cids
)
{
nameList
)
{
MIBoxDto
boxDto
=
new
MIBoxDto
();
List
<
String
>
cids
=
getCidsByBoxName
(
name
);
boxDto
.
setCid
(
cid
);
for
(
String
cid
:
boxDto
.
setStatus
(
0
);
cids
)
{
Storage
storage
=
dataCache
.
getStorage
(
cid
);
MIBoxDto
boxDto
=
new
MIBoxDto
();
if
(
storage
!=
null
){
boxDto
.
setCid
(
cid
);
boxDto
.
setUsageMap
(
storage
.
getUsageMap
());
boxDto
.
setStatus
(
0
);
int
useCount
=
0
,
totalCount
=
0
;
Storage
storage
=
dataCache
.
getStorage
(
cid
);
for
(
UsageItem
item
:
storage
.
getUsageMap
().
values
()
boxDto
.
setName
(
storage
.
getName
());
)
{
if
(
storage
!=
null
){
useCount
+=
item
.
getUsedCount
();
boxDto
.
setUsageMap
(
storage
.
getUsageMap
());
totalCount
+=
item
.
getTotalCount
();
int
useCount
=
0
,
totalCount
=
0
;
for
(
UsageItem
item
:
storage
.
getUsageMap
().
values
()
)
{
useCount
+=
item
.
getUsedCount
();
totalCount
+=
item
.
getTotalCount
();
if
(!
itemKey
.
contains
(
item
.
getSizeStr
()))
{
itemKey
.
add
(
item
.
getSizeStr
());
}
}
boxDto
.
setUsedCount
(
useCount
);
boxDto
.
setTotalCount
(
totalCount
);
}
}
boxDto
.
setUsedCount
(
useCount
);
boxDto
.
setTotalCount
(
totalCount
);
}
StatusBean
statusBean
=
DevicesStatusUtil
.
getStatusBean
(
cid
);
StatusBean
statusBean
=
DevicesStatusUtil
.
getStatusBean
(
cid
);
if
(
statusBean
!=
null
&&
(!
statusBean
.
timeOut
()))
{
if
(
statusBean
!=
null
&&
(!
statusBean
.
timeOut
()))
{
if
(
statusBean
.
getStatus
()
==
1
)
{
if
(
statusBean
.
getStatus
()
==
1
)
{
boxDto
.
setStatus
(
statusBean
.
getStatus
());
boxDto
.
setStatus
(
statusBean
.
getStatus
());
}
else
if
(
statusBean
.
getStatus
()
==
2
||
statusBean
.
getStatus
()
==
3
)
{
}
else
if
(
statusBean
.
getStatus
()
==
2
||
statusBean
.
getStatus
()
==
3
)
{
boxDto
.
setStatus
(
2
);
boxDto
.
setStatus
(
2
);
}
}
boxDtos
.
add
(
boxDto
);
}
}
for
(
int
i
=
0
;
i
<
boxDtos
.
size
();
i
++){
for
(
String
key
:
itemKey
){
if
(!
boxDtos
.
get
(
i
).
getUsageMap
().
containsKey
(
key
)){
UsageItem
usageItem
=
new
UsageItem
();
boxDtos
.
get
(
i
).
getUsageMap
().
put
(
key
,
usageItem
);
}
}
}
}
boxDtos
.
add
(
boxDto
);
}
}
result
.
setBoxDtoList
(
boxDtos
);
result
.
setBoxDtoList
(
boxDtos
);
MicronEquipStatus
s
=
MicronDataCache
.
getStatus
(
robotName
);
MicronEquipStatus
s
=
MicronDataCache
.
getStatus
(
robotName
);
if
(!
s
.
timeOut
())
{
if
(!
s
.
timeOut
())
{
...
@@ -275,10 +297,49 @@ public class MicronStatusController {
...
@@ -275,10 +297,49 @@ public class MicronStatusController {
@AnonymousAccess
@AnonymousAccess
public
List
<
TaskDto
>
MTView
(
HttpServletRequest
servletRequest
)
{
public
List
<
TaskDto
>
MTView
(
HttpServletRequest
servletRequest
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
is
(
OP_STATUS
.
INLINE
.
name
()));
Query
query
=
new
Query
(
Criteria
.
where
(
"status"
).
is
(
OP_STATUS
.
INLINE
.
name
()));
List
<
DataLog
>
dataLogs
=
dataLogManager
.
findByQuery
(
query
);
List
<
DataLog
>
dataLogs
=
dataLogManager
.
findByQuery
(
query
);
List
<
TaskDto
>
taskDtos
=
taskMapper
.
toDto
(
dataLogs
);
List
<
TaskDto
>
taskDtos
=
taskMapper
.
toDto
(
dataLogs
);
return
taskDtos
;
return
taskDtos
;
}
}
@ApiOperation
(
"异常看板:获取当前异常数量"
)
@GetMapping
(
"/alarmMsgCount"
)
@AnonymousAccess
public
ResultBean
alarmMsgCount
(
HttpServletRequest
servletRequest
)
{
int
count
=
0
;
//先添加设备的
List
<
MicronEquipStatus
>
statuses
=
new
ArrayList
<>();
statuses
.
addAll
(
MicronDataCache
.
equipStatusMap
.
values
());
for
(
MicronEquipStatus
s
:
statuses
)
{
if
(!
s
.
timeOut
())
{
if
(
s
.
getMsgList
()
!=
null
&&
s
.
getMsgList
().
size
()
>
0
)
{
count
+=
s
.
getMsgList
().
size
();
}
}
}
//添加料仓的
List
<
Storage
>
storages
=
new
ArrayList
<>();
storages
.
addAll
(
dataCache
.
getAllStorage
().
values
());
for
(
Storage
storage
:
storages
)
{
StatusBean
statusBean
=
DevicesStatusUtil
.
getStatusBean
(
storage
.
getCid
());
if
(
statusBean
!=
null
&&
(!
statusBean
.
timeOut
()))
{
String
msg
=
statusBean
.
getShowMsg
(
servletRequest
.
getLocale
());
if
(
ObjectUtil
.
isNotEmpty
(
msg
))
{
count
+=
1
;
}
}
}
return
ResultBean
.
newOkResult
(
count
);
}
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论