Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit e8f815ad
由
LN
编写于
2022-05-30 16:56:35 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
工单合单,工单欠料发料,欠料合单功能
1 个父辈
e71444db
隐藏空白字符变更
内嵌
并排
正在显示
11 个修改的文件
包含
412 行增加
和
30 行删除
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
src/main/java/com/neotel/smfcore/core/order/enums/LITEORDER_STATUS.java
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
src/main/java/com/neotel/smfcore/core/order/rest/OrderSheetController.java
src/main/java/com/neotel/smfcore/core/order/rest/OrderShortageController.java
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
src/main/java/com/neotel/smfcore/core/system/service/manager/IDataLogManager.java
src/main/java/com/neotel/smfcore/core/system/service/manager/impl/DataLogManagerImpl.java
src/main/java/com/neotel/smfcore/core/system/service/po/DataLog.java
src/main/resources/config/application.yml
src/main/resources/messages.properties
src/main/java/com/neotel/smfcore/core/order/LiteOrderCache.java
查看文件 @
e8f815a
...
...
@@ -465,7 +465,7 @@ public class LiteOrderCache implements ITaskListener {
}
}
//判断库存 使用最小库存盘数:当前盘数<=最小库存盘数时,需要截料
if
(
reelNum
<=
component
.
getMinStoreNum
()){
if
(
component
.
getMinStoreNum
()>
0
&&
reelNum
<=
component
.
getMinStoreNum
()){
needJieliao
=
true
;
}
//判断库存数量是否小于需求数量,小于直接返回缺料
...
...
@@ -521,21 +521,23 @@ public class LiteOrderCache implements ITaskListener {
//截料料规则
if
(
isGuizhong
||
needJieliao
)
{
if
(
pos
.
getBarcode
().
getAmount
()
>=
targetNum
)
{
int
jieliaoNum
=
targetNum
;
//一盘刚好满足
targetNum
-=
pos
.
getBarcode
().
getAmount
();
itemPosList
.
add
(
pos
);
itemPosNameList
.
add
(
pos
.
getPosName
());
if
(
targetNum
<
0
)
{
jieliaoPosMap
.
put
(
pos
.
getPosName
(),
target
Num
);
jieliaoPosMap
.
put
(
pos
.
getPosName
(),
jieliao
Num
);
}
break
;
}
else
if
(
isLast
)
{
int
jieliaoNum
=
targetNum
;
//一盘料不足,直接加入
itemPosList
.
add
(
pos
);
itemPosNameList
.
add
(
pos
.
getPosName
());
targetNum
-=
pos
.
getBarcode
().
getAmount
();
if
(
targetNum
<
0
)
{
jieliaoPosMap
.
put
(
pos
.
getPosName
(),
target
Num
);
jieliaoPosMap
.
put
(
pos
.
getPosName
(),
jieliao
Num
);
}
break
;
}
...
...
@@ -648,6 +650,7 @@ public class LiteOrderCache implements ITaskListener {
task
.
setLightColor
(
ORDER_COLOR
.
SKYBLUE
.
getRgb
());
//普通工单 颜色:SKYBLUE
}
if
(
addOutbound
){
task
.
setInOperate
(
true
);
task
.
setAddOutbound
(
true
);
task
.
setLightColor
(
ORDER_COLOR
.
PINK
.
getRgb
());
//补料出库 颜色:PINK
}
...
...
src/main/java/com/neotel/smfcore/core/order/enums/LITEORDER_STATUS.java
查看文件 @
e8f815a
...
...
@@ -16,12 +16,24 @@ public class LITEORDER_STATUS {
/**工单已关闭*/
public
static
int
CLOSED
=
3
;
/**出库完成单缺料*/
public
static
int
EXECUTING_END
=
4
;
/**缺料出库、欠料出库中*/
public
static
int
ADDOUTBOUND
=
5
;
/**
* 工单状态
* 0=新建的工单
* 1=工单缺料
* 2=工单正在出库中
* 3=工单已关闭
* 4=出库完成
* 5=欠料出库中
*/
/**
* 工单状态
...
...
src/main/java/com/neotel/smfcore/core/order/rest/OrderController.java
查看文件 @
e8f815a
...
...
@@ -241,8 +241,16 @@ public class OrderController {
@ApiOperation
(
"工单出库"
)
@PostMapping
(
value
=
"/out"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
ResultBean
checkOut
(
@RequestBody
Map
<
String
,
String
>
mapValues
)
{
String
orderNo
=
mapValues
.
get
(
"orderNo"
);
public
ResultBean
checkOut
(
@RequestBody
Map
<
String
,
Object
>
mapValues
)
{
String
orderNo
=
mapValues
.
get
(
"orderNo"
).
toString
();
boolean
isShortageOut
=
false
;
if
(
mapValues
.
containsKey
(
"shortageOut"
))
{
String
shortageOut
=
mapValues
.
get
(
"shortageOut"
).
toString
();
if
(
ObjectUtil
.
isNotEmpty
(
shortageOut
)
&&
shortageOut
.
toString
().
equals
(
"true"
))
{
isShortageOut
=
true
;
}
}
if
(
orderNo
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
...
...
@@ -250,10 +258,14 @@ public class OrderController {
if
(
liteOrder
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueNotFind"
,
"未找到{0}[{1}]"
,
new
String
[]{
"orderNo"
,
orderNo
});
}
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
SecurityUtils
.
getCurrentUsername
(),
liteOrder
.
getOrderNo
());
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
SecurityUtils
.
getCurrentUsername
(),
liteOrder
.
getOrderNo
()
,
isShortageOut
,
false
);
if
(
ObjectUtil
.
isEmpty
(
result
))
{
return
ResultBean
.
newOkResult
(
result
);
}
else
{
}
else
if
(
result
.
equals
(
"smfcore.order.out.short"
)){
return
ResultBean
.
newErrorResult
(
99
,
result
,
result
);
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
result
,
result
);
}
}
...
...
@@ -501,13 +513,17 @@ public class OrderController {
for
(
DataLog
datalog
:
allTasks
)
{
if
(
datalog
.
isAddOutbound
()){
continue
;
}
//是否需要判断任务是否已结束
if
(
onlyNotEndTask
)
{
if
(
datalog
.
isEnd
()
||
datalog
.
isFinished
()
||
datalog
.
isCancel
())
{
continue
;
}
}
if
(
datalog
.
is
CheckOut
Task
()
&&
datalog
.
getSourceId
().
equals
(
liteOrder
.
getId
()))
{
if
(
datalog
.
is
Order
Task
()
&&
datalog
.
getSourceId
().
equals
(
liteOrder
.
getId
()))
{
//判断是否再自己的权限范围内
if
(
myStorageIds
.
contains
(
datalog
.
getStorageId
()))
{
returnTasks
.
add
(
datalog
);
...
...
src/main/java/com/neotel/smfcore/core/order/rest/OrderSheetController.java
查看文件 @
e8f815a
...
...
@@ -125,7 +125,7 @@ public class OrderSheetController {
}
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
//查询所有出库中或关闭的
query
.
addCriteria
(
Criteria
.
where
(
"status"
).
in
(
new
Integer
[]{
LITEORDER_STATUS
.
EXECUTING
,
LITEORDER_STATUS
.
CLOSED
}));
query
.
addCriteria
(
Criteria
.
where
(
"status"
).
in
(
new
Integer
[]{
LITEORDER_STATUS
.
EXECUTING
,
LITEORDER_STATUS
.
CLOSED
,
LITEORDER_STATUS
.
EXECUTING_END
,
LITEORDER_STATUS
.
ADDOUTBOUND
}));
query
.
addCriteria
(
Criteria
.
where
(
"sheetEnd"
).
ne
(
true
));
PageData
<
LiteOrder
>
orderList
=
liteOrderManager
.
findByPage
(
query
,
pageable
);
...
...
@@ -142,7 +142,7 @@ public class OrderSheetController {
if
(
barcodeInfo
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"条码"
});
}
DataLog
dataLog
=
dataLogManager
.
findLastOutTask
(
barcodeInfo
.
getBarcode
());
DataLog
dataLog
=
dataLogManager
.
findLastOutTask
(
barcodeInfo
.
getBarcode
()
,
false
);
if
(
dataLog
==
null
)
{
throw
new
ValidateException
(
"smfcore.orderSheet.barcode"
,
"未找到料盘{0}的工单信息"
,
new
String
[]{
barcodeInfo
.
getBarcode
()}
);
...
...
@@ -162,6 +162,7 @@ public class OrderSheetController {
}
else
if
(
dataLog
.
isFirstReel
()){
type
=
1
;
}
String
position
=
liteOrder
.
getPosition
(
type
);
boolean
isSave
=
false
;
if
(
liteOrder
.
getCurrBoxNum
()==
null
){
liteOrder
.
setCurrBoxNum
(
1
);
...
...
@@ -171,12 +172,12 @@ public class OrderSheetController {
isSave
=
true
;
}
if
(
isSave
){
log
.
info
(
"工单合单:料盘条码["
+
barcodeInfo
.
getBarcode
()+
"],工单号["
+
liteOrder
.
getOrderNo
()+
"],箱子数+1,当前箱子数:"
+
liteOrder
.
getCurrBoxNum
()+
"/"
+
liteOrder
.
getBoxNum
());
log
.
info
(
"工单合单:料盘条码["
+
barcodeInfo
.
getBarcode
()+
"],
类型["
+
type
+
"],位置["
+
position
+
"],
工单号["
+
liteOrder
.
getOrderNo
()+
"],箱子数+1,当前箱子数:"
+
liteOrder
.
getCurrBoxNum
()+
"/"
+
liteOrder
.
getBoxNum
());
liteOrderManager
.
save
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
}
OrderRIPostDto
dto
=
new
OrderRIPostDto
(
barcodeInfo
.
getBarcode
(),
liteOrder
.
getOrderNo
(),
type
,
liteOrder
.
getBoxNum
(),
liteOrder
.
getCurrBoxNum
(),
liteOrder
.
getPosition
(
type
)
);
OrderRIPostDto
dto
=
new
OrderRIPostDto
(
barcodeInfo
.
getBarcode
(),
liteOrder
.
getOrderNo
(),
type
,
liteOrder
.
getBoxNum
(),
liteOrder
.
getCurrBoxNum
(),
position
);
return
dto
;
}
...
...
src/main/java/com/neotel/smfcore/core/order/rest/OrderShortageController.java
0 → 100644
查看文件 @
e8f815a
package
com
.
neotel
.
smfcore
.
core
.
order
.
rest
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.google.common.collect.Lists
;
import
com.neotel.smfcore.common.bean.PageData
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.core.barcode.service.po.Barcode
;
import
com.neotel.smfcore.core.barcode.utils.CodeResolve
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.bean.OrderPosInfo
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.rest.bean.dto.OrderDto
;
import
com.neotel.smfcore.core.order.rest.bean.dto.OrderRIPostDto
;
import
com.neotel.smfcore.core.order.rest.bean.mapstruct.OrderMapper
;
import
com.neotel.smfcore.core.order.rest.bean.query.OrderQueryCondition
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.system.rest.bean.dto.TaskDto
;
import
com.neotel.smfcore.core.system.rest.bean.mapstruct.TaskMapper
;
import
com.neotel.smfcore.core.system.service.manager.IDataLogManager
;
import
com.neotel.smfcore.core.system.service.po.DataLog
;
import
com.neotel.smfcore.core.system.util.TaskService
;
import
com.neotel.smfcore.security.service.manager.IGroupManager
;
import
com.neotel.smfcore.security.service.manager.IUserManager
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.domain.Pageable
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Map
;
@Slf4j
@Api
(
tags
=
"工单欠料发料,合单欠料"
)
@RestController
@RequestMapping
(
"/api/orderShortage"
)
@RequiredArgsConstructor
public
class
OrderShortageController
{
@Autowired
private
ILiteOrderManager
liteOrderManager
;
@Autowired
private
LiteOrderCache
liteOrderCache
;
@Autowired
private
IDataLogManager
dataLogManager
;
@Autowired
private
IGroupManager
groupManager
;
@Autowired
private
TaskMapper
taskMapper
;
@Autowired
private
final
OrderMapper
orderMapper
;
@Autowired
protected
CodeResolve
codeResolve
;
@Autowired
protected
TaskService
taskService
;
@ApiOperation
(
"欠料发料:工单欠料发料列表"
)
@GetMapping
(
value
=
"/shortageOrderList"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
PageData
<
OrderDto
>
shortageOrderList
(
OrderQueryCondition
criteria
,
Pageable
pageable
)
{
Integer
[]
status
=
new
Integer
[]{
LITEORDER_STATUS
.
EXECUTING_END
,
LITEORDER_STATUS
.
ADDOUTBOUND
};
Query
query
=
getQuery
(
criteria
,
status
);
PageData
<
LiteOrder
>
orderList
=
liteOrderManager
.
findByPage
(
query
,
pageable
);
PageData
<
OrderDto
>
resultList
=
orderMapper
.
toDto
(
orderList
);
return
resultList
;
}
private
Query
getQuery
(
OrderQueryCondition
criteria
,
Integer
[]
status
){
// User user = userManager.findByUserName(SecurityUtils.getCurrentUsername());
// if (user != null) {
// //数据权限 查找没有权限的组列表
// if (!user.getIsAdmin()) {
// Set<String> groupIds = user.getGroups();
// List<String> excludeSources = Lists.newArrayList();
// List<Group> groups = groupManager.findAll();
// for (Group group :
// groups) {
// if (groupIds.contains(group.getId())) {
// continue;
// }
// excludeSources.add(group.getGroupName());
// }
// criteria.setExcludeSourceList(excludeSources);
// }
// }
Query
query
=
QueryHelp
.
getQuery
(
criteria
);
//查询所有出库中或关闭的
query
.
addCriteria
(
Criteria
.
where
(
"status"
).
in
(
status
));
query
.
addCriteria
(
Criteria
.
where
(
"shortageOut"
).
is
(
true
));
return
query
;
}
@ApiOperation
(
"欠料发料:工单欠料出库"
)
@PostMapping
(
value
=
"/shortageOut"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
ResultBean
shortageOut
(
@RequestBody
Map
<
String
,
String
>
mapValues
)
{
String
orderNo
=
mapValues
.
get
(
"orderNo"
);
if
(
orderNo
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"orderNo"
});
}
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueNotFind"
,
"未找到{0}[{1}]"
,
new
String
[]{
"orderNo"
,
orderNo
});
}
//判断是否已有在出库中的工单
Integer
[]
status
=
new
Integer
[]{
LITEORDER_STATUS
.
ADDOUTBOUND
};
Query
query
=
getQuery
(
new
OrderQueryCondition
(),
status
);
List
<
LiteOrder
>
liteOrders
=
liteOrderManager
.
findByQuery
(
query
);
if
(
liteOrders
.
size
()>
0
){
throw
new
ValidateException
(
"smfcore.orderShortage.hasOut"
,
"请等待工单["
+
liteOrders
.
get
(
0
).
getOrderNo
()+
"]欠料出库结束"
,
new
String
[]{
"orderNo"
,
liteOrders
.
get
(
0
).
getOrderNo
()});
}
//TODO 调用缺料出库方法
String
result
=
liteOrderCache
.
checkOutLiteOrder
(
SecurityUtils
.
getCurrentUsername
(),
liteOrder
.
getOrderNo
(),
true
,
true
);
if
(
ObjectUtil
.
isEmpty
(
result
))
{
return
ResultBean
.
newOkResult
(
result
);
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
result
,
result
);
}
}
@ApiOperation
(
"欠料发料:获取工单欠料发料任务列表"
)
@GetMapping
(
"/shortageOutTasks"
)
@PreAuthorize
(
"@el.check('reelOut')"
)
public
List
<
TaskDto
>
shortageOutTasks
(
@RequestParam
Map
<
String
,
String
>
paramsMap
)
{
//
// String orderNo = paramsMap.get("orderNo");
// if (orderNo == null) {
// throw new ValidateException("smfcore.valueCanotNull", "{0}不能为空", new String[]{"orderNo"});
// }
//
// LiteOrder liteOrder = liteOrderManager.findByOrderNo(orderNo);
// if (liteOrder == null) {
// throw new ValidateException("smfcore.valueNotFind", "未找到{0}[{1}]", new String[]{"orderNo", orderNo});
// }
//判断是否已有在出库中的工单
Integer
[]
status
=
new
Integer
[]{
LITEORDER_STATUS
.
ADDOUTBOUND
};
Query
query
=
getQuery
(
new
OrderQueryCondition
(),
status
);
List
<
LiteOrder
>
liteOrders
=
liteOrderManager
.
findByQuery
(
query
);
List
<
DataLog
>
taskList
=
new
ArrayList
<>();
if
(
liteOrders
.
size
()
>
0
)
{
LiteOrder
liteOrder
=
liteOrders
.
get
(
0
);
if
(
liteOrder
.
isNew
()
||
liteOrder
.
isClosed
())
{
throw
new
ValidateException
(
"smfcore.order.notExecute"
,
"工单[{0}]不在出库中"
,
new
String
[]{
liteOrder
.
getOrderNo
()});
}
List
<
DataLog
>
allTasks
=
taskService
.
getAllTasks
();
for
(
DataLog
datalog
:
allTasks
)
{
if
(
datalog
.
isOrderTask
()
&&
datalog
.
getSourceId
().
equals
(
liteOrder
.
getId
()))
{
//判断是否是缺料出库
if
(
datalog
.
isAddOutbound
())
{
taskList
.
add
(
datalog
);
}
}
}
}
return
taskMapper
.
toDto
(
taskList
);
}
@ApiOperation
(
"合单欠料:工单列表"
)
@GetMapping
(
value
=
"/sheetList"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
PageData
<
OrderDto
>
queryList
(
OrderQueryCondition
criteria
,
Pageable
pageable
)
{
Integer
[]
status
=
new
Integer
[]{
LITEORDER_STATUS
.
CLOSED
};
Query
query
=
getQuery
(
criteria
,
status
);
PageData
<
LiteOrder
>
orderList
=
liteOrderManager
.
findByPage
(
query
,
pageable
);
PageData
<
OrderDto
>
resultList
=
orderMapper
.
toDto
(
orderList
);
return
resultList
;
}
@ApiOperation
(
"合单欠料:扫码料盘获取位置信息"
)
@PostMapping
(
value
=
"/getOrderRIPos"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
OrderRIPostDto
getOrderRIPos
(
@RequestBody
String
barcode
)
{
// String code = mapValues.get("barcode").toString();
Barcode
barcodeInfo
=
codeResolve
.
resolveOneValideBarcode
(
barcode
);
if
(
barcodeInfo
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"条码"
});
}
DataLog
dataLog
=
dataLogManager
.
findLastOutTask
(
barcodeInfo
.
getBarcode
(),
true
);
if
(
dataLog
==
null
)
{
throw
new
ValidateException
(
"smfcore.orderSheet.barcode"
,
"未找到料盘{0}的工单信息"
,
new
String
[]{
barcodeInfo
.
getBarcode
()});
}
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
dataLog
.
getSourceName
());
if
(
liteOrder
==
null
)
{
throw
new
ValidateException
(
"smfcore.orderSheet.barcode"
,
"未找到料盘{0}的工单信息"
,
new
String
[]{
barcodeInfo
.
getBarcode
()});
}
//欠料位置直接获取
int
type
=
4
;
OrderRIPostDto
dto
=
new
OrderRIPostDto
(
barcodeInfo
.
getBarcode
(),
liteOrder
.
getOrderNo
(),
type
,
liteOrder
.
getBoxNum
(),
liteOrder
.
getCurrBoxNum
(),
liteOrder
.
getPosition
(
type
));
return
dto
;
}
@ApiOperation
(
"合单欠料:绑定位置"
)
@PostMapping
(
value
=
"/bindPosition"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
ResultBean
bindPosition
(
@RequestBody
Map
<
String
,
Object
>
mapValues
)
{
String
orderNo
=
mapValues
.
get
(
"orderNo"
).
toString
();
// int type =Integer.parseInt(mapValues.get("type").toString()) ;
String
position
=
mapValues
.
get
(
"position"
).
toString
();
int
type
=
4
;
//欠料位置
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
==
null
){
throw
new
ValidateException
(
"smfcore.orderSheet.barcode"
,
"未找到工单{0}"
,
new
String
[]{
orderNo
}
);
}
String
pos
=
liteOrder
.
getPosition
(
type
);
if
(
ObjectUtil
.
isNotEmpty
(
pos
)){
throw
new
ValidateException
(
"smfcore.orderSheet.hasPos"
,
"工单{0}已有{1}位置{2}"
,
new
String
[]{
orderNo
,
liteOrder
.
getPosition
(
type
),
pos
}
);
}
if
(
liteOrder
.
getPosInfos
()!=
null
){
for
(
OrderPosInfo
posInfo
:
liteOrder
.
getPosInfos
())
{
if
(
posInfo
.
getPosition
().
equals
(
position
))
{
throw
new
ValidateException
(
"smfcore.orderSheet.hasPos"
,
"工单{0}已有{1}位置{2}"
,
new
String
[]{
orderNo
,
liteOrder
.
getPosition
(
posInfo
.
getType
()),
position
}
);
}
}
}
liteOrder
.
addPos
(
type
,
position
);
log
.
info
(
"工单合单:工单号["
+
liteOrder
.
getOrderNo
()+
"]绑定位置["
+
type
+
"]["
+
position
+
"]"
);
liteOrderManager
.
save
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
return
ResultBean
.
newOkResult
(
"smfcore.orderSheet.bindPosition.ok"
,
"绑定成功"
,
position
);
}
@ApiOperation
(
"合单欠料:工单已齐套"
)
@PostMapping
(
value
=
"/orderComplete"
)
@PreAuthorize
(
"@el.check('workOrder')"
)
public
ResultBean
orderComplete
(
@RequestBody
Map
<
String
,
Object
>
mapValues
)
{
String
orderNo
=
mapValues
.
get
(
"orderNo"
).
toString
();
LiteOrder
liteOrder
=
liteOrderManager
.
findByOrderNo
(
orderNo
);
if
(
liteOrder
==
null
){
throw
new
ValidateException
(
"smfcore.orderSheet.barcode"
,
"未找到工单{0}"
,
new
String
[]{
orderNo
}
);
}
log
.
info
(
"工单已齐套:工单号["
+
liteOrder
.
getOrderNo
()+
"]工单已齐套"
);
liteOrder
.
setComplete
(
true
);
liteOrderManager
.
save
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
return
ResultBean
.
newOkResult
(
"ok"
);
}
}
src/main/java/com/neotel/smfcore/core/order/service/po/LiteOrder.java
查看文件 @
e8f815a
...
...
@@ -7,6 +7,7 @@ import com.neotel.smfcore.core.order.bean.OrderPosInfo;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.hikvision.bean.HikOrderInfo
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.data.annotation.Transient
;
import
org.springframework.data.mongodb.core.mapping.Document
;
...
...
@@ -17,6 +18,7 @@ import java.util.List;
@Data
@Document
@Slf4j
public
class
LiteOrder
extends
BasePo
implements
Serializable
{
public
LiteOrder
()
{
...
...
@@ -190,10 +192,26 @@ public class LiteOrder extends BasePo implements Serializable {
/**
* 结束当前的任务
*/
public
void
finishedTasks
(){
public
void
finishedTasks
()
{
if
(
isExecuting
()){
setClosed
(
true
);
//TODO 判断是否处于缺料状态,是的话修改状态
if
(
getShortageOut
())
{
boolean
allOk
=
true
;
for
(
LiteOrderItem
liteOrderItem
:
getOrderItems
())
{
if
(!
liteOrderItem
.
isOutFinished
())
{
allOk
=
false
;
break
;
}
}
if
(!
allOk
)
{
setStatus
(
LITEORDER_STATUS
.
EXECUTING_END
);
log
.
info
(
"工单[]出库完成,但是未达到目标出库量,改为 EXECUTING_END 状态"
);
}
}
else
{
if
(
isExecuting
())
{
setClosed
(
true
);
}
}
setTaskFinishedTime
(
System
.
currentTimeMillis
());
}
...
...
src/main/java/com/neotel/smfcore/core/system/service/manager/IDataLogManager.java
查看文件 @
e8f815a
...
...
@@ -8,5 +8,5 @@ import java.util.List;
public
interface
IDataLogManager
extends
IBaseManager
<
DataLog
>
{
List
<
DataLog
>
findUnFinishedTasks
();
DataLog
findLastOutTask
(
String
barcode
);
DataLog
findLastOutTask
(
String
barcode
,
boolean
addOutbound
);
}
src/main/java/com/neotel/smfcore/core/system/service/manager/impl/DataLogManagerImpl.java
查看文件 @
e8f815a
...
...
@@ -66,11 +66,19 @@ public class DataLogManagerImpl implements IDataLogManager {
}
@Override
public
DataLog
findLastOutTask
(
String
barcode
)
{
public
DataLog
findLastOutTask
(
String
barcode
,
boolean
addOutbound
)
{
Query
query
=
new
Query
(
Criteria
.
where
(
"barcode"
).
is
(
barcode
));
query
.
addCriteria
(
Criteria
.
where
(
"outType"
).
is
(
10
));
Sort
sort
=
Sort
.
by
(
Sort
.
Direction
.
DESC
,
"createDate"
);
query
.
with
(
sort
);
//判断是否是欠料出库
if
(
addOutbound
){
query
.
addCriteria
(
Criteria
.
where
(
"addOutbound"
).
is
(
true
));
}
else
{
query
.
addCriteria
(
Criteria
.
where
(
"addOutbound"
).
ne
(
true
));
}
DataLog
dataLog
=
dataLogDao
.
findOne
(
query
);
return
dataLog
;
}
...
...
src/main/java/com/neotel/smfcore/core/system/service/po/DataLog.java
查看文件 @
e8f815a
...
...
@@ -244,6 +244,11 @@ public class DataLog extends BasePo implements Serializable {
private
boolean
inOperate
=
false
;
/**
* 工单出库,是否是缺料出库后的欠料出库
*/
private
boolean
addOutbound
=
false
;
/**
* MSD附加信息
*/
private
MSDAppendInfo
msdAppendInfo
;
...
...
@@ -324,6 +329,16 @@ public class DataLog extends BasePo implements Serializable {
public
boolean
isCheckOutTask
(){
return
OP
.
CHECKOUT
==
type
;
}
/**
* 是否是工单出库任务
*/
public
boolean
isOrderTask
(){
if
(
OP
.
CHECKOUT
==
type
&&
outType
==
10
){
return
true
;
}
return
false
;
}
/**
* 超过5分钟的已完成,已取消的任务都不再
...
...
src/main/resources/config/application.yml
查看文件 @
e8f815a
server
:
port
:
8800
hik
:
server
:
http://cloudapi-
ts
t.hikvision.com.cn/api/
server
:
http://cloudapi-
ua
t.hikvision.com.cn/api/
baseCode
:
"
8001"
lgort
:
"
M9142"
addr_1_transferOrderApi
:
...
...
@@ -26,18 +26,55 @@ hik:
key_9_updateRepOrderApi
:
"
065009225"
key_10_reservedOrderApi
:
"
065009370"
key_11_orderEndApi
:
"
065009098"
secret_1_transferOrderApi
:
3RqMfgy5djpbfol4NMh6sd1TIRNZnHeEn86QdQW5hV2Z0PXA35zUSneX07d5HQEi
secret_2_transferOrderInApi
:
IBf9yJb3vWCAG60pDLncapoypGsBV6gbzpENZEnLxbEsxKgvtoYcOmDDcKlbcL02
secret_3_scheduleTaskApi
:
eR2RbW9zHVglHfDweBHPzDF2pYR0RpF1dUpHJKrVKLmYCyHErz2NjXvMsWNJoKgz
secret_4_returnMaterialApi
:
sRs9lFTsRYpTvORhSI32FhjEPhJDb6TzTvIxhPudrmo9jgwwCiKJWi8go1yN8988
secret_5_putInApi
:
gTLARhgpnbhSv7SNOvQtHoMxWapphmgRwO72vLsVj76CpGvdpImDsum0LVlrsymu
secret_6_checkOutApi
:
MDulYCOgEasYYJXOk2tLycnpYKS2HQK0vXcIvJNzPt79isaHJkyE24BcCzn3hTg4
secret_7_updateOrderApi
:
HvbUVz6vQJYIDfmWokk98rxSUHAoDlUWNSsPuVc0hB8JtIOzZLDQYARW9tmeU2Fy
secret_8_riCheckApi
:
eQPd3y8xDvwXKMetEbwp2LdzJe8tD0Dg48YA1H68SPsGeKSt2Yj3pOrKibguwzwe
secret_9_updateRepOrderApi
:
UU9jBeJBbfg47Wpy3z1dxEBmXHanjH1AFBzGmj9c8U7zuGgG5EJR0KSzTJ7yJE9a
secret_10_reservedOrderApi
:
JBtBxmAXk5Xg4LEGzxLnJQf8gvYx5jquwwfRKRE4hrwvbpVDJh4RnPWGq8Hgd9ep
secret_11_orderEndApi
:
W0KWumdsD4eMyTm3Qail9HxHTfqdvxAJW30hLKtiTpJeGO7wXwBe7aUO6n0eicf8
secret_1_transferOrderApi
:
XQP14qbvLkjvEIPcTqtzqtfUT0VNkwWloczU9y3GO2ACclm2WsiWbf44itzGecrl
secret_2_transferOrderInApi
:
p5mjSoX80QfgevObxN549jMW4tzawr6da1yTAYtetuoWVL1HTSxZIOJdOaCvF4Kp
secret_3_scheduleTaskApi
:
IftxhjIKEryxUQfjHcgYcwGck6TIlcpkJd6gwjGmznkPN1IQT4jnmy8jlWs8Fkqu
secret_4_returnMaterialApi
:
IbVCzQD4sWgaR6bie70iL0ZN9bjHWWuGNm5Ad4nDKGOpbGccLYCAdDo9mQUvIIDd
secret_5_putInApi
:
TZgeifaZl71gM7FVY6ga4hfH56KOhcJmbf642VY7nbn2iV6JZHsu3RzTmrYn5QDm
secret_6_checkOutApi
:
AaC3HweGbW7VgGl3LIk3yyhMY7xpCTmGbVVi6R9Q340TuHhTtLTXMRtIIBgOzLJO
secret_7_updateOrderApi
:
PvCE1fdJ3psFQnKmkHnTcOBs2vqFOKKB5MZKYu1TDhkCldGh48gpldQDXuFdDiYY
secret_8_riCheckApi
:
2B0dEQCtf4FEJcvNUtcpoblq3gfuHJDWbawFt9R1irrUNKORhqUyAaU8OMbGvMMu
secret_9_updateRepOrderApi
:
dpkHeHgpv8wrxf7ciJlWmvyrvhAndOvqsOxingsbvN1EmlmOdnwr7QjcIjCUJWRM
secret_10_reservedOrderApi
:
wsmY125PTNqNaKxE9tG692P1dhaaKWyJ37bpvSq8H6bAltjEqE2ZdMT4OidB8U2v
secret_11_orderEndApi
:
SbdAtaYTbVjk51YmOHeblBkIrtpRo0e3Tuff5l9fHD4zHIKeOEVLF2TU6pj4pmju
#hik:
# server: http://cloudapi-tst.hikvision.com.cn/api/
# baseCode: "8001"
# lgort: "M9142"
# addr_1_transferOrderApi:
# addr_2_transferOrderInApi:
# addr_3_scheduleTaskApi:
# addr_4_returnMaterialApi:
# addr_5_putInApi:
# addr_6_checkOutApi:
# addr_7_updateOrderApi:
# addr_8_riCheckApi:
# addr_9_updateRepOrderApi:
# addr_10_reservedOrderApi:
# addr_11_orderEndApi:
# key_1_transferOrderApi: "065009142"
# key_2_transferOrderInApi: "065009152"
# key_3_scheduleTaskApi: "065009097"
# key_4_returnMaterialApi: "065009043"
# key_5_putInApi: "065009094"
# key_6_checkOutApi: "065009095"
# key_7_updateOrderApi: "065009096"
# key_8_riCheckApi: "065009099"
# key_9_updateRepOrderApi: "065009225"
# key_10_reservedOrderApi: "065009370"
# key_11_orderEndApi: "065009098"
# secret_1_transferOrderApi: 3RqMfgy5djpbfol4NMh6sd1TIRNZnHeEn86QdQW5hV2Z0PXA35zUSneX07d5HQEi
# secret_2_transferOrderInApi: IBf9yJb3vWCAG60pDLncapoypGsBV6gbzpENZEnLxbEsxKgvtoYcOmDDcKlbcL02
# secret_3_scheduleTaskApi: eR2RbW9zHVglHfDweBHPzDF2pYR0RpF1dUpHJKrVKLmYCyHErz2NjXvMsWNJoKgz
# secret_4_returnMaterialApi: sRs9lFTsRYpTvORhSI32FhjEPhJDb6TzTvIxhPudrmo9jgwwCiKJWi8go1yN8988
# secret_5_putInApi: gTLARhgpnbhSv7SNOvQtHoMxWapphmgRwO72vLsVj76CpGvdpImDsum0LVlrsymu
# secret_6_checkOutApi: MDulYCOgEasYYJXOk2tLycnpYKS2HQK0vXcIvJNzPt79isaHJkyE24BcCzn3hTg4
# secret_7_updateOrderApi: HvbUVz6vQJYIDfmWokk98rxSUHAoDlUWNSsPuVc0hB8JtIOzZLDQYARW9tmeU2Fy
# secret_8_riCheckApi: eQPd3y8xDvwXKMetEbwp2LdzJe8tD0Dg48YA1H68SPsGeKSt2Yj3pOrKibguwzwe
# secret_9_updateRepOrderApi: UU9jBeJBbfg47Wpy3z1dxEBmXHanjH1AFBzGmj9c8U7zuGgG5EJR0KSzTJ7yJE9a
# secret_10_reservedOrderApi: JBtBxmAXk5Xg4LEGzxLnJQf8gvYx5jquwwfRKRE4hrwvbpVDJh4RnPWGq8Hgd9ep
# secret_11_orderEndApi: W0KWumdsD4eMyTm3Qail9HxHTfqdvxAJW30hLKtiTpJeGO7wXwBe7aUO6n0eicf8
# 文件存储路径
file
:
...
...
src/main/resources/messages.properties
查看文件 @
e8f815a
...
...
@@ -13,7 +13,7 @@ smfcore.notActivated=\u8D26\u53F7\u672A\u6FC0\u6D3B
smfcore.userInfoError
=
\u7528\u6237\u
4FE1
\u
606F
\u
4E0D
\u
5B8C
\u6574
smfcore.noaccess
=
\u
65E0
\u6743\u9650\u
4FEE
\u6539\u
6B64
\u
89D2
\u8272\u7684\u
83DC
\u5355
smfcore.notSelRole
=
\u
8BF7
\u8981\u
4FEE
\u6539\u7684\u9009\u
62E9
\u
89D2
\u8272
smfcore.posIsused
=
\u
6599\u
4ED3[{0}]
\u7684\u
5E93
\u
4F4D[{1}}]
\u6709\u6599
[{2}],
\u5220\u9664\u5931\u
8D25
smfcore.posIsused
=
\u
5220\u9664\u5931\u
8D25
\u
FF0C
\u6599\u
4ED3[{0}]
\u7684\u
5E93
\u
4F4D[{1}}]
\u6709\u6599
[{2}]
smfcore.thePosIsused
=
\u
5E93
\u
4F4D[{0}]
\u6709\u6599
[{1}],
\u
4E0D
\u
80FD
\u5220\u9664
smfcore.groupWithStorage
=
\u
7EC4[{0}]
\u
5DF2
\u
548C
\u
8BBE
\u5907\u5173\u8054
smfcore.groupWithUser
=
\u
7EC4[{0}]
\u
5DF2
\u
548C
\u7528\u6237\u5173\u8054
...
...
@@ -256,6 +256,8 @@ smfcore.noValidPos=\u672A\u627E\u5230\u5355\u636E\u53F7
smfcore.order.out.short
=
\u
5DE5
\u5355\u
7F3A
\u6599
smfcore.outList.out.short
=
\u
5B58
\u
50A8
\u
51FA
\u
5E93
\u5355
{0}
\u
7F3A
\u6599
smfcore.outList.out.noTask
=
\u
8F6C
\u
50A8
\u
51FA
\u
5E93
\u5355\u
65E0
\u
53EF
\u6267\u
884C
\u7684\u
4EFB
\u
52A1
smfcore.posNotDel
=
\u5220\u9664\u5931\u
8D25
\u
FF0C
\u
8BF7
\u5148\u5220\u9664
[{0}]
\u7684\u6240\u6709\u
5E93
\u
4F4D
smfcore.orderShortage.hasOut
=
\u
8BF7
\u
7B49
\u
5F85
\u
5DE5
\u5355
[{0}]
\u
6B20
\u6599\u
51FA
\u
5E93
\u
7ED3
\u
675F
#smfcore.order.out.short=\u5DE5\u5355\u51FA\u5E93\u5931\u8D25\uFF0C\u5DE5\u5355\u7F3A\u6599
#smfclient.nlp.onlyOneTray=\u4E0D\u53EF\u540C\u65F6\u653E\u5165\u591A\u76D8\u7269\u6599:{0}
...
...
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论