Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 189745dd
由
zshaohui
编写于
2024-10-30 15:45:56 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
1.uid出库 只增加线体选择,后台自己匹配机种
2.uid出库, 在选择线体时,增加 异常出库 选项
1 个父辈
311ee050
隐藏空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
400 行增加
和
586 行删除
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/query/OrderQueryCondition.java
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
src/main/java/com/neotel/smfcore/core/system/rest/TaskController.java
src/main/java/com/neotel/smfcore/core/system/rest/bean/dto/TaskDto.java
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/bean/PreWarningItem.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/setting/controller/LineController.java
src/main/java/com/neotel/smfcore/custom/lizhen/wcs/LizhenController.java
src/main/resources/config/application-bg.yml
src/main/resources/config/application-cg.yml
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
189745d
...
...
@@ -553,6 +553,7 @@ public class LiteOrderCache {
while
(
assignReelCount
<
remainReelCount
)
{
String
partNumber
=
orderItem
.
getPn
();
String
[]
partNumberSpl
=
partNumber
.
split
(
","
);
StoragePos
pos
=
null
;
if
(
cacheOrder
.
getType
()
==
2
)
{
...
...
@@ -567,7 +568,12 @@ public class LiteOrderCache {
}
else
{
//PN
do
{
pos
=
storagePosManager
.
findPartNumberInStorages
(
storageIdList
,
partNumber
,
excludePosIds
,
checkoutType
,
orderItem
.
getBrand
());
for
(
String
pn
:
partNumberSpl
)
{
pos
=
storagePosManager
.
findPartNumberInStorages
(
storageIdList
,
pn
,
excludePosIds
,
checkoutType
,
orderItem
.
getBrand
());
if
(
pos
!=
null
){
break
;
}
}
if
(
pos
==
null
)
{
break
;
}
...
...
@@ -618,6 +624,7 @@ public class LiteOrderCache {
task
.
setPickingId
(
orderItem
.
getPickingId
());
task
.
setItemNo
(
orderItem
.
getItemNo
());
task
.
setModel
(
orderItem
.
getModel
());
task
.
setMo
(
orderItem
.
getMo
());
//先调用tower发料
String
result
=
lizhenApi
.
towerCheck
(
task
);
...
...
@@ -1254,16 +1261,22 @@ public class LiteOrderCache {
continue
;
}
}
String
pn
=
orderItem
.
getPn
();
String
[]
split
=
pn
.
split
(
","
);
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
);
boolean
lack
=
true
;
for
(
String
partNumber
:
split
)
{
InventoryItem
inventoryItem
=
inventoryMap
.
get
(
partNumber
);
if
(
inventoryItem
!=
null
){
if
(
inventoryItem
.
getStockReel
()
/*- inventoryItem.getLockReel()*/
-
inventoryItem
.
getBindReel
()
>
0
)
{
inventoryItem
.
setBindReel
(
inventoryItem
.
getBindReel
()
+
1
);
inventoryMap
.
put
(
orderItem
.
getPn
(),
inventoryItem
);
lack
=
false
;
break
;
}
}
inventoryMap
.
put
(
orderItem
.
getPn
(),
inventoryItem
);
}
else
{
}
if
(
lack
)
{
lackItems
.
add
(
orderItem
);
}
}
...
...
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
查看文件 @
189745d
...
...
@@ -4,6 +4,7 @@ package com.neotel.smfcore.core.order.rest;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.collect.Lists
;
import
com.google.common.collect.Maps
;
import
com.neotel.smfcore.common.base.IExcelDownLoad
;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
...
...
@@ -18,6 +19,7 @@ import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import
com.neotel.smfcore.core.device.enums.OP
;
import
com.neotel.smfcore.core.device.enums.OP_STATUS
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.language.util.MessageUtils
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_SOURCE
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
...
...
@@ -31,6 +33,7 @@ import com.neotel.smfcore.core.order.service.po.LiteOrder;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.order.util.OrderFileWatch
;
import
com.neotel.smfcore.core.system.bean.MSDAppendInfo
;
import
com.neotel.smfcore.core.system.bean.OrderSetting
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.custom.lizhen.third.maicheng.util.MaiZhengUtil
;
...
...
@@ -285,8 +288,9 @@ public class OrderController {
criteria
.
setExcludeSourceList
(
excludeSources
);
}
}
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
if
(
StringUtils
.
isBlank
(
criteria
.
getWarningItemId
()))
{
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
if
(
criteria
.
getStatus
()
!=
null
)
{
if
(
criteria
.
getStatus
()
==
1
)
{
query
.
addCriteria
(
Criteria
.
where
(
"status"
).
is
(
LITEORDER_STATUS
.
CLOSED
));
...
...
@@ -298,7 +302,6 @@ public class OrderController {
PageData
<
OrderDto
>
resultList
=
orderMapper
.
toDto
(
orderList
);
return
resultList
;
}
else
{
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
PageData
<
OrderDto
>
resultList
=
new
PageData
<>();
resultList
.
setContent
(
new
ArrayList
<>());
resultList
.
setTotalElements
(
0
);
...
...
@@ -315,6 +318,104 @@ public class OrderController {
}
}
@ApiOperation
(
"工单导出"
)
@GetMapping
(
"/download"
)
//@PreAuthorize("@el.check('workOrder')")
public
void
orderDownload
(
OrderQueryCondition
criteria
,
Pageable
pageable
,
HttpServletResponse
response
)
throws
IOException
{
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
if
(
StringUtils
.
isBlank
(
criteria
.
getWarningItemId
()))
{
if
(
criteria
.
getStatus
()
!=
null
)
{
if
(
criteria
.
getStatus
()
==
1
)
{
query
.
addCriteria
(
Criteria
.
where
(
"status"
).
is
(
LITEORDER_STATUS
.
CLOSED
));
}
else
if
(
criteria
.
getStatus
()
==
2
)
{
query
.
addCriteria
(
Criteria
.
where
(
"status"
).
ne
(
LITEORDER_STATUS
.
CLOSED
));
}
}
FileUtil
.
downloadExcel
(
query
,
pageable
,
response
,
new
IExcelDownLoad
()
{
@Override
public
List
<
List
<
String
>>
getHeader
()
{
List
<
List
<
String
>>
headerList
=
new
ArrayList
<>();
headerList
.
add
(
Arrays
.
asList
(
"需求单号"
));
headerList
.
add
(
Arrays
.
asList
(
"当前任务盘数"
));
headerList
.
add
(
Arrays
.
asList
(
"总任务盘数"
));
headerList
.
add
(
Arrays
.
asList
(
"工单状态"
));
headerList
.
add
(
Arrays
.
asList
(
"线别"
));
headerList
.
add
(
Arrays
.
asList
(
"创建时间"
));
headerList
.
add
(
Arrays
.
asList
(
"出口"
));
return
headerList
;
}
@Override
public
List
<
List
<
Object
>>
getPageData
(
Query
query
,
Pageable
pageable
)
{
List
<
List
<
Object
>>
resultList
=
new
ArrayList
<>();
PageData
<
LiteOrder
>
pageData
=
liteOrderManager
.
findByPage
(
query
,
pageable
);
List
<
LiteOrder
>
content
=
pageData
.
getContent
();
if
(
content
!=
null
&&
!
content
.
isEmpty
())
{
for
(
LiteOrder
order
:
content
)
{
List
<
Object
>
data
=
new
ArrayList
<>();
data
.
add
(
order
.
getOrderNo
());
data
.
add
(
order
.
getFinishedReelCount
()
+
"/"
+
order
.
getTaskReelCount
());
data
.
add
(
order
.
getTotalFinishedReelCount
()
+
"/"
+
order
.
getTotalTaskReelCount
());
if
(
order
.
getStatus
()
==
LITEORDER_STATUS
.
NEW
)
{
data
.
add
(
"新建"
);
}
else
if
(
order
.
getStatus
()
==
LITEORDER_STATUS
.
TAILS
)
{
data
.
add
(
"正在出库"
);
}
else
if
(
order
.
getStatus
()
==
LITEORDER_STATUS
.
TAILS_FINISHED
)
{
data
.
add
(
"尾料已完成"
);
}
else
if
(
order
.
getStatus
()
==
LITEORDER_STATUS
.
CLOSED
)
{
data
.
add
(
"关闭"
);
}
else
{
data
.
add
(
""
);
}
data
.
add
(
order
.
getLine
());
data
.
add
(
order
.
getCreateDate
());
data
.
add
(
order
.
getExport
());
resultList
.
add
(
data
);
}
}
return
resultList
;
}
});
}
else
{
LiteOrderItem
item
=
liteOrderItemManager
.
findOne
(
query
);
if
(
item
!=
null
)
{
String
orderId
=
item
.
getOrderId
();
LiteOrder
liteOrder
=
liteOrderManager
.
get
(
orderId
);
if
(
liteOrder
!=
null
)
{
List
<
List
<
String
>>
headerList
=
new
ArrayList
<>();
headerList
.
add
(
Arrays
.
asList
(
"需求单号"
));
headerList
.
add
(
Arrays
.
asList
(
"当前任务盘数"
));
headerList
.
add
(
Arrays
.
asList
(
"总任务盘数"
));
headerList
.
add
(
Arrays
.
asList
(
"工单状态"
));
headerList
.
add
(
Arrays
.
asList
(
"线别"
));
headerList
.
add
(
Arrays
.
asList
(
"创建时间"
));
headerList
.
add
(
Arrays
.
asList
(
"出口"
));
List
<
List
<
Object
>>
datas
=
new
ArrayList
<>();
List
<
Object
>
data
=
new
ArrayList
<>();
data
.
add
(
liteOrder
.
getOrderNo
());
data
.
add
(
liteOrder
.
getFinishedReelCount
()
+
"/"
+
liteOrder
.
getTaskReelCount
());
data
.
add
(
liteOrder
.
getTotalFinishedReelCount
()
+
"/"
+
liteOrder
.
getTotalTaskReelCount
());
if
(
liteOrder
.
getStatus
()
==
LITEORDER_STATUS
.
NEW
)
{
data
.
add
(
"新建"
);
}
else
if
(
liteOrder
.
getStatus
()
==
LITEORDER_STATUS
.
TAILS
)
{
data
.
add
(
"正在出库"
);
}
else
if
(
liteOrder
.
getStatus
()
==
LITEORDER_STATUS
.
TAILS_FINISHED
)
{
data
.
add
(
"尾料已完成"
);
}
else
if
(
liteOrder
.
getStatus
()
==
LITEORDER_STATUS
.
CLOSED
)
{
data
.
add
(
"关闭"
);
}
else
{
data
.
add
(
""
);
}
data
.
add
(
liteOrder
.
getLine
());
data
.
add
(
liteOrder
.
getCreateDate
());
data
.
add
(
liteOrder
.
getExport
());
datas
.
add
(
data
);
FileUtil
.
downloadExcel
(
headerList
,
datas
,
response
);
}
}
}
}
//
...
...
@@ -398,6 +499,124 @@ public class OrderController {
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
@ApiOperation
(
"下载工单详情"
)
@RequestMapping
(
"/detial/download"
)
public
void
detialDownload
(
String
orderNo
,
HttpServletResponse
response
)
throws
IOException
{
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
List
<
List
<
String
>>
headerList
=
new
ArrayList
<>();
headerList
.
add
(
Arrays
.
asList
(
"缺料预警ID"
));
headerList
.
add
(
Arrays
.
asList
(
"厂商"
));
headerList
.
add
(
Arrays
.
asList
(
"PN"
));
headerList
.
add
(
Arrays
.
asList
(
"面别"
));
headerList
.
add
(
Arrays
.
asList
(
"机器名称"
));
headerList
.
add
(
Arrays
.
asList
(
"机器"
));
headerList
.
add
(
Arrays
.
asList
(
"Mo"
));
headerList
.
add
(
Arrays
.
asList
(
"Slot"
));
headerList
.
add
(
Arrays
.
asList
(
"SubSlot"
));
headerList
.
add
(
Arrays
.
asList
(
"需求盘数"
));
headerList
.
add
(
Arrays
.
asList
(
"已出盘数"
));
List
<
List
<
Object
>>
dataList
=
new
ArrayList
<>();
for
(
LiteOrderItem
orderItem
:
liteOrder
.
getOrderItems
())
{
List
<
Object
>
data
=
new
ArrayList
<>();
data
.
add
(
orderItem
.
getWarningItemId
());
data
.
add
(
orderItem
.
getBrand
());
data
.
add
(
orderItem
.
getPn
());
data
.
add
(
orderItem
.
getSide
());
data
.
add
(
orderItem
.
getMachineName
());
data
.
add
(
orderItem
.
getTableNo
());
data
.
add
(
orderItem
.
getMo
());
data
.
add
(
orderItem
.
getSlot
());
data
.
add
(
orderItem
.
getSubSlot
());
data
.
add
(
orderItem
.
getNeedReelCount
());
data
.
add
(
orderItem
.
getOutReelCount
());
dataList
.
add
(
data
);
}
FileUtil
.
downloadExcel
(
headerList
,
dataList
,
response
);
}
/* @ApiOperation("下载工单详情")
@RequestMapping("/detial/download")
@PreAuthorize("@el.check('workOrder:detial')")
@AnonymousAccess
public void detialDownload(@RequestParam(required = false) String id, @RequestParam(required = false) String orderNo, HttpServletResponse response, HttpServletRequest request) throws IOException {
LiteOrder liteOrder = null;
if (!ObjectUtils.isEmpty(id)) {
liteOrder = liteOrderManager.get(id);
} else if (!ObjectUtils.isEmpty(orderNo)) {
liteOrder = liteOrderManager.findByOrderNo(orderNo);
}
if (liteOrder != null) {
List<List<String>> header = new ArrayList<>();
Locale locale = request.getLocale();
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.storagePos.lockName",locale,"工单号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.ri",locale,"RI")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.pn",locale,"PN")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.MPN",locale,"MPN")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.side",locale,"面别")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.tableNo",locale,"台车号")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.feederInfo",locale,"站位信息")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.needReelCount",locale,"需求盘数")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.outReelCount",locale,"已出盘数")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.needNum",locale,"需求数量")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.outNum",locale,"已出数量")));
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.out.barcode",locale,"出库物料详情")));
//附加字段
OrderSetting orderSetting=dataCache.getOrderSetting();
if(orderSetting.getAppendData()!=null&&orderSetting.getAppendData().size()>0){
for (String key :
orderSetting.getAppendData().keySet()) {
String title=orderSetting.getAppendData().get(key);
header.add(Lists.newArrayList(title));
}
}
header.add(Lists.newArrayList(MessageUtils.getText("smfcore.order.exception",locale,"异常")));
List<List<Object>> dataList = new ArrayList<>();
for (LiteOrderItem orderItem : liteOrder.getOrderItems()) {
List<Object> data = new ArrayList<>();
data.add(orderNo);
data.add(orderItem.getRi());
data.add(orderItem.getPn());
data.add(orderItem.getMpn());
data.add(orderItem.getSide());
data.add(orderItem.getTableNo());
data.add(orderItem.getFeederInfo());
data.add(orderItem.getNeedReelCount());
data.add(orderItem.getOutReelCount());
data.add(orderItem.getNeedNum());
data.add(orderItem.getOutNum());
data.add(orderItem.getBarcodeStr());
//附加字段
if(orderSetting.getAppendData()!=null&&orderSetting.getAppendData().size()>0){
for (String key :
orderSetting.getAppendData().keySet()) {
String title=orderSetting.getAppendData().get(key);
String v=orderItem.getAppendData().getOrDefault(key,"");
data.add(v);
}
}
boolean exc=false;
if(orderItem.getOutNum()<orderItem.getNeedNum()){
exc=true;
}
if(orderItem.getOutReelCount()<orderItem.getOutReelCount()){
exc=true;
}
String exception=exc?MessageUtils.getText("smfcore.order.yes",locale,"是"):"";
data.add(exception);
dataList.add(data);
}
FileUtil.downloadExcelByConfig(liteOrder.getOrderNo(), header,dataList,response);
}
}*/
private
boolean
isLack
(
List
<
LiteOrderItem
>
lackItemList
,
LiteOrderItem
item
)
{
if
(
lackItemList
!=
null
&&
!
lackItemList
.
isEmpty
())
{
for
(
LiteOrderItem
orderItem
:
lackItemList
)
{
...
...
src/main/java/com/neotel/smfcore/core/order/rest/bean/query/OrderQueryCondition.java
查看文件 @
189745d
...
...
@@ -4,6 +4,7 @@ package com.neotel.smfcore.core.order.rest.bean.query;
import
com.neotel.smfcore.common.annotation.QueryCondition
;
import
com.neotel.smfcore.common.bean.BetweenData
;
import
lombok.Data
;
import
org.springframework.format.annotation.DateTimeFormat
;
import
java.util.Date
;
import
java.util.List
;
...
...
@@ -14,7 +15,8 @@ public class OrderQueryCondition {
@QueryCondition
(
blurry
=
"orderNo,export"
)
private
String
blurry
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
)
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
,
propName
=
"createDate"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
BetweenData
<
Date
>
createDate
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
IN
,
propName
=
"source"
)
...
...
@@ -28,6 +30,11 @@ public class OrderQueryCondition {
//缺料预警id
@QueryCondition
(
blurry
=
"warningItemId,reel"
)
private
String
warningItemId
;
@QueryCondition
(
type
=
QueryCondition
.
Type
.
BETWEEN
,
propName
=
"updateDate"
)
@DateTimeFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
)
private
BetweenData
<
Date
>
updateDate
;
//
// @QueryCondition(type=QueryCondition.Type.IN,propName = "status")
// private List<Integer> statusList ;
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
查看文件 @
189745d
...
...
@@ -732,14 +732,20 @@ public class StoragePosController {
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"ID"
});
}
String
line
=
checkOutDto
.
getLine
();
if
(
StringUtils
.
isEmpty
(
line
)){
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"线体"
});
}
String
model
=
checkOutDto
.
getModel
();
if
(
StringUtils
.
isEmpty
(
model
)){
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"机种"
});
if
(!
"异常出库"
.
equals
(
line
)){
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"机种"
});
}
}
String
line
=
checkOutDto
.
getLine
();
if
(
StringUtils
.
isEmpty
(
line
)){
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"线体"
});
if
(
"异常出库"
.
equals
(
line
)){
checkOutDto
.
setForceOut
(
true
);
}
if
(
checkOutDto
.
getSingleOut
()
==
null
)
{
...
...
src/main/java/com/neotel/smfcore/core/system/rest/TaskController.java
查看文件 @
189745d
...
...
@@ -113,6 +113,7 @@ public class TaskController {
headerList
.
add
(
Lists
.
newArrayList
(
"料仓名称"
));
headerList
.
add
(
Lists
.
newArrayList
(
"数量"
));
headerList
.
add
(
Lists
.
newArrayList
(
"类型"
));
headerList
.
add
(
Lists
.
newArrayList
(
"MO"
));
headerList
.
add
(
Lists
.
newArrayList
(
"来源"
));
headerList
.
add
(
Lists
.
newArrayList
(
"线体"
));
headerList
.
add
(
Lists
.
newArrayList
(
"机台名"
));
...
...
@@ -139,6 +140,7 @@ public class TaskController {
result
.
add
(
dataLog
.
getPosName
()+
" "
+
dataLog
.
getStorageName
());
result
.
add
(
dataLog
.
getNum
());
result
.
add
(
dataLog
.
getType
()
==
1
?
"入库"
:
"出库"
);
result
.
add
(
dataLog
.
getMo
());
result
.
add
(
dataLog
.
getSourceName
());
result
.
add
(
dataLog
.
getLine
());
result
.
add
(
dataLog
.
getMachineName
());
...
...
src/main/java/com/neotel/smfcore/core/system/rest/bean/dto/TaskDto.java
查看文件 @
189745d
...
...
@@ -154,7 +154,7 @@ public class TaskDto implements Serializable {
private
String
subSlot
=
""
;
private
String
side
=
""
;
private
String
mo
=
""
;
public
String
getTaskColor
()
{
if
(
ObjectUtil
.
isNotEmpty
(
lightColor
))
{
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/bean/PreWarningItem.java
查看文件 @
189745d
...
...
@@ -43,4 +43,7 @@ public class PreWarningItem extends BasePo {
private
Date
receiveDate
=
new
Date
();
private
String
pickingId
;
//工单号
private
String
mo
;
}
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/rest/InnerBoxRestController.java
查看文件 @
189745d
...
...
@@ -83,7 +83,7 @@ public class InnerBoxRestController {
private
LizhenApi
lizhenApi
;
//料架缓存id
private
static
Map
<
String
,
String
>
labelOrderItemMap
=
new
ConcurrentHashMap
<>();
private
static
Map
<
String
,
String
>
labelOrderItemMap
=
new
ConcurrentHashMap
<>();
//人工发料id
private
static
List
<
String
>
manualOrderItemIdList
=
new
CopyOnWriteArrayList
<>();
...
...
@@ -101,11 +101,11 @@ public class InnerBoxRestController {
String
boxSide
=
request
.
getParameter
(
"boxSide"
);
//料箱隔口
String
x
=
request
.
getParameter
(
"x"
);
String
y
=
request
.
getParameter
(
"y"
);
log
.
info
(
"IA 出库更新任务状态--barcode:{},status:{},loc:{},hSerial:{},outlet:{},boxSide:{},cid:{},outlet:{},x:{},y:{}"
,
code
,
status
,
loc
,
hSerial
,
outlet
,
boxSide
,
cid
,
outlet
,
x
,
y
);
log
.
info
(
"IA 出库更新任务状态--barcode:{},status:{},loc:{},hSerial:{},outlet:{},boxSide:{},cid:{},outlet:{},x:{},y:{}"
,
code
,
status
,
loc
,
hSerial
,
outlet
,
boxSide
,
cid
,
outlet
,
x
,
y
);
CodeBean
codeBean
=
codeResolve
.
resolveSingleCode
(
code
);
Barcode
barcode
=
codeBean
.
getBarcode
();
if
(
barcode
!=
null
){
if
(
barcode
!=
null
)
{
code
=
barcode
.
getBarcode
();
}
...
...
@@ -131,15 +131,15 @@ public class InnerBoxRestController {
//log.info("更新任务状态:{}-->{}", opTask.getStatus(), status);
//调用此接口的肯定是料盘已出仓位的
if
(
opTask
.
isExecuting
())
{
if
(
opTask
.
isExecuting
())
{
//正在执行的任务,清理库存
outFromPos
(
opTask
);
}
opTask
.
setStatus
(
status
);
if
(
StringUtils
.
isNotEmpty
(
x
)){
if
(
StringUtils
.
isNotEmpty
(
x
))
{
opTask
.
setX
(
x
);
}
if
(
StringUtils
.
isNotEmpty
(
y
)){
if
(
StringUtils
.
isNotEmpty
(
y
))
{
opTask
.
setY
(
y
);
}
opTask
.
setFullCode
(
barcode
.
getFullCode
());
...
...
@@ -148,102 +148,37 @@ public class InnerBoxRestController {
//清理锁定库位
ReelLockPosUtil
.
removeReelLockPosInfo
(
code
);
taskService
.
updateFinishedTask
(
opTask
);
if
(
opTask
.
isFinished
())
{
if
(
opTask
.
isFinished
())
{
//已完成,从完成缓存中清除
taskService
.
removeFinishedTask
(
opTask
);
//设置绑定库位
StorageExport
storageExport
=
StorageExportUtil
.
getExport
(
outlet
);
LiteOrder
liteOrder
=
liteOrderManager
.
get
(
opTask
.
getSourceId
());
if
(
liteOrder
!=
null
){
if
(
liteOrder
!=
null
)
{
storageExport
.
setLine
(
liteOrder
.
getLine
());
storageExport
.
setHSerial
(
liteOrder
.
getOrderNo
());
int
remainTaskCount
=
0
;
List
<
DataLog
>
dataLogList
=
taskService
.
getAllTasks
();
for
(
DataLog
dataLog
:
dataLogList
)
{
if
(
StringUtils
.
isNotBlank
(
dataLog
.
getSourceId
()))
{
if
(
outlet
.
equals
(
dataLog
.
getExport
())
&&
!
dataLog
.
getBarcode
().
equals
(
opTask
.
getBarcode
())){
if
(!
dataLog
.
isFinished
()
&&
!
dataLog
.
isCancel
()){
remainTaskCount
++;
if
(
StringUtils
.
isNotBlank
(
dataLog
.
getSourceId
()))
{
if
(
outlet
.
equals
(
dataLog
.
getExport
())
&&
!
dataLog
.
getBarcode
().
equals
(
opTask
.
getBarcode
()))
{
if
(!
dataLog
.
isFinished
()
&&
!
dataLog
.
isCancel
())
{
remainTaskCount
++;
}
}
}
}
storageExport
.
setRemainTaskCount
(
remainTaskCount
);
storageExport
.
setCacheID
(
liteOrder
.
getCacheID
());
log
.
info
(
opTask
.
getBarcode
()
+
"任务完成,更新出料口信息:"
+
JSON
.
toJSONString
(
storageExport
));
StorageExportUtil
.
updateExport
(
outlet
,
storageExport
);
log
.
info
(
opTask
.
getBarcode
()
+
"任务完成,更新出料口信息:"
+
JSON
.
toJSONString
(
storageExport
));
StorageExportUtil
.
updateExport
(
outlet
,
storageExport
);
}
}
return
ResultBean
.
newOkResult
(
StorageExportUtil
.
getExport
(
outlet
));
}
/*@ApiOperation("IB 获取料箱状态信息")
@RequestMapping("/getBoxStatusInfo")
@AnonymousAccess
public ResultBean getBoxStatusInfo(HttpServletRequest request) {
String rfid = request.getParameter("rfid"); //料箱RFID
String cid = request.getParameter("cid");
//得到当前料箱状态
Map<String, Object> resultMap = new HashMap<>();
try {
rfid = rfid.replaceAll("A", "").replaceAll("B", "");
resultMap = getBoxStatusByBoxNumber(rfid, cid);
} catch (Exception e) {
log.error(rfid + "异常");
e.printStackTrace();
}
return ResultBean.newOkResult(resultMap);
}*/
/*@ApiOperation("IC 获取料架标签打印信息 或者 补打印信息")
@RequestMapping("/rack/getPrintInfo")
@AnonymousAccess
public ResultBean rackPrintLabel(HttpServletRequest request) {
String cid = request.getParameter("cid");
String labelOrderItemId = "";
if (StringUtils.isBlank(cid)) {
String cidKey = "";
for (Map.Entry<String, String> entry : labelOrderItemMap.entrySet()) {
cidKey = entry.getKey();
labelOrderItemId = entry.getValue();
break;
}
if (StringUtils.isNotBlank(cidKey)) {
labelOrderItemMap.remove(cidKey);
}
} else {
if ("0000".equals(cid)) {
if (manualOrderItemIdList != null && !manualOrderItemIdList.isEmpty()) {
labelOrderItemId = manualOrderItemIdList.get(0);
manualOrderItemIdList.remove(0);
}
} else {
labelOrderItemId = labelOrderItemMap.get(cid);
}
}
Map<String, String> resultMap = getPrintLabel(labelOrderItemId);
if (resultMap == null || resultMap.isEmpty()) {
labelOrderItemMap.remove(cid);
return ResultBean.newErrorResult(-1, "", "未找到需要打印的标签信息", null, false);
}
return ResultBean.newOkResult(resultMap);
}*/
/*@ApiOperation("ID 料架标签打印完成通知 或 补打印完成通知")
@RequestMapping("/rack/finishPrint")
@AnonymousAccess
public ResultBean finishPrintLabel(HttpServletRequest request) {
String cid = request.getParameter("cid");
log.info("移除打印标签");
if(StringUtils.isNotBlank(cid)) {
labelOrderItemMap.remove(cid);
}
return ResultBean.newOkResult("");
}*/
@ApiOperation
(
"IE 贴标前获取站位信息"
)
@RequestMapping
(
"/getFeederInfo"
)
@AnonymousAccess
...
...
@@ -278,146 +213,6 @@ public class InnerBoxRestController {
return
ResultBean
.
newOkResult
(
resultMap
);
}
/*@ApiOperation("周转箱取走")
@RequestMapping("/boxTakeAway")
@AnonymousAccess
public ResultBean boxTakeAway(HttpServletRequest request) {
String rfid = request.getParameter("rfid");
rfid = rfid.replaceAll("A", "").replaceAll("B", "");
log.info(rfid + "小车已经拉走");
Pattern pattern = Pattern.compile(QueryHelp.escapeExprSpecialWord(rfid), Pattern.CASE_INSENSITIVE);
List<LiteOrder> liteOrders = liteOrderManager.findByQuery(new Query(Criteria.where("boxNumber").regex(pattern)));
if (liteOrders != null && !liteOrders.isEmpty()) {
for (LiteOrder liteOrder : liteOrders) {
liteOrder.setBoxNumber("");
liteOrderManager.save(liteOrder);
liteOrderCache.addOrderToMap(liteOrder);
}
}
//同时清除物料与料箱的信息
List<Barcode> barcodes = barcodeManager.findByQuery(new Query(Criteria.where("posName").regex(pattern)));
if (barcodes != null && !barcodes.isEmpty()) {
for (Barcode barcode : barcodes) {
barcode.setPosName(null);
barcodeManager.save(barcode);
}
}
return ResultBean.newOkResult("");
}*/
/*@ApiOperation("获取当前执行的工单,是否全部都是料架信息")
@RequestMapping("/getNlOutInfo")
@AnonymousAccess
public ResultBean getNlOutInfo() {
//获取到当前正在执行的工单
Collection<DataLog> queueTasks = taskService.getQueueTasks();
boolean isAllNlOut = false;
DataLog dataLog = null;
Map<String, Object> resultMap = new HashMap<>();
for (DataLog task : queueTasks) {
String orderId = task.getSubSourceId();
if (!task.isCancel() && !task.isFinished() && task.isCheckOutTask() && StringUtils.isNotBlank(orderId)) {
String cid = task.getCid();
Storage storage = dataCache.getStorage(cid);
if (storage.isType(new DeviceType[]{DeviceType.SMD_XLR})) {
isAllNlOut = true;
break;
} else {
dataLog = task;
}
}
}
if (dataLog == null) {
return ResultBean.newErrorResult(-1, "", "没有要出的料架任务");
}
if (!isAllNlOut && dataLog != null) {
String orderId = dataLog.getSourceId();
LiteOrder liteOrder = liteOrderManager.get(orderId);
resultMap.put("line", liteOrder.getLine());
}
//如果没有产线,则返回错误
if (resultMap.get("line") == null) {
return ResultBean.newErrorResult(-1, "", "料仓与料架都有出库任务");
}
return ResultBean.newOkResult(resultMap);
}*/
/*@ApiOperation("根据料仓编号获取料仓两个出料口料箱信息")
@RequestMapping("/getOutStateInfo")
@AnonymousAccess
public ResultBean getOutStateInfo(HttpServletRequest request) {
String cid = request.getParameter("cid");
if (StringUtils.isBlank(cid)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"cid"});
}
List<OutLotInfo> outLotInfos = OutLotInfoCache.getOutLotInfoByCid(cid);
log.info(cid + "--出料口信息为:" + JsonUtil.toJsonStr(outLotInfos));
return ResultBean.newOkResult(outLotInfos);
}*/
//料箱送上AGV后,调用此接口,服务器将料口状态信息另存, 把当前料口状态置空
/*@ApiOperation("料箱送上AGV")
@RequestMapping("/boxToAgv")
@AnonymousAccess
public ResultBean boxToAgv(HttpServletRequest request) {
String outlet = request.getParameter("outlet");
String rfid = request.getParameter("rfid");
String AGVName = request.getParameter("AGVName");
log.info("料箱送上AGV---出口位置为:" + outlet + ",rfid为:" + rfid + ",AGV为:" + AGVName);
OutLotInfoCache.outLotInfoMapToOutInfos(outlet, rfid);
return ResultBean.newOkResult("");
}*/
/*@ApiOperation("获取AGV目的地")
@RequestMapping("/getAgvLineInfo")
@AnonymousAccess
public ResultBean getAgvLineInfo(HttpServletRequest request) {
String rfid = request.getParameter("rfid");
OutLotInfo outLotInfo = OutLotInfoCache.getOutLotInfoByRfid(rfid);
log.info("获取AGV目的地---rfid为:" + rfid + ",outLotInfo为:" + JsonUtil.toJsonStr(outLotInfo));
int rackTaskCount = 0;
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) {
Storage storage = dataCache.getStorage(dataLog.getCid());
if (storage != null && storage.isNLShelf()) {
if (StringUtils.isNotBlank(dataLog.getSourceName())) {
if (dataLog.getSourceName().equals(outLotInfo.getHSerial())) {
rackTaskCount++;
}
}
}
}
outLotInfo.setRackTaskCount(rackTaskCount);
log.info(rfid + "--AGV目的信息为:" + JsonUtil.toJsonStr(outLotInfo));
return ResultBean.newOkResult(outLotInfo);
}*/
/*@ApiOperation("博众agv获取小车目的地")
@RequestMapping("/getBoZhongAgvLineInfo")
@AnonymousAccess
public ResultBean getBoZhongAgvLineInfo(HttpServletRequest request) {
String rfid = request.getParameter("rfid");
OutLotInfo outLotInfo = OutLotInfoCache.getOutLotInfoByRfidMap(rfid);
log.info("获取博众AGV目的地---rfid为:" + rfid + ",outLotInfo为:" + JsonUtil.toJsonStr(outLotInfo));
return ResultBean.newOkResult(outLotInfo.getLine());
}*/
/* @ApiOperation("清理料箱信息")
@RequestMapping("/clearRfidInfo")
@AnonymousAccess
public ResultBean clearRfidInfo(HttpServletRequest request) {
String rfid = request.getParameter("rfid");
String source = request.getParameter("source");
log.info("清理料箱信息---rfid为:" + rfid + ",source为:" + source);
OutLotInfoCache.clearRfidInfo(rfid);
return ResultBean.newOkResult("");
}*/
@ApiOperation
(
"补打印标签信息"
)
@PostMapping
(
"/fillPrint"
)
...
...
@@ -438,10 +233,10 @@ public class InnerBoxRestController {
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
DESC
,
"createDate"
);
//按创建时间排序
List
<
DataLog
>
dataLogs
=
dataLogManager
.
findByQuery
(
query
.
addCriteria
(
criteria
).
with
(
sort
).
limit
(
1
));
if
(
dataLogs
==
null
||
dataLogs
.
isEmpty
())
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueNotFind"
,
"未找到{0}{1}"
,
new
String
[]{
reelId
,
"补打印信息,请核实是否已经有出库任务"
});
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.valueNotFind"
,
"未找到{0}{1}"
,
new
String
[]{
reelId
,
"补打印信息,请核实是否已经有出库任务"
});
}
for
(
DataLog
dataLog
:
dataLogs
)
{
setLabelOrderItemId
(
dataLog
.
getCid
(),
dataLog
.
getSubSourceId
());
setLabelOrderItemId
(
dataLog
.
getCid
(),
dataLog
.
getSubSourceId
());
break
;
}
return
ResultBean
.
newOkResult
(
""
);
...
...
@@ -451,7 +246,7 @@ public class InnerBoxRestController {
@ApiOperation
(
"根据条码获取目的地信息"
)
@RequestMapping
(
"/getLine"
)
@AnonymousAccess
public
Map
<
String
,
Object
>
getLineByBarcode
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
public
Map
<
String
,
Object
>
getLineByBarcode
(
@RequestBody
Map
<
String
,
String
>
paramMap
)
{
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
String
barcode
=
paramMap
.
get
(
"barcode"
);
log
.
info
(
barcode
+
"获取目的地信息"
);
...
...
@@ -460,7 +255,7 @@ public class InnerBoxRestController {
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
for
(
DataLog
dataLog
:
allTasks
)
{
if
(
dataLog
.
isCheckOutTask
()
&&
dataLog
.
getBarcode
().
equals
(
codeBean
.
getBarcode
().
getBarcode
()))
{
resultMap
.
put
(
"cid"
,
dataLog
.
getCid
());
resultMap
.
put
(
"cid"
,
dataLog
.
getCid
());
resultMap
.
put
(
"export"
,
""
);
//如果sourceName和subSourceId都不为空时,则返回目标位置
String
sourceName
=
dataLog
.
getSourceName
();
...
...
@@ -480,7 +275,7 @@ public class InnerBoxRestController {
}
}
}
else
{
String
export
=
StorageExportUtil
.
getExportByOrderNo
(
""
,
false
,
false
);
String
export
=
StorageExportUtil
.
getExportByOrderNo
(
""
,
false
,
false
);
log
.
info
(
dataLog
.
getBarcode
()
+
"手动出库获取出料口信息为:"
+
export
);
resultMap
.
put
(
"export"
,
export
);
}
...
...
@@ -530,8 +325,8 @@ public class InnerBoxRestController {
}
storageExport
.
setRemainTaskCount
(
remainTaskCount
);
LiteOrder
orderNo
=
liteOrderManager
.
findByOrderNo
(
storageExport
.
getHSerial
());
if
(
orderNo
!=
null
){
storageExport
.
setCacheID
(
orderNo
.
getCacheID
());
if
(
orderNo
!=
null
)
{
storageExport
.
setCacheID
(
orderNo
.
getCacheID
());
}
StorageExportUtil
.
updateExport
(
export
,
storageExport
);
}
...
...
@@ -545,7 +340,7 @@ public class InnerBoxRestController {
public
ResultBean
getAgvLine
(
String
export
)
{
StorageExport
storageExport
=
new
StorageExport
();
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
export
);
if
(
liteOrder
!=
null
){
if
(
liteOrder
!=
null
)
{
storageExport
.
setLine
(
liteOrder
.
getLine
());
storageExport
.
setHSerial
(
export
);
storageExport
.
setCacheID
(
liteOrder
.
getCacheID
());
...
...
@@ -558,16 +353,16 @@ public class InnerBoxRestController {
@ApiOperation
(
"料箱离开工位"
)
@RequestMapping
(
"/boxOutStation"
)
@AnonymousAccess
public
ResultBean
boxOutStation
(
String
export
,
String
material
)
{
public
ResultBean
boxOutStation
(
String
export
,
String
material
,
String
orderNo
)
{
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());
outStationExport
.
setMaterial
(
material
);
//如果工单号不为空,返回出料口的工单号是否相同,如果不同,直接返回,不清空
/*if (StringUtils.isNotEmpty(orderNo) && StringUtils.isNotEmpty(storageExport.getHSerial())){
if (!orderNo.equals(storageExport.getHSerial())){
return ResultBean.newErrorResult(-1,"","当前传入的工单号:"+orderNo+"与工位上正在执行的工单号:"+storageExport.getHSerial()+"不一致");
}
}*/
//1.获取当前出料口的剩余数量
int
remainTaskCount
=
0
;
...
...
@@ -579,6 +374,20 @@ public class InnerBoxRestController {
}
}
}
if
(
remainTaskCount
>
0
){
if
(
StringUtils
.
isNotEmpty
(
orderNo
))
{
return
ResultBean
.
newErrorResult
(-
1
,
""
,
export
+
"当前任务数大于0,不清空"
);
}
}
String
hSerial
=
storageExport
.
getHSerial
();
StorageExport
outStationExport
=
new
StorageExport
();
outStationExport
.
setDisable
(
storageExport
.
isDisable
());
outStationExport
.
setLine
(
storageExport
.
getLine
());
outStationExport
.
setHSerial
(
hSerial
);
//outStationExport.setRemainTaskCount(storageExport.getRemainTaskCount());
outStationExport
.
setMaterial
(
material
);
//2.如果当前出料口的数量不等于0
if
(
remainTaskCount
>
0
&&
!
export
.
equals
(
StorageExportUtil
.
getMaizhengExport
()))
{
...
...
@@ -589,14 +398,15 @@ public class InnerBoxRestController {
}
if
(
ordrRemainingQty
!=
-
1
)
{
if
(
remainTaskCount
<=
ordrRemainingQty
)
{
log
.
info
(
export
+
"剩余数量:"
+
remainTaskCount
+
"小于:"
+
ordrRemainingQty
+
",需要生成新的工单"
);
log
.
info
(
export
+
"剩余数量:"
+
remainTaskCount
+
"小于:"
+
ordrRemainingQty
+
",需要生成新的工单"
);
Collection
<
LiteOrder
>
liteOrders
=
liteOrderCache
.
getAllLiteOrder
();
liteOrders
=
liteOrders
.
stream
().
sorted
(
Comparator
.
comparing
(
LiteOrder
::
getCreateDate
)).
collect
(
Collectors
.
toList
());
for
(
LiteOrder
liteOrder
:
liteOrders
)
{
if
(!
liteOrder
.
isMaiZheng
())
{
if
(
liteOrder
.
isNew
()
||
liteOrder
.
isTaskFinished
())
{
if
(
storageExport
.
getLine
().
equals
(
liteOrder
.
getLine
()))
{
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
liteOrder
.
getOrderNo
(),
false
,
export
);
log
.
info
(
export
+
"新的工单为:"
+
liteOrder
.
getOrderNo
()+
"结果为:"
+
result
);
log
.
info
(
export
+
"新的工单为:"
+
liteOrder
.
getOrderNo
()
+
"结果为:"
+
result
);
if
(
StringUtils
.
isBlank
(
result
))
{
break
;
}
...
...
@@ -644,221 +454,75 @@ public class InnerBoxRestController {
}
/*@ApiOperation("手动发料")
@PostMapping("/manualFeeding")
@ApiOperation
(
"根据工单号,获取未完成/未取消的任务"
)
@AnonymousAccess
public ResultBean manualFeeding(@RequestBody Map<String, String> paramMap) {
*//*if (StringUtils.isNotBlank(getManualOrderItemId())) {
return ResultBean.newErrorResult(-1,"","上一个物料标签请打印完成后再进行手动发料操作");
}*//*
String barcodestr = paramMap.get("barcodestr");
String orderItemId = paramMap.get("orderItemId");
log.info("人工发料--ItemId:" + orderItemId + ",barcodestr:" + barcodestr);
if (StringUtils.isBlank(orderItemId)) {
return ResultBean.newErrorResult(-1, "smfcore.valueCanotNull", "{0}不能为空", new String[]{"itemId"});
}
CodeBean codeBean = codeResolve.resolveSingleCode(barcodestr);
Barcode barcode = codeBean.getBarcode();
if (barcode == null) {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.invalid", "{0}不是有效的条码", new String[]{barcodestr});
}
//不在仓中,不允许出库
StoragePos storagePos = storagePosManager.getByBarcode(barcode.getBarcode());
if (storagePos == null){
return ResultBean.newErrorResult(-1, "", barcode.getBarcode()+"不在储位中,不允许进行出库");
}
//判断当前是否已经有出库任务
@RequestMapping
(
"/getRemainNumByOrderNo"
)
public
ResultBean
getRemainNumByOrderNo
(
String
orderNo
)
{
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
int
remainNum
=
0
;
String
export
=
""
;
String
line
=
""
;
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
for
(
DataLog
dataLog
:
allTasks
)
{
if (orderItemId.equals(dataLog.getSubSourceId())) {
if (dataLog.isCheckOutTask() && !dataLog.isCancel() && !dataLog.isFinished()) {
return ResultBean.newErrorResult(-1, "smfcore.valueAlreadyExist", "{0}[{1}]已存在", new String[]{"出库任务", orderItemId});
if
(
dataLog
.
isCheckOutTask
()){
if
(!
dataLog
.
isFinished
()
&&
!
dataLog
.
isCancel
()){
if
(
orderNo
.
equals
(
dataLog
.
getSourceName
())){
remainNum
++;
if
(
StringUtils
.
isEmpty
(
export
)){
export
=
dataLog
.
getExport
();
}
if
(
StringUtils
.
isEmpty
(
line
)){
line
=
dataLog
.
getLine
();
}
}
}
}
}
LiteOrderItem orderItem = liteOrderItemManager.get(orderItemId);
if (orderItem == null) {
return ResultBean.newErrorResult(-1, "smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{"工单信息", orderItemId});
}
//判断是否已经补过料
if (orderItem.getOutNum() > 0) {
return ResultBean.newErrorResult(-1, "smfcore.task.hasEnd", "任务已完成");
}
//判断料号是否一致
String partNumber = codeBean.getBarcode().getPartNumber();
if (!orderItem.getPn().equals(partNumber)) {
return ResultBean.newErrorResult(-1, "", "请核实手动补料的料号:" + partNumber + "与工单需求料号:" + orderItem.getPn() + "是否一致");
}
//判断供应商是否相同
String provider = codeBean.getBarcode().getProvider();
if (StringUtils.isNotBlank(orderItem.getBrand())) {
if (!orderItem.getBrand().equals(provider)) {
return ResultBean.newErrorResult(-1, "", "请核实手动补料的供应商:" + provider + "与工单需求供应商:" + orderItem.getBrand() + "是否一致");
}
}
LiteOrder liteOrder = liteOrderManager.get(orderItem.getOrderId());
if (liteOrder == null) {
return ResultBean.newErrorResult(-1, "smfcore.valueNotExist", "{0}[{1}]不存在", new String[]{"工单信息", orderItemId});
}
//生成一条出库任务
DataLog dataLog = new DataLog();
dataLog.setStatus(OP_STATUS.FINISHED.name());
dataLog.setBarcode(barcode.getBarcode());
dataLog.setSourceName(liteOrder.getOrderNo());
dataLog.setSourceId(liteOrder.getId());
dataLog.setSubSourceId(orderItemId);
dataLog.setPartNumber(barcode.getPartNumber());
dataLog.setProviderNumber(barcode.getProviderNumber());
dataLog.setNum(barcode.getAmount());
dataLog.setType(OP.CHECKOUT);
dataLog.setExtendType(ExtendType.MANUAL_FEEDING); //手动喂料
//dataLog.setPosName("人工");
//判断虚拟仓有没有,如果有,则删除库位
if (storagePos != null) {
dataLog.setPosName(storagePos.getPosName());
Storage storage = dataCache.getStorageById(storagePos.getStorageId());
dataLog.setCid(storage.getCid());
//if (storage.isVirtual()) {
dataLog.setCid(storage.getCid());
storagePos.setBarcode(null);
//dataCache.updateInventory(storagePos, barcode);
//进行库位更改
storagePos.setBarcode(null);
storagePos.setUsed(false);
storagePosManager.save(storagePos);
barcodeManager.delete(barcode);
dataCache.updateInventory(storagePos, barcode);
//}
}
taskService.updateFinishedTask(dataLog);
taskService.removeFinishedTask(dataLog);
setManualOrderItemIdList(orderItemId);
return ResultBean.newOkResult("");
}
@ApiOperation("手动补料打印信息")
@RequestMapping("/manual/getPrintInfo")
@AnonymousAccess
public ResultBean manualPrintLabel(HttpServletRequest request) {
String manualOrderItemId = "";
if (manualOrderItemIdList != null && !manualOrderItemIdList.isEmpty()) {
manualOrderItemId = manualOrderItemIdList.get(0);
manualOrderItemIdList.remove(0);
}
Map<String, String> resultMap = new HashMap<>();
if (StringUtils.isNotBlank(manualOrderItemId)) {
resultMap = getPrintLabel(manualOrderItemId);
}
if (resultMap.isEmpty()) {
return ResultBean.newErrorResult(-1, "", "未找到需要打印的标签信息", null, false);
}
resultMap
.
put
(
"remainNum"
,
remainNum
);
resultMap
.
put
(
"export"
,
export
);
resultMap
.
put
(
"orderNo"
,
orderNo
);
resultMap
.
put
(
"line"
,
line
);
return
ResultBean
.
newOkResult
(
resultMap
);
}
@ApiOperation("手动发料打印完成通知")
@RequestMapping("/manual/finishPrint")
@AnonymousAccess
public ResultBean finishManualPrintLabel(HttpServletRequest request) {
log.info("移除打印标签");
//setManualOrderItemId(null);
return ResultBean.newOkResult("");
}
@ApiOperation("
扫描物料信息直接喂料
")
@RequestMapping("/
manualFeedingByBarcode
")
@ApiOperation
(
"
出料口执行工单
"
)
@RequestMapping
(
"/
executeOrder
"
)
@AnonymousAccess
public ResultBean manualFeedingByBarcode(@RequestBody Map<String, String> paramMap) {
String orderNo = paramMap.get("orderNo");
String barcodeStr = paramMap.get("barcode");
//解析条码
CodeBean codeBean = codeResolve.resolveSingleCode(barcodeStr);
Barcode barcode = codeBean.getBarcode();
if (barcode == null) {
return ResultBean.newErrorResult(-1, "smfcore.error.barcode.invalid", "{0}不是有效的条码", new String[]{barcodeStr});
}
//不在仓中,不允许出库
StoragePos storagePos = storagePosManager.getByBarcode(barcode.getBarcode());
if (storagePos == null){
return ResultBean.newErrorResult(-1, "", barcode.getBarcode()+"不在储位中,不允许进行出库");
public
synchronized
ResultBean
executeOrder
(
String
export
)
{
log
.
info
(
"出料口:"
+
export
+
"有空料箱,开始执行工单出库"
);
Collection
<
LiteOrder
>
liteOrders
=
liteOrderCache
.
getAllLiteOrder
();
liteOrders
=
liteOrders
.
stream
().
sorted
(
Comparator
.
comparing
(
LiteOrder
::
getCreateDate
)).
collect
(
Collectors
.
toList
());
int
count
=
0
;
for
(
LiteOrder
liteOrder
:
liteOrders
)
{
if
(
liteOrder
.
isOutTails
()){
if
(
export
.
equals
(
liteOrder
.
getExport
())){
count
++;
}
}
}
LiteOrder order = liteOrderCache.getOrderSortItems(orderNo);
if (order == null) {
return ResultBean.newErrorResult(-1, "smfcore.order.out.notFound", "工单未找到");
if
(
count
>=
2
){
return
ResultBean
.
newErrorResult
(-
1
,
""
,
export
+
"有正在执行的工单,超过2个,暂不出库"
);
}
boolean hasItem = false;
for (LiteOrderItem orderItem : order.getOrderItems()) {
if (barcode.getPartNumber().equals(orderItem.getPn())) {
//判断供应商是否相同
if (StringUtils.isNotBlank(orderItem.getBrand())) {
if (!barcode.getProvider().equals(orderItem.getBrand())) {
continue;
}
}
if (orderItem.getOutNum() > 0){
continue;
}
//判断有没有已经生成任务
int count = dataLogManager.countByQuery(new Query(Criteria.where("subSourceId").is(orderItem.getId())));
if (count > 0){
continue;
}
hasItem = true;
DataLog dataLog = new DataLog();
dataLog.setStatus(OP_STATUS.FINISHED.name());
dataLog.setBarcode(barcode.getBarcode());
dataLog.setSourceName(order.getOrderNo());
dataLog.setSourceId(order.getId());
dataLog.setSubSourceId(orderItem.getId());
dataLog.setPartNumber(barcode.getPartNumber());
dataLog.setProviderNumber(barcode.getProviderNumber());
dataLog.setNum(barcode.getAmount());
dataLog.setType(OP.CHECKOUT);
dataLog.setExtendType(ExtendType.MANUAL_FEEDING); //手动喂料
//dataLog.setPosName("人工");
//判断虚拟仓有没有,如果有,则删除库位
//StoragePos storagePos = storagePosManager.getByBarcode(barcode.getBarcode());
if (storagePos != null) {
dataLog.setPosName(storagePos.getPosName());
Storage storage = dataCache.getStorageById(storagePos.getStorageId());
dataLog.setCid(storage.getCid());
//if (storage.isVirtual()) {
dataLog.setCid(storage.getCid());
storagePos.setBarcode(null);
//dataCache.updateInventory(storagePos, barcode);
//进行库位更改
storagePos.setUsed(false);
storagePosManager.save(storagePos);
barcodeManager.delete(barcode);
dataCache.updateInventory(storagePos, barcode);
//}
for
(
LiteOrder
liteOrder
:
liteOrders
)
{
if
(!
liteOrder
.
isMaiZheng
())
{
if
(
liteOrder
.
isNew
()
||
liteOrder
.
isTaskFinished
())
{
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
liteOrder
.
getOrderNo
(),
false
,
export
);
log
.
info
(
"出料口:"
+
export
+
"有空料箱,"
+
"新的工单为:"
+
liteOrder
.
getOrderNo
()
+
"结果为:"
+
result
);
if
(
StringUtils
.
isBlank
(
result
))
{
break
;
}
}
taskService.updateFinishedTask(dataLog);
taskService.removeFinishedTask(dataLog);
setManualOrderItemIdList(orderItem.getId());
break;
}
}
if (!hasItem) {
return ResultBean.newErrorResult(-1, "smfcore.order.supplementOutFail", "未找到可以出库的补料");
}
return
ResultBean
.
newOkResult
(
""
);
}
*/
}
public
void
setLabelOrderItemId
(
String
cid
,
String
orderItemId
)
{
labelOrderItemMap
.
put
(
cid
,
orderItemId
);
public
void
setLabelOrderItemId
(
String
cid
,
String
orderItemId
)
{
labelOrderItemMap
.
put
(
cid
,
orderItemId
);
}
/**
...
...
@@ -894,8 +558,8 @@ public class InnerBoxRestController {
//调用tower发料
String
resultStr
=
lizhenApi
.
towerIssue
(
opTask
);
if
(
StringUtils
.
isEmpty
(
resultStr
)){
if
(
barcode
!=
null
){
if
(
StringUtils
.
isEmpty
(
resultStr
))
{
if
(
barcode
!=
null
)
{
//barcode.setAskPutIn(false);
barcodeManager
.
save
(
barcode
);
}
...
...
@@ -906,136 +570,4 @@ public class InnerBoxRestController {
//更新缓存中的库存信息
dataCache
.
updateInventory
(
storagePos
,
barcode
);
}
/*private OutLotInfo getOutLotInfoByRfid(String rfid, String cid) {
if (rfid.endsWith("A") || rfid.endsWith("B")) {
rfid = rfid.substring(0, rfid.length() - 1);
}
OutLotInfo outLotInfo = null;
List<OutLotInfo> outLotInfos = OutLotInfoCache.getOutLotInfoByCid(cid);
for (OutLotInfo lotInfo : outLotInfos) {
if (lotInfo.getRfid().contains(rfid)) {
outLotInfo = lotInfo;
break;
}
}
int remainTaskCount = 0;
int rackTaskCount = 0;
if (outLotInfo != null) {
String hSerial = outLotInfo.getHSerial();
List<DataLog> allTasks = taskService.getAllTasks();
for (DataLog dataLog : allTasks) {
Storage storage = dataCache.getStorage(dataLog.getCid());
if (!dataLog.isFinished() && !dataLog.isCancel() && hSerial.equals(dataLog.getSourceName()) && cid.equals(dataLog.getCid()) && !storage.isNLShelf()) {
remainTaskCount++;
} else if (storage != null && storage.isNLShelf()) {
rackTaskCount++;
}
}
outLotInfo.setRemainTaskCount(remainTaskCount);
outLotInfo.setRackTaskCount(rackTaskCount);
}
return outLotInfo;
}*/
private
Map
<
String
,
Object
>
getBoxStatusByBoxNumber
(
String
boxNumber
,
String
cid
)
{
/*if (boxNumber.indexOf("-") != -1) {
boxNumber = boxNumber.substring(0, boxNumber.indexOf("-"));
}*/
//boxNumber = boxNumber.replaceAll("A", "").replaceAll("B", "");
Map
<
String
,
Object
>
resultMap
=
new
HashMap
<>();
int
remainTaskCount
=
0
;
//所属需求单剩余当前料仓未完成任务数
int
rackTaskCount
=
0
;
//所属需求单剩余料架任务数
//当前料箱的隔口数量
resultMap
.
put
(
"inCount"
,
0
);
resultMap
.
put
(
"outCount"
,
0
);
Pattern
pattern
=
Pattern
.
compile
(
QueryHelp
.
escapeExprSpecialWord
(
boxNumber
),
Pattern
.
CASE_INSENSITIVE
);
List
<
Barcode
>
barcodes
=
barcodeManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"posName"
).
regex
(
pattern
)));
if
(
barcodes
!=
null
&&
!
barcodes
.
isEmpty
())
{
Map
<
String
,
Long
>
posCountMap
=
barcodes
.
stream
().
collect
(
Collectors
.
groupingBy
(
Barcode:
:
getPosName
,
Collectors
.
counting
()));
for
(
Map
.
Entry
<
String
,
Long
>
posCount
:
posCountMap
.
entrySet
())
{
if
(
posCount
.
getKey
().
contains
(
"A"
))
{
resultMap
.
put
(
"inCount"
,
posCount
.
getValue
());
}
else
{
resultMap
.
put
(
"outCount"
,
posCount
.
getValue
());
}
}
resultMap
.
putAll
(
posCountMap
);
}
//获取当前工单数据
LiteOrder
liteOrder
=
null
;
Criteria
c
=
Criteria
.
where
(
"boxNumber"
).
is
(
boxNumber
);
Query
query
=
new
Query
(
c
);
List
<
LiteOrder
>
liteOrders
=
liteOrderManager
.
findByQuery
(
query
);
if
(
liteOrders
!=
null
&&
!
liteOrders
.
isEmpty
())
{
liteOrder
=
liteOrders
.
get
(
0
);
}
resultMap
.
put
(
"hSerial"
,
""
);
resultMap
.
put
(
"line"
,
""
);
if
(
liteOrder
!=
null
)
{
String
line
=
liteOrder
.
getLine
();
String
orderNo
=
liteOrder
.
getOrderNo
();
resultMap
.
put
(
"hSerial"
,
orderNo
);
resultMap
.
put
(
"line"
,
line
);
List
<
LiteOrderItem
>
orderItems
=
liteOrderItemManager
.
findOrderItems
(
liteOrder
.
getId
());
if
(
orderItems
!=
null
&&
!
orderItems
.
isEmpty
())
{
for
(
LiteOrderItem
orderItem
:
orderItems
)
{
Collection
<
DataLog
>
dataLogs
=
taskService
.
getAllTasks
();
for
(
DataLog
dataLog
:
dataLogs
)
{
if
(
dataLog
.
isFinished
()
||
dataLog
.
isCancel
())
{
continue
;
}
if
(
orderItem
.
getId
().
equals
(
dataLog
.
getSubSourceId
()))
{
if
(
dataLog
.
getCid
().
equals
(
cid
))
{
remainTaskCount
++;
}
else
{
String
storageId
=
dataLog
.
getStorageId
();
Storage
storage
=
dataCache
.
getStorageById
(
storageId
);
if
(
storage
.
isNLShelf
())
{
rackTaskCount
++;
}
}
}
}
}
}
}
resultMap
.
put
(
"remainTaskCount"
,
remainTaskCount
);
resultMap
.
put
(
"rackTaskCount"
,
rackTaskCount
);
return
resultMap
;
}
/*public static void setManualOrderItemIdList(String orderItemId) {
manualOrderItemIdList.add(orderItemId);
}
public Map<String,String> getPrintLabel(String orderItemId){
if (StringUtils.isBlank(orderItemId)){
return null;
}
Map<String, String> resultMap = new HashMap<>();
LiteOrderItem liteOrderItem = liteOrderItemManager.get(orderItemId);
if (liteOrderItem != null) {
String orderId = liteOrderItem.getOrderId();
LiteOrder liteOrder = liteOrderManager.get(orderId);
if (liteOrder != null) {
//resultMap.put("barcode", dataLog.getBarcode());
resultMap.put("pn", liteOrderItem.getPn());
resultMap.put("station", liteOrderItem.getTableNo());
resultMap.put("side", liteOrderItem.getSide());
resultMap.put("hSerial", liteOrder.getOrderNo());
resultMap.put("line", liteOrder.getLine());
resultMap.put("slot", liteOrderItem.getSlot());
resultMap.put("subSlot", liteOrderItem.getSubSlot());
}
}
return resultMap;
}
public String getLabelOrderItemId() {
if (!labelOrderItemMap.values().isEmpty()) {
return "false";
}
return "";
}*/
}
src/main/java/com/neotel/smfcore/custom/lizhen/innerBox/util/PreWarningItemCache.java
查看文件 @
189745d
...
...
@@ -89,7 +89,7 @@ public class PreWarningItemCache {
int
minute
=
dataCache
.
getLineConfigMinute
(
line
);
if
(
minute
==
0
)
{
minute
=
20
;
minute
=
1
;
}
PreWarningItem
firstItem
=
itemList
.
get
(
0
);
...
...
@@ -185,6 +185,7 @@ public class PreWarningItemCache {
orderItem
.
setReceiveDate
(
item
.
getReceiveDate
());
orderItem
.
setPickingId
(
item
.
getPickingId
());
orderItem
.
setItemNo
(
item
.
getItemNo
());
orderItem
.
setMo
(
item
.
getMo
());
orderItems
.
add
(
orderItem
);
}
}
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/setting/controller/LineController.java
查看文件 @
189745d
...
...
@@ -27,6 +27,7 @@ public class LineController {
List
<
String
>
lineList
=
Arrays
.
asList
(
split
);
lineList
=
lineList
.
stream
().
distinct
().
collect
(
Collectors
.
toList
());
Collections
.
sort
(
lineList
);
lineList
.
add
(
0
,
"异常出库"
);
return
ResultBean
.
newOkResult
(
lineList
);
}
...
...
src/main/java/com/neotel/smfcore/custom/lizhen/wcs/LizhenController.java
查看文件 @
189745d
...
...
@@ -42,6 +42,13 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RestController
;
import
javax.annotation.PostConstruct
;
import
java.io.BufferedReader
;
import
java.io.FileReader
;
import
java.io.IOException
;
import
java.io.InputStreamReader
;
import
java.nio.charset.StandardCharsets
;
import
java.nio.file.Files
;
import
java.nio.file.Paths
;
import
java.util.*
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.ScheduledExecutorService
;
...
...
@@ -205,6 +212,8 @@ public class LizhenController {
item
.
setLine
(
data
.
get
(
"LINE"
));
item
.
setItemId
(
data
.
get
(
"ID"
));
item
.
setPickingId
(
data
.
get
(
"PICKING_ID"
));
String
mo
=
data
.
get
(
"MO"
);
item
.
setMo
(
mo
);
try
{
item
.
setItemNo
(
Integer
.
valueOf
(
data
.
get
(
"ITEM_NO"
)));
item
.
setPriority
(
Integer
.
valueOf
(
data
.
get
(
"PRIORITY"
)));
...
...
@@ -250,6 +259,7 @@ public class LizhenController {
item
.
setLine
(
data
.
get
(
"LINE"
));
item
.
setItemId
(
data
.
get
(
"ID"
));
item
.
setPickingId
(
data
.
get
(
"PICKING_ID"
));
item
.
setMo
(
data
.
get
(
"WORKORDERNO"
));
try
{
item
.
setItemNo
(
Integer
.
valueOf
(
data
.
get
(
"ITEM_NO"
)));
item
.
setPriority
(
Integer
.
valueOf
(
data
.
get
(
"PRIORITY"
)));
...
...
@@ -499,4 +509,24 @@ public class LizhenController {
}
return
url
;
}
public
static
void
main
(
String
[]
args
)
{
// 请将 "yourfile.txt" 替换为你的实际文件路径
String
filePath
=
"D:\\Desktop\\2024-10-26.mes.txt"
;
// 方法2:使用BufferedReader和InputStreamReader读取文件
try
(
BufferedReader
br
=
new
BufferedReader
(
new
InputStreamReader
(
Files
.
newInputStream
(
Paths
.
get
(
filePath
)),
"GBK"
)))
{
String
line
;
while
((
line
=
br
.
readLine
())
!=
null
)
{
if
(
/*line.startsWith("2024-10-26 09") ||*/
line
.
startsWith
(
"2024-10-26 10"
)
/* || line.startsWith("2024-10-26 11")*/
)
{
if
(
line
.
contains
(
"\"SIDE\":\"B\""
)){
System
.
out
.
println
(
line
);
}
}
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
}
}
src/main/resources/config/application-bg.yml
查看文件 @
189745d
3f
:
line
:
C03-3FSMT-13,C02-3FSMT-12,C02-3FSMT-18,C02-3FSMT-19,C03-1FSMT-12,C02-3FSMT-11,C03-1FSMT-11,C02-3FSMT-17,C02-3FSMT-14,C03-1FSMT-12,C02-3FSMT-13,C02-3FSMT-16,C02-3FSMT-15,C02-3FSMT-19
\ No newline at end of file
line
:
C02-3FSMT-18,C02-3FSMT-19,C02-3FSMT-17,C02-3FSMT-14,C02-3FSMT-13,C02-3FSMT-16,C02-3FSMT-15,C02-3FSMT-19
\ No newline at end of file
src/main/resources/config/application-cg.yml
查看文件 @
189745d
3f
:
line
:
C03-1FSMT-01,C02-3FSMT-02,C03-3FSMT-03,C02-3FSMT-09,C02-3FSMT-01,C03-1FSMT-02,C02-3FSMT-08,C02-3FSMT-06,C02-3FSMT-07,C02-3FSMT-04,C02-3FSMT-05,C02-3FSMT-03,C03-1FSMT-02
\ No newline at end of file
line
:
C02-3FSMT-09,C02-3FSMT-08,C02-3FSMT-06,C02-3FSMT-07,C02-3FSMT-04,C02-3FSMT-05,C02-3FSMT-03
\ No newline at end of file
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论