Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit ee164710
由
LN
编写于
2023-08-22 10:22:41 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
增加dispatch接口
1 个父辈
6dbd7ddf
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
476 行增加
和
6 行删除
src/main/java/com/neotel/smfcore/core/order/listener/DefaultOrderFileListener.java
src/main/java/com/neotel/smfcore/core/order/listener/IOrderFileListener.java
src/main/java/com/neotel/smfcore/core/order/util/OrderFileWatch.java
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronDispatchController.java
src/main/java/com/neotel/smfcore/custom/micron1053/task/bean/DispatchItemMapper.java
src/main/java/com/neotel/smfcore/custom/micron1053/task/bean/dto/DispatchItemDto.java
src/main/java/com/neotel/smfcore/core/order/listener/DefaultOrderFileListener.java
查看文件 @
ee16471
...
...
@@ -14,6 +14,8 @@ import com.neotel.smfcore.core.system.bean.OrderSetting;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.logging.log4j.util.Strings
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.stereotype.Service
;
import
java.io.File
;
...
...
@@ -100,6 +102,82 @@ public class DefaultOrderFileListener implements IOrderFileListener {
}
@Override
public
boolean
handleOrderFile
(
File
orderFile
,
String
mode
,
String
reason
)
{
String
fileName
=
orderFile
.
getName
();
//String backupFileName = fileName +"_" + System.currentTimeMillis();
//看数据库是否已有此工单
// if(!fileName.endsWith(".process") && fileName.endsWith("_result.txt")){
//
// }
if
(
isFileType
(
fileName
,
"csv"
)
||
isFileType
(
fileName
,
"xlsx"
))
{
LiteOrder
fileNameOrder
=
liteOrderManager
.
findBySource
(
fileName
);
if
(
fileNameOrder
==
null
)
{
try
{
Map
<
String
,
List
<
LiteOrderItem
>>
itemMap
=
null
;
if
(
isFileType
(
fileName
,
"csv"
))
{
itemMap
=
readCsvFile
(
fileName
,
orderFile
.
getAbsolutePath
());
}
else
if
(
isFileType
(
fileName
,
"xlsx"
))
{
itemMap
=
readExcelFile
(
fileName
,
orderFile
.
getAbsolutePath
());
}
//新增为一个工单
String
orderName
=
reason
;
if
(
ObjectUtil
.
isEmpty
(
reason
))
{
List
<
LiteOrder
>
orders
=
liteOrderManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"mode"
).
is
(
mode
)));
orderName
=
mode
+
(
orders
.
size
()
+
1
);
}
LiteOrder
dbOrder
=
liteOrderManager
.
findByOrderNo
(
orderName
);
if
(
dbOrder
!=
null
)
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyyMMddHHmmss"
);
//把名字改为带时间的
String
newOrderNo
=
orderName
+
"-"
+
format
.
format
(
new
Date
());
dbOrder
=
liteOrderManager
.
findByOrderNo
(
newOrderNo
);
if
(
dbOrder
==
null
)
{
}
else
{
log
.
info
(
"watchOrderDir,mode=["
+
mode
+
"],reason=["
+
reason
+
"]:数据库中已存在工单号为["
+
orderName
+
"],忽略文件:"
+
orderFile
.
getAbsolutePath
());
//resultFile = new File(localDir+File.separator + "error",backupFileName);
return
false
;
}
}
List
<
LiteOrderItem
>
allItems
=
new
ArrayList
<>();
if
(
itemMap
!=
null
&&
itemMap
.
size
()
>
0
)
{
for
(
String
so
:
itemMap
.
keySet
())
{
List
<
LiteOrderItem
>
liteOrderItems
=
itemMap
.
get
(
so
);
if
(
liteOrderItems
.
size
()
<=
0
)
{
continue
;
}
allItems
.
addAll
(
liteOrderItems
);
}
}
if
(
allItems
.
size
()
<=
0
)
{
return
false
;
}
LiteOrder
liteOrder
=
new
LiteOrder
(
orderName
,
allItems
);
liteOrder
.
setMode
(
mode
);
log
.
info
(
"watchOrderDir,mode=["
+
mode
+
"],reason=["
+
reason
+
"]:新增加订单:"
+
liteOrder
.
getOrderNo
()
+
",共"
+
allItems
.
size
()
+
"条工单详情"
);
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
return
true
;
}
catch
(
Exception
e
)
{
log
.
error
(
"read order from file ["
+
orderFile
.
getAbsolutePath
()
+
"] :"
,
e
);
}
}
}
return
false
;
}
public
Map
<
String
,
List
<
LiteOrderItem
>>
readCsvFile
(
String
fileName
,
String
fileURL
)
{
CsvReader
csvRead
=
null
;
try
{
...
...
src/main/java/com/neotel/smfcore/core/order/listener/IOrderFileListener.java
查看文件 @
ee16471
...
...
@@ -9,4 +9,6 @@ public interface IOrderFileListener {
boolean
handleOrderFile
(
File
orderFile
);
boolean
handleOrderFile
(
File
orderFile
,
String
mode
,
String
reason
);
}
src/main/java/com/neotel/smfcore/core/order/util/OrderFileWatch.java
查看文件 @
ee16471
...
...
@@ -126,7 +126,22 @@ public class OrderFileWatch {
return
false
;
}
/**
* 解析工单文件
* @param orderFile
* @return
*/
public
boolean
handleOrderFile
(
File
orderFile
,
String
mode
,
String
reason
){
log
.
info
(
"开始处理Order文件:"
+
orderFile
.
getAbsolutePath
());
for
(
IOrderFileListener
orderFileListener
:
orderFileListenerList
)
{
boolean
result
=
orderFileListener
.
handleOrderFile
(
orderFile
,
mode
,
reason
);
if
(
result
){
return
true
;
}
}
return
false
;
}
private
String
getLocalDir
(
String
orderDir
){
//String[] fileTypes=new String[]{"csv","xml","txt"};
...
...
src/main/java/com/neotel/smfcore/custom/micron1053/task/MicronDispatchController.java
查看文件 @
ee16471
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
task
;
import
com.neotel.smfcore.common.bean.ResultBean
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.FileUtil
;
import
com.neotel.smfcore.core.order.LiteOrderCache
;
import
com.neotel.smfcore.core.order.enums.LITEORDER_STATUS
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderItemManager
;
import
com.neotel.smfcore.core.order.service.manager.ILiteOrderManager
;
import
com.neotel.smfcore.core.order.service.po.LiteOrder
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.core.order.util.OrderFileWatch
;
import
com.neotel.smfcore.core.storage.rest.dto.TacticsOutDto
;
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.custom.micron1053.api.MicronApi
;
import
com.neotel.smfcore.custom.micron1053.task.bean.DispatchItemMapper
;
import
com.neotel.smfcore.custom.micron1053.task.bean.dto.DispatchItemDto
;
import
com.neotel.smfcore.custom.micron1053.task.enums.OrderItemStatus
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.bean.FileProperties
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.data.mongodb.core.query.Query
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.File
;
import
java.text.SimpleDateFormat
;
import
java.util.*
;
@Slf4j
@RestController
@Api
(
tags
=
"1053:OutSide Shelf Dispatch Controlled Dispatch"
)
@RequestMapping
(
"/rest/micron/dispatch"
)
@RequiredArgsConstructor
public
class
MicronDispatchController
{
//
// @ApiOperation("上传工单")
// @PostMapping(value = "/upload")
// @AnonymousAccess
// public ResultBean updateAvatar(@RequestParam MultipartFile orderFile) {
//
// String csv = "csv";
// String excel="xlsx";
// String fileType = FileUtil.getExtensionName(orderFile.getOriginalFilename());
// String fileName = FileUtil.getFileNameNoEx(orderFile.getOriginalFilename());
// if (fileType != null &&(!csv.contains(fileType))&&(!excel.contains(fileType)) ) {
// throw new ValidateException("smfcore.feleFormatError", "文件格式错误!, 仅支持{0}格式", new String[]{csv+","+excel});
// }
// File folder = new File(properties.getPath(), "pos");
// File localFile = FileUtil.upload(orderFile, folder.getAbsolutePath());
// boolean result = orderFileWatch.handleOrderFile(localFile);
// if (result) {
// return ResultBean.newOkResult("smfcore.order.uploadOK", "工单上传成功");
// } else {
// return ResultBean.newErrorResult(-1,"smfcore.order.uploadFailure","上传失败");
// }
// }
@Autowired
private
ILiteOrderManager
liteOrderManager
;
@Autowired
private
IDataLogManager
dataLogManager
;
@Autowired
private
ILiteOrderItemManager
liteOrderItemManager
;
@Autowired
private
final
FileProperties
properties
;
@Autowired
private
LiteOrderCache
liteOrderCache
;
@Autowired
private
DispatchItemMapper
dispatchItemMapper
;
@Autowired
private
OrderFileWatch
orderFileWatch
;
@Autowired
private
TaskService
taskService
;
@ApiOperation
(
"获取出库页详情"
)
@AnonymousAccess
@GetMapping
(
"/getList"
)
public
ResultBean
list
(
String
mode
)
{
//判断是否验证
if
(!
MicronApi
.
isEnable
())
{
return
ResultBean
.
newErrorResult
(
9
,
"smfcore.micron.apiClose"
,
" Not yet open"
);
}
//获取是否有此类型的工单信息
//code=0,,如果已经存在,直接返回列表页面
//code=1,没有数据,进入上传工单页面
List
<
LiteOrderItem
>
itemList
=
getLiteOrderItemList
(
mode
);
if
(
itemList
!=
null
&&
!
itemList
.
isEmpty
())
{
//已存在,直接返回列表页面
List
<
DispatchItemDto
>
list
=
dispatchItemMapper
.
toDto
(
itemList
);
return
ResultBean
.
newOkResult
(
list
);
}
else
{
//需要进入上传工单页面
return
ResultBean
.
newErrorResult
(
1
,
""
,
""
);
}
}
@ApiOperation
(
"Submit"
)
@AnonymousAccess
@
GetMapping
(
"/outSideS
ubmit"
)
public
ResultBean
outSideSubmit
(
String
mode
,
String
reason
)
{
@
PostMapping
(
"/s
ubmit"
)
public
ResultBean
outSideSubmit
(
@RequestBody
String
mode
,
@RequestBody
String
reason
,
@RequestBody
MultipartFile
orderFile
)
{
//判断是否验证
if
(!
MicronApi
.
isEnable
())
{
return
ResultBean
.
newErrorResult
(
9
,
"smfcore.micron.apiClose"
,
" Not yet open"
);
}
String
csv
=
"csv"
;
String
excel
=
"xlsx"
;
String
fileType
=
FileUtil
.
getExtensionName
(
orderFile
.
getOriginalFilename
());
String
fileName
=
FileUtil
.
getFileNameNoEx
(
orderFile
.
getOriginalFilename
());
if
(
fileType
!=
null
&&
(!
csv
.
contains
(
fileType
))
&&
(!
excel
.
contains
(
fileType
)))
{
throw
new
ValidateException
(
"smfcore.feleFormatError"
,
"文件格式错误!, 仅支持{0}格式"
,
new
String
[]{
csv
+
","
+
excel
});
}
File
folder
=
new
File
(
properties
.
getPath
(),
"pos"
);
File
localFile
=
FileUtil
.
upload
(
orderFile
,
folder
.
getAbsolutePath
());
boolean
result
=
orderFileWatch
.
handleOrderFile
(
localFile
,
mode
,
reason
);
if
(
result
)
{
// return ResultBean.newOkResult("smfcore.order.uploadOK", "工单上传成功");
//返回详情
List
<
LiteOrderItem
>
itemList
=
getLiteOrderItemList
(
mode
);
//已存在,直接返回列表页面
List
<
DispatchItemDto
>
list
=
dispatchItemMapper
.
toDto
(
itemList
);
return
ResultBean
.
newOkResult
(
list
);
}
else
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
}
@ApiOperation
(
"Pn出库提交"
)
@AnonymousAccess
@PostMapping
(
"/pnSubmit"
)
public
ResultBean
pnSubmit
(
@RequestBody
Set
<
TacticsOutDto
>
outDtoSet
)
{
//判断是否验证
if
(!
MicronApi
.
isEnable
())
{
return
ResultBean
.
newErrorResult
(
9
,
"smfcore.micron.apiClose"
,
" Not yet open"
);
}
if
(
outDtoSet
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"PN"
});
}
for
(
TacticsOutDto
dto
:
outDtoSet
)
{
if
(
dto
.
getPartNumber
()
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"PN"
});
}
else
if
(
dto
.
getPlateNumber
()
==
null
)
{
throw
new
ValidateException
(
"smfcore.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"Num"
});
}
}
//生成工单
String
mode
=
"CTRLDISPATCH "
;
//新增为一个工单
String
orderName
=
""
;
List
<
LiteOrder
>
orders
=
liteOrderManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"mode"
).
is
(
mode
)));
orderName
=
mode
+
(
orders
.
size
()
+
1
);
LiteOrder
dbOrder
=
liteOrderManager
.
findByOrderNo
(
orderName
);
if
(
dbOrder
!=
null
)
{
SimpleDateFormat
format
=
new
SimpleDateFormat
(
"yyyyMMddHHmmss"
);
//把名字改为带时间的
String
newOrderNo
=
orderName
+
"-"
+
format
.
format
(
new
Date
());
dbOrder
=
liteOrderManager
.
findByOrderNo
(
newOrderNo
);
if
(
dbOrder
!=
null
)
{
//工单名重复,直接返回
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
}
List
<
LiteOrderItem
>
items
=
new
ArrayList
<>();
for
(
TacticsOutDto
dto
:
outDtoSet
)
{
LiteOrderItem
item
=
new
LiteOrderItem
();
item
.
setPn
(
dto
.
getPartNumber
());
item
.
setNeedReelCount
(
dto
.
getPlateNumber
());
item
.
setNeedNum
(
dto
.
getNeedNum
());
items
.
add
(
item
);
}
LiteOrder
liteOrder
=
new
LiteOrder
(
orderName
,
items
);
liteOrder
.
setMode
(
mode
);
log
.
info
(
"pnSubmit,mode=["
+
mode
+
"], 新增加订单:"
+
liteOrder
.
getOrderNo
()
+
",共"
+
items
.
size
()
+
"条工单详情"
);
liteOrder
=
liteOrderManager
.
createWithItems
(
liteOrder
);
liteOrderCache
.
addOrderToMap
(
liteOrder
);
// taskService.tacticsCheckOut(outDtoSet);
return
ResultBean
.
newOkResult
(
"ok"
);
}
@ApiOperation
(
"重试"
)
@PostMapping
(
"/retry"
)
@AnonymousAccess
public
ResultBean
retry
(
@RequestBody
String
mode
)
{
log
.
info
(
" retry :mode="
+
mode
+
",入库完成发送失败的,重新发送,其他状态暂不处理"
);
//判断有没有生成任务
LiteOrder
order
=
getOrderByMode
(
mode
);
if
(
order
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
List
<
LiteOrderItem
>
liteOrderItemList
=
order
.
getOrderItems
();
List
<
LiteOrderItem
>
orderItems
=
new
ArrayList
<>();
boolean
canClose
=
true
;
for
(
LiteOrderItem
orderItem
:
liteOrderItemList
)
{
if
(
orderItem
.
getStatus
()
==
OrderItemStatus
.
notify_fail
)
{
String
id
=
orderItem
.
getId
();
List
<
DataLog
>
dataLogList
=
dataLogManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"subSourceId"
).
is
(
id
)));
if
(
dataLogList
!=
null
&&
!
dataLogList
.
isEmpty
())
{
log
.
info
(
"retry: ["
+
order
.
getOrderNo
()
+
"] ["
+
orderItem
.
getRi
()
+
"] 重发API007 "
);
boolean
isSuccess
=
MicronApi
.
Api007
(
order
.
getOrderNo
(),
order
.
getId
(),
dataLogList
);
if
(
isSuccess
)
{
orderItem
.
setStatus
(
OrderItemStatus
.
notify_success
);
}
else
{
orderItem
.
setStatus
(
OrderItemStatus
.
notify_fail
);
canClose
=
false
;
}
liteOrderItemManager
.
save
(
orderItem
);
}
}
else
if
(
orderItem
.
getStatus
()==
OrderItemStatus
.
executing
){
canClose
=
false
;
}
orderItems
.
add
(
orderItem
);
}
order
.
setOrderItems
(
orderItems
);
if
(
canClose
){
//可以关闭工单
CloseOrder
(
order
);
}
else
{
liteOrderCache
.
addOrderToMap
(
order
);
}
return
ResultBean
.
newOkResult
(
""
);
}
private
void
CloseOrder
(
LiteOrder
order
){
order
.
setStatus
(
LITEORDER_STATUS
.
CLOSED
);
order
.
setClosed
(
true
);
liteOrderManager
.
save
(
order
);
liteOrderCache
.
addOrderToMap
(
order
);
return
ResultBean
.
newOkResult
(
"dto
"
);
log
.
info
(
" mode="
+
order
.
getMode
()+
"工单关闭
"
);
}
@ApiOperation
(
"放弃出库"
)
@PostMapping
(
"/abort"
)
@AnonymousAccess
public
ResultBean
abort
(
@RequestBody
String
mode
)
{
log
.
info
(
" abort :mode="
+
mode
);
LiteOrder
order
=
getOrderByMode
(
mode
);
if
(
order
==
null
)
{
return
ResultBean
.
newErrorResult
(-
1
,
"smfcore.micron.operationFailure"
,
"操作失败"
);
}
List
<
LiteOrderItem
>
liteOrderItemList
=
order
.
getOrderItems
();
List
<
LiteOrderItem
>
newList
=
new
ArrayList
<>();
for
(
LiteOrderItem
orderItem
:
liteOrderItemList
)
{
if
(
orderItem
.
getStatus
()
==
OrderItemStatus
.
notify_fail
)
{
List
<
DataLog
>
dataLogList
=
dataLogManager
.
findByQuery
(
new
Query
(
Criteria
.
where
(
"subSourceId"
).
is
(
orderItem
.
getId
())));
//如果任务未结束,结束任务
for
(
DataLog
dataLog
:
dataLogList
)
{
if
(
dataLog
.
isExecuting
())
{
taskService
.
cancelTask
(
dataLog
.
getId
());
log
.
info
(
"abort 终止出库,mode="
+
mode
+
",取消正在执行的出库任务:barcode="
+
dataLog
.
getBarcode
()
+
",posName="
+
dataLog
.
getPosName
());
}
}
orderItem
.
setStatus
(
OrderItemStatus
.
cancel
);
orderItem
=
liteOrderItemManager
.
save
(
orderItem
);
newList
.
add
(
orderItem
);
log
.
info
(
" abort :barcode=["
+
orderItem
.
getPn
()
+
"] 取消出库任务"
);
}
}
log
.
info
(
"abort 终止出库,mode="
+
mode
+
",取消正在执行的出库任务:关闭工单="
+
order
.
getOrderNo
());
CloseOrder
(
order
);
return
ResultBean
.
newOkResult
(
""
);
}
public
LiteOrder
getOrderByMode
(
String
mode
)
{
List
<
LiteOrderItem
>
itemList
=
new
ArrayList
<>();
Collection
<
LiteOrder
>
liteOrder
=
liteOrderCache
.
getAllLiteOrder
();
for
(
LiteOrder
order
:
liteOrder
)
{
if
(
mode
.
equals
(
order
.
getMode
())
&&
!
order
.
isClosed
())
{
return
order
;
}
}
return
null
;
}
public
List
<
LiteOrderItem
>
getLiteOrderItemList
(
String
mode
)
{
List
<
LiteOrderItem
>
itemList
=
new
ArrayList
<>();
Collection
<
LiteOrder
>
liteOrder
=
liteOrderCache
.
getAllLiteOrder
();
for
(
LiteOrder
order
:
liteOrder
)
{
if
(
mode
.
equals
(
order
.
getMode
())
&&
!
order
.
isClosed
())
{
itemList
=
order
.
getOrderItems
();
break
;
}
}
return
itemList
;
}
}
src/main/java/com/neotel/smfcore/custom/micron1053/task/bean/DispatchItemMapper.java
0 → 100644
查看文件 @
ee16471
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
task
.
bean
;
import
com.neotel.smfcore.common.base.BaseMapper
;
import
com.neotel.smfcore.core.order.service.po.LiteOrderItem
;
import
com.neotel.smfcore.custom.micron1053.task.bean.dto.DispatchItemDto
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.ReportingPolicy
;
@Mapper
(
componentModel
=
"spring"
,
unmappedTargetPolicy
=
ReportingPolicy
.
IGNORE
)
public
interface
DispatchItemMapper
extends
BaseMapper
<
DispatchItemDto
,
LiteOrderItem
>
{
}
src/main/java/com/neotel/smfcore/custom/micron1053/task/bean/dto/DispatchItemDto.java
0 → 100644
查看文件 @
ee16471
package
com
.
neotel
.
smfcore
.
custom
.
micron1053
.
task
.
bean
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
java.util.HashMap
;
import
java.util.Map
;
public
class
DispatchItemDto
{
@ApiModelProperty
(
value
=
"ID"
)
private
String
id
;
@ApiModelProperty
(
"物料编号"
)
private
String
pn
;
@ApiModelProperty
(
"唯一码"
)
private
String
ri
;
@ApiModelProperty
(
"需求数量"
)
private
int
needNum
=
0
;
@ApiModelProperty
(
"需求料盘数"
)
private
int
needReelCount
=
0
;
@ApiModelProperty
(
"已出数量"
)
private
int
outNum
=
0
;
@ApiModelProperty
(
"已出盘数"
)
private
int
outReelCount
=
0
;
@ApiModelProperty
(
"订单信息"
)
private
String
orderNo
=
""
;
@ApiModelProperty
(
"站位信息"
)
private
String
feederInfo
=
""
;
/**
* 台车号
*/
@ApiModelProperty
(
"台车号"
)
private
String
tableNo
=
""
;
/**
* 面别
*/
@ApiModelProperty
(
"面别"
)
private
String
side
=
""
;
@ApiModelProperty
(
"制造商物料编号"
)
private
String
mpn
=
""
;
/**
* 库存数量
*/
private
int
inventoryQty
=
0
;
/**
* 库存盘数
*/
private
int
inventoryReelCount
=
0
;
@ApiModelProperty
(
"自定义的附加字段,key=字段名,value=值"
)
public
Map
<
String
,
String
>
appendData
=
new
HashMap
<>();
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论