Skip to content
切换导航条
切换导航条
当前项目
正在载入...
登录
孙克
/
smf-core
转到一个项目
切换导航栏
切换导航栏固定状态
项目
群组
代码片段
帮助
项目
活动
版本库
流水线
图表
问题
0
合并请求
0
维基
网络
创建新的问题
作业
提交
问题看板
文件
提交
网络
比较
分支
标签
Commit 46b5db7a
由
LN
编写于
2021-09-10 11:18:31 +0800
浏览文件
选项
浏览文件
标签
下载
电子邮件补丁
差异文件
料仓管理和库位管理修改
1 个父辈
19bbb964
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
256 行增加
和
10 行删除
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
src/main/java/com/neotel/smfcore/core/barcode/rest/bean/dto/BarcodeDto.java
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
src/main/java/com/neotel/smfcore/core/storage/rest/StorageController.java
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
src/main/java/com/neotel/smfcore/core/storage/rest/dto/StorageSearchDto.java
src/main/java/com/neotel/smfcore/core/storage/rest/mapstruct/StorageSearchMapper.java
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
src/main/java/com/neotel/smfcore/common/init/DataInitManager.java
查看文件 @
46b5db7
...
@@ -172,7 +172,7 @@ public class DataInitManager {
...
@@ -172,7 +172,7 @@ public class DataInitManager {
List
<
Menu
>
menus
=
new
ArrayList
<
Menu
>();
List
<
Menu
>
menus
=
new
ArrayList
<
Menu
>();
//料架分组
//料架分组
Menu
menukanban
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"boxkanban"
,
"
锁定物料
"
,
1
,
"lockMaterial"
,
"lockMaterial/material/index"
,
""
,
0
,
"app"
);
Menu
menukanban
=
new
Menu
(
new
ArrayList
<
Menu
>(),
1
,
"boxkanban"
,
"
设备看板
"
,
1
,
"lockMaterial"
,
"lockMaterial/material/index"
,
""
,
0
,
"app"
);
// menukanban.setHidden(true);
// menukanban.setHidden(true);
menus
.
addAll
(
createMenus
(
menukanban
));
menus
.
addAll
(
createMenus
(
menukanban
));
//料架分组
//料架分组
...
...
src/main/java/com/neotel/smfcore/core/barcode/rest/bean/dto/BarcodeDto.java
查看文件 @
46b5db7
...
@@ -201,4 +201,9 @@ public class BarcodeDto implements Serializable {
...
@@ -201,4 +201,9 @@ public class BarcodeDto implements Serializable {
private
String
fullCode
;
private
String
fullCode
;
public
String
getSize
(){
return
(
""
+
plateSize
+
"X"
+
height
);
}
}
}
src/main/java/com/neotel/smfcore/core/device/util/DataCache.java
查看文件 @
46b5db7
...
@@ -277,7 +277,12 @@ public class DataCache {
...
@@ -277,7 +277,12 @@ public class DataCache {
return
null
;
return
null
;
}
}
public
Storage
reloadStorage
(
Storage
storage
)
throws
ValidateException
{
public
Storage
reloadStorage
(
Storage
storage
,
String
oldCid
)
throws
ValidateException
{
if
(!
oldCid
.
equals
(
""
)
&&
allStorage
.
containsKey
(
oldCid
))
{
allStorage
.
remove
(
oldCid
);
}
List
<
PlateSizeBean
>
plateSizeBeanList
=
storagePosManager
.
getStoragePosUsage
(
storage
.
getId
());
List
<
PlateSizeBean
>
plateSizeBeanList
=
storagePosManager
.
getStoragePosUsage
(
storage
.
getId
());
storage
.
initUsage
(
plateSizeBeanList
);
storage
.
initUsage
(
plateSizeBeanList
);
storage
=
storageManager
.
save
(
storage
);
storage
=
storageManager
.
save
(
storage
);
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/StorageController.java
查看文件 @
46b5db7
...
@@ -10,7 +10,9 @@ import com.neotel.smfcore.common.utils.PointUtil;
...
@@ -10,7 +10,9 @@ import com.neotel.smfcore.common.utils.PointUtil;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.device.util.DataCache
;
import
com.neotel.smfcore.core.storage.rest.dto.StorageDto
;
import
com.neotel.smfcore.core.storage.rest.dto.StorageDto
;
import
com.neotel.smfcore.core.storage.rest.dto.StorageSearchDto
;
import
com.neotel.smfcore.core.storage.rest.mapstruct.StorageMapper
;
import
com.neotel.smfcore.core.storage.rest.mapstruct.StorageMapper
;
import
com.neotel.smfcore.core.storage.rest.mapstruct.StorageSearchMapper
;
import
com.neotel.smfcore.core.storage.rest.query.StorageQueryCriteria
;
import
com.neotel.smfcore.core.storage.rest.query.StorageQueryCriteria
;
import
com.neotel.smfcore.core.storage.service.dao.IStorageDao
;
import
com.neotel.smfcore.core.storage.service.dao.IStorageDao
;
import
com.neotel.smfcore.core.storage.service.manager.IStorageManager
;
import
com.neotel.smfcore.core.storage.service.manager.IStorageManager
;
...
@@ -19,6 +21,7 @@ import com.neotel.smfcore.core.storage.service.po.Storage;
...
@@ -19,6 +21,7 @@ import com.neotel.smfcore.core.storage.service.po.Storage;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.core.storage.service.po.StoragePos
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.annotation.AnonymousAccess
;
import
com.neotel.smfcore.security.bean.FileProperties
;
import
com.neotel.smfcore.security.bean.FileProperties
;
import
com.neotel.smfcore.security.rest.bean.dto.RoleDto
;
import
com.neotel.smfcore.security.service.manager.IGroupManager
;
import
com.neotel.smfcore.security.service.manager.IGroupManager
;
import
com.neotel.smfcore.security.service.po.Group
;
import
com.neotel.smfcore.security.service.po.Group
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
...
@@ -68,6 +71,9 @@ public class StorageController {
...
@@ -68,6 +71,9 @@ public class StorageController {
@Autowired
@Autowired
private
final
DataCache
dataCache
;
private
final
DataCache
dataCache
;
@Autowired
private
final
StorageSearchMapper
storageSearchMapper
;
@ApiOperation
(
"查询料仓"
)
@ApiOperation
(
"查询料仓"
)
@GetMapping
@GetMapping
...
@@ -88,6 +94,15 @@ public class StorageController {
...
@@ -88,6 +94,15 @@ public class StorageController {
}
}
return
new
PageData
(
StorageDtos
,
pages
.
getTotalElements
());
return
new
PageData
(
StorageDtos
,
pages
.
getTotalElements
());
}
}
@ApiOperation
(
"返回所有料仓"
)
@GetMapping
(
value
=
"/all"
)
@PreAuthorize
(
"@el.check('storage:list')"
)
public
List
<
StorageSearchDto
>
query
()
{
List
<
Storage
>
allStorages
=
storageManager
.
findAll
();
List
<
StorageSearchDto
>
storageSearchDtos
=
storageSearchMapper
.
toDto
(
allStorages
);
return
storageSearchDtos
;
}
@ApiOperation
(
"新增料仓"
)
@ApiOperation
(
"新增料仓"
)
@PostMapping
@PostMapping
@PreAuthorize
(
"@el.check('storage:add')"
)
@PreAuthorize
(
"@el.check('storage:add')"
)
...
@@ -167,7 +182,7 @@ public class StorageController {
...
@@ -167,7 +182,7 @@ public class StorageController {
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"compatibleType"
}
);
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"compatibleType"
}
);
// throw new BadRequestException("料仓兼容性不能为空");
// throw new BadRequestException("料仓兼容性不能为空");
}
}
String
oldCid
=
""
;
boolean
isNew
=(
storage
.
getId
()==
null
);
boolean
isNew
=(
storage
.
getId
()==
null
);
//判断名称是否重复,cid是否重复
//判断名称是否重复,cid是否重复
Map
<
String
,
Storage
>
storageMap
=
dataCache
.
getAllStorage
();
Map
<
String
,
Storage
>
storageMap
=
dataCache
.
getAllStorage
();
...
@@ -183,6 +198,9 @@ public class StorageController {
...
@@ -183,6 +198,9 @@ public class StorageController {
// throw new BadRequestException("料仓cid["+storage.getCid()+"]已存在");
// throw new BadRequestException("料仓cid["+storage.getCid()+"]已存在");
}
}
}
}
else
if
((!
isNew
)&&
storage
.
getId
().
equals
(
s
.
getId
())){
oldCid
=
s
.
getCid
();
}
}
}
if
(
storage
.
getSourcePath
()==
null
){
if
(
storage
.
getSourcePath
()==
null
){
...
@@ -194,7 +212,7 @@ public class StorageController {
...
@@ -194,7 +212,7 @@ public class StorageController {
storage
=
storageDao
.
save
(
storage
);
storage
=
storageDao
.
save
(
storage
);
dataCache
.
reloadStorage
(
storage
);
dataCache
.
reloadStorage
(
storage
,
oldCid
);
return
storage
;
return
storage
;
}
}
...
@@ -313,7 +331,7 @@ public class StorageController {
...
@@ -313,7 +331,7 @@ public class StorageController {
if
(
newList
.
size
()>
0
){
if
(
newList
.
size
()>
0
){
storagePosManager
.
insertAll
(
newList
);
storagePosManager
.
insertAll
(
newList
);
}
}
dataCache
.
reloadStorage
(
storage
);
dataCache
.
reloadStorage
(
storage
,
""
);
String
msg
=
"读取到["
+
row
+
"]行数据:新增【"
+
newRowCount
+
"】,已存在【"
+
existRowCount
+
"】,更新【"
+
updateRowCount
+
"】"
;
String
msg
=
"读取到["
+
row
+
"]行数据:新增【"
+
newRowCount
+
"】,已存在【"
+
existRowCount
+
"】,更新【"
+
updateRowCount
+
"】"
;
log
.
info
(
msg
);
log
.
info
(
msg
);
return
msg
;
return
msg
;
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/StoragePosController.java
查看文件 @
46b5db7
...
@@ -6,6 +6,7 @@ import com.neotel.smfcore.common.bean.ResultBean;
...
@@ -6,6 +6,7 @@ import com.neotel.smfcore.common.bean.ResultBean;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.exception.ValidateException
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.Constants
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.common.utils.QueryHelp
;
import
com.neotel.smfcore.common.utils.SecurityUtils
;
import
com.neotel.smfcore.common.utils.StorageConstants
;
import
com.neotel.smfcore.common.utils.StorageConstants
;
import
com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE
;
import
com.neotel.smfcore.core.barcode.enums.COMPONENT_TYPE
;
import
com.neotel.smfcore.core.barcode.rest.bean.dto.CodeDto
;
import
com.neotel.smfcore.core.barcode.rest.bean.dto.CodeDto
;
...
@@ -101,15 +102,37 @@ public class StoragePosController {
...
@@ -101,15 +102,37 @@ public class StoragePosController {
@ApiOperation
(
"清空指定库位"
)
@ApiOperation
(
"清空指定库位"
)
@PutMapping
(
"/clearPos"
)
@PutMapping
(
"/clearPos"
)
@PreAuthorize
(
"@el.check('storage:edit')"
)
@PreAuthorize
(
"@el.check('storage:edit')"
)
public
ResponseEntity
<
Object
>
clearPos
(
@RequestBody
String
posName
)
{
public
ResultBean
clearPos
(
@RequestBody
HashMap
<
String
,
String
>
map
)
{
log
.
info
(
"开始手动清空库位:["
+
posName
+
"] "
);
if
(
map
.
containsKey
(
"posName"
))
{
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
String
posName
=
map
.
get
(
"posName"
);
StoragePos
storagePos
=
storagePosManager
.
getByPosName
(
posName
);
if
(
storagePos
!=
null
)
{
try
{
log
.
info
(
"开始手动清空库位["
+
storagePos
.
getPosName
()
+
"]"
);
// QisdaApi.ClearStockBy(storagePos.getPosName());
Barcode
barcode
=
storagePos
.
getBarcode
();
if
(
barcode
!=
null
)
{
log
.
info
(
"清理库位["
+
storagePos
.
getPosName
()
+
"]中的库存"
+
barcode
.
getBarcode
());
String
opUser
=
SecurityUtils
.
getCurrentUsername
();
log
.
info
(
opUser
+
"清理库位["
+
storagePos
.
getPosName
()
+
"]中的库存"
+
barcode
.
getBarcode
());
taskService
.
addTaskToFinished
(
storagePos
,
null
,
opUser
+
"-clear"
);
}
return
ResultBean
.
newOkResult
(
""
);
}
catch
(
Exception
e
)
{
// return e.getMessage();
throw
new
ValidateException
(
"smfcore.error"
,
"出错{0}"
,
new
String
[]{
e
.
toString
()});
}
}
}
throw
new
ValidateException
(
"smfcore.posNotExist"
,
"仓位不存在"
);
}
}
@ApiOperation
(
"启用禁用库位"
)
@ApiOperation
(
"启用禁用库位"
)
@PutMapping
(
"/enabledPos"
)
@PutMapping
(
"/enabledPos"
)
@PreAuthorize
(
"@el.check('storage:edit')"
)
@PreAuthorize
(
"@el.check('storage:edit')"
)
public
Res
ponseEntity
<
Object
>
enabledPos
(
@RequestBody
StoragePosEnabledDto
enabledDto
)
{
public
Res
ultBean
enabledPos
(
@RequestBody
StoragePosEnabledDto
enabledDto
)
{
if
(
enabledDto
.
getId
()==
null
){
if
(
enabledDto
.
getId
()==
null
){
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"ID"
}
);
throw
new
ValidateException
(
"smfcode.valueCanotNull"
,
"{0}不能为空"
,
new
String
[]{
"ID"
}
);
}
}
...
@@ -121,7 +144,8 @@ public class StoragePosController {
...
@@ -121,7 +144,8 @@ public class StoragePosController {
pos
.
setEnabled
(
enabledDto
.
isEnabled
());
pos
.
setEnabled
(
enabledDto
.
isEnabled
());
storagePosDao
.
save
(
pos
);
storagePosDao
.
save
(
pos
);
log
.
info
(
"启用禁用库位:库位号["
+
pos
.
getId
()+
"]["
+
pos
.
getPosName
()+
"]="
+
enabledDto
.
isEnabled
());
log
.
info
(
"启用禁用库位:库位号["
+
pos
.
getId
()+
"]["
+
pos
.
getPosName
()+
"]="
+
enabledDto
.
isEnabled
());
return
new
ResponseEntity
<>(
HttpStatus
.
OK
);
return
ResultBean
.
newOkResult
(
""
);
}
}
...
...
src/main/java/com/neotel/smfcore/core/storage/rest/dto/StorageSearchDto.java
0 → 100644
查看文件 @
46b5db7
package
com
.
neotel
.
smfcore
.
core
.
storage
.
rest
.
dto
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Getter
;
import
lombok.Setter
;
import
java.io.Serializable
;
@Getter
@Setter
public
class
StorageSearchDto
implements
Serializable
{
@ApiModelProperty
(
"料仓ID"
)
private
String
id
;
@ApiModelProperty
(
"料仓名称"
)
private
String
name
;
@ApiModelProperty
(
"料仓CID"
)
private
String
cid
;
}
src/main/java/com/neotel/smfcore/core/storage/rest/mapstruct/StorageSearchMapper.java
0 → 100644
查看文件 @
46b5db7
package
com
.
neotel
.
smfcore
.
core
.
storage
.
rest
.
mapstruct
;
import
com.neotel.smfcore.common.base.BaseMapper
;
import
com.neotel.smfcore.core.storage.rest.dto.StorageSearchDto
;
import
com.neotel.smfcore.core.storage.service.po.Storage
;
import
org.mapstruct.Mapper
;
import
org.mapstruct.ReportingPolicy
;
@Mapper
(
componentModel
=
"spring"
,
unmappedTargetPolicy
=
ReportingPolicy
.
IGNORE
)
public
interface
StorageSearchMapper
extends
BaseMapper
<
StorageSearchDto
,
Storage
>
{
}
src/main/java/com/neotel/smfcore/core/system/util/TaskService.java
查看文件 @
46b5db7
...
@@ -692,4 +692,169 @@ public class TaskService {
...
@@ -692,4 +692,169 @@ public class TaskService {
barcodeSave
=
barcodeManager
.
save
(
barcodeSave
);
barcodeSave
=
barcodeManager
.
save
(
barcodeSave
);
return
barcodeSave
;
return
barcodeSave
;
}
}
public
void
addTaskToFinished
(
StoragePos
pos
,
Barcode
barcode
,
String
opUser
){
try
{
Collection
<
DataLog
>
allTasks
=
taskMap
.
values
();
if
(
pos
.
getBarcode
()
!=
null
){
barcode
=
pos
.
getBarcode
();
for
(
DataLog
task
:
allTasks
){
if
(
task
.
isCheckOutTask
()){
String
executeBarcode
=
task
.
getBarcode
();
String
executePosId
=
task
.
getPosId
();
boolean
isSameTask
=
false
;
if
(
executeBarcode
!=
null
&&
barcode
.
getBarcode
().
equals
(
executeBarcode
)){
isSameTask
=
true
;
}
if
(
executePosId
!=
null
&&
pos
.
getId
().
equals
(
executePosId
)){
isSameTask
=
true
;
}
if
(
isSameTask
){
log
.
info
(
executeBarcode
+
"找到正在执行的出库任务["
+
pos
.
getPosName
()+
"],直接完成"
);
if
(
task
.
isWait
()){
taskMap
.
put
(
task
.
getId
(),
task
);
}
task
.
setOperator
(
opUser
);
checkoutFinished
(
task
);
return
;
}
}
}
}
//没有正在执行的任务,直接添加一条已完成的任务
DataLog
task
=
newTask
(
pos
);
if
(
pos
.
getBarcode
()
==
null
){
log
.
info
(
opUser
+
"入库【"
+
barcode
.
getBarcode
()+
"】到【"
+
pos
.
getPosName
()+
"】"
);
task
.
setType
(
OP
.
PUT_IN
);
barcode
.
setUsedCount
(
barcode
.
getUsedCount
()
+
1
);
barcode
.
setUsedDate
(
new
Date
());
barcode
.
setPutInTime
(
System
.
currentTimeMillis
());
barcode
.
setInOpor
(
opUser
);
barcode
.
setCheckOutDate
(
null
,
""
);
barcode
.
setPosName
(
task
.
getPosName
());
barcodeManager
.
save
(
barcode
);
pos
.
setBarcode
(
barcode
);
pos
.
setUsed
(
true
);
pos
.
setCanCheckOutTime
(
System
.
currentTimeMillis
());
storagePosManager
.
save
(
pos
);
task
.
setPartNumber
(
barcode
.
getPartNumber
());
task
.
setBarcode
(
barcode
.
getBarcode
());
task
.
setNum
(
barcode
.
getInitialAmount
());
dataCache
.
updateInventory
(
pos
,
barcode
);
//dataCache.updateStorage(task.getCid());
}
else
{
barcode
=
pos
.
getBarcode
();
log
.
info
(
opUser
+
"将【"
+
barcode
.
getBarcode
()+
"】从【"
+
pos
.
getPosName
()+
"】出库"
);
task
.
setType
(
OP
.
CHECKOUT
);
barcode
.
setUsed
(
true
);
barcode
.
setUsedDate
(
new
Date
());
//仓位状态
barcode
.
setCheckOutDate
(
new
Date
(),
task
.
getOperator
());
barcode
.
setPosName
(
""
);
barcodeManager
.
save
(
barcode
);
pos
.
setBarcode
(
null
);
pos
.
setUsed
(
false
);
storagePosManager
.
save
(
pos
);
dataCache
.
updateInventory
(
pos
,
barcode
);
//dataCache.updateStorage(task.getCid());
}
task
.
setOperator
(
opUser
);
task
.
setStatus
(
OP_STATUS
.
FINISHED
.
name
());
task
=
dataLogDao
.
save
(
task
);
theFinishedTaskMap
.
put
(
task
.
getBarcode
(),
task
);
}
catch
(
Exception
e
){
log
.
error
(
"addTaskToFinished Error:"
,
e
);
}
}
/**
* 出库完成
*/
public
void
checkoutFinished
(
DataLog
task
)
throws
ValidateException
{
boolean
isCancelTask
=
task
.
isCancel
();
StoragePos
storagePos
=
storagePosManager
.
get
(
task
.
getPosId
());
Barcode
barcode
=
storagePos
.
getBarcode
();
if
(
barcode
==
null
){
//记录日志
task
.
setStatus
(
OP_STATUS
.
CANCEL
.
name
());
taskMap
.
remove
(
task
.
getId
());
theFinishedTaskMap
.
put
(
task
.
getBarcode
(),
task
);
log
.
warn
(
"任务:"
+
task
.
getBarcode
()
+
" 仓位:"
+
task
.
getPosName
()+
" 的 Barcode 为null, 之前可能处理过直接返回"
);
return
;
}
//记录在库时长
task
.
setInStoreTime
(
barcode
.
getInStoreMiniute
());
barcode
=
barcodeManager
.
get
(
barcode
.
getId
());
if
(
barcode
!=
null
){
//二维码状态
barcode
.
setUsed
(
true
);
barcode
.
setUsedDate
(
new
Date
());
//仓位状态
barcode
.
setCheckOutDate
(
new
Date
(),
task
.
getOperator
());
barcode
.
setPosName
(
""
);
barcodeManager
.
save
(
barcode
);
String
specifiedBatchId
=
barcode
.
getLockId
();
if
(!
Strings
.
isNullOrEmpty
(
specifiedBatchId
)){
task
.
setBatchId
(
specifiedBatchId
);
task
.
setBatchInfo
(
barcode
.
getLockName
());
}
}
storagePos
.
setBarcode
(
null
);
storagePos
.
setUsed
(
false
);
storagePosManager
.
save
(
storagePos
);
log
.
info
(
task
.
getBarcode
()
+
"出库完成,清空仓位: "
+
storagePos
.
getId
()
+
"["
+
storagePos
.
getPosName
()
+
"]"
);
//更新缓存中的库存信息
dataCache
.
updateInventory
(
storagePos
,
barcode
);
//记录日志
task
.
setStatus
(
OP_STATUS
.
FINISHED
.
name
());
if
(
isCancelTask
){
task
.
setStatus
(
OP_STATUS
.
CANCEL
.
name
());
}
dataLogDao
.
save
(
task
);
//从队列里面移除操作
DataLog
removeTask
=
taskMap
.
remove
(
task
.
getId
());
try
{
if
(
removeTask
==
null
){
log
.
error
(
task
.
getBarcode
()+
"的出库任务["
+
task
.
getId
()+
"]清除失败"
);
}
}
catch
(
Exception
e
){
log
.
error
(
e
.
getMessage
());
}
theFinishedTaskMap
.
put
(
task
.
getBarcode
(),
task
);
// //任务已经被取消就不再更新需求单信息
// if(!isCancelTask){
// updateOutInfo(outItemId, task, barcode);
// }else{
// log.info(task.getBarcode()+"的出库任务["+task.getId()+"]已被取消,仅清除Qisda库存["+task.getPosName()+"],不再更新需求单信息");
// QisdaApi.ClearStockBy(task.getPosName());
// }
}
}
}
编写
预览
支持
Markdown
格式
附加文件
你添加了
0
人
到此讨论。请谨慎行事。
Finish editing this message first!
Cancel
请
注册
或
登录
后发表评论