Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit de1aac41
由
zshaohui
编写于
2025-01-16 14:37:18 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
新增机器人接料机接口
1 个父辈
0c346fd8
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
243 行增加
和
6 行删除
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/order/rest/bean/dto/OrderDto.java
src/main/java/com/neotel/smfcore/core/order/service/manager/ILiteOrderManager.java
src/main/java/com/neotel/smfcore/core/order/service/manager/impl/LiteOrderManagerImpl.java
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/bean/AgvLineDto.java
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/rest/InnerBoxRestController.java
src/main/java/com/neotel/smfcore/custom/lizhen/third/robot/bean/RobotAskReelBox.java
src/main/java/com/neotel/smfcore/custom/lizhen/third/robot/bean/RobotAskReelBoxList.java
src/main/java/com/neotel/smfcore/custom/lizhen/third/robot/controller/RobotController.java
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
查看文件 @
de1aac4
...
@@ -676,10 +676,10 @@ public class DataCache {
...
@@ -676,10 +676,10 @@ public class DataCache {
public
List
<
String
>
getAvailableStorageIds
(){
public
List
<
String
>
getAvailableStorageIds
(){
List
<
String
>
availableStorageIds
=
new
ArrayList
<>();
List
<
String
>
availableStorageIds
=
new
ArrayList
<>();
for
(
Storage
storage
:
getAllStorage
().
values
())
{
for
(
Storage
storage
:
getAllStorage
().
values
())
{
StatusBean
bean
=
DevicesStatusUtil
.
getStatusBean
(
storage
.
getCid
());
/*
StatusBean bean = DevicesStatusUtil.getStatusBean(storage.getCid());
if (bean == null || bean.timeOut() || !bean.isAvailable()) {
if (bean == null || bean.timeOut() || !bean.isAvailable()) {
continue;
continue;
}
}
*/
availableStorageIds
.
add
(
storage
.
getId
());
availableStorageIds
.
add
(
storage
.
getId
());
}
}
return
availableStorageIds
;
return
availableStorageIds
;
...
...
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
de1aac4
...
@@ -169,7 +169,7 @@ public class LiteOrderCache {
...
@@ -169,7 +169,7 @@ public class LiteOrderCache {
for
(
LiteOrder
order
:
for
(
LiteOrder
order
:
liteOrders
)
{
liteOrders
)
{
if
(
order
.
isNew
()
||
order
.
isTaskFinished
())
{
if
(
order
.
isNew
()
||
order
.
isTaskFinished
())
{
if
(
order
.
isTaskFinished
()
&&
order
.
isMaiZheng
(
)){
if
(
order
.
isTaskFinished
()
&&
(
order
.
isMaiZheng
()
||
order
.
isRobot
()
)){
}
else
{
}
else
{
//判断是否到达时间
//判断是否到达时间
...
...
src/main/java/com/neotel/smfcore/core/order/rest/bean/dto/OrderDto.java
查看文件 @
de1aac4
...
@@ -116,4 +116,6 @@ public class OrderDto implements Serializable {
...
@@ -116,4 +116,6 @@ public class OrderDto implements Serializable {
@ApiModelProperty
(
"是否迈征"
)
@ApiModelProperty
(
"是否迈征"
)
private
boolean
maiZheng
=
false
;
private
boolean
maiZheng
=
false
;
private
boolean
robot
=
false
;
}
}
src/main/java/com/neotel/smfcore/core/order/service/manager/ILiteOrderManager.java
查看文件 @
de1aac4
...
@@ -21,4 +21,6 @@ public interface ILiteOrderManager extends IBaseManager<LiteOrder> {
...
@@ -21,4 +21,6 @@ public interface ILiteOrderManager extends IBaseManager<LiteOrder> {
List
<
LiteOrder
>
findByQueryAndPartNumber
(
Query
q
,
String
partNumber
);
List
<
LiteOrder
>
findByQueryAndPartNumber
(
Query
q
,
String
partNumber
);
LiteOrder
batchCheckOut
(
Set
<
TacticsOutDto
>
outDtoSet
);
LiteOrder
batchCheckOut
(
Set
<
TacticsOutDto
>
outDtoSet
);
LiteOrder
findOne
(
Query
query
);
}
}
src/main/java/com/neotel/smfcore/core/order/service/manager/impl/LiteOrderManagerImpl.java
查看文件 @
de1aac4
...
@@ -159,6 +159,11 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
...
@@ -159,6 +159,11 @@ public class LiteOrderManagerImpl implements ILiteOrderManager {
}
}
@Override
@Override
public
LiteOrder
findOne
(
Query
query
)
{
return
liteOrderDao
.
findOne
(
query
);
}
@Override
public
PageData
<
LiteOrder
>
findByPage
(
Query
query
,
Pageable
pageable
)
{
public
PageData
<
LiteOrder
>
findByPage
(
Query
query
,
Pageable
pageable
)
{
int
totalCount
=
liteOrderDao
.
countByQuery
(
query
);
int
totalCount
=
liteOrderDao
.
countByQuery
(
query
);
List
<
LiteOrder
>
list
=
liteOrderDao
.
findByQuery
(
query
,
pageable
);
List
<
LiteOrder
>
list
=
liteOrderDao
.
findByQuery
(
query
,
pageable
);
...
...
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
查看文件 @
de1aac4
...
@@ -162,6 +162,11 @@ public class LiteOrder extends BasePo implements Serializable {
...
@@ -162,6 +162,11 @@ public class LiteOrder extends BasePo implements Serializable {
*/
*/
private
boolean
maiZheng
=
false
;
private
boolean
maiZheng
=
false
;
/**
* 是否机器人
*/
private
boolean
robot
=
false
;
private
boolean
transReelBox
=
false
;
private
boolean
transReelBox
=
false
;
...
@@ -176,7 +181,10 @@ public class LiteOrder extends BasePo implements Serializable {
...
@@ -176,7 +181,10 @@ public class LiteOrder extends BasePo implements Serializable {
private
String
startTime
;
private
String
startTime
;
private
String
reelBoxId
;
private
String
reelBoxId
;
//迈征额外参数
private
String
repoOrder
;
private
String
cacheID
;
//private String reelBoxID;
public
void
setClosed
(
boolean
value
){
public
void
setClosed
(
boolean
value
){
this
.
closed
=
value
;
this
.
closed
=
value
;
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/bean/AgvLineDto.java
0 → 100644
查看文件 @
de1aac4
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
innerBox
.
bean
;
import
lombok.Data
;
@Data
public
class
AgvLineDto
extends
StorageExport
{
private
boolean
maiZheng
=
false
;
private
boolean
robot
=
false
;
}
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/rest/InnerBoxRestController.java
查看文件 @
de1aac4
...
@@ -24,6 +24,7 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos;
...
@@ -24,6 +24,7 @@ import com.neotel.smfcore.core.storage.service.po.StoragePos;
import
com.neotel.smfcore.core.system.service.manager.IDataLogManager
;
import
com.neotel.smfcore.core.system.service.manager.IDataLogManager
;
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.TaskService
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.custom.lizhen.innerBox.bean.AgvLineDto
;
import
com.neotel.smfcore.custom.lizhen.innerBox.bean.StorageExport
;
import
com.neotel.smfcore.custom.lizhen.innerBox.bean.StorageExport
;
import
com.neotel.smfcore.custom.lizhen.innerBox.util.StorageExportUtil
;
import
com.neotel.smfcore.custom.lizhen.innerBox.util.StorageExportUtil
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
...
@@ -531,7 +532,23 @@ public class InnerBoxRestController {
...
@@ -531,7 +532,23 @@ public class InnerBoxRestController {
storageExport
=
StorageExportUtil
.
getExport
(
export
);
storageExport
=
StorageExportUtil
.
getExport
(
export
);
}
}
log
.
info
(
export
+
"获取目的地信息:"
+
JSON
.
toJSONString
(
storageExport
));
log
.
info
(
export
+
"获取目的地信息:"
+
JSON
.
toJSONString
(
storageExport
));
return
ResultBean
.
newOkResult
(
storageExport
);
AgvLineDto
agvLineDto
=
new
AgvLineDto
();
agvLineDto
.
setLine
(
storageExport
.
getLine
());
agvLineDto
.
setDisable
(
storageExport
.
isDisable
());
agvLineDto
.
setMaterial
(
storageExport
.
getMaterial
());
agvLineDto
.
setHSerial
(
storageExport
.
getHSerial
());
agvLineDto
.
setRemainTaskCount
(
storageExport
.
getRemainTaskCount
());
String
hSerial
=
storageExport
.
getHSerial
();
if
(
StringUtils
.
isNotEmpty
(
hSerial
)){
LiteOrder
liteOrder
=
liteOrderManager
.
findOne
(
new
Query
(
Criteria
.
where
(
"orderNo"
).
is
(
hSerial
)));
if
(
liteOrder
!=
null
){
agvLineDto
.
setMaiZheng
(
liteOrder
.
isMaiZheng
());
agvLineDto
.
setRobot
(
liteOrder
.
isRobot
());
}
}
return
ResultBean
.
newOkResult
(
agvLineDto
);
}
}
@ApiOperation
(
"料箱离开工位"
)
@ApiOperation
(
"料箱离开工位"
)
...
@@ -573,7 +590,7 @@ public class InnerBoxRestController {
...
@@ -573,7 +590,7 @@ public class InnerBoxRestController {
Collection
<
LiteOrder
>
liteOrders
=
liteOrderCache
.
getAllLiteOrder
();
Collection
<
LiteOrder
>
liteOrders
=
liteOrderCache
.
getAllLiteOrder
();
liteOrders
=
liteOrders
.
stream
().
sorted
(
Comparator
.
comparing
(
LiteOrder
::
getCreateDate
)).
collect
(
Collectors
.
toList
());
liteOrders
=
liteOrders
.
stream
().
sorted
(
Comparator
.
comparing
(
LiteOrder
::
getCreateDate
)).
collect
(
Collectors
.
toList
());
for
(
LiteOrder
liteOrder
:
liteOrders
)
{
for
(
LiteOrder
liteOrder
:
liteOrders
)
{
if
(!
liteOrder
.
isMaiZheng
())
{
if
(!
liteOrder
.
isMaiZheng
()
&&
!
liteOrder
.
isRobot
()
)
{
if
(
liteOrder
.
isNew
()
||
liteOrder
.
isTaskFinished
())
{
if
(
liteOrder
.
isNew
()
||
liteOrder
.
isTaskFinished
())
{
if
(
storageExport
.
getLine
().
equals
(
liteOrder
.
getLine
()))
{
if
(
storageExport
.
getLine
().
equals
(
liteOrder
.
getLine
()))
{
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
liteOrder
.
getOrderNo
(),
false
,
export
);
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
liteOrder
.
getOrderNo
(),
false
,
export
);
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/third/robot/bean/RobotAskReelBox.java
0 → 100644
查看文件 @
de1aac4
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
third
.
robot
.
bean
;
import
com.neotel.smfcore.custom.lizhen.third.maicheng.bean.AskReelBoxList
;
import
lombok.Data
;
import
java.util.List
;
@Data
public
class
RobotAskReelBox
{
private
String
RepoOrder
;
private
String
CacheID
;
private
String
ReelBoxID
;
private
String
Count
;
private
String
StartTime
;
private
java
.
util
.
List
<
RobotAskReelBoxList
>
List
;
}
src/main/java/com/neotel/smfcore/custom/lizhen/third/robot/bean/RobotAskReelBoxList.java
0 → 100644
查看文件 @
de1aac4
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
third
.
robot
.
bean
;
import
lombok.Data
;
@Data
public
class
RobotAskReelBoxList
{
private
String
ID
;
private
String
WORKORDERNO
;
private
String
LINE
;
private
String
MACHINENAME
;
private
String
STATION
;
private
String
SIDE
;
private
String
SLOT
;
private
String
SUBSLOT
;
private
String
PARTNUMBER
;
private
String
LEFTQTY
;
private
String
LEFTPCBS
;
private
String
LEFTTIMES
;
private
String
PRIORITY
;
private
String
OP
;
private
String
PRODUCTBOARDS
;
private
String
REEL
;
private
String
STATUS
;
private
String
MACHINETYPE
;
private
String
RECIEVETYPE
;
private
String
VENDOR
;
private
String
Pitch
;
private
String
Num
;
}
src/main/java/com/neotel/smfcore/custom/lizhen/third/robot/controller/RobotController.java
0 → 100644
查看文件 @
de1aac4
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
third
.
robot
.
controller
;
import
cn.hutool.core.util.NumberUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.google.common.collect.Maps
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
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.custom.lizhen.third.maicheng.bean.AskReelBox
;
import
com.neotel.smfcore.custom.lizhen.third.maicheng.bean.AskReelBoxList
;
import
com.neotel.smfcore.custom.lizhen.third.robot.bean.RobotAskReelBox
;
import
com.neotel.smfcore.custom.lizhen.third.robot.bean.RobotAskReelBoxList
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.annotation.PostConstruct
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.ScheduledExecutorService
;
import
java.util.concurrent.TimeUnit
;
@Slf4j
@RestController
@RequestMapping
(
"/robot"
)
public
class
RobotController
{
@Autowired
private
ILiteOrderManager
liteOrderManager
;
@Autowired
private
ILiteOrderItemManager
liteOrderItemManager
;
@Autowired
private
LiteOrderCache
liteOrderCache
;
Map
<
String
,
RobotAskReelBox
>
askReelBoxMap
=
Maps
.
newConcurrentMap
();
ScheduledExecutorService
scheduledThreadPool
=
Executors
.
newScheduledThreadPool
(
1
);
//定时执行请求
@PostConstruct
void
init
()
{
scheduledThreadPool
.
scheduleAtFixedRate
(()
->
{
if
(
askReelBoxMap
!=
null
&&
!
askReelBoxMap
.
isEmpty
())
{
for
(
Map
.
Entry
<
String
,
RobotAskReelBox
>
entry
:
askReelBoxMap
.
entrySet
())
{
log
.
info
(
"开始处理:"
+
entry
.
getKey
()
+
"的数据"
);
RobotAskReelBox
askReelBox
=
entry
.
getValue
();
String
result
=
createRobotOrder
(
entry
.
getKey
(),
askReelBox
);
//maiZhengApi.prepareReelBox(entry.getKey(), result,askReelBox.getStartTime());
log
.
info
(
"处理结束:"
+
entry
.
getKey
()
+
"的数据,结果为:"
+
result
);
}
askReelBoxMap
.
clear
();
}
},
10
,
5
,
TimeUnit
.
SECONDS
);
}
@ApiOperation
(
"机器人接料机请求数据"
)
@RequestMapping
(
"/askReelBox"
)
@AnonymousAccess
public
Map
<
String
,
String
>
askReelBox
(
@RequestBody
RobotAskReelBox
askReelBox
)
{
log
.
info
(
"收到机器人请求数据信息为:"
+
JSON
.
toJSONString
(
askReelBox
));
log
.
info
(
"数据先加载到缓存中,定时处理"
);
askReelBoxMap
.
put
(
askReelBox
.
getRepoOrder
(),
askReelBox
);
Map
<
String
,
String
>
resultMap
=
new
HashMap
<>();
resultMap
.
put
(
"RepoOrder"
,
askReelBox
.
getRepoOrder
());
resultMap
.
put
(
"Result"
,
"OK"
);
return
resultMap
;
}
private
String
createRobotOrder
(
String
guid
,
RobotAskReelBox
askReelBox
)
{
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
guid
);
if
(
liteOrder
==
null
)
{
List
<
RobotAskReelBoxList
>
boxList
=
askReelBox
.
getList
();
if
(
boxList
==
null
||
boxList
.
isEmpty
())
{
log
.
info
(
guid
+
"List为空"
);
askReelBoxMap
.
remove
(
guid
);
return
"List不能为空"
;
}
}
else
{
if
(
liteOrder
.
getOrderItems
()
!=
null
&&
!
liteOrder
.
getOrderItems
().
isEmpty
())
{
log
.
info
(
guid
+
"已经存在"
);
askReelBoxMap
.
remove
(
guid
);
return
guid
+
"已经存在"
;
}
}
if
(
liteOrder
==
null
)
{
liteOrder
=
new
LiteOrder
();
}
liteOrder
.
setOrderNo
(
askReelBox
.
getRepoOrder
());
liteOrder
.
setCacheID
(
askReelBox
.
getCacheID
());
liteOrder
.
setRepoOrder
(
askReelBox
.
getRepoOrder
());
liteOrder
.
setReelBoxId
(
askReelBox
.
getReelBoxID
());
liteOrder
.
setCount
(
askReelBox
.
getCount
());
liteOrder
.
setStartTime
(
askReelBox
.
getStartTime
());
liteOrder
.
setRobot
(
true
);
liteOrder
=
liteOrderManager
.
save
(
liteOrder
);
int
totalReelCount
=
0
;
//开始设置工单数据
List
<
LiteOrderItem
>
orderItemList
=
new
ArrayList
<>();
for
(
RobotAskReelBoxList
box
:
askReelBox
.
getList
())
{
LiteOrderItem
item
=
new
LiteOrderItem
();
item
.
setWarningItemId
(
box
.
getID
());
item
.
setMo
(
box
.
getWORKORDERNO
());
if
(
StringUtils
.
isBlank
(
liteOrder
.
getLine
())
&&
StringUtils
.
isNotBlank
(
box
.
getLINE
()))
{
liteOrder
.
setLine
(
box
.
getLINE
());
}
item
.
setLine
(
box
.
getLINE
());
item
.
setMachineName
(
box
.
getMACHINENAME
());
item
.
setStation
(
box
.
getSTATION
());
item
.
setSide
(
box
.
getSIDE
());
item
.
setSlot
(
box
.
getSLOT
());
item
.
setSubSlot
(
box
.
getSUBSLOT
());
item
.
setPn
(
box
.
getPARTNUMBER
());
item
.
setReel
(
box
.
getREEL
());
item
.
setOrderId
(
liteOrder
.
getId
());
item
.
setOrderNo
(
liteOrder
.
getOrderNo
());
int
num
=
NumberUtil
.
parseInt
(
box
.
getNum
());
item
.
setNeedReelCount
(
num
);
totalReelCount
=
totalReelCount
+
num
;
orderItemList
.
add
(
item
);
}
orderItemList
=
(
List
<
LiteOrderItem
>)
liteOrderItemManager
.
batchSave
(
orderItemList
);
liteOrder
.
setOrderItems
(
orderItemList
);
liteOrder
.
setTotalTaskReelCount
(
totalReelCount
);
liteOrder
=
liteOrderManager
.
save
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
log
.
info
(
guid
+
"工单任务已经生成,任务数量为:"
+
orderItemList
.
size
());
return
"OK"
;
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论