Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit e54d5eac
由
LN
编写于
2023-07-10 10:09:38 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
紧急出库 发给料仓出库时锁定位置
1 个父辈
308cbb27
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
148 行增加
和
80 行删除
src/main/java/com/neotel/smfcore/core/device/handler/impl/BaseDeviceHandler.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/LineBoxHandler.java
src/main/java/com/neotel/smfcore/core/shelf/bean/ShelfInfo.java
src/main/java/com/neotel/smfcore/core/shelf/rest/TaskShelfController.java
src/main/java/com/neotel/smfcore/core/shelf/util/TaskShelfUtil.java
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
src/main/java/com/neotel/smfcore/core/device/handler/impl/BaseDeviceHandler.java
查看文件 @
e54d5ea
...
...
@@ -34,6 +34,7 @@ import com.neotel.smfcore.core.selfAudit.enums.SELFAUDIT_STATUS;
import
com.neotel.smfcore.core.selfAudit.service.manager.ISelfAuditManager
;
import
com.neotel.smfcore.core.selfAudit.service.po.SelfAudit
;
import
com.neotel.smfcore.core.selfAudit.util.SelfAuditUtil
;
import
com.neotel.smfcore.core.shelf.util.TaskShelfUtil
;
import
com.neotel.smfcore.core.storage.enums.DeviceType
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
...
...
@@ -984,6 +985,10 @@ public class BaseDeviceHandler implements IDeviceHandler {
outTask
.
setStatus
(
OP_STATUS
.
EXECUTING
.
name
());
taskService
.
updateQueueTask
(
outTask
);
//如果是非工单任务,且还未绑定料架,绑定位置
if
(
ObjectUtil
.
isEmpty
(
outTask
.
getSourceName
())&&
ObjectUtil
.
isEmpty
(
outTask
.
getTempRfid
())){
TaskShelfUtil
.
addLoc
(
outTask
);
}
statusBean
.
setOp
(
OP
.
CHECKOUT
);
String
posName
=
outTask
.
getPosName
();
Barcode
codeObj
=
barcodeManager
.
findByBarcode
(
outTask
.
getBarcode
());
...
...
src/main/java/com/neotel/smfcore/core/device/handler/impl/LineBoxHandler.java
查看文件 @
e54d5ea
package
com
.
neotel
.
smfcore
.
core
.
device
.
handler
.
impl
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.base.Strings
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.core.device.bean.BoxStatusBean
;
import
com.neotel.smfcore.core.device.bean.StatusBean
;
import
com.neotel.smfcore.core.device.enums.BOX_STATUS
;
...
...
@@ -14,8 +16,7 @@ import lombok.extern.slf4j.Slf4j;
import
org.springframework.stereotype.Service
;
import
javax.servlet.http.HttpServletRequest
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.*
;
@Service
@Slf4j
...
...
@@ -45,12 +46,105 @@ public class LineBoxHandler extends BaseDeviceHandler {
statusBean
=
putInLine
(
storage
,
statusBean
);
}
else
{
//查看是否有要出库的操作
statusBean
=
taskService
.
checkOut
(
storage
,
statusBean
);
// statusBean =taskService.checkOut(storage, statusBean);
findCheckOutTask
(
storage
,
statusBean
);
}
return
statusBean
;
}
/**
* 出库处理
*/
public
StatusBean
findCheckOutTask
(
Storage
storage
,
StatusBean
statusBean
)
{
try
{
//准备更新暂停出入库
if
(
dataCache
.
getCache
(
Constants
.
CACHE_StopOut
))
{
return
statusBean
;
}
//如果当前有barcode,暂时不发出库任务
String
sBarcode
=
statusBean
.
getBarcode
();
if
(
ObjectUtil
.
isNotEmpty
(
sBarcode
))
{
return
statusBean
;
}
String
cid
=
statusBean
.
getCid
();
// 任务根据时间排序。查找当前正在出的工单和料架 (入库任务不计算)
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
Collections
.
sort
(
allTasks
);
//已出的料架列表 同时只能出三个,空不包含
List
<
String
>
shelfList
=
new
ArrayList
<>();
List
<
String
>
sourceIds
=
new
ArrayList
<>();
for
(
DataLog
task
:
allTasks
)
{
if
(
task
.
isPutInTask
()||
task
.
isEnd
()||
task
.
isFinished
()||
task
.
isCancel
()){
continue
;
}
if
(
task
.
isCheckOutTask
()&&
task
.
isWait
()){
continue
;
}
String
shelf
=
task
.
getTempRfid
();
if
(
ObjectUtil
.
isNotEmpty
(
shelf
)){
shelfList
.
add
(
shelf
);
}
if
(
ObjectUtil
.
isNotEmpty
(
task
.
getSourceId
())&&(!
sourceIds
.
contains
(
task
.
getSourceId
()))){
sourceIds
.
add
(
task
.
getSourceId
());
}
}
//查询
List
<
DataLog
>
queueTasks
=
new
ArrayList
<>();
queueTasks
.
addAll
(
taskService
.
getQueueTasks
());
Collections
.
sort
(
queueTasks
);
int
executingOutTaskSize
=
0
;
DataLog
outTask
=
null
;
for
(
DataLog
queueTask
:
queueTasks
)
{
if
(
queueTask
.
getCid
().
equals
(
cid
))
{
//有入库任务不分配出库任务
if
(
queueTask
.
isPutInTask
())
{
// return statusBean;
continue
;
}
else
{
if
(
queueTask
.
isExecuting
())
{
executingOutTaskSize
++;
//已经有出库任务正在执行,超过60秒仍未完成的出库再次发送到客户端
if
(
queueTask
.
needReSendToClient
())
{
outTask
=
queueTask
;
log
.
error
(
"cid["
+
cid
+
"]的出库任务["
+
queueTask
.
getPosName
()
+
"]超过60秒仍未完成,重新发送到客户端!"
);
queueTask
.
setUpdateDate
(
new
Date
());
break
;
}
}
else
if
(
queueTask
.
isWait
())
{
if
(
executingOutTaskSize
>=
2
)
{
//log.error("cid["+cid + "]的BOX["+ boxId+"]的出库任务已经超过2个,不再分配!");
outTask
=
null
;
break
;
}
String
shelf
=
queueTask
.
getTempRfid
();
if
(
queueTask
.
isUrgentReel
()||
ObjectUtil
.
isEmpty
(
shelf
))
{
outTask
=
queueTask
;
break
;
}
//已出的料架列表 同时只能出三个,空或紧急料不包含
if
(
shelfList
.
size
()
<=
3
||
shelfList
.
contains
(
shelf
))
{
outTask
=
queueTask
;
}
}
}
}
}
statusBean
=
sendOutTaskToClient
(
outTask
,
statusBean
,
storage
);
}
catch
(
Exception
e
)
{
log
.
error
(
"出库出错"
,
e
);
}
return
statusBean
;
}
@Override
protected
StatusBean
handleInOutFinished
(
StatusBean
statusBean
)
{
...
...
src/main/java/com/neotel/smfcore/core/shelf/bean/ShelfInfo.java
查看文件 @
e54d5ea
...
...
@@ -270,31 +270,31 @@ public class ShelfInfo {
}
return
false
;
}
/**
* 返回剩余的空库位,包含锁定和未锁定的
* @return
*/
public
List
<
Integer
>
getEmptySlot
()
{
List
<
Integer
>
result
=
new
ArrayList
<>();
int
smallEmpty
=
0
;
int
bigEmpty
=
0
;
for
(
int
i
=
1
;
i
<=
maxLocCount
;
i
++)
{
ShelfLoc
shelfLoc
=
locMap
.
get
(
i
);
if
(
shelfLoc
!=
null
)
{
if
(!
shelfLoc
.
isEmpty
())
{
continue
;
}
}
if
(
i
<=
MAX_F_SMALL_NUM
)
{
smallEmpty
++;
}
else
{
bigEmpty
++;
}
}
result
.
add
(
smallEmpty
);
result
.
add
(
bigEmpty
);
return
result
;
}
//
//
/**
//
* 返回剩余的空库位,包含锁定和未锁定的
//
* @return
//
*/
//
public List<Integer> getEmptySlot() {
//
List<Integer> result = new ArrayList<>();
//
int smallEmpty = 0;
//
int bigEmpty = 0;
//
for (int i = 1; i <= maxLocCount; i++) {
//
ShelfLoc shelfLoc = locMap.get(i);
//
if (shelfLoc != null) {
//
//
if (!shelfLoc.isEmpty()) {
//
continue;
//
}
//
}
//
if (i <= MAX_F_SMALL_NUM) {
//
smallEmpty++;
//
} else {
//
bigEmpty++;
//
}
//
}
//
result.add(smallEmpty);
//
result.add(bigEmpty);
//
return result;
//
}
}
src/main/java/com/neotel/smfcore/core/shelf/rest/TaskShelfController.java
查看文件 @
e54d5ea
...
...
@@ -198,30 +198,6 @@ public class TaskShelfController {
ShelfInfo
shelfInfo
=
TaskShelfUtil
.
findSameShelf
(
orderNo
,
rfid
);
if
(
shelfInfo
!=
null
)
{
// if(shelfInfo.getOrderNo().equals(TaskShelfUtil.DEFAULT_ORDERNO)){
// Map<Integer, ShelfLoc> locMap = shelfInfo.getLocMap();
// for (ShelfLoc shelfLoc : locMap.values()) {
// if (shelfLoc.isEmpty()) {
// if (shelfLoc.isSmallLoc()) {
// smallEmpty = smallEmpty + 1;
// } else if (shelfLoc.isBigLoc()) {
// bigEmpty = bigEmpty + 1;
// }
// }
// }
// }else {
// Map<Integer, ShelfLoc> locMap = shelfInfo.getLocMap();
// for (ShelfLoc shelfLoc : locMap.values()) {
// if (shelfLoc.isEmpty()) {
// if (shelfLoc.isSmallLoc()) {
// smallEmpty = smallEmpty + 1;
// } else if (shelfLoc.isBigLoc()) {
// bigEmpty = bigEmpty + 1;
// }
// }
// }
// }
List
<
Integer
>
shelfEmpty
=
getEmptySlot
(
shelfInfo
);
smallEmpty
=
shelfEmpty
.
get
(
0
);
bigEmpty
=
shelfEmpty
.
get
(
1
);
...
...
@@ -267,7 +243,7 @@ public class TaskShelfController {
int
bigEmpty
=
0
;
if
(
shelfInfo
!=
null
)
{
if
(
shelfInfo
.
getOrderNo
().
equals
(
TaskShelfUtil
.
DEFAULT_ORDERNO
))
{
if
(
shelfInfo
.
getOrderNo
().
equals
(
TaskShelfUtil
.
DEFAULT_ORDERNO
))
{
List
<
DataLog
>
allTask
=
taskService
.
getAllTasks
();
for
(
DataLog
log
:
...
...
@@ -282,13 +258,13 @@ public class TaskShelfController {
}
}
List
<
Integer
>
shelfEmpty
=
shelfInfo
.
getEmptySlot
();
if
(
smallEmpty
>
shelfEmpty
.
get
(
0
)){
smallEmpty
=
shelfEmpty
.
get
(
0
);
}
if
(
bigEmpty
>
shelfEmpty
.
get
(
1
)){
bigEmpty
=
shelfEmpty
.
get
(
0
);
}
//
List<Integer> shelfEmpty=shelfInfo.getEmptySlot();
//
if(smallEmpty>shelfEmpty.get(0)){
//
smallEmpty=shelfEmpty.get(0);
//
}
//
if(bigEmpty>shelfEmpty.get(1)){
//
bigEmpty=shelfEmpty.get(0);
//
}
}
else
{
Map
<
Integer
,
ShelfLoc
>
locMap
=
shelfInfo
.
getLocMap
();
...
...
@@ -326,12 +302,6 @@ public class TaskShelfController {
Integer
emptyPos
=
0
;
ShelfInfo
shelfInfo
=
TaskShelfUtil
.
findShelfByRealRfid
(
rfid
);
if
(
shelfInfo
!=
null
)
{
// Map<Integer, ShelfLoc> locMap = shelfInfo.getLocMap();
// for (ShelfLoc shelfLoc : locMap.values()) {
// if (shelfLoc.isEmpty()) {
// emptyPos++;
// }
// }
List
<
Integer
>
shelfEmpty
=
getEmptySlot
(
shelfInfo
);
emptyPos
=
shelfEmpty
.
get
(
0
)+
shelfEmpty
.
get
(
1
);
}
else
{
...
...
@@ -348,13 +318,6 @@ public class TaskShelfController {
shelfInfoMap
.
values
())
{
for
(
ShelfInfo
shelf
:
map
.
values
())
{
// Map<Integer, ShelfLoc> locMap = shelf.getLocMap();
// int emptyPos = 0;
// for (ShelfLoc shelfLoc : locMap.values()) {
// if (shelfLoc.isEmpty()) {
// emptyPos++;
// }
// }
List
<
Integer
>
shelfEmpty
=
getEmptySlot
(
shelf
);
int
emptyPos
=
shelfEmpty
.
get
(
0
)+
shelfEmpty
.
get
(
1
);
if
(
ObjectUtil
.
isNotEmpty
(
shelf
.
getRealRfid
()))
{
...
...
@@ -370,8 +333,6 @@ public class TaskShelfController {
log
.
error
(
"getShelfEmptySlot 出错 rfids="
+
rfids
,
e
);
return
ResultBean
.
newErrorResult
(
305
,
""
,
"出错:"
+
e
.
toString
());
}
// return ResultBean.newErrorResult(-1, "", "");
}
...
...
@@ -409,7 +370,7 @@ public class TaskShelfController {
}
@ApiOperation
(
"产线扫码亮灯"
)
@ApiOperation
(
"产线扫码亮灯
,返回条码放到料架的位置:1-31
"
)
@PostMapping
(
value
=
"/codeLed"
)
@ResponseBody
@AnonymousAccess
...
...
src/main/java/com/neotel/smfcore/core/shelf/util/TaskShelfUtil.java
查看文件 @
e54d5ea
...
...
@@ -279,8 +279,11 @@ public class TaskShelfUtil {
String
orderNo
=
task
.
getSourceName
();
if
(
ObjectUtil
.
isEmpty
(
orderNo
)){
orderNo
=
DEFAULT_ORDERNO
;
//紧急料获取库位号时再锁定
addLoc
(
task
);
//验证若还未锁定料架,锁定
String
tempRfid
=
task
.
getTempRfid
();
if
(
ObjectUtil
.
isEmpty
(
tempRfid
))
{
addLoc
(
task
);
}
}
ShelfInfo
shelfInfo
=
null
;
List
<
String
>
rfidList
=
Lists
.
newArrayList
(
rfidStr
.
split
(
ShelfSpilt
));
...
...
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
查看文件 @
e54d5ea
...
...
@@ -20,6 +20,7 @@ import com.neotel.smfcore.core.device.util.DataCache;
import
com.neotel.smfcore.core.message.util.DeviceMessageUtil
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.shelf.util.TaskShelfUtil
;
import
com.neotel.smfcore.core.storage.enums.CHECKOUT_TYPE
;
import
com.neotel.smfcore.core.storage.rest.dto.TacticsOutDto
;
import
com.neotel.smfcore.core.storage.service.manager.IStoragePosManager
;
...
...
@@ -483,6 +484,10 @@ public class TaskService {
taskMap
.
put
(
task
.
getId
(),
task
);
task
=
dataLogDao
.
save
(
task
);
//如果是非工单任务,且还未绑定料架,绑定位置
if
(
ObjectUtil
.
isEmpty
(
task
.
getSourceName
())&&
ObjectUtil
.
isEmpty
(
task
.
getTempRfid
())){
TaskShelfUtil
.
addLoc
(
task
);
}
statusBean
.
setOp
(
OP
.
CHECKOUT
);
String
posName
=
task
.
getPosName
();
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论