Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit a28c2ecc
由
zshaohui
编写于
2022-10-10 15:25:14 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
立臻接口优化
1 个父辈
889be16a
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
297 行增加
和
67 行删除
src/main/java/com/neotel/smfcore/common/utils/Constants.java
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
src/main/java/com/neotel/smfcore/core/storage/enums/DeviceType.java
src/main/java/com/neotel/smfcore/custom/lizhen/LizhenApi.java
src/main/java/com/neotel/smfcore/custom/lizhen/LizhenController.java
src/main/java/com/neotel/smfcore/custom/lizhen/agvBox/rest/WarehouseController.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/common/utils/Constants.java
查看文件 @
a28c2ec
...
...
@@ -135,4 +135,8 @@ public class Constants {
*/
public
static
final
String
CACHE_languageType
=
"CACHE_languageType"
;
/**
* 缺料预警配置
*/
public
static
final
String
CACHE_preWarningItem
=
"preWarningItem"
;
}
src/main/java/com/neotel/smfcore/core/barcode/service/po/Barcode.java
查看文件 @
a28c2ec
...
...
@@ -147,6 +147,11 @@ public class Barcode extends BasePo implements Serializable {
private
Date
checkOutDate
;
/**
* 日期编码(供应商)
*/
private
String
dateCode
;
/**
* 关联条码,夹具时关联相关的物料,用于入库完成时插入相关物料
*/
@Transient
...
...
src/main/java/com/neotel/smfcore/core/storage/enums/DeviceType.java
查看文件 @
a28c2ec
...
...
@@ -144,6 +144,6 @@ public enum DeviceType {
}
public
static
List
<
DeviceType
>
availableTypeList
(){
return
Lists
.
newArrayList
(
AUTO
,
LINE
,
BATCH
,
SOLDERPASTE
,
VERTICALBOX
,
SMD_XL
,
SMD_DUO
,
SMD_XLC
,
VIRTUAL
,
NL
,
NLP
,
NLM
,
AGV_BOX
);
return
Lists
.
newArrayList
(
AUTO
,
LINE
,
BATCH
,
SOLDERPASTE
,
VERTICALBOX
,
SMD_XL
,
SMD_DUO
,
SMD_XLC
,
SMD_XLR
,
VIRTUAL
,
NL
,
NLP
,
NLM
,
AGV_BOX
);
}
}
src/main/java/com/neotel/smfcore/custom/lizhen/LizhenApi.java
查看文件 @
a28c2ec
...
...
@@ -27,6 +27,30 @@ public class LizhenApi extends BaseSmfApiListener {
try
{
String
result
=
HttpHelper
.
postJson
(
reelNumUrl
,
reelId
);
log
.
info
(
"获取MES物料数量出参为:"
+
result
);
Map
<
String
,
Object
>
resultMap
=
JsonUtil
.
toMap
(
result
);
Object
status
=
resultMap
.
get
(
"status"
);
if
(
status
!=
null
){
if
(
status
.
equals
(
200
)){
Map
<
String
,
Object
>
dataMap
=
JsonUtil
.
toMap
(
resultMap
.
get
(
"data"
).
toString
());
String
reelID
=
dataMap
.
get
(
"reelID"
)
==
null
?
""
:
dataMap
.
get
(
"reelID"
).
toString
();
String
partNum
=
dataMap
.
get
(
"partNum"
)
==
null
?
""
:
dataMap
.
get
(
"partNum"
).
toString
();
String
partSpec
=
dataMap
.
get
(
"partSpec"
)
==
null
?
""
:
dataMap
.
get
(
"partSpec"
).
toString
();
int
qty
=
dataMap
.
get
(
"qty"
)
==
null
?
0
:
Integer
.
valueOf
(
dataMap
.
get
(
"qty"
).
toString
());
String
vendor
=
dataMap
.
get
(
"vendor"
)
==
null
?
""
:
dataMap
.
get
(
"vendor"
).
toString
();
String
vendorNum
=
dataMap
.
get
(
"vendorNum"
)
==
null
?
""
:
dataMap
.
get
(
"vendorNum"
).
toString
();
String
dataCode
=
dataMap
.
get
(
"dataCode"
)
==
null
?
""
:
dataMap
.
get
(
"dataCode"
).
toString
();
String
lotCode
=
dataMap
.
get
(
"lotCode"
)
==
null
?
""
:
dataMap
.
get
(
"lotCode"
).
toString
();
Barcode
barcode
=
new
Barcode
();
barcode
.
setBarcode
(
reelID
);
barcode
.
setPartNumber
(
partNum
);
barcode
.
setAmount
(
qty
);
barcode
.
setProvider
(
vendor
);
barcode
.
setProviderNumber
(
vendorNum
);
barcode
.
setDateCode
(
dataCode
);
barcode
.
setBatch
(
lotCode
);
return
barcode
;
}
}
}
catch
(
ApiException
e
)
{
e
.
printStackTrace
();
}
...
...
@@ -66,22 +90,35 @@ public class LizhenApi extends BaseSmfApiListener {
//2.禁用料接口MES提供外围系统调用
public
void
wmsCheckReelfob
(
String
checkReelfobUrl
,
Barcode
barcode
)
{
public
static
String
wmsCheckReelfob
(
String
checkReelfobUrl
,
Barcode
barcode
)
{
String
resultStr
=
"false"
;
Map
<
String
,
Object
>
paramMap
=
new
HashMap
<>();
paramMap
.
put
(
"ipn"
,
barcode
.
getPartNumber
());
paramMap
.
put
(
"reelId"
,
barcode
.
getBarcode
());
paramMap
.
put
(
"wo"
,
""
);
paramMap
.
put
(
"datecode"
,
new
SimpleDateFormat
(
"yyyyMMdd"
).
format
(
barcode
.
getProduceDate
()
));
paramMap
.
put
(
"datecode"
,
barcode
.
getDateCode
(
));
paramMap
.
put
(
"lot"
,
barcode
.
getPosName
());
paramMap
.
put
(
"vendor"
,
barcode
.
getProviderNumber
());
String
param
=
JsonUtil
.
toJsonStr
(
paramMap
);
log
.
info
(
"禁用料接口wmsCheckReelfob入参为:"
+
param
);
try
{
String
result
=
HttpHelper
.
postJson
(
checkReelfobUrl
,
paramMap
);
Map
<
String
,
Object
>
resultMap
=
JsonUtil
.
toMap
(
result
);
if
(
resultMap
!=
null
)
{
if
(
resultMap
.
get
(
"data"
)
!=
null
)
{
Map
<
String
,
Object
>
dataMap
=
JsonUtil
.
toMap
(
resultMap
.
get
(
"data"
).
toString
());
if
(
dataMap
.
get
(
"result"
)
!=
null
&&
dataMap
.
get
(
"result"
).
equals
(
true
))
{
resultStr
=
""
;
}
else
{
resultStr
=
dataMap
.
get
(
"message"
).
toString
();
}
}
}
log
.
info
(
"禁用料接口wmsCheckReelfob出参为:"
+
result
);
}
catch
(
ApiException
e
)
{
e
.
printStackTrace
();
}
return
resultStr
;
}
@Override
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/LizhenController.java
查看文件 @
a28c2ec
...
...
@@ -7,10 +7,14 @@ import com.neotel.smfcore.core.order.LiteOrderCache;
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.innerBox.bean.PreWarningItem
;
import
com.neotel.smfcore.custom.lizhen.innerBox.util.PreWarningItemCache
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.ArrayList
;
...
...
@@ -20,6 +24,7 @@ import java.util.Map;
@Slf4j
@RestController
@RequestMapping
(
"/api/Mes"
)
public
class
LizhenController
{
@Autowired
...
...
@@ -29,7 +34,7 @@ public class LizhenController {
private
LiteOrderCache
liteOrderCache
;
//1.发料明细
@PostMapping
(
"/
api/Mes/
EPickingList"
)
@PostMapping
(
"/EPickingList"
)
public
ResultBean
EPickingList
(
@RequestBody
List
<
Map
<
String
,
Object
>>
params
)
{
if
(
params
==
null
||
params
.
isEmpty
())
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueCanotNull"
,
"参数不能为空"
);
...
...
@@ -103,59 +108,28 @@ public class LizhenController {
return
ResultBean
.
newOkResult
(
""
);
}
//5.缺料预警
@PostMapping
(
"/api/Mes/MpickingList"
)
public
ResultBean
MpickingList
(
@RequestBody
Map
<
String
,
Object
>
paramMap
)
{
if
(
paramMap
.
get
(
"data"
)
==
null
){
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueCanotNull"
,
"参数不能为空"
);
@ApiOperation
(
"5.缺料预警"
)
@PostMapping
(
"/mPickingList"
)
public
ResultBean
mPickingList
(
@RequestBody
Map
<
String
,
List
<
Map
<
String
,
String
>>>
paramMap
)
{
List
<
Map
<
String
,
String
>>
datas
=
paramMap
.
get
(
"data"
);
if
(
datas
==
null
||
datas
.
isEmpty
())
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
"data不能为空"
);
}
String
data
=
JsonUtil
.
toJsonStr
(
paramMap
.
get
(
"data"
));
List
<
Map
>
params
=
JsonUtil
.
toList
(
data
,
Map
.
class
);
if
(
params
==
null
||
params
.
isEmpty
())
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueCanotNull"
,
"参数不能为空"
);
List
<
PreWarningItem
>
items
=
new
ArrayList
<>();
for
(
Map
<
String
,
String
>
data
:
datas
)
{
PreWarningItem
item
=
new
PreWarningItem
();
item
.
setMachinename
(
data
.
get
(
"machinename"
));
item
.
setStation
(
data
.
get
(
"station"
));
item
.
setSide
(
data
.
get
(
"side"
));
item
.
setSlot
(
data
.
get
(
"slot"
));
item
.
setSubslot
(
data
.
get
(
"subslot"
));
item
.
setPartnumber
(
data
.
get
(
"partnumber"
));
item
.
setLine
(
data
.
get
(
"line"
));
items
.
add
(
item
);
}
//全部必填的 进行校验
for
(
Map
<
String
,
Object
>
param
:
params
)
{
for
(
Map
.
Entry
<
String
,
Object
>
par
:
param
.
entrySet
())
{
String
parValue
=
par
.
getValue
()
==
null
?
""
:
par
.
getValue
().
toString
();
if
(
StringUtils
.
isBlank
(
parValue
)){
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueCanotNull"
,
"{}不能为空"
,
new
String
[]{
par
.
getKey
()});
}
}
}
for
(
Map
<
String
,
Object
>
param
:
params
)
{
String
id
=
param
.
get
(
"id"
)
==
null
?
""
:
param
.
get
(
"id"
).
toString
();
String
workorderno
=
param
.
get
(
"workorderno"
)
==
null
?
""
:
param
.
get
(
"workorderno"
).
toString
();
String
line
=
param
.
get
(
"line"
)
==
null
?
""
:
param
.
get
(
"line"
).
toString
();
String
machinename
=
param
.
get
(
"machinename"
)
==
null
?
""
:
param
.
get
(
"machinename"
).
toString
();
String
station
=
param
.
get
(
"station"
)
==
null
?
""
:
param
.
get
(
"station"
).
toString
();
String
side
=
param
.
get
(
"side"
)
==
null
?
""
:
param
.
get
(
"side"
).
toString
();
String
subslot
=
param
.
get
(
"subslot"
)
==
null
?
""
:
param
.
get
(
"subslot"
).
toString
();
String
partnumber
=
param
.
get
(
"partnumber"
)
==
null
?
""
:
param
.
get
(
"partnumber"
).
toString
();
String
leftqty
=
param
.
get
(
"leftqty"
)
==
null
?
""
:
param
.
get
(
"leftqty"
).
toString
();
String
leftpcbs
=
param
.
get
(
"leftpcbs"
)
==
null
?
""
:
param
.
get
(
"leftpcbs"
).
toString
();
String
lefttimes
=
param
.
get
(
"lefttimes"
)
==
null
?
""
:
param
.
get
(
"lefttimes"
).
toString
();
String
priority
=
param
.
get
(
"priority"
)
==
null
?
""
:
param
.
get
(
"priority"
).
toString
();
String
op
=
param
.
get
(
"op"
)
==
null
?
""
:
param
.
get
(
"op"
).
toString
();
String
productboards
=
param
.
get
(
"productboards"
)
==
null
?
""
:
param
.
get
(
"productboards"
).
toString
();
String
reel
=
param
.
get
(
"reel"
)
==
null
?
""
:
param
.
get
(
"reel"
).
toString
();
LiteOrder
liteOrder
=
new
LiteOrder
();
liteOrder
.
setSo
(
id
);
liteOrder
.
setOrderNo
(
workorderno
);
liteOrder
.
setLine
(
line
);
LiteOrderItem
liteOrderItem
=
new
LiteOrderItem
();
liteOrderItem
.
setSide
(
side
);
liteOrderItem
.
setFeederInfo
(
station
);
liteOrderItem
.
setPn
(
partnumber
);
liteOrderItem
.
setNeedNum
(
Integer
.
valueOf
(
leftqty
));
liteOrderItem
.
setRi
(
reel
);
liteOrder
.
setOrderItems
(
Arrays
.
asList
(
liteOrderItem
));
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
if
(
items
!=
null
&&
!
items
.
isEmpty
())
{
PreWarningItemCache
.
addItems
(
items
);
}
return
ResultBean
.
newOkResult
(
""
);
}
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/agvBox/rest/WarehouseController.java
查看文件 @
a28c2ec
...
...
@@ -89,6 +89,7 @@ public class WarehouseController {
station
.
setName
(
name
);
station
.
setGrLabel
(
grLabel
);
station
.
setReelNum
(
Integer
.
valueOf
(
num
));
station
.
setReelCurrentNum
(
0
);
StationCacheUtil
.
updateStation
(
station
);
return
ResultBean
.
newOkResult
(
""
);
}
...
...
@@ -197,14 +198,14 @@ public class WarehouseController {
return
ResultBean
.
newErrorResult
(-
1
,
""
,
"请先扫描料箱,再扫描条码"
);
}
StationCacheUtil
.
saveReelToBoxCode
(
station
);
String
boxBarcode
=
lastScanBoxCode
.
substring
(
0
,
c
ode
.
indexOf
(
"-"
));
//获取到料箱条码
String
boxBarcode
=
lastScanBoxCode
.
substring
(
0
,
lastScanBoxC
ode
.
indexOf
(
"-"
));
//获取到料箱条码
Barcode
pidBarcode
=
barcodeManager
.
findByBarcode
(
boxBarcode
);
barcode
.
setHostBarcodeId
(
pidBarcode
.
getId
());
barcode
.
setPosName
(
lastScanBoxCode
);
finishTask
(
pidBarcode
,
1
,
null
,
barcode
,
1
);
}
}
return
ResultBean
.
newOkResult
(
station
.
getLastScanBoxCode
(
));
return
ResultBean
.
newOkResult
(
StationCacheUtil
.
getStation
(
name
));
}
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/rest/InnerBoxRestController.java
查看文件 @
a28c2ec
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
innerBox
.
rest
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.Collection
;
/**
* @author sunke
* @date 2022/10/9 3:20 PM
*/
@Slf4j
@RestController
@RequestMapping
(
"/service/store/innerBox"
)
public
class
InnerBoxRestController
{
@Autowired
private
TaskService
taskService
;
@ApiOperation
(
"IA 出库更新任务状态"
)
@RequestMapping
(
"/updateLocInfo"
)
public
ResultBean
updateLocInfo
(
HttpServletRequest
request
)
{
String
barcode
=
request
.
getHeader
(
"barcode"
);
String
status
=
request
.
getHeader
(
"status"
);
String
loc
=
request
.
getHeader
(
"loc"
);
log
.
info
(
"IA 出库更新任务状态--barcode:{},status:{},loc:{}"
,
barcode
,
status
,
loc
);
//获取到当前执行的任务
DataLog
opTask
=
null
;
Collection
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
for
(
DataLog
task
:
allTasks
)
{
if
(
barcode
.
startsWith
(
task
.
getBarcode
()))
{
if
(!
task
.
isCancel
()
&&
!
task
.
isFinished
())
{
opTask
=
task
;
}
break
;
}
}
if
(
opTask
==
null
)
{
return
ResultBean
.
newErrorResult
(
303
,
"smfcore.task.notExist"
,
"任务不存在"
);
}
status
=
status
.
toUpperCase
();
log
.
info
(
"更新任务状态:{}-->{}"
,
opTask
.
getStatus
(),
status
);
OP_STATUS
updateStatus
=
OP_STATUS
.
valueOf
(
status
);
if
(
updateStatus
!=
null
){
opTask
.
setStatus
(
status
);
if
(
OP_STATUS
.
EXECUTING
.
name
().
equals
(
status
)){
taskService
.
updateQueueTask
(
opTask
);
}
}
return
null
;
}
@ApiOperation
(
"IB 获取料箱状态信息"
)
@RequestMapping
(
"/getBoxStatus"
)
public
ResultBean
getBoxStatus
(
HttpServletRequest
request
){
return
null
;
}
@ApiOperation
(
"IC 获取料架标签打印信息"
)
@RequestMapping
(
"/getPrintLabel"
)
public
ResultBean
getPrintLabel
(
HttpServletRequest
request
){
return
null
;
}
@ApiOperation
(
"ID 料架标签打印完成通知"
)
@RequestMapping
(
"/finishPrintLabel"
)
public
ResultBean
finishPrintLabel
(
HttpServletRequest
request
){
return
null
;
}
@ApiOperation
(
"IE 贴标前获取站位信息"
)
@RequestMapping
(
"/getFeederInfo"
)
public
ResultBean
getFeederInfo
(
HttpServletRequest
request
){
return
null
;
}
}
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/util/PreWarningItemCache.java
查看文件 @
a28c2ec
package
com
.
neotel
.
smfcore
.
custom
.
lizhen
.
innerBox
.
util
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.StringUtils
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
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.enums.DeviceType
;
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.StoragePos
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.custom.lizhen.LizhenApi
;
import
com.neotel.smfcore.custom.lizhen.innerBox.bean.PreWarningItem
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.logging.log4j.util.Strings
;
import
org.springframework.beans.factory.annotation.Autowired
;
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.stereotype.Service
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.*
;
import
java.util.concurrent.CopyOnWriteArrayList
;
import
java.util.concurrent.atomic.AtomicLong
;
import
java.util.stream.Collectors
;
/**
* 机台预警信息缓存
...
...
@@ -22,6 +35,7 @@ import java.util.concurrent.CopyOnWriteArrayList;
* @date 2022/10/9 3:31 PM
*/
@Slf4j
@Service
public
class
PreWarningItemCache
{
/**
...
...
@@ -35,6 +49,11 @@ public class PreWarningItemCache {
private
static
DataCache
dataCache
;
private
static
ILiteOrderManager
liteOrderManager
;
private
static
IStoragePosManager
storagePosManager
;
private
static
List
<
String
>
outBarcodeList
=
new
ArrayList
<>();
/**
* 添加到预警列表缓存中
...
...
@@ -67,12 +86,16 @@ public class PreWarningItemCache {
String
firstItemLine
=
""
;
//每次最多出多少盘
int
maxReelCount
=
30
;
//如果取不到,从数据库中取
if
(
queueItemList
==
null
||
queueItemList
.
isEmpty
()){
queueItemList
=
dataCache
.
getCache
(
Constants
.
CACHE_preWarningItem
);
}
for
(
PreWarningItem
preWarningItem
:
queueItemList
)
{
String
itemLine
=
preWarningItem
.
getLine
();
if
(
Strings
.
isNotBlank
(
itemLine
)){
if
(
firstItemLine
.
isEmpty
())
{
if
(
firstItemLine
.
isEmpty
())
{
firstItemLine
=
itemLine
;
if
(
preWarningItem
.
getReceiveDate
().
getTime
()
-
System
.
currentTimeMillis
()
<
1
*
60
*
1000
)
{
if
(
System
.
currentTimeMillis
()
-
preWarningItem
.
getReceiveDate
().
getTime
()
<
1
*
60
*
1000
)
{
//不到1分钟,暂不执行
return
;
}
...
...
@@ -94,20 +117,112 @@ public class PreWarningItemCache {
}
}
/**
* 根据预警信息挑选物料, 生成工单任务并执行
* @param lineItems
*/
private
static
void
createAndExecuteLiteOrder
(
List
<
PreWarningItem
>
lineItems
){
private
static
void
createAndExecuteLiteOrder
(
List
<
PreWarningItem
>
lineItems
)
{
//TODO: 挑选物料,生成工单任务并执行
//开始对线别进行分组
Map
<
String
,
List
<
PreWarningItem
>>
lineMap
=
lineItems
.
stream
().
collect
(
Collectors
.
groupingBy
(
PreWarningItem:
:
getLine
));
for
(
Map
.
Entry
<
String
,
List
<
PreWarningItem
>>
lineEntry
:
lineMap
.
entrySet
())
{
String
line
=
lineEntry
.
getKey
();
//线别
List
<
PreWarningItem
>
linePreWarningItem
=
lineEntry
.
getValue
();
//处理线别需求单
LiteOrder
liteOrder
=
new
LiteOrder
();
liteOrder
.
setType
(
2
);
liteOrder
.
setLine
(
line
);
liteOrder
.
setOrderNo
(
getSeq
());
liteOrder
.
setSo
(
getSeq
());
List
<
LiteOrderItem
>
orderItems
=
new
ArrayList
<>();
for
(
PreWarningItem
item
:
linePreWarningItem
)
{
Barcode
barcode
=
getChooseReel
(
item
);
//获取到需要出库的barcode
if
(
barcode
!=
null
)
{
LiteOrderItem
orderItem
=
new
LiteOrderItem
();
orderItem
.
setRi
(
barcode
.
getBarcode
());
orderItem
.
setPn
(
item
.
getPartnumber
());
orderItem
.
setNeedNum
(
1
);
orderItem
.
setSide
(
item
.
getSide
());
orderItem
.
setFeederInfo
(
item
.
getSlot
());
orderItem
.
setTableNo
(
item
.
getMachinename
());
orderItems
.
add
(
orderItem
);
}
else
{
LiteOrderItem
orderItem
=
new
LiteOrderItem
();
orderItem
.
setRi
(
item
.
getPartnumber
());
orderItem
.
setPn
(
item
.
getPartnumber
());
orderItem
.
setNeedNum
(
0
);
orderItem
.
setSide
(
item
.
getSide
());
orderItem
.
setFeederInfo
(
item
.
getSlot
());
orderItem
.
setTableNo
(
item
.
getMachinename
());
orderItems
.
add
(
orderItem
);
}
}
if
(
orderItems
!=
null
&&
!
orderItems
.
isEmpty
())
{
liteOrder
.
setOrderItems
(
orderItems
);
liteOrder
.
setTaskReelCount
(
orderItems
.
size
());
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderManager
.
save
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
}
}
}
private
static
synchronized
void
updateItem
(
List
<
PreWarningItem
>
items
,
boolean
remove
){
if
(
remove
){
queueItemList
.
remove
(
items
);
}
else
{
private
static
Barcode
getChooseReel
(
PreWarningItem
item
)
{
final
int
limitNum
=
5
;
List
<
String
>
passBarcodes
=
new
ArrayList
<>();
String
partnumber
=
item
.
getPartnumber
();
boolean
chooseFlag
=
true
;
while
(
chooseFlag
)
{
Query
query
=
new
Query
();
Criteria
criteria
=
new
Criteria
();
//查询最先入的,前5条
criteria
.
where
(
"barcode"
).
exists
(
true
).
and
(
"enabled"
).
is
(
true
);
//可用;
if
(
passBarcodes
!=
null
&&
!
passBarcodes
.
isEmpty
())
{
criteria
.
and
(
"barcode.subCodeList.barcode"
).
nin
(
passBarcodes
);
}
if
(
outBarcodeList
!=
null
&&
!
outBarcodeList
.
isEmpty
())
{
criteria
.
and
(
"barcode.subCodeList.barcode"
).
nin
(
outBarcodeList
);
}
criteria
.
and
(
"barcode.subCodeList.partNumber"
).
is
(
partnumber
);
query
.
addCriteria
(
criteria
);
query
.
with
(
Sort
.
by
(
Sort
.
Direction
.
ASC
,
"canCheckOutTime"
,
"barcode.subCodeList.usedCount"
));
query
.
limit
(
limitNum
);
List
<
StoragePos
>
storagePoss
=
storagePosManager
.
findByQuery
(
query
);
if
(
storagePoss
==
null
||
storagePoss
.
isEmpty
())
{
//如果没有,则退出
chooseFlag
=
false
;
}
for
(
StoragePos
pos
:
storagePoss
)
{
Barcode
barcode
=
pos
.
getBarcode
();
List
<
Barcode
>
subCodeList
=
barcode
.
getSubCodeList
();
for
(
Barcode
subcode
:
subCodeList
)
{
//验证立臻接口,选择做成单个验证,后期需要修改为多个验证
String
result
=
LizhenApi
.
wmsCheckReelfob
(
""
,
subcode
);
if
(
StringUtils
.
isBlank
(
result
))
{
outBarcodeList
.
add
(
subcode
.
getBarcode
());
return
subcode
;
}
else
{
passBarcodes
.
add
(
subcode
.
getBarcode
());
}
}
}
}
return
null
;
}
private
static
synchronized
void
updateItem
(
List
<
PreWarningItem
>
items
,
boolean
remove
)
{
if
(
remove
)
{
for
(
PreWarningItem
item
:
items
)
{
queueItemList
.
remove
(
item
);
}
}
else
{
queueItemList
.
addAll
(
items
);
}
dataCache
.
updateCache
(
Constants
.
CACHE_preWarningItem
,
queueItemList
);
}
private
static
boolean
processing
=
false
;
...
...
@@ -144,4 +259,18 @@ public class PreWarningItemCache {
public
void
setDataCache
(
DataCache
dataCache
)
{
PreWarningItemCache
.
dataCache
=
dataCache
;
}
@Autowired
public
void
setILiteOrderManager
(
ILiteOrderManager
liteOrderManager
)
{
PreWarningItemCache
.
liteOrderManager
=
liteOrderManager
;
}
@Autowired
public
void
setIStoragePosManager
(
IStoragePosManager
storagePosManager
)
{
PreWarningItemCache
.
storagePosManager
=
storagePosManager
;
}
private
static
String
getSeq
(){
return
UUID
.
randomUUID
().
toString
();
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论